€• 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Œ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”…””}”(hhôhž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”…””}”(hjhž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”…””}”(hj<hž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”…””}”(hjNhž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 ”…””}”(hjfhžhhŸNh Nubhá)”}”(hŒ``sw_inject_enable``”h]”hŒsw_inject_enable”…””}”(hjnhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hàhjfubhŒ‰ first, once it is enabled, this jack will not change the state by hardware events anymore, we could inject plugin or plugout events via ”…””}”(hjfhžhhŸNh Nubhá)”}”(hŒ``jackin_inject``”h]”hŒ jackin_inject”…””}”(hj€hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hàhjfubhŒ and check the jack state via ”…””}”(hjfhžhhŸNh Nubhá)”}”(hŒ ``status``”h]”hŒstatus”…””}”(hj’hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hàhjfubhŒF, after we finish our test, we need to disable the jack injection via ”…””}”(hjfhžhhŸNh Nubhá)”}”(hŒ``sw_inject_enable``”h]”hŒsw_inject_enable”…””}”(hj¤hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hàhjfubhŒ” 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.”…””}”(hjfhž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¦hjýhž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”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhŸh¶h K[hjubhŒ definition”“”)”}”(hhh]”(hÉ)”}”(hŒ&read-only, get jack_kctl->kctl's id ::”h]”hŒ%read-only, get jack_kctl->kctl’s id”…””}”(hj.hž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”…””}”hj<sbah}”(h]”h ]”h"]”h$]”h&]”jójôuh1jãhŸh¶h KZhj+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j)hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhŸh¶h K[hjubj)”}”(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”…””}”(hjZhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhŸh¶h KbhjVubj*)”}”(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”…””}”(hjkhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h K^hjhubjä)”}”(hŒBsound/card1/Headphone_Jack# cat mask_bits 0x0001 HEADPHONE(0x0001)”h]”hŒBsound/card1/Headphone_Jack# cat mask_bits 0x0001 HEADPHONE(0x0001)”…””}”hjysbah}”(h]”h ]”h"]”h$]”h&]”jójôuh1jãhŸh¶h Kahjhubeh}”(h]”h ]”h"]”h$]”h&]”uh1j)hjVubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhŸh¶h Kbhjhž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&]”uh1jhŸ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&]”uh1jhŸh¶h Kehjhžhubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjýhž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&]”jójôuh1jã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&]”jójôuh1jã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 Kghjýhž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&]”uh1jhŸ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)”…””}”(hj;hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h Kvhj8ubjä)”}”(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)”…””}”hjIsbah}”(h]”h ]”h"]”h$]”h&]”jójôuh1jãhŸh¶h Kyhj8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j)hj&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhŸh¶h Kzhj#ubj)”}”(hŒ9sw_inject_enable read-write, enable or disable injection ”h]”(j)”}”(hŒsw_inject_enable”h]”hŒsw_inject_enable”…””}”(hjghžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhŸh¶h K}hjcubj*)”}”(hhh]”hÉ)”}”(hŒ'read-write, enable or disable injection”h]”hŒ'read-write, enable or disable injection”…””}”(hjxhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h K}hjuubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjcubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhŸh¶h K}hj#hžhubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjýhž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&]”jójôuh1jã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&]”jójôuh1jã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&]”jójôuh1jã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:”…””}”(hjhž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”…””}”hjsbah}”(h]”h ]”h"]”h$]”h&]”jójôuh1jãhŸh¶h K—hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj˜hžhhŸh¶h Nubeh}”(h]”h ]”h"]”h$]”h&]”j!j"uh1jÈhŸh¶h Khjýhžhubj)”}”(hhh]”j)”}”(hŒ3jackin_inject write-only, inject plugin or plugout ”h]”(j)”}”(hŒ jackin_inject”h]”hŒ jackin_inject”…””}”(hj@hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhŸh¶h Kšhj<ubj*)”}”(hhh]”hÉ)”}”(hŒ$write-only, inject plugin or plugout”h]”hŒ$write-only, inject plugin or plugout”…””}”(hjQhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KšhjNubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhŸh¶h Kšhj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjýhž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:”…””}”(hjxhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h Kœhjtubjä)”}”(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&]”jójôuh1jãhŸh¶h K hjtubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÍhjqhž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&]”jójôuh1jãhŸh¶h K¦hjšubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÍhjqhžhhŸh¶h Nubeh}”(h]”h ]”h"]”h$]”h&]”j!j"uh1jÈhŸh¶h Kœhjýhž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¾júj÷jËjÈuŒ nametypes”}”(jÓ‰jÁ‰jú‰jˉuh}”(jÐh£j¾h·j÷jÄjÈjýuŒ 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.