mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-11-01 08:58:07 +00:00
df3a57105c
A simple conversion from a plain text file. Put to designs subdirectory. Signed-off-by: Takashi Iwai <tiwai@suse.de>
48 lines
1.5 KiB
ReStructuredText
48 lines
1.5 KiB
ReStructuredText
==================
|
|
ALSA Jack Controls
|
|
==================
|
|
|
|
Why we need Jack kcontrols
|
|
==========================
|
|
|
|
ALSA uses kcontrols to export audio controls(switch, volume, Mux, ...)
|
|
to user space. This means userspace applications like pulseaudio can
|
|
switch off headphones and switch on speakers when no headphones are
|
|
pluged in.
|
|
|
|
The old ALSA jack code only created input devices for each registered
|
|
jack. These jack input devices are not readable by userspace devices
|
|
that run as non root.
|
|
|
|
The new jack code creates embedded jack kcontrols for each jack that
|
|
can be read by any process.
|
|
|
|
This can be combined with UCM to allow userspace to route audio more
|
|
intelligently based on jack insertion or removal events.
|
|
|
|
Jack Kcontrol Internals
|
|
=======================
|
|
|
|
Each jack will have a kcontrol list, so that we can create a kcontrol
|
|
and attach it to the jack, at jack creation stage. We can also add a
|
|
kcontrol to an existing jack, at anytime when required.
|
|
|
|
Those kcontrols will be freed automatically when the Jack is freed.
|
|
|
|
How to use jack kcontrols
|
|
=========================
|
|
|
|
In order to keep compatibility, snd_jack_new() has been modified by
|
|
adding two params:
|
|
|
|
initial_kctl
|
|
if true, create a kcontrol and add it to the jack list.
|
|
phantom_jack
|
|
Don't create a input device for phantom jacks.
|
|
|
|
HDA jacks can set phantom_jack to true in order to create a phantom
|
|
jack and set initial_kctl to true to create an initial kcontrol with
|
|
the correct id.
|
|
|
|
ASoC jacks should set initial_kctl as false. The pin name will be
|
|
assigned as the jack kcontrol name.
|