Working Ninja
2019-10-15T21:44:13
Fix for lirc on Kernel 4.19

lirc mysteriously stopped working when I upgraded to kernel 4.19.66-v7+ on my Raspberry Pi a while back. After an initial battle that lead to no success, I let it collect dust until this fateful night when she returned to her full functionality.

tl;dr

The kernel module lirc_rpi has been replaced with two modules: gpio_ir_recv (for receiving) and gpio_ir_tx (for sending, naturally). There are handful of configurations that need to point to and load the new modules.

My setup

  • GPIO 22 for IR transmission.
  • lircd 0.9.4c
  • kernel 4.19.66-v7+
  • Raspbian GNU/Linux 9 (stretch)

/boot/config.txt

Replace lirc-rpi with gpio-ir-tx. Take note that gpio_out_pin is now gpio_pin (see /boot/overlays/README for more info [search for gpio-ir-tx]).

dtoverlay=lirc-rpi,gpio_out_pin=22
dtoverlay=gpio-ir-tx,gpio_pin=22

/etc/lirc/hardware.conf

Replace loading of lirc_rpi with gpio_ir_tx.

MODULES="lirc_rpi"
MODULES="gpio_ir_tx"

/etc/modules

Remove lirc_* in /etc/modules (or comment out).

lirc_dev
lirc_rpi gpio_out_pin=22

/etc/lirc/lircd.conf

I had my remote configurations in lircd.conf and the upgrade to kernel 4.19. These were blown away, unfortunately. Fortunately, I had copies elsewhere. The new lircd.conf contains a single line that loads in all .conf files in /etc/lirc/lircd.conf.d/. I copied my remote conf files here and called it good (just in case another update blows things away =]

/etc/lirc/lirc.conf.d/devinput.lircd.conf

This file was unnecessary for my setup so I renamed it so it would not be loaded. See /etc/lirc/lircd.conf.d/README.conf.d for more info.

mv devinput.lircd.conf devinput.lircd.conf.dist

Extra Help:

  • If you need IR receive functionality, the dtoverlay will be gpio-ir (and not gpio-ir-recv, like the module). See /boot/overlays/README for more information. Also see modinfo gpio-ir-recv and modinfo gpio-ir-tx for more info.