summaryrefslogtreecommitdiffstats
path: root/drivers/media/rc/gpio-ir-tx.c
diff options
context:
space:
mode:
authorSean Young <sean@mess.org>2020-05-02 14:50:52 +0200
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>2020-05-12 17:29:11 +0200
commitea8912b788f8144e7d32ee61e5ccba45424bef83 (patch)
tree15dc29c3367b99c5f724e452f9aa8085134b4333 /drivers/media/rc/gpio-ir-tx.c
parentmedia: v4l: document VIDIOC_SUBDEV_QUERYCAP (diff)
downloadlinux-ea8912b788f8144e7d32ee61e5ccba45424bef83.tar.xz
linux-ea8912b788f8144e7d32ee61e5ccba45424bef83.zip
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 <sean@mess.org> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Diffstat (limited to 'drivers/media/rc/gpio-ir-tx.c')
-rw-r--r--drivers/media/rc/gpio-ir-tx.c7
1 files changed, 1 insertions, 6 deletions
diff --git a/drivers/media/rc/gpio-ir-tx.c b/drivers/media/rc/gpio-ir-tx.c
index 18ca12d78314..66703989ae18 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]);