|  | .. SPDX-License-Identifier: GPL-2.0 | 
|  |  | 
|  | ====================================================== | 
|  | Infrared remote control support in video4linux drivers | 
|  | ====================================================== | 
|  |  | 
|  | Authors: Gerd Hoffmann, Mauro Carvalho Chehab | 
|  |  | 
|  | Basics | 
|  | ====== | 
|  |  | 
|  | Most analog and digital TV boards support remote controllers. Several of | 
|  | them have a microprocessor that receives the IR carriers, convert into | 
|  | pulse/space sequences and then to scan codes, returning such codes to | 
|  | userspace ("scancode mode"). Other boards return just the pulse/space | 
|  | sequences ("raw mode"). | 
|  |  | 
|  | The support for remote controller in scancode mode is provided by the | 
|  | standard Linux input layer. The support for raw mode is provided via LIRC. | 
|  |  | 
|  | In order to check the support and test it, it is suggested to download | 
|  | the `v4l-utils <https://git.linuxtv.org/v4l-utils.git/>`_. It provides | 
|  | two tools to handle remote controllers: | 
|  |  | 
|  | - ir-keytable: provides a way to query the remote controller, list the | 
|  | protocols it supports, enable in-kernel support for IR decoder or | 
|  | switch the protocol and to test the reception of scan codes; | 
|  |  | 
|  | - ir-ctl: provide tools to handle remote controllers that support raw mode | 
|  | via LIRC interface. | 
|  |  | 
|  | Usually, the remote controller module is auto-loaded when the TV card is | 
|  | detected. However, for a few devices, you need to manually load the | 
|  | ir-kbd-i2c module. | 
|  |  | 
|  | How it works | 
|  | ============ | 
|  |  | 
|  | The modules register the remote as keyboard within the linux input | 
|  | layer, i.e. you'll see the keys of the remote as normal key strokes | 
|  | (if CONFIG_INPUT_KEYBOARD is enabled). | 
|  |  | 
|  | Using the event devices (CONFIG_INPUT_EVDEV) it is possible for | 
|  | applications to access the remote via /dev/input/event<n> devices. | 
|  | The udev/systemd will automatically create the devices. If you install | 
|  | the `v4l-utils <https://git.linuxtv.org/v4l-utils.git/>`_, it may also | 
|  | automatically load a different keytable than the default one. Please see | 
|  | `v4l-utils <https://git.linuxtv.org/v4l-utils.git/>`_ ir-keytable.1 | 
|  | man page for details. | 
|  |  | 
|  | The ir-keytable tool is nice for trouble shooting, i.e. to check | 
|  | whenever the input device is really present, which of the devices it | 
|  | is, check whenever pressing keys on the remote actually generates | 
|  | events and the like.  You can also use any other input utility that changes | 
|  | the keymaps, like the input kbd utility. | 
|  |  | 
|  |  | 
|  | Using with lircd | 
|  | ---------------- | 
|  |  | 
|  | The latest versions of the lircd daemon supports reading events from the | 
|  | linux input layer (via event device). It also supports receiving IR codes | 
|  | in lirc mode. | 
|  |  | 
|  |  | 
|  | Using without lircd | 
|  | ------------------- | 
|  |  | 
|  | Xorg recognizes several IR keycodes that have its numerical value lower | 
|  | than 247. With the advent of Wayland, the input driver got updated too, | 
|  | and should now accept all keycodes. Yet, you may want to just reassign | 
|  | the keycodes to something that your favorite media application likes. | 
|  |  | 
|  | This can be done by setting | 
|  | `v4l-utils <https://git.linuxtv.org/v4l-utils.git/>`_ to load your own | 
|  | keytable in runtime. Please read  ir-keytable.1 man page for details. |