xref: /linux/Documentation/sound/designs/jack-controls.rst (revision 151ebcf0797b1a3ba53c8843dc21748c80e098c7)
1==================
2ALSA Jack Controls
3==================
4
5Why we need Jack kcontrols
6==========================
7
8ALSA uses kcontrols to export audio controls(switch, volume, Mux, ...)
9to user space. This means userspace applications like pulseaudio can
10switch off headphones and switch on speakers when no headphones are
11plugged in.
12
13The old ALSA jack code only created input devices for each registered
14jack. These jack input devices are not readable by userspace devices
15that run as non root.
16
17The new jack code creates embedded jack kcontrols for each jack that
18can be read by any process.
19
20This can be combined with UCM to allow userspace to route audio more
21intelligently based on jack insertion or removal events.
22
23Jack Kcontrol Internals
24=======================
25
26Each jack will have a kcontrol list, so that we can create a kcontrol
27and attach it to the jack, at jack creation stage. We can also add a
28kcontrol to an existing jack, at anytime when required.
29
30Those kcontrols will be freed automatically when the Jack is freed.
31
32How to use jack kcontrols
33=========================
34
35In order to keep compatibility, snd_jack_new() has been modified by
36adding two params:
37
38initial_kctl
39  if true, create a kcontrol and add it to the jack list.
40phantom_jack
41  Don't create a input device for phantom jacks.
42
43HDA jacks can set phantom_jack to true in order to create a phantom
44jack and set initial_kctl to true to create an initial kcontrol with
45the correct id.
46
47ASoC jacks should set initial_kctl as false. The pin name will be
48assigned as the jack kcontrol name.
49