aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation/sound/alsa
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2016-02-10 03:25:15 -0500
committerTakashi Iwai <tiwai@suse.de>2016-02-10 03:25:15 -0500
commitfa9a435debadd9e6feac04a9bccdd7b3be4c3e02 (patch)
treeae039f92a893f1bc2738bbd88b9b2869f097d73f /Documentation/sound/alsa
parent9b88daa5137f15c051e5673dd2ce9acf678f84dc (diff)
parent022f344b41a54a995d90450726842518e91aec29 (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.txt74
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 @@
1To support DP MST audio, HD Audio hdmi codec driver introduces virtual pin
2and dynamic pcm assignment.
3
4Virtual pin is an extension of per_pin. The most difference of DP MST
5from legacy is that DP MST introduces device entry. Each pin can contain
6several device entries. Each device entry behaves as a pin.
7
8As each pin may contain several device entries and each codec may contain
9several pins, if we use one pcm per per_pin, there will be many PCMs.
10The new solution is to create a few PCMs and to dynamically bind pcm to
11per_pin. Driver uses spec->dyn_pcm_assign flag to indicate whether to use
12the new solution.
13
14PCM
15===
16To be added
17
18
19Jack
20====
21
22Presume:
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
26So 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
31Below discussion will ignore MST and NON-MST difference as it doesn't
32impact on jack handling too much.
33
34Driver uses struct hdmi_pcm pcm[] array in hdmi_spec and snd_jack is
35a member of hdmi_pcm. Each pin has one struct hdmi_pcm * pcm pointer.
36
37For !dyn_pcm_assign, per_pin->pcm will assigned to spec->pcm[n] statically.
38
39For dyn_pcm_assign, per_pin->pcm will assigned to spec->pcm[n]
40when monitor is hotplugged.
41
42
43Build Jack
44----------
45
46- dyn_pcm_assign
47Will not use hda_jack but use snd_jack in spec->pcm_rec[pcm_idx].jack directly.
48
49- !dyn_pcm_assign
50Use hda_jack and assign spec->pcm_rec[pcm_idx].jack = jack->jack statically.
51
52
53Unsolicited Event Enabling
54--------------------------
55Enable unsolicited event if !acomp.
56
57
58Monitor Hotplug Event Handling
59------------------------------
60- acomp
61pin_eld_notify() -> check_presence_and_report() -> hdmi_present_sense() ->
62sync_eld_via_acomp().
63Use directly snd_jack_report() on spec->pcm_rec[pcm_idx].jack for
64both dyn_pcm_assign and !dyn_pcm_assign
65
66- !acomp
67Hdmi_unsol_event() -> hdmi_intrinsic_event() -> check_presence_and_report() ->
68hdmi_present_sense() -> hdmi_prepsent_sense_via_verbs()
69Use directly snd_jack_report() on spec->pcm_rec[pcm_idx].jack for dyn_pcm_assign.
70Use hda_jack mechanism to handle jack events.
71
72
73Others to be added later
74========================