diff options
author | Takashi Iwai <tiwai@suse.de> | 2016-02-10 03:25:15 -0500 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2016-02-10 03:25:15 -0500 |
commit | fa9a435debadd9e6feac04a9bccdd7b3be4c3e02 (patch) | |
tree | ae039f92a893f1bc2738bbd88b9b2869f097d73f /Documentation/sound/alsa | |
parent | 9b88daa5137f15c051e5673dd2ce9acf678f84dc (diff) | |
parent | 022f344b41a54a995d90450726842518e91aec29 (diff) |
Merge branch 'topic/hda-mst' into for-next
Diffstat (limited to 'Documentation/sound/alsa')
-rw-r--r-- | Documentation/sound/alsa/HD-Audio-DP-MST-audio.txt | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/Documentation/sound/alsa/HD-Audio-DP-MST-audio.txt b/Documentation/sound/alsa/HD-Audio-DP-MST-audio.txt new file mode 100644 index 000000000000..82744ac3513d --- /dev/null +++ b/Documentation/sound/alsa/HD-Audio-DP-MST-audio.txt | |||
@@ -0,0 +1,74 @@ | |||
1 | To support DP MST audio, HD Audio hdmi codec driver introduces virtual pin | ||
2 | and dynamic pcm assignment. | ||
3 | |||
4 | Virtual pin is an extension of per_pin. The most difference of DP MST | ||
5 | from legacy is that DP MST introduces device entry. Each pin can contain | ||
6 | several device entries. Each device entry behaves as a pin. | ||
7 | |||
8 | As each pin may contain several device entries and each codec may contain | ||
9 | several pins, if we use one pcm per per_pin, there will be many PCMs. | ||
10 | The new solution is to create a few PCMs and to dynamically bind pcm to | ||
11 | per_pin. Driver uses spec->dyn_pcm_assign flag to indicate whether to use | ||
12 | the new solution. | ||
13 | |||
14 | PCM | ||
15 | === | ||
16 | To be added | ||
17 | |||
18 | |||
19 | Jack | ||
20 | ==== | ||
21 | |||
22 | Presume: | ||
23 | - MST must be dyn_pcm_assign, and it is acomp (for Intel scenario); | ||
24 | - NON-MST may or may not be dyn_pcm_assign, it can be acomp or !acomp; | ||
25 | |||
26 | So there are the following scenarios: | ||
27 | a. MST (&& dyn_pcm_assign && acomp) | ||
28 | b. NON-MST && dyn_pcm_assign && acomp | ||
29 | c. NON-MST && !dyn_pcm_assign && !acomp | ||
30 | |||
31 | Below discussion will ignore MST and NON-MST difference as it doesn't | ||
32 | impact on jack handling too much. | ||
33 | |||
34 | Driver uses struct hdmi_pcm pcm[] array in hdmi_spec and snd_jack is | ||
35 | a member of hdmi_pcm. Each pin has one struct hdmi_pcm * pcm pointer. | ||
36 | |||
37 | For !dyn_pcm_assign, per_pin->pcm will assigned to spec->pcm[n] statically. | ||
38 | |||
39 | For dyn_pcm_assign, per_pin->pcm will assigned to spec->pcm[n] | ||
40 | when monitor is hotplugged. | ||
41 | |||
42 | |||
43 | Build Jack | ||
44 | ---------- | ||
45 | |||
46 | - dyn_pcm_assign | ||
47 | Will not use hda_jack but use snd_jack in spec->pcm_rec[pcm_idx].jack directly. | ||
48 | |||
49 | - !dyn_pcm_assign | ||
50 | Use hda_jack and assign spec->pcm_rec[pcm_idx].jack = jack->jack statically. | ||
51 | |||
52 | |||
53 | Unsolicited Event Enabling | ||
54 | -------------------------- | ||
55 | Enable unsolicited event if !acomp. | ||
56 | |||
57 | |||
58 | Monitor Hotplug Event Handling | ||
59 | ------------------------------ | ||
60 | - acomp | ||
61 | pin_eld_notify() -> check_presence_and_report() -> hdmi_present_sense() -> | ||
62 | sync_eld_via_acomp(). | ||
63 | Use directly snd_jack_report() on spec->pcm_rec[pcm_idx].jack for | ||
64 | both dyn_pcm_assign and !dyn_pcm_assign | ||
65 | |||
66 | - !acomp | ||
67 | Hdmi_unsol_event() -> hdmi_intrinsic_event() -> check_presence_and_report() -> | ||
68 | hdmi_present_sense() -> hdmi_prepsent_sense_via_verbs() | ||
69 | Use directly snd_jack_report() on spec->pcm_rec[pcm_idx].jack for dyn_pcm_assign. | ||
70 | Use hda_jack mechanism to handle jack events. | ||
71 | |||
72 | |||
73 | Others to be added later | ||
74 | ======================== | ||