Csphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget,/translations/zh_CN/driver-api/media/rc-coremodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/zh_TW/driver-api/media/rc-coremodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/it_IT/driver-api/media/rc-coremodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/ja_JP/driver-api/media/rc-coremodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/ko_KR/driver-api/media/rc-coremodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/pt_BR/driver-api/media/rc-coremodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/sp_SP/driver-api/media/rc-coremodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhF/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core.rsthKubhsection)}(hhh](htitle)}(hRemote Controller devicesh]hRemote Controller devices}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hRemote Controller coreh]hRemote Controller core}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hThe remote controller core implements infrastructure to receive and send remote controller keyboard keystrokes and mouse events.h]hThe remote controller core implements infrastructure to receive and send remote controller keyboard keystrokes and mouse events.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hXEvery time a key is pressed on a remote controller, a scan code is produced. Also, on most hardware, keeping a key pressed for more than a few dozens of milliseconds produce a repeat key event. That's somewhat similar to what a normal keyboard or mouse is handled internally on Linux\ [#f1]_. So, the remote controller core is implemented on the top of the linux input/evdev interface.h](hXEvery time a key is pressed on a remote controller, a scan code is produced. Also, on most hardware, keeping a key pressed for more than a few dozens of milliseconds produce a repeat key event. That’s somewhat similar to what a normal keyboard or mouse is handled internally on Linux }(hhhhhNhNubhfootnote_reference)}(h[#f1]_h]h1}(hjhhhNhNubah}(h]id1ah ]h"]h$]h&]autoKrefidf1docnamedriver-api/media/rc-coreuh1jhhresolvedKubh^. So, the remote controller core is implemented on the top of the linux input/evdev interface.}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubhfootnote)}(hX The main difference is that, on keyboard events, the keyboard controller produces one event for a key press and another one for key release. On infrared-based remote controllers, there's no key release event. Instead, an extra code is produced to indicate key repeats. h](hlabel)}(hhh]h1}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj)hhhNhNubh)}(hX The main difference is that, on keyboard events, the keyboard controller produces one event for a key press and another one for key release. On infrared-based remote controllers, there's no key release event. Instead, an extra code is produced to indicate key repeats.h]hXThe main difference is that, on keyboard events, the keyboard controller produces one event for a key press and another one for key release. On infrared-based remote controllers, there’s no key release event. Instead, an extra code is produced to indicate key repeats.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj)ubeh}(h]jah ]h"]f1ah$]h&]jajKjjuh1j'hhhKhhhhubh)}(hXHowever, most of the remote controllers use infrared (IR) to transmit signals. As there are several protocols used to modulate infrared signals, one important part of the core is dedicated to adjust the driver and the core system to support the infrared protocol used by the emitter.h]hXHowever, most of the remote controllers use infrared (IR) to transmit signals. As there are several protocols used to modulate infrared signals, one important part of the core is dedicated to adjust the driver and the core system to support the infrared protocol used by the emitter.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hXThe infrared transmission is done by blinking a infrared emitter using a carrier. The carrier can be switched on or off by the IR transmitter hardware. When the carrier is switched on, it is called *PULSE*. When the carrier is switched off, it is called *SPACE*.h](hThe infrared transmission is done by blinking a infrared emitter using a carrier. The carrier can be switched on or off by the IR transmitter hardware. When the carrier is switched on, it is called }(hj_hhhNhNubhemphasis)}(h*PULSE*h]hPULSE}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jghj_ubh1. When the carrier is switched off, it is called }(hj_hhhNhNubjh)}(h*SPACE*h]hSPACE}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jghj_ubh.}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hIn other words, a typical IR transmission can be viewed as a sequence of *PULSE* and *SPACE* events, each with a given duration.h](hIIn other words, a typical IR transmission can be viewed as a sequence of }(hjhhhNhNubjh)}(h*PULSE*h]hPULSE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jghjubh and }(hjhhhNhNubjh)}(h*SPACE*h]hSPACE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jghjubh$ events, each with a given duration.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK$hhhhubh)}(hXThe carrier parameters (frequency, duty cycle) and the intervals for *PULSE* and *SPACE* events depend on the protocol. For example, the NEC protocol uses a carrier of 38kHz, and transmissions start with a 9ms *PULSE* and a 4.5ms SPACE. It then transmits 16 bits of scan code, being 8 bits for address (usually it is a fixed number for a given remote controller), followed by 8 bits of code. A bit "1" is modulated with 560µs *PULSE* followed by 1690µs *SPACE* and a bit "0" is modulated with 560µs *PULSE* followed by 560µs *SPACE*.h](hEThe carrier parameters (frequency, duty cycle) and the intervals for }(hjhhhNhNubjh)}(h*PULSE*h]hPULSE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jghjubh and }(hjhhhNhNubjh)}(h*SPACE*h]hSPACE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jghjubhz events depend on the protocol. For example, the NEC protocol uses a carrier of 38kHz, and transmissions start with a 9ms }(hjhhhNhNubjh)}(h*PULSE*h]hPULSE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jghjubh and a 4.5ms SPACE. It then transmits 16 bits of scan code, being 8 bits for address (usually it is a fixed number for a given remote controller), followed by 8 bits of code. A bit “1” is modulated with 560µs }(hjhhhNhNubjh)}(h*PULSE*h]hPULSE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jghjubh followed by 1690µs }(hjhhhNhNubjh)}(h*SPACE*h]hSPACE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jghjubh- and a bit “0” is modulated with 560µs }(hjhhhNhNubjh)}(h*PULSE*h]hPULSE}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jghjubh followed by 560µs }(hjhhhNhNubjh)}(h*SPACE*h]hSPACE}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jghjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK'hhhhubh)}(hXAt receiver, a simple low-pass filter can be used to convert the received signal in a sequence of *PULSE/SPACE* events, filtering out the carrier frequency. Due to that, the receiver doesn't care about the carrier's actual frequency parameters: all it has to do is to measure the amount of time it receives *PULSE/SPACE* events. So, a simple IR receiver hardware will just provide a sequence of timings for those events to the Kernel. The drivers for hardware with such kind of receivers are identified by ``RC_DRIVER_IR_RAW``, as defined by :c:type:`rc_driver_type`\ [#f2]_. Other hardware come with a microcontroller that decode the *PULSE/SPACE* sequence and return scan codes to the Kernel. Such kind of receivers are identified by ``RC_DRIVER_SCANCODE``.h](hbAt receiver, a simple low-pass filter can be used to convert the received signal in a sequence of }(hjQhhhNhNubjh)}(h *PULSE/SPACE*h]h PULSE/SPACE}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jghjQubh events, filtering out the carrier frequency. Due to that, the receiver doesn’t care about the carrier’s actual frequency parameters: all it has to do is to measure the amount of time it receives }(hjQhhhNhNubjh)}(h *PULSE/SPACE*h]h PULSE/SPACE}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jghjQubh events. So, a simple IR receiver hardware will just provide a sequence of timings for those events to the Kernel. The drivers for hardware with such kind of receivers are identified by }(hjQhhhNhNubhliteral)}(h``RC_DRIVER_IR_RAW``h]hRC_DRIVER_IR_RAW}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjQubh, as defined by }(hjQhhhNhNubh)}(h:c:type:`rc_driver_type`h]j~)}(hjh]hrc_driver_type}(hjhhhNhNubah}(h]h ](xrefcc-typeeh"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarn reftargetrc_driver_typeuh1hhhhK0hjQubh }(hjQhhhNhNubj)}(h[#f2]_h]h2}(hjhhhNhNubah}(h]id2ah ]h"]h$]h&]jKjf2jjuh1jhjQjKubh=. Other hardware come with a microcontroller that decode the }(hjQhhhNhNubjh)}(h *PULSE/SPACE*h]h PULSE/SPACE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jghjQubhX sequence and return scan codes to the Kernel. Such kind of receivers are identified by }(hjQhhhNhNubj~)}(h``RC_DRIVER_SCANCODE``h]hRC_DRIVER_SCANCODE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjQubh.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK0hhhhubj()}(hThe RC core also supports devices that have just IR emitters, without any receivers. Right now, all such devices work only in raw TX mode. Such kind of hardware is identified as ``RC_DRIVER_IR_RAW_TX``. h](j.)}(hhh]h2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjhhhNhNubh)}(hThe RC core also supports devices that have just IR emitters, without any receivers. Right now, all such devices work only in raw TX mode. Such kind of hardware is identified as ``RC_DRIVER_IR_RAW_TX``.h](hThe RC core also supports devices that have just IR emitters, without any receivers. Right now, all such devices work only in raw TX mode. Such kind of hardware is identified as }(hjhhhNhNubj~)}(h``RC_DRIVER_IR_RAW_TX``h]hRC_DRIVER_IR_RAW_TX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK?hjubeh}(h]jah ]h"]f2ah$]h&]jajKjjuh1j'hhhK=hhhhubh)}(hWhen the RC core receives events produced by ``RC_DRIVER_IR_RAW`` IR receivers, it needs to decode the IR protocol, in order to obtain the corresponding scan code. The protocols supported by the RC core are defined at enum :c:type:`rc_proto`.h](h-When the RC core receives events produced by }(hj-hhhNhNubj~)}(h``RC_DRIVER_IR_RAW``h]hRC_DRIVER_IR_RAW}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj-ubh IR receivers, it needs to decode the IR protocol, in order to obtain the corresponding scan code. The protocols supported by the RC core are defined at enum }(hj-hhhNhNubh)}(h:c:type:`rc_proto`h]j~)}(hjIh]hrc_proto}(hjKhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j}hjGubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjrc_protouh1hhhhKDhj-ubh.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKDhhhhubh)}(hWhen the RC code receives a scan code (either directly, by a driver of the type ``RC_DRIVER_SCANCODE``, or via its IR decoders), it needs to convert into a Linux input event code. This is done via a mapping table.h](hPWhen the RC code receives a scan code (either directly, by a driver of the type }(hjphhhNhNubj~)}(h``RC_DRIVER_SCANCODE``h]hRC_DRIVER_SCANCODE}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjpubho, or via its IR decoders), it needs to convert into a Linux input event code. This is done via a mapping table.}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKIhhhhubh)}(hThe Kernel has support for mapping tables available on most media devices. It also supports loading a table in runtime, via some sysfs nodes. See the :ref:`RC userspace API ` for more details.h](hThe Kernel has support for mapping tables available on most media devices. It also supports loading a table in runtime, via some sysfs nodes. See the }(hjhhhNhNubh)}(h2:ref:`RC userspace API `h]hinline)}(hjh]hRC userspace API}(hjhhhNhNubah}(h]h ](jstdstd-refeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftyperef refexplicitrefwarnjremote_controllers_introuh1hhhhKNhjubh for more details.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKNhhhhubh)}(hhh](h)}(h/Remote controller data structures and functionsh]h/Remote controller data structures and functions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKTubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlerc_driver_type (C enum)c.rc_driver_typehNtauh1jhjhhhNhNubhdesc)}(hhh](hdesc_signature)}(hrc_driver_typeh]hdesc_signature_line)}(henum rc_driver_typeh](hdesc_sig_keyword)}(henumh]henum}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKubhdesc_sig_space)}(h h]h }(hj hhhNhNubah}(h]h ]wah"]h$]h&]uh1j hjhhhjhKubh desc_name)}(hrc_driver_typeh]h desc_sig_name)}(hjh]hrc_driver_type}(hj"hhhNhNubah}(h]h ]nah"]h$]h&]uh1j hjubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhƌ add_permalinkuh1jsphinx_line_type declaratorhjhhhjhKubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhjhKhjhhubh desc_content)}(hhh]h)}(htype of the RC driver.h]htype of the RC driver.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjNhhubah}(h]h ]h"]h$]h&]uh1jLhjhhhjhKubeh}(h]h ](jenumeh"]h$]h&]domainjobjtypejidesctypejinoindex noindexentrynocontentsentryuh1jhhhjhNhNubh container)}(hX(**Constants** ``RC_DRIVER_SCANCODE`` Driver or hardware generates a scancode. ``RC_DRIVER_IR_RAW`` Driver or hardware generates pulse/space sequences. It needs a Infra-Red pulse/space decoder ``RC_DRIVER_IR_RAW_TX`` Device transmitter only, driver requires pulse/space data sequence.h](h)}(h **Constants**h]hstrong)}(hj{h]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjyubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjuubhdefinition_list)}(hhh](hdefinition_list_item)}(h@``RC_DRIVER_SCANCODE`` Driver or hardware generates a scancode. h](hterm)}(h``RC_DRIVER_SCANCODE``h]j~)}(hjh]hRC_DRIVER_SCANCODE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjubh definition)}(hhh]h)}(h(Driver or hardware generates a scancode.h]h(Driver or hardware generates a scancode.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hr``RC_DRIVER_IR_RAW`` Driver or hardware generates pulse/space sequences. It needs a Infra-Red pulse/space decoder h](j)}(h``RC_DRIVER_IR_RAW``h]j~)}(hjh]hRC_DRIVER_IR_RAW}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjubj)}(hhh]h)}(h\Driver or hardware generates pulse/space sequences. It needs a Infra-Red pulse/space decoderh]h\Driver or hardware generates pulse/space sequences. It needs a Infra-Red pulse/space decoder}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h[``RC_DRIVER_IR_RAW_TX`` Device transmitter only, driver requires pulse/space data sequence.h](j)}(h``RC_DRIVER_IR_RAW_TX``h]j~)}(hjh]hRC_DRIVER_IR_RAW_TX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK!hjubj)}(hhh]h)}(hCDevice transmitter only, driver requires pulse/space data sequence.h]hCDevice transmitter only, driver requires pulse/space data sequence.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hK!hj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hK!hjubeh}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jshjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrc_scancode_filter (C struct)c.rc_scancode_filterhNtauh1jhjhhhNhNubj)}(hhh](j)}(hrc_scancode_filterh]j)}(hstruct rc_scancode_filterh](j)}(hstructh]hstruct}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK'ubj )}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjlhhhj~hK'ubj)}(hrc_scancode_filterh]j!)}(hjjh]hrc_scancode_filter}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hjubah}(h]h ](j3j4eh"]h$]h&]hhuh1jhjlhhhj~hK'ubeh}(h]h ]h"]h$]h&]hhj>uh1jj?j@hjhhhhj~hK'ubah}(h]jcah ](jDjEeh"]h$]h&]jIjJ)jKhuh1jhj~hK'hjehhubjM)}(hhh]h)}(hFilter scan codes.h]hFilter scan codes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK"hjhhubah}(h]h ]h"]h$]h&]uh1jLhjehhhj~hK'ubeh}(h]h ](jstructeh"]h$]h&]jmjjnjjojjpjqjruh1jhhhjhNhNubjt)}(h**Definition**:: struct rc_scancode_filter { u32 data; u32 mask; }; **Members** ``data`` Scancode data to match. ``mask`` Mask of bits of scancode to compare.h](h)}(h**Definition**::h](j~)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK&hjubh literal_block)}(h:struct rc_scancode_filter { u32 data; u32 mask; };h]h:struct rc_scancode_filter { u32 data; u32 mask; };}hjsbah}(h]h ]h"]h$]h&]hhuh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK(hjubh)}(h **Members**h]j~)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK-hjubj)}(hhh](j)}(h!``data`` Scancode data to match. h](j)}(h``data``h]j~)}(hj"h]hdata}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK$hjubj)}(hhh]h)}(hScancode data to match.h]hScancode data to match.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hK$hj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hK$hjubj)}(h-``mask`` Mask of bits of scancode to compare.h](j)}(h``mask``h]j~)}(hj[h]hmask}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjYubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK$hjUubj)}(hhh]h)}(h$Mask of bits of scancode to compare.h]h$Mask of bits of scancode to compare.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK%hjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphK$hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jshjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrc_filter_type (C enum)c.rc_filter_typehNtauh1jhjhhhNhNubj)}(hhh](j)}(hrc_filter_typeh]j)}(henum rc_filter_typeh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK+ubj )}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhK+ubj)}(hrc_filter_typeh]j!)}(hjh]hrc_filter_type}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hjubah}(h]h ](j3j4eh"]h$]h&]hhuh1jhjhhhjhK+ubeh}(h]h ]h"]h$]h&]hhj>uh1jj?j@hjhhhjhK+ubah}(h]jah ](jDjEeh"]h$]h&]jIjJ)jKhuh1jhjhK+hjhhubjM)}(hhh]h)}(hFilter type constants.h]hFilter type constants.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK,hjhhubah}(h]h ]h"]h$]h&]uh1jLhjhhhjhK+ubeh}(h]h ](jenumeh"]h$]h&]jmjjnjjojjpjqjruh1jhhhjhNhNubjt)}(h**Constants** ``RC_FILTER_NORMAL`` Filter for normal operation. ``RC_FILTER_WAKEUP`` Filter for waking from suspend. ``RC_FILTER_MAX`` Number of filter types.h](h)}(h **Constants**h]j~)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK0hjubj)}(hhh](j)}(h2``RC_FILTER_NORMAL`` Filter for normal operation. h](j)}(h``RC_FILTER_NORMAL``h]j~)}(hj8h]hRC_FILTER_NORMAL}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj6ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK3hj2ubj)}(hhh]h)}(hFilter for normal operation.h]hFilter for normal operation.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhK3hjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhK3hj/ubj)}(h5``RC_FILTER_WAKEUP`` Filter for waking from suspend. h](j)}(h``RC_FILTER_WAKEUP``h]j~)}(hjqh]hRC_FILTER_WAKEUP}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjoubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK6hjkubj)}(hhh]h)}(hFilter for waking from suspend.h]hFilter for waking from suspend.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK6hjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhK6hj/ubj)}(h)``RC_FILTER_MAX`` Number of filter types.h](j)}(h``RC_FILTER_MAX``h]j~)}(hjh]h RC_FILTER_MAX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK8hjubj)}(hhh]h)}(hNumber of filter types.h]hNumber of filter types.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK9hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK8hj/ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jshjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jlirc_fh (C struct) c.lirc_fhhNtauh1jhjhhhNhNubj)}(hhh](j)}(hlirc_fhh]j)}(hstruct lirc_fhh](j)}(hjrh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK>ubj )}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhK>ubj)}(hlirc_fhh]j!)}(hjh]hlirc_fh}(hj$hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hj ubah}(h]h ](j3j4eh"]h$]h&]hhuh1jhjhhhjhK>ubeh}(h]h ]h"]h$]h&]hhj>uh1jj?j@hjhhhjhK>ubah}(h]jah ](jDjEeh"]h$]h&]jIjJ)jKhuh1jhjhK>hjhhubjM)}(hhh]h)}(hrepresents an open lirc fileh]hrepresents an open lirc file}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK9hjChhubah}(h]h ]h"]h$]h&]uh1jLhjhhhjhK>ubeh}(h]h ](jstructeh"]h$]h&]jmjjnj^joj^jpjqjruh1jhhhjhNhNubjt)}(hX**Definition**:: struct lirc_fh { struct list_head list; struct rc_dev *rc; unsigned int *rawir; struct lirc_scancode *scancodes; wait_queue_head_t wait_poll; u32 carrier_low; u8 send_mode; u8 rec_mode; }; **Members** ``list`` list of open file handles ``rc`` rcdev for this lirc chardev ``rawir`` queue for incoming raw IR ``scancodes`` queue for incoming decoded scancodes ``wait_poll`` poll struct for lirc device ``carrier_low`` when setting the carrier range, first the low end must be set with an ioctl and then the high end with another ioctl ``send_mode`` lirc mode for sending, either LIRC_MODE_SCANCODE or LIRC_MODE_PULSE ``rec_mode`` lirc mode for receiving, either LIRC_MODE_SCANCODE or LIRC_MODE_MODE2h](h)}(h**Definition**::h](j~)}(h**Definition**h]h Definition}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjfubh:}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK=hjbubj)}(hstruct lirc_fh { struct list_head list; struct rc_dev *rc; unsigned int *rawir; struct lirc_scancode *scancodes; wait_queue_head_t wait_poll; u32 carrier_low; u8 send_mode; u8 rec_mode; };h]hstruct lirc_fh { struct list_head list; struct rc_dev *rc; unsigned int *rawir; struct lirc_scancode *scancodes; wait_queue_head_t wait_poll; u32 carrier_low; u8 send_mode; u8 rec_mode; };}hjsbah}(h]h ]h"]h$]h&]hhuh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK?hjbubh)}(h **Members**h]j~)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKJhjbubj)}(hhh](j)}(h#``list`` list of open file handles h](j)}(h``list``h]j~)}(hjh]hlist}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK;hjubj)}(hhh]h)}(hlist of open file handlesh]hlist of open file handles}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK;hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK;hjubj)}(h#``rc`` rcdev for this lirc chardev h](j)}(h``rc``h]j~)}(hjh]hrc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj: hK=hj; ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj: hK=hjubj)}(h3``scancodes`` queue for incoming decoded scancodes h](j)}(h ``scancodes``h]j~)}(hj^ h]h scancodes}(hj` hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj\ ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK>hjX ubj)}(hhh]h)}(h$queue for incoming decoded scancodesh]h$queue for incoming decoded scancodes}(hjw hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjs hK>hjt ubah}(h]h ]h"]h$]h&]uh1jhjX ubeh}(h]h ]h"]h$]h&]uh1jhjs hK>hjubj)}(h*``wait_poll`` poll struct for lirc device h](j)}(h ``wait_poll``h]j~)}(hj h]h wait_poll}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK?hj ubj)}(hhh]h)}(hpoll struct for lirc deviceh]hpoll struct for lirc device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hK?hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hK?hjubj)}(h``carrier_low`` when setting the carrier range, first the low end must be set with an ioctl and then the high end with another ioctl h](j)}(h``carrier_low``h]j~)}(hj h]h carrier_low}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKAhj ubj)}(hhh]h)}(htwhen setting the carrier range, first the low end must be set with an ioctl and then the high end with another ioctlh]htwhen setting the carrier range, first the low end must be set with an ioctl and then the high end with another ioctl}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK@hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKAhjubj)}(hR``send_mode`` lirc mode for sending, either LIRC_MODE_SCANCODE or LIRC_MODE_PULSE h](j)}(h ``send_mode``h]j~)}(hj h]h send_mode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKChj ubj)}(hhh]h)}(hClirc mode for sending, either LIRC_MODE_SCANCODE or LIRC_MODE_PULSEh]hClirc mode for sending, either LIRC_MODE_SCANCODE or LIRC_MODE_PULSE}(hj# hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKBhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKChjubj)}(hR``rec_mode`` lirc mode for receiving, either LIRC_MODE_SCANCODE or LIRC_MODE_MODE2h](j)}(h ``rec_mode``h]j~)}(hjD h]hrec_mode}(hjF hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjB ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKDhj> ubj)}(hhh]h)}(hElirc mode for receiving, either LIRC_MODE_SCANCODE or LIRC_MODE_MODE2h]hElirc mode for receiving, either LIRC_MODE_SCANCODE or LIRC_MODE_MODE2}(hj] hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjY hKDhjZ ubah}(h]h ]h"]h$]h&]uh1jhj> ubeh}(h]h ]h"]h$]h&]uh1jhjY hKDhjubeh}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ] kernelindentah"]h$]h&]uh1jshjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrc_dev (C struct)c.rc_devhNtauh1jhjhhhNhNubj)}(hhh](j)}(hrc_devh]j)}(h struct rc_devh](j)}(hjrh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKKubj )}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhj hKKubj)}(hrc_devh]j!)}(hj h]hrc_dev}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hj ubah}(h]h ](j3j4eh"]h$]h&]hhuh1jhj hhhj hKKubeh}(h]h ]h"]h$]h&]hhj>uh1jj?j@hj hhhj hKKubah}(h]j ah ](jDjEeh"]h$]h&]jIjJ)jKhuh1jhj hKKhj hhubjM)}(hhh]h)}(h"represents a remote control deviceh]h"represents a remote control device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKRhj hhubah}(h]h ]h"]h$]h&]uh1jLhj hhhj hKKubeh}(h]h ](jstructeh"]h$]h&]jmjjnj joj jpjqjruh1jhhhjhNhNubjt)}(hX**Definition**:: struct rc_dev { struct device dev; bool registered; bool idle; bool encode_wakeup; unsigned int minor; const struct attribute_group *sysfs_groups[5]; const char *device_name; const char *input_phys; struct input_id input_id; const char *driver_name; const char *map_name; struct rc_map rc_map; struct mutex lock; struct ir_raw_event_ctrl *raw; struct input_dev *input_dev; enum rc_driver_type driver_type; u32 users; u64 allowed_protocols; u64 enabled_protocols; u64 allowed_wakeup_protocols; enum rc_proto wakeup_protocol; struct rc_scancode_filter scancode_filter; struct rc_scancode_filter scancode_wakeup_filter; u32 scancode_mask; void *priv; spinlock_t keylock; bool keypressed; u8 last_toggle; u32 last_keycode; enum rc_proto last_protocol; u64 last_scancode; unsigned long keyup_jiffies; struct timer_list timer_keyup; struct timer_list timer_repeat; u32 timeout; u32 min_timeout; u32 max_timeout; u32 rx_resolution; #ifdef CONFIG_LIRC; struct device lirc_dev; struct cdev lirc_cdev; ktime_t gap_start; spinlock_t lirc_fh_lock; struct list_head lirc_fh; #endif; int (*change_protocol)(struct rc_dev *dev, u64 *rc_proto); int (*open)(struct rc_dev *dev); void (*close)(struct rc_dev *dev); int (*s_tx_mask)(struct rc_dev *dev, u32 mask); int (*s_tx_carrier)(struct rc_dev *dev, u32 carrier); int (*s_tx_duty_cycle)(struct rc_dev *dev, u32 duty_cycle); int (*s_rx_carrier_range)(struct rc_dev *dev, u32 min, u32 max); int (*tx_ir)(struct rc_dev *dev, unsigned *txbuf, unsigned n); void (*s_idle)(struct rc_dev *dev, bool enable); int (*s_wideband_receiver)(struct rc_dev *dev, int enable); int (*s_carrier_report) (struct rc_dev *dev, int enable); int (*s_filter)(struct rc_dev *dev, struct rc_scancode_filter *filter); int (*s_wakeup_filter)(struct rc_dev *dev, struct rc_scancode_filter *filter); int (*s_timeout)(struct rc_dev *dev, unsigned int timeout); }; **Members** ``dev`` driver model's view of this device ``registered`` set to true by rc_register_device(), false by rc_unregister_device ``idle`` used to keep track of RX state ``encode_wakeup`` wakeup filtering uses IR encode API, therefore the allowed wakeup protocols is the set of all raw encoders ``minor`` unique minor remote control device number ``sysfs_groups`` sysfs attribute groups ``device_name`` name of the rc child device ``input_phys`` physical path to the input child device ``input_id`` id of the input child device (struct input_id) ``driver_name`` name of the hardware driver which registered this device ``map_name`` name of the default keymap ``rc_map`` current scan/key table ``lock`` used to ensure we've filled in all protocol details before anyone can call show_protocols or store_protocols ``raw`` additional data for raw pulse/space devices ``input_dev`` the input child device used to communicate events to userspace ``driver_type`` specifies if protocol decoding is done in hardware or software ``users`` number of current users of the device ``allowed_protocols`` bitmask with the supported RC_PROTO_BIT_* protocols ``enabled_protocols`` bitmask with the enabled RC_PROTO_BIT_* protocols ``allowed_wakeup_protocols`` bitmask with the supported RC_PROTO_BIT_* wakeup protocols ``wakeup_protocol`` the enabled RC_PROTO_* wakeup protocol or RC_PROTO_UNKNOWN if disabled. ``scancode_filter`` scancode filter ``scancode_wakeup_filter`` scancode wakeup filters ``scancode_mask`` some hardware decoders are not capable of providing the full scancode to the application. As this is a hardware limit, we can't do anything with it. Yet, as the same keycode table can be used with other devices, a mask is provided to allow its usage. Drivers should generally leave this field in blank ``priv`` driver-specific data ``keylock`` protects the remaining members of the struct ``keypressed`` whether a key is currently pressed ``last_toggle`` toggle value of last command ``last_keycode`` keycode of last keypress ``last_protocol`` protocol of last keypress ``last_scancode`` scancode of last keypress ``keyup_jiffies`` time (in jiffies) when the current keypress should be released ``timer_keyup`` timer for releasing a keypress ``timer_repeat`` timer for autorepeat events. This is needed for CEC, which has non-standard repeats. ``timeout`` optional time after which device stops sending data ``min_timeout`` minimum timeout supported by device ``max_timeout`` maximum timeout supported by device ``rx_resolution`` resolution (in us) of input sampler ``lirc_dev`` lirc device ``lirc_cdev`` lirc char cdev ``gap_start`` start time for gap after timeout if non-zero ``lirc_fh_lock`` protects lirc_fh list ``lirc_fh`` list of open files ``change_protocol`` allow changing the protocol used on hardware decoders ``open`` callback to allow drivers to enable polling/irq when IR input device is opened. ``close`` callback to allow drivers to disable polling/irq when IR input device is opened. ``s_tx_mask`` set transmitter mask (for devices with multiple tx outputs) ``s_tx_carrier`` set transmit carrier frequency ``s_tx_duty_cycle`` set transmit duty cycle (0% - 100%) ``s_rx_carrier_range`` inform driver about carrier it is expected to handle ``tx_ir`` transmit IR ``s_idle`` enable/disable hardware idle mode, upon which, device doesn't interrupt host until it sees IR pulses ``s_wideband_receiver`` enable wide band receiver used for learning ``s_carrier_report`` enable carrier reports ``s_filter`` set the scancode filter ``s_wakeup_filter`` set the wakeup scancode filter. If the mask is zero then wakeup should be disabled. wakeup_protocol will be set to a valid protocol if mask is nonzero. ``s_timeout`` set hardware timeout in ush](h)}(h**Definition**::h](j~)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj ubh:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKVhj ubj)}(hX struct rc_dev { struct device dev; bool registered; bool idle; bool encode_wakeup; unsigned int minor; const struct attribute_group *sysfs_groups[5]; const char *device_name; const char *input_phys; struct input_id input_id; const char *driver_name; const char *map_name; struct rc_map rc_map; struct mutex lock; struct ir_raw_event_ctrl *raw; struct input_dev *input_dev; enum rc_driver_type driver_type; u32 users; u64 allowed_protocols; u64 enabled_protocols; u64 allowed_wakeup_protocols; enum rc_proto wakeup_protocol; struct rc_scancode_filter scancode_filter; struct rc_scancode_filter scancode_wakeup_filter; u32 scancode_mask; void *priv; spinlock_t keylock; bool keypressed; u8 last_toggle; u32 last_keycode; enum rc_proto last_protocol; u64 last_scancode; unsigned long keyup_jiffies; struct timer_list timer_keyup; struct timer_list timer_repeat; u32 timeout; u32 min_timeout; u32 max_timeout; u32 rx_resolution; #ifdef CONFIG_LIRC; struct device lirc_dev; struct cdev lirc_cdev; ktime_t gap_start; spinlock_t lirc_fh_lock; struct list_head lirc_fh; #endif; int (*change_protocol)(struct rc_dev *dev, u64 *rc_proto); int (*open)(struct rc_dev *dev); void (*close)(struct rc_dev *dev); int (*s_tx_mask)(struct rc_dev *dev, u32 mask); int (*s_tx_carrier)(struct rc_dev *dev, u32 carrier); int (*s_tx_duty_cycle)(struct rc_dev *dev, u32 duty_cycle); int (*s_rx_carrier_range)(struct rc_dev *dev, u32 min, u32 max); int (*tx_ir)(struct rc_dev *dev, unsigned *txbuf, unsigned n); void (*s_idle)(struct rc_dev *dev, bool enable); int (*s_wideband_receiver)(struct rc_dev *dev, int enable); int (*s_carrier_report) (struct rc_dev *dev, int enable); int (*s_filter)(struct rc_dev *dev, struct rc_scancode_filter *filter); int (*s_wakeup_filter)(struct rc_dev *dev, struct rc_scancode_filter *filter); int (*s_timeout)(struct rc_dev *dev, unsigned int timeout); };h]hX struct rc_dev { struct device dev; bool registered; bool idle; bool encode_wakeup; unsigned int minor; const struct attribute_group *sysfs_groups[5]; const char *device_name; const char *input_phys; struct input_id input_id; const char *driver_name; const char *map_name; struct rc_map rc_map; struct mutex lock; struct ir_raw_event_ctrl *raw; struct input_dev *input_dev; enum rc_driver_type driver_type; u32 users; u64 allowed_protocols; u64 enabled_protocols; u64 allowed_wakeup_protocols; enum rc_proto wakeup_protocol; struct rc_scancode_filter scancode_filter; struct rc_scancode_filter scancode_wakeup_filter; u32 scancode_mask; void *priv; spinlock_t keylock; bool keypressed; u8 last_toggle; u32 last_keycode; enum rc_proto last_protocol; u64 last_scancode; unsigned long keyup_jiffies; struct timer_list timer_keyup; struct timer_list timer_repeat; u32 timeout; u32 min_timeout; u32 max_timeout; u32 rx_resolution; #ifdef CONFIG_LIRC; struct device lirc_dev; struct cdev lirc_cdev; ktime_t gap_start; spinlock_t lirc_fh_lock; struct list_head lirc_fh; #endif; int (*change_protocol)(struct rc_dev *dev, u64 *rc_proto); int (*open)(struct rc_dev *dev); void (*close)(struct rc_dev *dev); int (*s_tx_mask)(struct rc_dev *dev, u32 mask); int (*s_tx_carrier)(struct rc_dev *dev, u32 carrier); int (*s_tx_duty_cycle)(struct rc_dev *dev, u32 duty_cycle); int (*s_rx_carrier_range)(struct rc_dev *dev, u32 min, u32 max); int (*tx_ir)(struct rc_dev *dev, unsigned *txbuf, unsigned n); void (*s_idle)(struct rc_dev *dev, bool enable); int (*s_wideband_receiver)(struct rc_dev *dev, int enable); int (*s_carrier_report) (struct rc_dev *dev, int enable); int (*s_filter)(struct rc_dev *dev, struct rc_scancode_filter *filter); int (*s_wakeup_filter)(struct rc_dev *dev, struct rc_scancode_filter *filter); int (*s_timeout)(struct rc_dev *dev, unsigned int timeout); };}hj sbah}(h]h ]h"]h$]h&]hhuh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKXhj ubh)}(h **Members**h]j~)}(hj- h]hMembers}(hj/ hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj+ ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhj ubj)}(hhh](j)}(h+``dev`` driver model's view of this device h](j)}(h``dev``h]j~)}(hjL h]hdev}(hjN hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjJ ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKThjF ubj)}(hhh]h)}(h"driver model's view of this deviceh]h$driver model’s view of this device}(hje hhhNhNubah}(h]h ]h"]h$]h&]uh1hhja hKThjb ubah}(h]h ]h"]h$]h&]uh1jhjF ubeh}(h]h ]h"]h$]h&]uh1jhja hKThjC ubj)}(hR``registered`` set to true by rc_register_device(), false by rc_unregister_device h](j)}(h``registered``h]j~)}(hj h]h registered}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKVhj ubj)}(hhh]h)}(hBset to true by rc_register_device(), false by rc_unregister_deviceh]hBset to true by rc_register_device(), false by rc_unregister_device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKUhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKVhjC ubj)}(h(``idle`` used to keep track of RX state h](j)}(h``idle``h]j~)}(hj h]hidle}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKWhj ubj)}(hhh]h)}(hused to keep track of RX stateh]hused to keep track of RX state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKWhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKWhjC ubj)}(h}``encode_wakeup`` wakeup filtering uses IR encode API, therefore the allowed wakeup protocols is the set of all raw encoders h](j)}(h``encode_wakeup``h]j~)}(hj h]h encode_wakeup}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKYhj ubj)}(hhh]h)}(hjwakeup filtering uses IR encode API, therefore the allowed wakeup protocols is the set of all raw encodersh]hjwakeup filtering uses IR encode API, therefore the allowed wakeup protocols is the set of all raw encoders}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKXhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKYhjC ubj)}(h4``minor`` unique minor remote control device number h](j)}(h ``minor``h]j~)}(hj2 h]hminor}(hj4 hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj0 ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKZhj, ubj)}(hhh]h)}(h)unique minor remote control device numberh]h)unique minor remote control device number}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjG hKZhjH ubah}(h]h ]h"]h$]h&]uh1jhj, ubeh}(h]h ]h"]h$]h&]uh1jhjG hKZhjC ubj)}(h(``sysfs_groups`` sysfs attribute groups h](j)}(h``sysfs_groups``h]j~)}(hjk h]h sysfs_groups}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hji ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK[hje ubj)}(hhh]h)}(hsysfs attribute groupsh]hsysfs attribute groups}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hK[hj ubah}(h]h ]h"]h$]h&]uh1jhje ubeh}(h]h ]h"]h$]h&]uh1jhj hK[hjC ubj)}(h,``device_name`` name of the rc child device h](j)}(h``device_name``h]j~)}(hj h]h device_name}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK\hj ubj)}(hhh]h)}(hname of the rc child deviceh]hname of the rc child device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hK\hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hK\hjC ubj)}(h7``input_phys`` physical path to the input child device h](j)}(h``input_phys``h]j~)}(hj h]h input_phys}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK]hj ubj)}(hhh]h)}(h'physical path to the input child deviceh]h'physical path to the input child device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hK]hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hK]hjC ubj)}(h<``input_id`` id of the input child device (struct input_id) h](j)}(h ``input_id``h]j~)}(hj h]hinput_id}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK^hj ubj)}(hhh]h)}(h.id of the input child device (struct input_id)h]h.id of the input child device (struct input_id)}(hj/ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+ hK^hj, ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj+ hK^hjC ubj)}(hI``driver_name`` name of the hardware driver which registered this device h](j)}(h``driver_name``h]j~)}(hjO h]h driver_name}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjM ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK_hjI ubj)}(hhh]h)}(h8name of the hardware driver which registered this deviceh]h8name of the hardware driver which registered this device}(hjh hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjd hK_hje ubah}(h]h ]h"]h$]h&]uh1jhjI ubeh}(h]h ]h"]h$]h&]uh1jhjd hK_hjC ubj)}(h(``map_name`` name of the default keymap h](j)}(h ``map_name``h]j~)}(hj h]hmap_name}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK`hj ubj)}(hhh]h)}(hname of the default keymaph]hname of the default keymap}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hK`hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hK`hjC ubj)}(h"``rc_map`` current scan/key table h](j)}(h ``rc_map``h]j~)}(hj h]hrc_map}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKahj ubj)}(hhh]h)}(hcurrent scan/key tableh]hcurrent scan/key table}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKahj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKahjC ubj)}(hv``lock`` used to ensure we've filled in all protocol details before anyone can call show_protocols or store_protocols h](j)}(h``lock``h]j~)}(hj h]hlock}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKchj ubj)}(hhh]h)}(hlused to ensure we've filled in all protocol details before anyone can call show_protocols or store_protocolsh]hnused to ensure we’ve filled in all protocol details before anyone can call show_protocols or store_protocols}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKbhjubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhjhKchjC ubj)}(h4``raw`` additional data for raw pulse/space devices h](j)}(h``raw``h]j~)}(hj4h]hraw}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj2ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKdhj.ubj)}(hhh]h)}(h+additional data for raw pulse/space devicesh]h+additional data for raw pulse/space devices}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhKdhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhKdhjC ubj)}(hM``input_dev`` the input child device used to communicate events to userspace h](j)}(h ``input_dev``h]j~)}(hjmh]h input_dev}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjkubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKehjgubj)}(hhh]h)}(h>the input child device used to communicate events to userspaceh]h>the input child device used to communicate events to userspace}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKehjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhKehjC ubj)}(hO``driver_type`` specifies if protocol decoding is done in hardware or software h](j)}(h``driver_type``h]j~)}(hjh]h driver_type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKfhjubj)}(hhh]h)}(h>specifies if protocol decoding is done in hardware or softwareh]h>specifies if protocol decoding is done in hardware or software}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKfhjC ubj)}(h0``users`` number of current users of the device h](j)}(h ``users``h]j~)}(hjh]husers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKghjubj)}(hhh]h)}(h%number of current users of the deviceh]h%number of current users of the device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKghjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKghjC ubj)}(hJ``allowed_protocols`` bitmask with the supported RC_PROTO_BIT_* protocols h](j)}(h``allowed_protocols``h]j~)}(hjh]hallowed_protocols}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhhjubj)}(hhh]h)}(h3bitmask with the supported RC_PROTO_BIT_* protocolsh]h3bitmask with the supported RC_PROTO_BIT_* protocols}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hKhhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hKhhjC ubj)}(hH``enabled_protocols`` bitmask with the enabled RC_PROTO_BIT_* protocols h](j)}(h``enabled_protocols``h]j~)}(hjQh]henabled_protocols}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjOubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKihjKubj)}(hhh]h)}(h1bitmask with the enabled RC_PROTO_BIT_* protocolsh]h1bitmask with the enabled RC_PROTO_BIT_* protocols}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhKihjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhKihjC ubj)}(hX``allowed_wakeup_protocols`` bitmask with the supported RC_PROTO_BIT_* wakeup protocols h](j)}(h``allowed_wakeup_protocols``h]j~)}(hjh]hallowed_wakeup_protocols}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKkhjubj)}(hhh]h)}(h:bitmask with the supported RC_PROTO_BIT_* wakeup protocolsh]h:bitmask with the supported RC_PROTO_BIT_* wakeup protocols}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKjhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKkhjC ubj)}(h\``wakeup_protocol`` the enabled RC_PROTO_* wakeup protocol or RC_PROTO_UNKNOWN if disabled. h](j)}(h``wakeup_protocol``h]j~)}(hjh]hwakeup_protocol}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKmhjubj)}(hhh]h)}(hGthe enabled RC_PROTO_* wakeup protocol or RC_PROTO_UNKNOWN if disabled.h]hGthe enabled RC_PROTO_* wakeup protocol or RC_PROTO_UNKNOWN if disabled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKlhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKmhjC ubj)}(h$``scancode_filter`` scancode filter h](j)}(h``scancode_filter``h]j~)}(hjh]hscancode_filter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKnhjubj)}(hhh]h)}(hscancode filterh]hscancode filter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKnhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKnhjC ubj)}(h3``scancode_wakeup_filter`` scancode wakeup filters h](j)}(h``scancode_wakeup_filter``h]j~)}(hj7h]hscancode_wakeup_filter}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj5ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKohj1ubj)}(hhh]h)}(hscancode wakeup filtersh]hscancode wakeup filters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhKohjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhKohjC ubj)}(hX@``scancode_mask`` some hardware decoders are not capable of providing the full scancode to the application. As this is a hardware limit, we can't do anything with it. Yet, as the same keycode table can be used with other devices, a mask is provided to allow its usage. Drivers should generally leave this field in blank h](j)}(h``scancode_mask``h]j~)}(hjph]h scancode_mask}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjnubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKthjjubj)}(hhh]h)}(hX-some hardware decoders are not capable of providing the full scancode to the application. As this is a hardware limit, we can't do anything with it. Yet, as the same keycode table can be used with other devices, a mask is provided to allow its usage. Drivers should generally leave this field in blankh]hX/some hardware decoders are not capable of providing the full scancode to the application. As this is a hardware limit, we can’t do anything with it. Yet, as the same keycode table can be used with other devices, a mask is provided to allow its usage. Drivers should generally leave this field in blank}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKphjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhKthjC ubj)}(h``priv`` driver-specific data h](j)}(h``priv``h]j~)}(hjh]hpriv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKuhjubj)}(hhh]h)}(hdriver-specific datah]hdriver-specific data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKuhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKuhjC ubj)}(h9``keylock`` protects the remaining members of the struct h](j)}(h ``keylock``h]j~)}(hjh]hkeylock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKvhjubj)}(hhh]h)}(h,protects the remaining members of the structh]h,protects the remaining members of the struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKvhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKvhjC ubj)}(h2``keypressed`` whether a key is currently pressed h](j)}(h``keypressed``h]j~)}(hjh]h keypressed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKwhjubj)}(hhh]h)}(h"whether a key is currently pressedh]h"whether a key is currently pressed}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hKwhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj1hKwhjC ubj)}(h-``last_toggle`` toggle value of last command h](j)}(h``last_toggle``h]j~)}(hjUh]h last_toggle}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjSubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKxhjOubj)}(hhh]h)}(htoggle value of last commandh]htoggle value of last command}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhKxhjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjjhKxhjC ubj)}(h*``last_keycode`` keycode of last keypress h](j)}(h``last_keycode``h]j~)}(hjh]h last_keycode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKyhjubj)}(hhh]h)}(hkeycode of last keypressh]hkeycode of last keypress}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKyhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKyhjC ubj)}(h,``last_protocol`` protocol of last keypress h](j)}(h``last_protocol``h]j~)}(hjh]h last_protocol}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKzhjubj)}(hhh]h)}(hprotocol of last keypressh]hprotocol of last keypress}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKzhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKzhjC ubj)}(h,``last_scancode`` scancode of last keypress h](j)}(h``last_scancode``h]j~)}(hjh]h last_scancode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK{hjubj)}(hhh]h)}(hscancode of last keypressh]hscancode of last keypress}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK{hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK{hjC ubj)}(hQ``keyup_jiffies`` time (in jiffies) when the current keypress should be released h](j)}(h``keyup_jiffies``h]j~)}(hj9h]h keyup_jiffies}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj7ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK|hj3ubj)}(hhh]h)}(h>time (in jiffies) when the current keypress should be releasedh]h>time (in jiffies) when the current keypress should be released}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhK|hjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhK|hjC ubj)}(h/``timer_keyup`` timer for releasing a keypress h](j)}(h``timer_keyup``h]j~)}(hjrh]h timer_keyup}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjpubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK}hjlubj)}(hhh]h)}(htimer for releasing a keypressh]htimer for releasing a keypress}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK}hjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhK}hjC ubj)}(hf``timer_repeat`` timer for autorepeat events. This is needed for CEC, which has non-standard repeats. h](j)}(h``timer_repeat``h]j~)}(hjh]h timer_repeat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjubj)}(hhh]h)}(hTtimer for autorepeat events. This is needed for CEC, which has non-standard repeats.h]hTtimer for autorepeat events. This is needed for CEC, which has non-standard repeats.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhK~hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjC ubj)}(h@``timeout`` optional time after which device stops sending data h](j)}(h ``timeout``h]j~)}(hjh]htimeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjubj)}(hhh]h)}(h3optional time after which device stops sending datah]h3optional time after which device stops sending data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjC ubj)}(h4``min_timeout`` minimum timeout supported by device h](j)}(h``min_timeout``h]j~)}(hjh]h min_timeout}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjubj)}(hhh]h)}(h#minimum timeout supported by deviceh]h#minimum timeout supported by device}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hKhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hKhjC ubj)}(h4``max_timeout`` maximum timeout supported by device h](j)}(h``max_timeout``h]j~)}(hjWh]h max_timeout}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjUubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjQubj)}(hhh]h)}(h#maximum timeout supported by deviceh]h#maximum timeout supported by device}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhKhjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhKhjC ubj)}(h6``rx_resolution`` resolution (in us) of input sampler h](j)}(h``rx_resolution``h]j~)}(hjh]h rx_resolution}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjubj)}(hhh]h)}(h#resolution (in us) of input samplerh]h#resolution (in us) of input sampler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjC ubj)}(h``lirc_dev`` lirc device h](j)}(h ``lirc_dev``h]j~)}(hjh]hlirc_dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjubj)}(hhh]h)}(h lirc deviceh]h lirc device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjC ubj)}(h``lirc_cdev`` lirc char cdev h](j)}(h ``lirc_cdev``h]j~)}(hjh]h lirc_cdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjubj)}(hhh]h)}(hlirc char cdevh]hlirc char cdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjC ubj)}(h;``gap_start`` start time for gap after timeout if non-zero h](j)}(h ``gap_start``h]j~)}(hj;h]h gap_start}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj9ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhj5ubj)}(hhh]h)}(h,start time for gap after timeout if non-zeroh]h,start time for gap after timeout if non-zero}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhKhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhKhjC ubj)}(h'``lirc_fh_lock`` protects lirc_fh list h](j)}(h``lirc_fh_lock``h]j~)}(hjth]h lirc_fh_lock}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjrubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjnubj)}(hhh]h)}(hprotects lirc_fh listh]hprotects lirc_fh list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhKhjC ubj)}(h``lirc_fh`` list of open files h](j)}(h ``lirc_fh``h]j~)}(hjh]hlirc_fh}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjubj)}(hhh]h)}(hlist of open filesh]hlist of open files}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjC ubj)}(hJ``change_protocol`` allow changing the protocol used on hardware decoders h](j)}(h``change_protocol``h]j~)}(hjh]hchange_protocol}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjubj)}(hhh]h)}(h5allow changing the protocol used on hardware decodersh]h5allow changing the protocol used on hardware decoders}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjC ubj)}(hY``open`` callback to allow drivers to enable polling/irq when IR input device is opened. h](j)}(h``open``h]j~)}(hjh]hopen}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjubj)}(hhh]h)}(hOcallback to allow drivers to enable polling/irq when IR input device is opened.h]hOcallback to allow drivers to enable polling/irq when IR input device is opened.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hKhjC ubj)}(h[``close`` callback to allow drivers to disable polling/irq when IR input device is opened. h](j)}(h ``close``h]j~)}(hjYh]hclose}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjWubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjSubj)}(hhh]h)}(hPcallback to allow drivers to disable polling/irq when IR input device is opened.h]hPcallback to allow drivers to disable polling/irq when IR input device is opened.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjnhKhjC ubj)}(hJ``s_tx_mask`` set transmitter mask (for devices with multiple tx outputs) h](j)}(h ``s_tx_mask``h]j~)}(hjh]h s_tx_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjubj)}(hhh]h)}(h;set transmitter mask (for devices with multiple tx outputs)h]h;set transmitter mask (for devices with multiple tx outputs)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjC ubj)}(h0``s_tx_carrier`` set transmit carrier frequency h](j)}(h``s_tx_carrier``h]j~)}(hjh]h s_tx_carrier}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjubj)}(hhh]h)}(hset transmit carrier frequencyh]hset transmit carrier frequency}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjC ubj)}(h8``s_tx_duty_cycle`` set transmit duty cycle (0% - 100%) h](j)}(h``s_tx_duty_cycle``h]j~)}(hjh]hs_tx_duty_cycle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjubj)}(hhh]h)}(h#set transmit duty cycle (0% - 100%)h]h#set transmit duty cycle (0% - 100%)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjC ubj)}(hL``s_rx_carrier_range`` inform driver about carrier it is expected to handle h](j)}(h``s_rx_carrier_range``h]j~)}(hj>h]hs_rx_carrier_range}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj<ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhj8ubj)}(hhh]h)}(h4inform driver about carrier it is expected to handleh]h4inform driver about carrier it is expected to handle}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShKhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShKhjC ubj)}(h``tx_ir`` transmit IR h](j)}(h ``tx_ir``h]j~)}(hjwh]htx_ir}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjuubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjqubj)}(hhh]h)}(h transmit IRh]h transmit IR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhKhjC ubj)}(hp``s_idle`` enable/disable hardware idle mode, upon which, device doesn't interrupt host until it sees IR pulses h](j)}(h ``s_idle``h]j~)}(hjh]hs_idle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjubj)}(hhh]h)}(hdenable/disable hardware idle mode, upon which, device doesn't interrupt host until it sees IR pulsesh]hfenable/disable hardware idle mode, upon which, device doesn’t interrupt host until it sees IR pulses}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjC ubj)}(hD``s_wideband_receiver`` enable wide band receiver used for learning h](j)}(h``s_wideband_receiver``h]j~)}(hjh]hs_wideband_receiver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjubj)}(hhh]h)}(h+enable wide band receiver used for learningh]h+enable wide band receiver used for learning}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjC ubj)}(h,``s_carrier_report`` enable carrier reports h](j)}(h``s_carrier_report``h]j~)}(hj#h]hs_carrier_report}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj!ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjubj)}(hhh]h)}(henable carrier reportsh]henable carrier reports}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hKhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hKhjC ubj)}(h%``s_filter`` set the scancode filter h](j)}(h ``s_filter``h]j~)}(hj\h]hs_filter}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjZubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjVubj)}(hhh]h)}(hset the scancode filterh]hset the scancode filter}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhKhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhKhjC ubj)}(h``s_wakeup_filter`` set the wakeup scancode filter. If the mask is zero then wakeup should be disabled. wakeup_protocol will be set to a valid protocol if mask is nonzero. h](j)}(h``s_wakeup_filter``h]j~)}(hjh]hs_wakeup_filter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjubj)}(hhh]h)}(hset the wakeup scancode filter. If the mask is zero then wakeup should be disabled. wakeup_protocol will be set to a valid protocol if mask is nonzero.h]hset the wakeup scancode filter. If the mask is zero then wakeup should be disabled. wakeup_protocol will be set to a valid protocol if mask is nonzero.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjC ubj)}(h(``s_timeout`` set hardware timeout in ush](j)}(h ``s_timeout``h]j~)}(hjh]h s_timeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjubj)}(hhh]h)}(hset hardware timeout in ush]hset hardware timeout in us}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjC ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jshjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrc_allocate_device (C function)c.rc_allocate_devicehNtauh1jhjhhhNhNubj)}(hhh](j)}(h8struct rc_dev * rc_allocate_device (enum rc_driver_type)h]j)}(h6struct rc_dev *rc_allocate_device(enum rc_driver_type)h](j)}(hjrh]hstruct}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKubj )}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%hhhj6hKubh)}(hhh]j!)}(hrc_devh]hrc_dev}(hjHhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hjEubah}(h]h ]h"]h$]h&] refdomainjreftype identifier reftargetjJmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]jc ASTIdentifier)}j^rc_allocate_devicesbc.rc_allocate_deviceasbuh1hhj%hhhj6hKubj )}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%hhhj6hKubhdesc_sig_punctuation)}(h*h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhj%hhhj6hKubj)}(hrc_allocate_deviceh]j!)}(hjnh]hrc_allocate_device}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hjubah}(h]h ](j3j4eh"]h$]h&]hhuh1jhj%hhhj6hKubhdesc_parameterlist)}(h(enum rc_driver_type)h]hdesc_parameter)}(henum rc_driver_typeh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j!)}(hrc_driver_typeh]hrc_driver_type}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&] refdomainjreftypej^ reftargetjmodnameN classnameNjbje)}jh]jlc.rc_allocate_deviceasbuh1hhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhj%hhhj6hKubeh}(h]h ]h"]h$]h&]hhj>uh1jj?j@hj!hhhj6hKubah}(h]jah ](jDjEeh"]h$]h&]jIjJ)jKhuh1jhj6hKhjhhubjM)}(hhh]h)}(hAllocates a RC deviceh]hAllocates a RC device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jLhjhhhj6hKubeh}(h]h ](jfunctioneh"]h$]h&]jmjjnj#joj#jpjqjruh1jhhhjhNhNubjt)}(h**Parameters** ``enum rc_driver_type`` specifies the type of the RC output to be allocated returns a pointer to struct rc_dev.h](h)}(h**Parameters**h]j~)}(hj-h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj+ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhj'ubj)}(hhh]j)}(ho``enum rc_driver_type`` specifies the type of the RC output to be allocated returns a pointer to struct rc_dev.h](j)}(h``enum rc_driver_type``h]j~)}(hjLh]henum rc_driver_type}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjJubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjFubj)}(hhh]h)}(hWspecifies the type of the RC output to be allocated returns a pointer to struct rc_dev.h]hWspecifies the type of the RC output to be allocated returns a pointer to struct rc_dev.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahKhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahKhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jshjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$devm_rc_allocate_device (C function)c.devm_rc_allocate_devicehNtauh1jhjhhhNhNubj)}(hhh](j)}(hQstruct rc_dev * devm_rc_allocate_device (struct device *dev, enum rc_driver_type)h]j)}(hOstruct rc_dev *devm_rc_allocate_device(struct device *dev, enum rc_driver_type)h](j)}(hjrh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKubj )}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhKubh)}(hhh]j!)}(hrc_devh]hrc_dev}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&] refdomainjreftypej^ reftargetjmodnameN classnameNjbje)}jh]jk)}j^devm_rc_allocate_devicesbc.devm_rc_allocate_deviceasbuh1hhjhhhjhKubj )}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhKubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hdevm_rc_allocate_deviceh]j!)}(hjh]hdevm_rc_allocate_device}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hjubah}(h]h ](j3j4eh"]h$]h&]hhuh1jhjhhhjhKubj)}(h)(struct device *dev, enum rc_driver_type)h](j)}(hstruct device *devh](j)}(hjrh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j!)}(hdeviceh]hdevice}(hj=hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hj:ubah}(h]h ]h"]h$]h&] refdomainjreftypej^ reftargetj?modnameN classnameNjbje)}jh]jc.devm_rc_allocate_deviceasbuh1hhjubj )}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj!)}(hdevh]hdev}(hjvhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(henum rc_driver_typeh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j!)}(hrc_driver_typeh]hrc_driver_type}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&] refdomainjreftypej^ reftargetjmodnameN classnameNjbje)}jh]jc.devm_rc_allocate_deviceasbuh1hhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhj>uh1jj?j@hjhhhjhKubah}(h]jah ](jDjEeh"]h$]h&]jIjJ)jKhuh1jhjhKhjhhubjM)}(hhh]h)}(hManaged RC device allocationh]hManaged RC device allocation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jLhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jmjjnjjojjpjqjruh1jhhhjhNhNubjt)}(h**Parameters** ``struct device *dev`` pointer to struct device ``enum rc_driver_type`` specifies the type of the RC output to be allocated returns a pointer to struct rc_dev.h](h)}(h**Parameters**h]j~)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjubj)}(hhh](j)}(h0``struct device *dev`` pointer to struct device h](j)}(h``struct device *dev``h]j~)}(hj(h]hstruct device *dev}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj&ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhj"ubj)}(hhh]h)}(hpointer to struct deviceh]hpointer to struct device}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hKhj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hKhjubj)}(ho``enum rc_driver_type`` specifies the type of the RC output to be allocated returns a pointer to struct rc_dev.h](j)}(h``enum rc_driver_type``h]j~)}(hjah]henum rc_driver_type}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj_ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhj[ubj)}(hhh]h)}(hWspecifies the type of the RC output to be allocated returns a pointer to struct rc_dev.h]hWspecifies the type of the RC output to be allocated returns a pointer to struct rc_dev.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhKhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jshjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrc_free_device (C function)c.rc_free_devicehNtauh1jhjhhhNhNubj)}(hhh](j)}(h(void rc_free_device (struct rc_dev *dev)h]j)}(h'void rc_free_device(struct rc_dev *dev)h](hdesc_sig_keyword_type)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKubj )}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhKubj)}(hrc_free_deviceh]j!)}(hrc_free_deviceh]hrc_free_device}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hjubah}(h]h ](j3j4eh"]h$]h&]hhuh1jhjhhhjhKubj)}(h(struct rc_dev *dev)h]j)}(hstruct rc_dev *devh](j)}(hjrh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j!)}(hrc_devh]hrc_dev}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&] refdomainjreftypej^ reftargetjmodnameN classnameNjbje)}jh]jk)}j^jsbc.rc_free_deviceasbuh1hhjubj )}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj!)}(hdevh]hdev}(hjShhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhj>uh1jj?j@hjhhhjhKubah}(h]jah ](jDjEeh"]h$]h&]jIjJ)jKhuh1jhjhKhjhhubjM)}(hhh]h)}(hFrees a RC deviceh]hFrees a RC device}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjzhhubah}(h]h ]h"]h$]h&]uh1jLhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jmjjnjjojjpjqjruh1jhhhjhNhNubjt)}(hB**Parameters** ``struct rc_dev *dev`` pointer to struct rc_dev.h](h)}(h**Parameters**h]j~)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjubj)}(hhh]j)}(h0``struct rc_dev *dev`` pointer to struct rc_dev.h](j)}(h``struct rc_dev *dev``h]j~)}(hjh]hstruct rc_dev *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjubj)}(hhh]h)}(hpointer to struct rc_dev.h]hpointer to struct rc_dev.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jshjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrc_register_device (C function)c.rc_register_devicehNtauh1jhjhhhNhNubj)}(hhh](j)}(h+int rc_register_device (struct rc_dev *dev)h]j)}(h*int rc_register_device(struct rc_dev *dev)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKubj )}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj&hKubj)}(hrc_register_deviceh]j!)}(hrc_register_deviceh]hrc_register_device}(hj9hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hj5ubah}(h]h ](j3j4eh"]h$]h&]hhuh1jhjhhhj&hKubj)}(h(struct rc_dev *dev)h]j)}(hstruct rc_dev *devh](j)}(hjrh]hstruct}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj )}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjQubh)}(hhh]j!)}(hrc_devh]hrc_dev}(hjshhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hjpubah}(h]h ]h"]h$]h&] refdomainjreftypej^ reftargetjumodnameN classnameNjbje)}jh]jk)}j^j;sbc.rc_register_deviceasbuh1hhjQubj )}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjQubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj!)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hjQubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjMubah}(h]h ]h"]h$]h&]hhuh1jhjhhhj&hKubeh}(h]h ]h"]h$]h&]hhj>uh1jj?j@hjhhhj&hKubah}(h]j ah ](jDjEeh"]h$]h&]jIjJ)jKhuh1jhj&hKhj hhubjM)}(hhh]h)}(hRegisters a RC deviceh]hRegisters a RC device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jLhj hhhj&hKubeh}(h]h ](jfunctioneh"]h$]h&]jmjjnjjojjpjqjruh1jhhhjhNhNubjt)}(hB**Parameters** ``struct rc_dev *dev`` pointer to struct rc_dev.h](h)}(h**Parameters**h]j~)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhMhjubj)}(hhh]j)}(h0``struct rc_dev *dev`` pointer to struct rc_dev.h](j)}(h``struct rc_dev *dev``h]j~)}(hjh]hstruct rc_dev *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhMhjubj)}(hhh]h)}(hpointer to struct rc_dev.h]hpointer to struct rc_dev.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhMhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jshjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$devm_rc_register_device (C function)c.devm_rc_register_devicehNtauh1jhjhhhNhNubj)}(hhh](j)}(hGint devm_rc_register_device (struct device *parent, struct rc_dev *dev)h]j)}(hFint devm_rc_register_device(struct device *parent, struct rc_dev *dev)h](j)}(hinth]hint}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhMubj )}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjohhhjhMubj)}(hdevm_rc_register_deviceh]j!)}(hdevm_rc_register_deviceh]hdevm_rc_register_device}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hjubah}(h]h ](j3j4eh"]h$]h&]hhuh1jhjohhhjhMubj)}(h+(struct device *parent, struct rc_dev *dev)h](j)}(hstruct device *parenth](j)}(hjrh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j!)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&] refdomainjreftypej^ reftargetjmodnameN classnameNjbje)}jh]jk)}j^jsbc.devm_rc_register_deviceasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj!)}(hparenth]hparent}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct rc_dev *devh](j)}(hjrh]hstruct}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j!)}(hrc_devh]hrc_dev}(hj@hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej^ reftargetjBmodnameN classnameNjbje)}jh]jc.devm_rc_register_deviceasbuh1hhjubj )}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj!)}(hdevh]hdev}(hjyhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjohhhjhMubeh}(h]h ]h"]h$]h&]hhj>uh1jj?j@hjkhhhjhMubah}(h]jfah ](jDjEeh"]h$]h&]jIjJ)jKhuh1jhjhMhjhhhubjM)}(hhh]h)}(h$Manageded registering of a RC deviceh]h$Manageded registering of a RC device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jLhjhhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jmjjnjjojjpjqjruh1jhhhjhNhNubjt)}(hy**Parameters** ``struct device *parent`` pointer to struct device. ``struct rc_dev *dev`` pointer to struct rc_dev.h](h)}(h**Parameters**h]j~)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhM hjubj)}(hhh](j)}(h4``struct device *parent`` pointer to struct device. h](j)}(h``struct device *parent``h]j~)}(hjh]hstruct device *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhMhjubj)}(hhh]h)}(hpointer to struct device.h]hpointer to struct device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h0``struct rc_dev *dev`` pointer to struct rc_dev.h](j)}(h``struct rc_dev *dev``h]j~)}(hj h]hstruct rc_dev *dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhM hj ubj)}(hhh]h)}(hpointer to struct rc_dev.h]hpointer to struct rc_dev.}(hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhM hj3 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj2 hM hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jshjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!rc_unregister_device (C function)c.rc_unregister_devicehNtauh1jhjhhhNhNubj)}(hhh](j)}(h.void rc_unregister_device (struct rc_dev *dev)h]j)}(h-void rc_unregister_device(struct rc_dev *dev)h](j)}(hvoidh]hvoid}(hjw hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhMubj )}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjs hhhj hMubj)}(hrc_unregister_deviceh]j!)}(hrc_unregister_deviceh]hrc_unregister_device}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hj ubah}(h]h ](j3j4eh"]h$]h&]hhuh1jhjs hhhj hMubj)}(h(struct rc_dev *dev)h]j)}(hstruct rc_dev *devh](j)}(hjrh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj )}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubh)}(hhh]j!)}(hrc_devh]hrc_dev}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej^ reftargetj modnameN classnameNjbje)}jh]jk)}j^j sbc.rc_unregister_deviceasbuh1hhj ubj )}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj)}(hjh]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj!)}(hdevh]hdev}(hj !hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubah}(h]h ]h"]h$]h&]hhuh1jhjs hhhj hMubeh}(h]h ]h"]h$]h&]hhj>uh1jj?j@hjo hhhj hMubah}(h]jj ah ](jDjEeh"]h$]h&]jIjJ)jKhuh1jhj hMhjl hhubjM)}(hhh]h)}(hUnregisters a RC deviceh]hUnregisters a RC device}(hj7!hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhMhj4!hhubah}(h]h ]h"]h$]h&]uh1jLhjl hhhj hMubeh}(h]h ](jfunctioneh"]h$]h&]jmjjnjO!jojO!jpjqjruh1jhhhjhNhNubjt)}(hB**Parameters** ``struct rc_dev *dev`` pointer to struct rc_dev.h](h)}(h**Parameters**h]j~)}(hjY!h]h Parameters}(hj[!hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjW!ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhMhjS!ubj)}(hhh]j)}(h0``struct rc_dev *dev`` pointer to struct rc_dev.h](j)}(h``struct rc_dev *dev``h]j~)}(hjx!h]hstruct rc_dev *dev}(hjz!hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjv!ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhMhjr!ubj)}(hhh]h)}(hpointer to struct rc_dev.h]hpointer to struct rc_dev.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:86: ./include/media/rc-core.hhMhj!ubah}(h]h ]h"]h$]h&]uh1jhjr!ubeh}(h]h ]h"]h$]h&]uh1jhj!hMhjo!ubah}(h]h ]h"]h$]h&]uh1jhjS!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jshjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrc_map_table (C struct)c.rc_map_tablehNtauh1jhjhhhNhNubj)}(hhh](j)}(h rc_map_tableh]j)}(hstruct rc_map_tableh](j)}(hjrh]hstruct}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKubj )}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!hhhj!hKubj)}(h rc_map_tableh]j!)}(hj!h]h rc_map_table}(hj!hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hj!ubah}(h]h ](j3j4eh"]h$]h&]hhuh1jhj!hhhj!hKubeh}(h]h ]h"]h$]h&]hhj>uh1jj?j@hj!hhhj!hKubah}(h]j!ah ](jDjEeh"]h$]h&]jIjJ)jKhuh1jhj!hKhj!hhubjM)}(hhh]h)}(h"represents a scancode/keycode pairh]h"represents a scancode/keycode pair}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhj"hhubah}(h]h ]h"]h$]h&]uh1jLhj!hhhj!hKubeh}(h]h ](jstructeh"]h$]h&]jmjjnj,"joj,"jpjqjruh1jhhhjhNhNubjt)}(h**Definition**:: struct rc_map_table { u64 scancode; u32 keycode; }; **Members** ``scancode`` scan code (u64) ``keycode`` Linux input keycodeh](h)}(h**Definition**::h](j~)}(h**Definition**h]h Definition}(hj8"hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj4"ubh:}(hj4"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhj0"ubj)}(h;struct rc_map_table { u64 scancode; u32 keycode; };h]h;struct rc_map_table { u64 scancode; u32 keycode; };}hjQ"sbah}(h]h ]h"]h$]h&]hhuh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhj0"ubh)}(h **Members**h]j~)}(hjb"h]hMembers}(hjd"hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj`"ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhj0"ubj)}(hhh](j)}(h``scancode`` scan code (u64) h](j)}(h ``scancode``h]j~)}(hj"h]hscancode}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj"ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhj{"ubj)}(hhh]h)}(hscan code (u64)h]hscan code (u64)}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hKhj"ubah}(h]h ]h"]h$]h&]uh1jhj{"ubeh}(h]h ]h"]h$]h&]uh1jhj"hKhjx"ubj)}(h``keycode`` Linux input keycodeh](j)}(h ``keycode``h]j~)}(hj"h]hkeycode}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj"ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhj"ubj)}(hhh]h)}(hLinux input keycodeh]hLinux input keycode}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hKhjx"ubeh}(h]h ]h"]h$]h&]uh1jhj0"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jshjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrc_map (C struct)c.rc_maphNtauh1jhjhhhNhNubj)}(hhh](j)}(hrc_maph]j)}(h struct rc_maph](j)}(hjrh]hstruct}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKubj )}(h h]h }(hj"#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#hhhj!#hKubj)}(hrc_maph]j!)}(hj#h]hrc_map}(hj4#hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hj0#ubah}(h]h ](j3j4eh"]h$]h&]hhuh1jhj#hhhj!#hKubeh}(h]h ]h"]h$]h&]hhj>uh1jj?j@hj #hhhj!#hKubah}(h]j#ah ](jDjEeh"]h$]h&]jIjJ)jKhuh1jhj!#hKhj #hhubjM)}(hhh]h)}(hrepresents a keycode map tableh]hrepresents a keycode map table}(hjV#hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhjS#hhubah}(h]h ]h"]h$]h&]uh1jLhj #hhhj!#hKubeh}(h]h ](jstructeh"]h$]h&]jmjjnjn#jojn#jpjqjruh1jhhhjhNhNubjt)}(hX**Definition**:: struct rc_map { struct rc_map_table *scan; unsigned int size; unsigned int len; unsigned int alloc; enum rc_proto rc_proto; const char *name; spinlock_t lock; }; **Members** ``scan`` pointer to struct :c:type:`rc_map_table` ``size`` Max number of entries ``len`` Number of entries that are in use ``alloc`` size of \*scan, in bytes ``rc_proto`` type of the remote controller protocol, as defined at enum :c:type:`rc_proto` ``name`` name of the key map table ``lock`` lock to protect access to this structureh](h)}(h**Definition**::h](j~)}(h**Definition**h]h Definition}(hjz#hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjv#ubh:}(hjv#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhjr#ubj)}(hstruct rc_map { struct rc_map_table *scan; unsigned int size; unsigned int len; unsigned int alloc; enum rc_proto rc_proto; const char *name; spinlock_t lock; };h]hstruct rc_map { struct rc_map_table *scan; unsigned int size; unsigned int len; unsigned int alloc; enum rc_proto rc_proto; const char *name; spinlock_t lock; };}hj#sbah}(h]h ]h"]h$]h&]hhuh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhjr#ubh)}(h **Members**h]j~)}(hj#h]hMembers}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj#ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhjr#ubj)}(hhh](j)}(h2``scan`` pointer to struct :c:type:`rc_map_table` h](j)}(h``scan``h]j~)}(hj#h]hscan}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj#ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhj#ubj)}(hhh]h)}(h(pointer to struct :c:type:`rc_map_table`h](hpointer to struct }(hj#hhhNhNubh)}(h:c:type:`rc_map_table`h]j~)}(hj#h]h rc_map_table}(hj#hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j}hj#ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjbje)}jh]sbj rc_map_tableuh1hhj#hKhj#ubeh}(h]h ]h"]h$]h&]uh1hhj#hKhj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hKhj#ubj)}(h``size`` Max number of entries h](j)}(h``size``h]j~)}(hj$h]hsize}(hj $hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj$ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhj$ubj)}(hhh]h)}(hMax number of entriesh]hMax number of entries}(hj7$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3$hKhj4$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj3$hKhj#ubj)}(h*``len`` Number of entries that are in use h](j)}(h``len``h]j~)}(hjW$h]hlen}(hjY$hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjU$ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhjQ$ubj)}(hhh]h)}(h!Number of entries that are in useh]h!Number of entries that are in use}(hjp$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjl$hKhjm$ubah}(h]h ]h"]h$]h&]uh1jhjQ$ubeh}(h]h ]h"]h$]h&]uh1jhjl$hKhj#ubj)}(h#``alloc`` size of \*scan, in bytes h](j)}(h ``alloc``h]j~)}(hj$h]halloc}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj$ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhj$ubj)}(hhh]h)}(hsize of \*scan, in bytesh]hsize of *scan, in bytes}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hKhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hKhj#ubj)}(h[``rc_proto`` type of the remote controller protocol, as defined at enum :c:type:`rc_proto` h](j)}(h ``rc_proto``h]j~)}(hj$h]hrc_proto}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj$ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhj$ubj)}(hhh]h)}(hMtype of the remote controller protocol, as defined at enum :c:type:`rc_proto`h](h;type of the remote controller protocol, as defined at enum }(hj$hhhNhNubh)}(h:c:type:`rc_proto`h]j~)}(hj$h]hrc_proto}(hj$hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j}hj$ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjbj$jrc_protouh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhj$ubeh}(h]h ]h"]h$]h&]uh1hhj %hKhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hKhj#ubj)}(h#``name`` name of the key map table h](j)}(h``name``h]j~)}(hj"%h]hname}(hj$%hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj %ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhj%ubj)}(hhh]h)}(hname of the key map tableh]hname of the key map table}(hj;%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7%hKhj8%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj7%hKhj#ubj)}(h1``lock`` lock to protect access to this structureh](j)}(h``lock``h]j~)}(hj[%h]hlock}(hj]%hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjY%ubaFOh}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhjU%ubj)}(hhh]h)}(h(lock to protect access to this structureh]h(lock to protect access to this structure}(hjt%hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhjq%ubah}(h]h ]h"]h$]h&]uh1jhjU%ubeh}(h]h ]h"]h$]h&]uh1jhjp%hKhj#ubeh}(h]h ]h"]h$]h&]uh1jhjr#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jshjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrc_map_list (C struct) c.rc_map_listhNtauh1jhjhhhNhNubj)}(hhh](j)}(h rc_map_listh]j)}(hstruct rc_map_listh](j)}(hjrh]hstruct}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKubj )}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%hhhj%hKubj)}(h rc_map_listh]j!)}(hj%h]h rc_map_list}(hj%hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hj%ubah}(h]h ](j3j4eh"]h$]h&]hhuh1jhj%hhhj%hKubeh}(h]h ]h"]h$]h&]hhj>uh1jj?j@hj%hhhj%hKubah}(h]j%ah ](jDjEeh"]h$]h&]jIjJ)jKhuh1jhj%hKhj%hhubjM)}(hhh]h)}(h,list of the registered :c:type:`rc_map` mapsh](hlist of the registered }(hj%hhhNhNubh)}(h:c:type:`rc_map`h]j~)}(hj&h]hrc_map}(hj&hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j}hj%ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjbje)}jh]jk)}j^j%sb c.rc_map_listasbjrc_mapuh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhj%ubh maps}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhj%hhubah}(h]h ]h"]h$]h&]uh1jLhj%hhhj%hKubeh}(h]h ](jstructeh"]h$]h&]jmjjnj:&joj:&jpjqjruh1jhhhjhNhNubjt)}(h**Definition**:: struct rc_map_list { struct list_head list; struct rc_map map; }; **Members** ``list`` pointer to struct :c:type:`list_head` ``map`` pointer to struct :c:type:`rc_map`h](h)}(h**Definition**::h](j~)}(h**Definition**h]h Definition}(hjF&hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjB&ubh:}(hjB&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhj>&ubj)}(hQstruct rc_map_list { struct list_head list; struct rc_map map; };h]hQstruct rc_map_list { struct list_head list; struct rc_map map; };}hj_&sbah}(h]h ]h"]h$]h&]hhuh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhj>&ubh)}(h **Members**h]j~)}(hjp&h]hMembers}(hjr&hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjn&ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhj>&ubj)}(hhh](j)}(h/``list`` pointer to struct :c:type:`list_head` h](j)}(h``list``h]j~)}(hj&h]hlist}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj&ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhj&ubj)}(hhh]h)}(h%pointer to struct :c:type:`list_head`h](hpointer to struct }(hj&hhhNhNubh)}(h:c:type:`list_head`h]j~)}(hj&h]h list_head}(hj&hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j}hj&ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjbj$j list_headuh1hhj&hKhj&ubeh}(h]h ]h"]h$]h&]uh1hhj&hKhj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hKhj&ubj)}(h*``map`` pointer to struct :c:type:`rc_map`h](j)}(h``map``h]j~)}(hj&h]hmap}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj&ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhj&ubj)}(hhh]h)}(h"pointer to struct :c:type:`rc_map`h](hpointer to struct }(hj'hhhNhNubh)}(h:c:type:`rc_map`h]j~)}(hj 'h]hrc_map}(hj 'hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j}hj'ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjbj$jrc_mapuh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhj'ubeh}(h]h ]h"]h$]h&]uh1hhj''hKhj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hKhj&ubeh}(h]h ]h"]h$]h&]uh1jhj>&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jshjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrc_map_register (C function)c.rc_map_registerhNtauh1jhjhhhNhNubj)}(hhh](j)}(h-int rc_map_register (struct rc_map_list *map)h]j)}(h,int rc_map_register(struct rc_map_list *map)h](j)}(hinth]hint}(hj`'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\'hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKubj )}(h h]h }(hjo'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\'hhhjn'hKubj)}(hrc_map_registerh]j!)}(hrc_map_registerh]hrc_map_register}(hj'hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hj}'ubah}(h]h ](j3j4eh"]h$]h&]hhuh1jhj\'hhhjn'hKubj)}(h(struct rc_map_list *map)h]j)}(hstruct rc_map_list *maph](j)}(hjrh]hstruct}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj )}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'ubh)}(hhh]j!)}(h rc_map_listh]h rc_map_list}(hj'hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hj'ubah}(h]h ]h"]h$]h&] refdomainjreftypej^ reftargetj'modnameN classnameNjbje)}jh]jk)}j^j'sbc.rc_map_registerasbuh1hhj'ubj )}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'ubj)}(hjh]h*}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj!)}(hmaph]hmap}(hj'hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hj'ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj'ubah}(h]h ]h"]h$]h&]hhuh1jhj\'hhhjn'hKubeh}(h]h ]h"]h$]h&]hhj>uh1jj?j@hjX'hhhjn'hKubah}(h]jS'ah ](jDjEeh"]h$]h&]jIjJ)jKhuh1jhjn'hKhjU'hhubjM)}(hhh]h)}(h*Registers a Remote Controller scancode maph]h*Registers a Remote Controller scancode map}(hj (hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhj(hhubah}(h]h ]h"]h$]h&]uh1jLhjU'hhhjn'hKubeh}(h]h ](jfunctioneh"]h$]h&]jmjjnj8(joj8(jpjqjruh1jhhhjhNhNubjt)}(hK**Parameters** ``struct rc_map_list *map`` pointer to struct rc_map_listh](h)}(h**Parameters**h]j~)}(hjB(h]h Parameters}(hjD(hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj@(ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhj<(ubj)}(hhh]j)}(h9``struct rc_map_list *map`` pointer to struct rc_map_listh](j)}(h``struct rc_map_list *map``h]j~)}(hja(h]hstruct rc_map_list *map}(hjc(hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj_(ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhj[(ubj)}(hhh]h)}(hpointer to struct rc_map_listh]hpointer to struct rc_map_list}(hjz(hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhjw(ubah}(h]h ]h"]h$]h&]uh1jhj[(ubeh}(h]h ]h"]h$]h&]uh1jhjv(hKhjX(ubah}(h]h ]h"]h$]h&]uh1jhj<(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jshjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrc_map_unregister (C function)c.rc_map_unregisterhNtauh1jhjhhhNhNubj)}(hhh](j)}(h0void rc_map_unregister (struct rc_map_list *map)h]j)}(h/void rc_map_unregister(struct rc_map_list *map)h](j)}(hvoidh]hvoid}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKubj )}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(hhhj(hKubj)}(hrc_map_unregisterh]j!)}(hrc_map_unregisterh]hrc_map_unregister}(hj(hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hj(ubah}(h]h ](j3j4eh"]h$]h&]hhuh1jhj(hhhj(hKubj)}(h(struct rc_map_list *map)h]j)}(hstruct rc_map_list *maph](j)}(hjrh]hstruct}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj )}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubh)}(hhh]j!)}(h rc_map_listh]h rc_map_list}(hj)hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hj)ubah}(h]h ]h"]h$]h&] refdomainjreftypej^ reftargetj)modnameN classnameNjbje)}jh]jk)}j^j(sbc.rc_map_unregisterasbuh1hhj(ubj )}(h h]h }(hj6)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubj)}(hjh]h*}(hjD)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj!)}(hmaph]hmap}(hjQ)hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hj(ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj(ubah}(h]h ]h"]h$]h&]hhuh1jhj(hhhj(hKubeh}(h]h ]h"]h$]h&]hhj>uh1jj?j@hj(hhhj(hKubah}(h]j(ah ](jDjEeh"]h$]h&]jIjJ)jKhuh1jhj(hKhj(hhubjM)}(hhh]h)}(h,Unregisters a Remote Controller scancode maph]h,Unregisters a Remote Controller scancode map}(hj{)hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhjx)hhubah}(h]h ]h"]h$]h&]uh1jLhj(hhhj(hKubeh}(h]h ](jfunctioneh"]h$]h&]jmjjnj)joj)jpjqjruh1jhhhjhNhNubjt)}(hK**Parameters** ``struct rc_map_list *map`` pointer to struct rc_map_listh](h)}(h**Parameters**h]j~)}(hj)h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj)ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhj)ubj)}(hhh]j)}(h9``struct rc_map_list *map`` pointer to struct rc_map_listh](j)}(h``struct rc_map_list *map``h]j~)}(hj)h]hstruct rc_map_list *map}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj)ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhj)ubj)}(hhh]h)}(hpointer to struct rc_map_listh]hpointer to struct rc_map_list}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hKhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jshjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrc_map_get (C function) c.rc_map_gethNtauh1jhjhhhNhNubj)}(hhh](j)}(h-struct rc_map * rc_map_get (const char *name)h]j)}(h+struct rc_map *rc_map_get(const char *name)h](j)}(hjrh]hstruct}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKubj )}(h h]h }(hj$*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*hhhj#*hKubh)}(hhh]j!)}(hrc_maph]hrc_map}(hj5*hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hj2*ubah}(h]h ]h"]h$]h&] refdomainjreftypej^ reftargetj7*modnameN classnameNjbje)}jh]jk)}j^ rc_map_getsb c.rc_map_getasbuh1hhj*hhhj#*hKubj )}(h h]h }(hjV*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*hhhj#*hKubj)}(hjh]h*}(hjd*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhj#*hKubj)}(h rc_map_geth]j!)}(hjS*h]h rc_map_get}(hju*hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hjq*ubah}(h]h ](j3j4eh"]h$]h&]hhuh1jhj*hhhj#*hKubj)}(h(const char *name)h]j)}(hconst char *nameh](j)}(hconsth]hconst}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj )}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*ubj)}(hcharh]hchar}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj )}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*ubj)}(hjh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj!)}(hnameh]hname}(hj*hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1j hj*ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj*ubah}(h]h ]h"]h$]h&]hhuh1jhj*hhhj#*hKubeh}(h]h ]h"]h$]h&]hhj>uh1jj?j@hj*hhhj#*hKubah}(h]j *ah ](jDjEeh"]h$]h&]jIjJ)jKhuh1jhj#*hKhj *hhubjM)}(hhh]h)}(hgets an RC map from its nameh]hgets an RC map from its name}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhj*hhubah}(h]h ]h"]h$]h&]uh1jLhj *hhhj#*hKubeh}(h]h ](jfunctioneh"]h$]h&]jmjjnj+joj+jpjqjruh1jhhhjhNhNubjt)}(hB**Parameters** ``const char *name`` name of the RC scancode maph](h)}(h**Parameters**h]j~)}(hj!+h]h Parameters}(hj#+hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj+ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhj+ubj)}(hhh]j)}(h0``const char *name`` name of the RC scancode maph](j)}(h``const char *name``h]j~)}(hj@+h]hconst char *name}(hjB+hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj>+ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhj:+ubj)}(hhh]h)}(hname of the RC scancode maph]hname of the RC scancode map}(hjY+hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/media/rc-core:88: ./include/media/rc-map.hhKhjV+ubah}(h]h ]h"]h$]h&]uh1jhj:+ubeh}(h]h ]h"]h$]h&]uh1jhjU+hKhj7+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jshjhhhNhNubeh}(h]/remote-controller-data-structures-and-functionsah ]h"]/remote controller data structures and functionsah$]h&]uh1hhhhhhhhKTubeh}(h]remote-controller-coreah ]h"]remote controller coreah$]h&]uh1hhhhhhhhKubeh}(h]remote-controller-devicesah ]h"]remote controller devicesah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj+error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}(f1]jaf2]jaurefids}(j]jaj]jaunameids}(j+j+j+j+jNjj*jj+j+u nametypes}(j+j+jNj*j+uh}(j+hj+hjjjj)jjjjj+jjjjcjhjjjjj j jj!jjjjj jjfjkjj jo j!j!j#j #j%j%jS'jX'j(j(j *j*u footnote_refs}(j+]jaj+]jau citation_refs} autofootnotes](j)jeautofootnote_refs](jjesymbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}j+KsRparse_messages]transform_messages] transformerN include_log] decorationNhhub.