€•ö$Œsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ//translations/zh_CN/sound/designs/jack-controls”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ//translations/zh_TW/sound/designs/jack-controls”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ//translations/it_IT/sound/designs/jack-controls”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ//translations/ja_JP/sound/designs/jack-controls”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ//translations/ko_KR/sound/designs/jack-controls”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ//translations/pt_BR/sound/designs/jack-controls”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ//translations/sp_SP/sound/designs/jack-controls”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒALSA Jack Controls”h]”hŒALSA Jack Controls”…””}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒI/var/lib/git/docbuild/linux/Documentation/sound/designs/jack-controls.rst”h´Kubh¶)”}”(hhh]”(h»)”}”(hŒWhy we need Jack kcontrols”h]”hŒWhy we need Jack kcontrols”…””}”(hhÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhËh²hh³hÊh´KubhŒ paragraph”“”)”}”(hŒÛ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 plugged in.”h]”hŒÛ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 plugged in.”…””}”(hhÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhhËh²hubhÝ)”}”(hŒ 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.”h]”hŒ 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.”…””}”(hhìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K hhËh²hubhÝ)”}”(hŒ`The new jack code creates embedded jack kcontrols for each jack that can be read by any process.”h]”hŒ`The new jack code creates embedded jack kcontrols for each jack that can be read by any process.”…””}”(hhúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhhËh²hubhÝ)”}”(hŒ}This can be combined with UCM to allow userspace to route audio more intelligently based on jack insertion or removal events.”h]”hŒ}This can be combined with UCM to allow userspace to route audio more intelligently based on jack insertion or removal events.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhhËh²hubeh}”(h]”Œwhy-we-need-jack-kcontrols”ah ]”h"]”Œwhy we need jack kcontrols”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)”}”(hhh]”(h»)”}”(hŒJack Kcontrol Internals”h]”hŒJack Kcontrol Internals”…””}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´KubhÝ)”}”(hŒÂ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.”h]”hŒÂ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.”…””}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khjh²hubhÝ)”}”(hŒCThose kcontrols will be freed automatically when the Jack is freed.”h]”hŒCThose kcontrols will be freed automatically when the Jack is freed.”…””}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khjh²hubeh}”(h]”Œjack-kcontrol-internals”ah ]”h"]”Œjack kcontrol internals”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)”}”(hhh]”(h»)”}”(hŒHow to use jack kcontrols”h]”hŒHow to use jack kcontrols”…””}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjSh²hh³hÊh´K!ubhÝ)”}”(hŒVIn order to keep compatibility, snd_jack_new() has been modified by adding two params:”h]”hŒVIn order to keep compatibility, snd_jack_new() has been modified by adding two params:”…””}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K#hjSh²hubhŒdefinition_list”“”)”}”(hhh]”(hŒdefinition_list_item”“”)”}”(hŒDinitial_kctl if true, create a kcontrol and add it to the jack list.”h]”(hŒterm”“”)”}”(hŒ initial_kctl”h]”hŒ initial_kctl”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j}h³hÊh´K&hjyubhŒ definition”“”)”}”(hhh]”hÝ)”}”(hŒ7if true, create a kcontrol and add it to the jack list.”h]”hŒ7if true, create a kcontrol and add it to the jack list.”…””}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K'hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjyubeh}”(h]”h ]”h"]”h$]”h&]”uh1jwh³hÊh´K&hjtubjx)”}”(hŒ