€•Ò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Œ