• Anton Blanchard's avatar
    ir-spi: Fix issues with lirc API · 7ddb4a59
    Anton Blanchard authored
    commit cc20ba4e upstream.
    
    The ir-spi driver has 2 issues which prevents it from working with
    lirc:
    
    1. The ir-spi driver uses 16 bits of SPI data to create one cycle of
    the waveform. As such our SPI clock needs to be 16x faster than the
    carrier frequency.
    
    The driver is inconsistent in how it currently handles this. It
    initializes it to the carrier frequency:
    
    But the commit message has some example code which initialises it
    to 16x the carrier frequency:
    
    	val = 608000;
    	ret = ioctl(fd, LIRC_SET_SEND_CARRIER, &val);
    
    To maintain compatibility with lirc, always do the frequency adjustment
    in the driver.
    
    2. lirc presents pulses in microseconds, but the ir-spi driver treats
    them as cycles of the carrier. Similar to other lirc drivers, do the
    conversion with DIV_ROUND_CLOSEST().
    
    Fixes: fe052da4 ("[media] rc: add support for IR LEDs driven through SPI")
    Signed-off-by: default avatarAnton Blanchard <anton@samba.org>
    Signed-off-by: default avatarSean Young <sean@mess.org>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    7ddb4a59
ir-spi.c 4.65 KB