From: Sean Young Date: Sat, 2 May 2020 12:50:52 +0000 (+0200) Subject: media: gpio-ir-tx: improve precision of transmitted signal due to scheduling X-Git-Tag: v5.10.7~2096^2~302 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ea8912b788f8144e7d32ee61e5ccba45424bef83;p=platform%2Fkernel%2Flinux-rpi.git media: gpio-ir-tx: improve precision of transmitted signal due to scheduling usleep_range() may take longer than the max argument due to scheduling, especially under load. This is causing random errors in the transmitted IR. Remove the usleep_range() in favour of busy-looping with udelay(). Signed-off-by: Sean Young Signed-off-by: Mauro Carvalho Chehab --- diff --git a/drivers/media/rc/gpio-ir-tx.c b/drivers/media/rc/gpio-ir-tx.c index 18ca12d..6670398 100644 --- a/drivers/media/rc/gpio-ir-tx.c +++ b/drivers/media/rc/gpio-ir-tx.c @@ -79,13 +79,8 @@ static int gpio_ir_tx(struct rc_dev *dev, unsigned int *txbuf, // space edge = ktime_add_us(edge, txbuf[i]); delta = ktime_us_delta(edge, ktime_get()); - if (delta > 10) { - spin_unlock_irqrestore(&gpio_ir->lock, flags); - usleep_range(delta, delta + 10); - spin_lock_irqsave(&gpio_ir->lock, flags); - } else if (delta > 0) { + if (delta > 0) udelay(delta); - } } else { // pulse ktime_t last = ktime_add_us(edge, txbuf[i]);