€•éRŒ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”Œ0/translations/zh_CN/sound/designs/jack-injection”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/zh_TW/sound/designs/jack-injection”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/it_IT/sound/designs/jack-injection”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/ja_JP/sound/designs/jack-injection”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/ko_KR/sound/designs/jack-injection”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/pt_BR/sound/designs/jack-injection”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/sp_SP/sound/designs/jack-injection”Œ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 Software Injection”h]”hŒALSA Jack Software Injection”…””}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/sound/designs/jack-injection.rst”h´Kubh¶)”}”(hhh]”(h»)”}”(hŒ%Simple Introduction On Jack Injection”h]”hŒ%Simple Introduction On Jack Injection”…””}”(hhÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhËh²hh³hÊh´KubhŒ paragraph”“”)”}”(hXHere jack injection means users could inject plugin or plugout events to the audio jacks through debugfs interface, it is helpful to validate ALSA userspace changes. For example, we change the audio profile switching code in the pulseaudio, and we want to verify if the change works as expected and if the change introduce the regression, in this case, we could inject plugin or plugout events to an audio jack or to some audio jacks, we don't need to physically access the machine and plug/unplug physical devices to the audio jack.”h]”hXHere jack injection means users could inject plugin or plugout events to the audio jacks through debugfs interface, it is helpful to validate ALSA userspace changes. For example, we change the audio profile switching code in the pulseaudio, and we want to verify if the change works as expected and if the change introduce the regression, in this case, we could inject plugin or plugout events to an audio jack or to some audio jacks, we don’t need to physically access the machine and plug/unplug physical devices to the audio jack.”…””}”(hhÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhhËh²hubhÝ)”}”(hXIn this design, an audio jack doesn't equal to a physical audio jack. Sometimes a physical audio jack contains multi functions, and the ALSA driver creates multi ``jack_kctl`` for a ``snd_jack``, here the ``snd_jack`` represents a physical audio jack and the ``jack_kctl`` represents a function, for example a physical jack has two functions: headphone and mic_in, the ALSA ASoC driver will build 2 ``jack_kctl`` for this jack. The jack injection is implemented based on the ``jack_kctl`` instead of ``snd_jack``.”h]”(hŒ¤In this design, an audio jack doesn’t equal to a physical audio jack. Sometimes a physical audio jack contains multi functions, and the ALSA driver creates multi ”…””}”(hhìh²hh³Nh´NubhŒliteral”“”)”}”(hŒ ``jack_kctl``”h]”hŒ jack_kctl”…””}”(hhöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhhìubhŒ for a ”…””}”(hhìh²hh³Nh´Nubhõ)”}”(hŒ ``snd_jack``”h]”hŒsnd_jack”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhhìubhŒ , here the ”…””}”(hhìh²hh³Nh´Nubhõ)”}”(hŒ ``snd_jack``”h]”hŒsnd_jack”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhhìubhŒ* represents a physical audio jack and the ”…””}”(hhìh²hh³Nh´Nubhõ)”}”(hŒ ``jack_kctl``”h]”hŒ jack_kctl”…””}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhhìubhŒ represents a function, for example a physical jack has two functions: headphone and mic_in, the ALSA ASoC driver will build 2 ”…””}”(hhìh²hh³Nh´Nubhõ)”}”(hŒ ``jack_kctl``”h]”hŒ jack_kctl”…””}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhhìubhŒ? for this jack. The jack injection is implemented based on the ”…””}”(hhìh²hh³Nh´Nubhõ)”}”(hŒ ``jack_kctl``”h]”hŒ jack_kctl”…””}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhhìubhŒ instead of ”…””}”(hhìh²hh³Nh´Nubhõ)”}”(hŒ ``snd_jack``”h]”hŒsnd_jack”…””}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhhìubhŒ.”…””}”(hhìh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhhËh²hubhÝ)”}”(hXTo inject events to audio jacks, we need to enable the jack injection via ``sw_inject_enable`` first, once it is enabled, this jack will not change the state by hardware events anymore, we could inject plugin or plugout events via ``jackin_inject`` and check the jack state via ``status``, after we finish our test, we need to disable the jack injection via ``sw_inject_enable`` too, once it is disabled, the jack state will be restored according to the last reported hardware events and will change by future hardware events.”h]”(hŒJTo inject events to audio jacks, we need to enable the jack injection via ”…””}”(hjzh²hh³Nh´Nubhõ)”}”(hŒ``sw_inject_enable``”h]”hŒsw_inject_enable”…””}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjzubhŒ‰ first, once it is enabled, this jack will not change the state by hardware events anymore, we could inject plugin or plugout events via ”…””}”(hjzh²hh³Nh´Nubhõ)”}”(hŒ``jackin_inject``”h]”hŒ jackin_inject”…””}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjzubhŒ and check the jack state via ”…””}”(hjzh²hh³Nh´Nubhõ)”}”(hŒ ``status``”h]”hŒstatus”…””}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjzubhŒF, after we finish our test, we need to disable the jack injection via ”…””}”(hjzh²hh³Nh´Nubhõ)”}”(hŒ``sw_inject_enable``”h]”hŒsw_inject_enable”…””}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjzubhŒ” too, once it is disabled, the jack state will be restored according to the last reported hardware events and will change by future hardware events.”…””}”(hjzh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhhËh²hubeh}”(h]”Œ%simple-introduction-on-jack-injection”ah ]”h"]”Œ%simple introduction on jack injection”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)”}”(hhh]”(h»)”}”(hŒ&The Layout of Jack Injection Interface”h]”hŒ&The Layout of Jack Injection Interface”…””}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjØh²hh³hÊh´K$ubhÝ)”}”(hŒ{If users enable the SND_JACK_INJECTION_DEBUG in the kernel, the audio jack injection interface will be created as below: ::”h]”hŒxIf users enable the SND_JACK_INJECTION_DEBUG in the kernel, the audio jack injection interface will be created as below:”…””}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K&hjØh²hubhŒ literal_block”“”)”}”(hXS$debugfs_mount_dir/sound |-- card0 |-- |-- HDMI_DP_pcm_10_Jack |-- |-- |-- jackin_inject |-- |-- |-- kctl_id |-- |-- |-- mask_bits |-- |-- |-- status |-- |-- |-- sw_inject_enable |-- |-- |-- type ... |-- |-- HDMI_DP_pcm_9_Jack |-- |-- jackin_inject |-- |-- kctl_id |-- |-- mask_bits |-- |-- status |-- |-- sw_inject_enable |-- |-- type |-- card1 |-- HDMI_DP_pcm_5_Jack |-- |-- jackin_inject |-- |-- kctl_id |-- |-- mask_bits |-- |-- status |-- |-- sw_inject_enable |-- |-- type ... |-- Headphone_Jack |-- |-- jackin_inject |-- |-- kctl_id |-- |-- mask_bits |-- |-- status |-- |-- sw_inject_enable |-- |-- type |-- Headset_Mic_Jack |-- jackin_inject |-- kctl_id |-- mask_bits |-- status |-- sw_inject_enable |-- type”h]”hXS$debugfs_mount_dir/sound |-- card0 |-- |-- HDMI_DP_pcm_10_Jack |-- |-- |-- jackin_inject |-- |-- |-- kctl_id |-- |-- |-- mask_bits |-- |-- |-- status |-- |-- |-- sw_inject_enable |-- |-- |-- type ... |-- |-- HDMI_DP_pcm_9_Jack |-- |-- jackin_inject |-- |-- kctl_id |-- |-- mask_bits |-- |-- status |-- |-- sw_inject_enable |-- |-- type |-- card1 |-- HDMI_DP_pcm_5_Jack |-- |-- jackin_inject |-- |-- kctl_id |-- |-- mask_bits |-- |-- status |-- |-- sw_inject_enable |-- |-- type ... |-- Headphone_Jack |-- |-- jackin_inject |-- |-- kctl_id |-- |-- mask_bits |-- |-- status |-- |-- sw_inject_enable |-- |-- type |-- Headset_Mic_Jack |-- jackin_inject |-- kctl_id |-- mask_bits |-- status |-- sw_inject_enable |-- type”…””}”hjùsbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1j÷h³hÊh´K*hjØh²hubeh}”(h]”Œ&the-layout-of-jack-injection-interface”ah ]”h"]”Œ&the layout of jack injection interface”ah$]”h&]”uh1hµhh·h²hh³hÊh´K$ubh¶)”}”(hhh]”(h»)”}”(hŒThe Explanation Of The Nodes”h]”hŒThe Explanation Of The Nodes”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´KTubhŒdefinition_list”“”)”}”(hhh]”(hŒdefinition_list_item”“”)”}”(hŒmkctl_id read-only, get jack_kctl->kctl's id :: sound/card1/Headphone_Jack# cat kctl_id Headphone Jack ”h]”(hŒterm”“”)”}”(hŒkctl_id”h]”hŒkctl_id”…””}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-h³hÊh´K[hj)ubhŒ definition”“”)”}”(hhh]”(hÝ)”}”(hŒ&read-only, get jack_kctl->kctl's id ::”h]”hŒ%read-only, get jack_kctl->kctl’s id”…””}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KWhj?ubjø)”}”(hŒ6sound/card1/Headphone_Jack# cat kctl_id Headphone Jack”h]”hŒ6sound/card1/Headphone_Jack# cat kctl_id Headphone Jack”…””}”hjPsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1j÷h³hÊh´KZhj?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j=hj)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÊh´K[hj$ubj()”}”(hŒmask_bits read-only, get jack_kctl's supported events mask_bits :: sound/card1/Headphone_Jack# cat mask_bits 0x0001 HEADPHONE(0x0001) ”h]”(j.)”}”(hŒ mask_bits”h]”hŒ mask_bits”…””}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-h³hÊh´Kbhjjubj>)”}”(hhh]”(hÝ)”}”(hŒ8read-only, get jack_kctl's supported events mask_bits ::”h]”hŒ7read-only, get jack_kctl’s supported events mask_bits”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K^hj|ubjø)”}”(hŒBsound/card1/Headphone_Jack# cat mask_bits 0x0001 HEADPHONE(0x0001)”h]”hŒBsound/card1/Headphone_Jack# cat mask_bits 0x0001 HEADPHONE(0x0001)”…””}”hjsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1j÷h³hÊh´Kahj|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j=hjjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÊh´Kbhj$h²hubj()”}”(hŒ1status read-only, get jack_kctl's current status ”h]”(j.)”}”(hŒstatus”h]”hŒstatus”…””}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-h³hÊh´Kehj§ubj>)”}”(hhh]”hÝ)”}”(hŒ)read-only, get jack_kctl's current status”h]”hŒ+read-only, get jack_kctl’s current status”…””}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kehj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÊh´Kehj$h²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j"hjh²hh³hÊh´NubhŒ bullet_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒQheadphone unplugged: :: sound/card1/Headphone_Jack# cat status Unplugged ”h]”(hÝ)”}”(hŒheadphone unplugged:”h]”hŒheadphone unplugged:”…””}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kghjãubjø)”}”(hŒ0sound/card1/Headphone_Jack# cat status Unplugged”h]”hŒ0sound/card1/Headphone_Jack# cat status Unplugged”…””}”hjõsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1j÷h³hÊh´Kkhjãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÞh²hh³hÊh´Nubjâ)”}”(hŒMheadphone plugged: :: sound/card1/Headphone_Jack# cat status Plugged ”h]”(hÝ)”}”(hŒheadphone plugged:”h]”hŒheadphone plugged:”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Knhj ubjø)”}”(hŒ.sound/card1/Headphone_Jack# cat status Plugged”h]”hŒ.sound/card1/Headphone_Jack# cat status Plugged”…””}”hjsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1j÷h³hÊh´Krhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÞh²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1jÜh³hÊh´Kghjh²hubj#)”}”(hhh]”(j()”}”(hŒÿtype read-only, get snd_jack's supported events from type (all supported events on the physical audio jack) :: sound/card1/Headphone_Jack# cat type 0x7803 HEADPHONE(0x0001) MICROPHONE(0x0002) BTN_3(0x0800) BTN_2(0x1000) BTN_1(0x2000) BTN_0(0x4000) ”h]”(j.)”}”(hŒtype”h]”hŒtype”…””}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-h³hÊh´Kzhj:ubj>)”}”(hhh]”(hÝ)”}”(hŒiread-only, get snd_jack's supported events from type (all supported events on the physical audio jack) ::”h]”hŒhread-only, get snd_jack’s supported events from type (all supported events on the physical audio jack)”…””}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KvhjLubjø)”}”(hŒˆsound/card1/Headphone_Jack# cat type 0x7803 HEADPHONE(0x0001) MICROPHONE(0x0002) BTN_3(0x0800) BTN_2(0x1000) BTN_1(0x2000) BTN_0(0x4000)”h]”hŒˆsound/card1/Headphone_Jack# cat type 0x7803 HEADPHONE(0x0001) MICROPHONE(0x0002) BTN_3(0x0800) BTN_2(0x1000) BTN_1(0x2000) BTN_0(0x4000)”…””}”hj]sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1j÷h³hÊh´KyhjLubeh}”(h]”h ]”h"]”h$]”h&]”uh1j=hj:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÊh´Kzhj7ubj()”}”(hŒ9sw_inject_enable read-write, enable or disable injection ”h]”(j.)”}”(hŒsw_inject_enable”h]”hŒsw_inject_enable”…””}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-h³hÊh´K}hjwubj>)”}”(hhh]”hÝ)”}”(hŒ'read-write, enable or disable injection”h]”hŒ'read-write, enable or disable injection”…””}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K}hj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjwubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÊh´K}hj7h²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j"hjh²hh³hÊh´NubjÝ)”}”(hhh]”(jâ)”}”(hŒ…injection disabled: :: sound/card1/Headphone_Jack# cat sw_inject_enable Jack: Headphone Jack Inject Enabled: 0 ”h]”(hÝ)”}”(hŒinjection disabled:”h]”hŒinjection disabled:”…””}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khj¯ubjø)”}”(hŒesound/card1/Headphone_Jack# cat sw_inject_enable Jack: Headphone Jack Inject Enabled: 0”h]”hŒesound/card1/Headphone_Jack# cat sw_inject_enable Jack: Headphone Jack Inject Enabled: 0”…””}”hjÁsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1j÷h³hÊh´Kƒhj¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¬h²hh³hÊh´Nubjâ)”}”(hŒ„injection enabled: :: sound/card1/Headphone_Jack# cat sw_inject_enable Jack: Headphone Jack Inject Enabled: 1 ”h]”(hÝ)”}”(hŒinjection enabled:”h]”hŒinjection enabled:”…””}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K†hjÕubjø)”}”(hŒesound/card1/Headphone_Jack# cat sw_inject_enable Jack: Headphone Jack Inject Enabled: 1”h]”hŒesound/card1/Headphone_Jack# cat sw_inject_enable Jack: Headphone Jack Inject Enabled: 1”…””}”hjçsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1j÷h³hÊh´KŠhjÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¬h²hh³hÊh´Nubjâ)”}”(hŒXto enable jack injection: :: sound/card1/Headphone_Jack# echo 1 > sw_inject_enable ”h]”(hÝ)”}”(hŒto enable jack injection:”h]”hŒto enable jack injection:”…””}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khjûubjø)”}”(hŒ5sound/card1/Headphone_Jack# echo 1 > sw_inject_enable”h]”hŒ5sound/card1/Headphone_Jack# echo 1 > sw_inject_enable”…””}”hj sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1j÷h³hÊh´K‘hjûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¬h²hh³hÊh´Nubjâ)”}”(hŒYto disable jack injection: :: sound/card1/Headphone_Jack# echo 0 > sw_inject_enable ”h]”(hÝ)”}”(hŒto disable jack injection:”h]”hŒto disable jack injection:”…””}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K“hj!ubjø)”}”(hŒ5sound/card1/Headphone_Jack# echo 0 > sw_inject_enable”h]”hŒ5sound/card1/Headphone_Jack# echo 0 > sw_inject_enable”…””}”hj3sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1j÷h³hÊh´K—hj!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¬h²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1jÜh³hÊh´Khjh²hubj#)”}”(hhh]”j()”}”(hŒ3jackin_inject write-only, inject plugin or plugout ”h]”(j.)”}”(hŒ jackin_inject”h]”hŒ jackin_inject”…””}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-h³hÊh´KšhjPubj>)”}”(hhh]”hÝ)”}”(hŒ$write-only, inject plugin or plugout”h]”hŒ$write-only, inject plugin or plugout”…””}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kšhjbubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjPubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÊh´KšhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjh²hh³hÊh´NubjÝ)”}”(hhh]”(jâ)”}”(hŒMto inject plugin: :: sound/card1/Headphone_Jack# echo 1 > jackin_inject ”h]”(hÝ)”}”(hŒto inject plugin:”h]”hŒto inject plugin:”…””}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kœhjˆubjø)”}”(hŒ2sound/card1/Headphone_Jack# echo 1 > jackin_inject”h]”hŒ2sound/card1/Headphone_Jack# echo 1 > jackin_inject”…””}”hjšsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1j÷h³hÊh´K hjˆubeh}”(h]”h ]”h"]”h$]”h&]”uh1jáhj…h²hh³hÊh´Nubjâ)”}”(hŒMto inject plugout: :: sound/card1/Headphone_Jack# echo 0 > jackin_inject”h]”(hÝ)”}”(hŒto inject plugout:”h]”hŒto inject plugout:”…””}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K¢hj®ubjø)”}”(hŒ2sound/card1/Headphone_Jack# echo 0 > jackin_inject”h]”hŒ2sound/card1/Headphone_Jack# echo 0 > jackin_inject”…””}”hjÀsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1j÷h³hÊh´K¦hj®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jáhj…h²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1jÜh³hÊh´Kœhjh²hubeh}”(h]”Œthe-explanation-of-the-nodes”ah ]”h"]”Œthe explanation of the nodes”ah$]”h&]”uh1hµhh·h²hh³hÊh´KTubeh}”(h]”Œalsa-jack-software-injection”ah ]”h"]”Œalsa jack software injection”ah$]”h&]”uh1hµhhh²hh³hÊh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÊuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(hºNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÊŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(jçjäjÕjÒjj jßjÜuŒ nametypes”}”(jç‰jÕ‰j‰j߉uh}”(jäh·jÒhËj jØjÜjuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.