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