€•à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”Œ%/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Œ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”…””}”(hhühžhhŸNh Nubah}”(h]”Œid2”ah ]”h"]”h$]”h&]”Œrefid”Œ introduction”uh1hÜhhùubah}”(h]”h ]”h"]”h$]”h&]”uh1h×hhöubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhhóubhÓ)”}”(hhh]”hØ)”}”(hhh]”hÝ)”}”(hhh]”hŒImplementation details”…””}”(hjhžhhŸNh Nubah}”(h]”Œid3”ah ]”h"]”h$]”h&]”Œrefid”Œimplementation-details”uh1hÜhjubah}”(h]”h ]”h"]”h$]”h&]”uh1h×hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhhóubhÓ)”}”(hhh]”hØ)”}”(hhh]”hÝ)”}”(hhh]”hŒ Kernel API”…””}”(hj@hžhhŸNh Nubah}”(h]”Œid4”ah ]”h"]”h$]”h&]”Œrefid”Œ kernel-api”uh1hÜhj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1h×hj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhhóubhÓ)”}”(hhh]”hØ)”}”(hhh]”hÝ)”}”(hhh]”hŒUserspace support”…””}”(hjbhžhhŸNh Nubah}”(h]”Œid5”ah ]”h"]”h$]”h&]”Œrefid”Œuserspace-support”uh1hÜhj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1h×hj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhhóubeh}”(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”…””}”(hjîhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jìhŸ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 Khjþubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjè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”…””}”(hj2hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jìhŸh¸h Khj.ubjý)”}”(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.”…””}”(hjChžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h×hŸh¸h Khj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jühj.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Ú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.”…””}”(hjwhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h×hŸh¸h K hj™hžhubeh}”(h]”j ah ]”h"]”Œ introduction”ah$]”h&]”uh1h¡hh£hžhhŸh¸h K ubh¢)”}”(hhh]”(h§)”}”(hŒImplementation details”h]”hŒImplementation details”…””}”(hjhž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:”…””}”(hjhž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&]”joŒ*”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.”…””}”(hjhž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.”…””}”(hj"hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h×hŸh¸h K8hjŒhžhubeh}”(h]”j-ah ]”h"]”Œimplementation details”ah$]”h&]”uh1h¡hh£hžhhŸh¸h K&ubh¢)”}”(hhh]”(h§)”}”(hŒ Kernel API”h]”hŒ Kernel API”…””}”(hj:hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”h¶jIuh1h¦hj7hž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.”…””}”(hjHhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h×hŸh¸h KDhj7hž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).”…””}”(hjVhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h×hŸh¸h KFhj7hž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.”…””}”(hjdhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h×hŸh¸h KKhj7hžhubhØ)”}”(hŒ