media: gpio-ir-tx: improve precision of transmitted signal due to scheduling
[ Upstream commit ea8912b788
]
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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
6ba04701b8
commit
8f409e764c
|
@ -79,13 +79,8 @@ static int gpio_ir_tx(struct rc_dev *dev, unsigned int *txbuf,
|
||||||
// space
|
// space
|
||||||
edge = ktime_add_us(edge, txbuf[i]);
|
edge = ktime_add_us(edge, txbuf[i]);
|
||||||
delta = ktime_us_delta(edge, ktime_get());
|
delta = ktime_us_delta(edge, ktime_get());
|
||||||
if (delta > 10) {
|
if (delta > 0)
|
||||||
spin_unlock_irqrestore(&gpio_ir->lock, flags);
|
|
||||||
usleep_range(delta, delta + 10);
|
|
||||||
spin_lock_irqsave(&gpio_ir->lock, flags);
|
|
||||||
} else if (delta > 0) {
|
|
||||||
udelay(delta);
|
udelay(delta);
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// pulse
|
// pulse
|
||||||
ktime_t last = ktime_add_us(edge, txbuf[i]);
|
ktime_t last = ktime_add_us(edge, txbuf[i]);
|
||||||
|
|
Loading…
Reference in New Issue