€•ÒSŒ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/driver-api/rfkill”Œ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/driver-api/rfkill”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ%/translations/it_IT/driver-api/rfkill”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ%/translations/ja_JP/driver-api/rfkill”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ%/translations/ko_KR/driver-api/rfkill”Œ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/driver-api/rfkill”Œ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/driver-api/rfkill”Œ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Œrfkill - RF kill switch support”h]”hŒrfkill - RF kill switch support”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œid1”uh1hºhh·h²hh³Œ?/var/lib/git/docbuild/linux/Documentation/driver-api/rfkill.rst”h´KubhŒtopic”“”)�”}”(hŒ Contents ”h]”(h»)�”}”(hŒContents”h]”hŒContents”…”�”}”(hhÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhÏh³hÌh´KubhŒ bullet_list”“”)�”}”(hhh]”hŒ list_item”“”)�”}”(hhh]”(hŒ paragraph”“”)�”}”(hhh]”hŒ reference”“”)�”}”(hhh]”hŒrfkill - RF kill switch support”…”�”}”(hhòh²hh³Nh´Nubah}”(h]”hËah ]”h"]”h$]”h&]”Œrefid”Œrfkill-rf-kill-switch-support”uh1hðhhíubah}”(h]”h ]”h"]”h$]”h&]”uh1hëhhèubhâ)�”}”(hhh]”(hç)�”}”(hhh]”hì)�”}”(hhh]”hñ)�”}”(hhh]”hŒ Introduction”…”�”}”(hjh²hh³Nh´Nubah}”(h]”Œid2”ah ]”h"]”h$]”h&]”Œrefid”Œ introduction”uh1hðhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hæhjubhç)�”}”(hhh]”hì)�”}”(hhh]”hñ)�”}”(hhh]”hŒImplementation details”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”Œid3”ah ]”h"]”h$]”h&]”Œrefid”Œimplementation-details”uh1hðhj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëhj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hæhjubhç)�”}”(hhh]”hì)�”}”(hhh]”hñ)�”}”(hhh]”hŒ Kernel API”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”Œid4”ah ]”h"]”h$]”h&]”Œrefid”Œ kernel-api”uh1hðhjQubah}”(h]”h ]”h"]”h$]”h&]”uh1hëhjNubah}”(h]”h ]”h"]”h$]”h&]”uh1hæhjubhç)�”}”(hhh]”hì)�”}”(hhh]”hñ)�”}”(hhh]”hŒUserspace support”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”Œid5”ah ]”h"]”h$]”h&]”Œrefid”Œuserspace-support”uh1hðhjsubah}”(h]”h ]”h"]”h$]”h&]”uh1hëhjpubah}”(h]”h ]”h"]”h$]”h&]”uh1hæhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1háhhèubeh}”(h]”h ]”h"]”h$]”h&]”uh1hæhhãubah}”(h]”h ]”h"]”h$]”h&]”uh1háhhÏh²hh³Nh´Nubeh}”(h]”Œcontents”ah ]”Œcontents”ah"]”Œcontents”ah$]”h&]”uh1hÍh³hÌh´Khh·h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ Introduction”h]”hŒ Introduction”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÊjuh1hºhj­h²hh³hÌh´K ubhì)�”}”(hŒ£The rfkill subsystem provides a generic interface for disabling any radio transmitter in the system. When a transmitter is blocked, it shall not radiate any power.”h]”hŒ£The rfkill subsystem provides a generic interface for disabling any radio transmitter in the system. When a transmitter is blocked, it shall not radiate any power.”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÌh´K hj­h²hubhì)�”}”(hŒÞThe subsystem also provides the ability to react on button presses and disable all transmitters of a certain type (or all). This is intended for situations where transmitters need to be turned off, for example on aircraft.”h]”hŒÞThe subsystem also provides the ability to react on button presses and disable all transmitters of a certain type (or all). This is intended for situations where transmitters need to be turned off, for example on aircraft.”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÌh´Khj­h²hubhì)�”}”(hŒ±The rfkill subsystem has a concept of "hard" and "soft" block, which differ little in their meaning (block == transmitters off) but rather in whether they can be changed or not:”h]”hŒ¹The rfkill subsystem has a concept of “hardâ€� and “softâ€� block, which differ little in their meaning (block == transmitters off) but rather in whether they can be changed or not:”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÌh´Khj­h²hubhŒ block_quote”“”)�”}”(hŒ¼- hard block read-only radio block that cannot be overridden by software - soft block writable radio block (need not be readable) that is set by the system software. ”h]”hâ)�”}”(hhh]”(hç)�”}”(hŒLhard block read-only radio block that cannot be overridden by software ”h]”hŒdefinition_list”“”)�”}”(hhh]”hŒdefinition_list_item”“”)�”}”(hŒGhard block read-only radio block that cannot be overridden by software ”h]”(hŒterm”“”)�”}”(hŒ hard block”h]”hŒ hard block”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÌh´KhjüubhŒ definition”“”)�”}”(hhh]”hì)�”}”(hŒ;read-only radio block that cannot be overridden by software”h]”hŒ;read-only radio block that cannot be overridden by software”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÌh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjüubeh}”(h]”h ]”h"]”h$]”h&]”uh1júh³hÌh´Khj÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjñubah}”(h]”h ]”h"]”h$]”h&]”uh1hæhjîubhç)�”}”(hŒesoft block writable radio block (need not be readable) that is set by the system software. ”h]”jö)�”}”(hhh]”jû)�”}”(hŒ[soft block writable radio block (need not be readable) that is set by the system software. ”h]”(j)�”}”(hŒ soft block”h]”hŒ soft block”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÌh´KhjBubj)�”}”(hhh]”hì)�”}”(hŒOwritable radio block (need not be readable) that is set by the system software.”h]”hŒOwritable radio block (need not be readable) that is set by the system software.”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÌh´KhjTubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjBubeh}”(h]”h ]”h"]”h$]”h&]”uh1júh³hÌh´Khj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1hæhjîubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1háh³hÌh´Khjêubah}”(h]”h ]”h"]”h$]”h&]”uh1jèh³hÌh´Khj­h²hubhì)�”}”(hŒ—The rfkill subsystem has two parameters, rfkill.default_state and rfkill.master_switch_mode, which are documented in admin-guide/kernel-parameters.rst.”h]”hŒ—The rfkill subsystem has two parameters, rfkill.default_state and rfkill.master_switch_mode, which are documented in admin-guide/kernel-parameters.rst.”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÌh´K hj­h²hubeh}”(h]”jah ]”h"]”Œ introduction”ah$]”h&]”uh1hµhh·h²hh³hÌh´K ubh¶)�”}”(hhh]”(h»)�”}”(hŒImplementation details”h]”hŒImplementation details”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÊj;uh1hºhj h²hh³hÌh´K&ubhì)�”}”(hŒ:The rfkill subsystem is composed of three main components:”h]”hŒ:The rfkill subsystem is composed of three main components:”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÌh´K(hj h²hubjé)�”}”(hŒ–* the rfkill core, * the deprecated rfkill-input module (an input layer handler, being replaced by userspace policy code) and * the rfkill drivers. ”h]”hâ)�”}”(hhh]”(hç)�”}”(hŒthe rfkill core,”h]”hì)�”}”(hjÈh]”hŒthe rfkill core,”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÌh´K*hjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1hæhjÃubhç)�”}”(hŒhthe deprecated rfkill-input module (an input layer handler, being replaced by userspace policy code) and”h]”hì)�”}”(hŒhthe deprecated rfkill-input module (an input layer handler, being replaced by userspace policy code) and”h]”hŒhthe deprecated rfkill-input module (an input layer handler, being replaced by userspace policy code) and”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÌh´K+hjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1hæhjÃubhç)�”}”(hŒthe rfkill drivers. ”h]”hì)�”}”(hŒthe rfkill drivers.”h]”hŒthe rfkill drivers.”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÌh´K-hjõubah}”(h]”h ]”h"]”h$]”h&]”uh1hæhjÃubeh}”(h]”h ]”h"]”h$]”h&]”jƒŒ*”uh1háh³hÌh´K*hj¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jèh³hÌh´K*hj h²hubhì)�”}”(hŒéThe rfkill core provides API for kernel drivers to register their radio transmitter with the kernel, methods for turning it on and off, and letting the system know about hardware-disabled states that may be implemented on the device.”h]”hŒéThe rfkill core provides API for kernel drivers to register their radio transmitter with the kernel, methods for turning it on and off, and letting the system know about hardware-disabled states that may be implemented on the device.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÌh´K/hj h²hubhì)�”}”(hŒ¦The rfkill core code also notifies userspace of state changes, and provides ways for userspace to query the current states. See the "Userspace support" section below.”h]”hŒªThe rfkill core code also notifies userspace of state changes, and provides ways for userspace to query the current states. See the “Userspace supportâ€� section below.”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÌh´K4hj h²hubhì)�”}”(hXîWhen the device is hard-blocked (either by a call to rfkill_set_hw_state() or from query_hw_block), set_block() will be invoked for additional software block, but drivers can ignore the method call since they can use the return value of the function rfkill_set_hw_state() to sync the software state instead of keeping track of calls to set_block(). In fact, drivers should use the return value of rfkill_set_hw_state() unless the hardware actually keeps track of soft and hard block separately.”h]”hXîWhen the device is hard-blocked (either by a call to rfkill_set_hw_state() or from query_hw_block), set_block() will be invoked for additional software block, but drivers can ignore the method call since they can use the return value of the function rfkill_set_hw_state() to sync the software state instead of keeping track of calls to set_block(). In fact, drivers should use the return value of rfkill_set_hw_state() unless the hardware actually keeps track of soft and hard block separately.”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÌh´K8hj h²hubeh}”(h]”jAah ]”h"]”Œimplementation details”ah$]”h&]”uh1hµhh·h²hh³hÌh´K&ubh¶)�”}”(hhh]”(h»)�”}”(hŒ Kernel API”h]”hŒ Kernel API”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÊj]uh1hºhjKh²hh³hÌh´KBubhì)�”}”(hŒCDrivers for radio transmitters normally implement an rfkill driver.”h]”hŒCDrivers for radio transmitters normally implement an rfkill driver.”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÌh´KDhjKh²hubhì)�”}”(hX Platform drivers might implement input devices if the rfkill button is just that, a button. If that button influences the hardware then you need to implement an rfkill driver instead. This also applies if the platform provides a way to turn on/off the transmitter(s).”h]”hX Platform drivers might implement input devices if the rfkill button is just that, a button. If that button influences the hardware then you need to implement an rfkill driver instead. This also applies if the platform provides a way to turn on/off the transmitter(s).”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÌh´KFhjKh²hubhì)�”}”(hŒÂFor some platforms, it is possible that the hardware state changes during suspend/hibernation, in which case it will be necessary to update the rfkill core with the current state at resume time.”h]”hŒÂFor some platforms, it is possible that the hardware state changes during suspend/hibernation, in which case it will be necessary to update the rfkill core with the current state at resume time.”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÌh´KKhjKh²hubhì)�”}”(hŒ