diff -drupN a/drivers/media/rc/ir-lirc-codec.c b/drivers/media/rc/ir-lirc-codec.c --- a/drivers/media/rc/ir-lirc-codec.c 2018-08-06 17:23:04.000000000 +0300 +++ b/drivers/media/rc/ir-lirc-codec.c 2022-06-12 05:28:14.000000000 +0300 @@ -124,8 +124,8 @@ static ssize_t ir_lirc_transmit_ir(struc if (n < sizeof(unsigned) || n % sizeof(unsigned)) return -EINVAL; - count = n / sizeof(unsigned); - if (count > LIRCBUF_SIZE || count % 2 == 0) + count = n / sizeof(unsigned int); + if (count > LIRCBUF_SIZE || count % 2 != 0) return -EINVAL; txbuf = memdup_user(buf, n); @@ -144,12 +144,13 @@ static ssize_t ir_lirc_transmit_ir(struc } for (i = 0; i < count; i++) { - if (txbuf[i] > IR_MAX_DURATION / 1000 - duration || !txbuf[i]) { + if (LIRC_VALUE(txbuf[i]) > IR_MAX_DURATION / 1000 - duration || + !txbuf[i]) { ret = -EINVAL; goto out; } - duration += txbuf[i]; + duration += LIRC_VALUE(txbuf[i]); } ret = dev->tx_ir(dev, txbuf, count); @@ -157,7 +158,7 @@ static ssize_t ir_lirc_transmit_ir(struc goto out; for (duration = i = 0; i < ret; i++) - duration += txbuf[i]; + duration += LIRC_VALUE(txbuf[i]); ret *= sizeof(unsigned int); @@ -395,6 +396,8 @@ static int ir_lirc_register(struct rc_de drv->dev = &dev->dev; drv->rdev = dev; drv->owner = THIS_MODULE; + drv->chunk_size = 4; + drv->buffer_size = 64; drv->minor = lirc_register_driver(drv); if (drv->minor < 0) {