* [PATCH] [media] ir-spi: Fix issues with lirc API
@ 2017-05-07 1:00 ` Anton Blanchard
2017-06-13 3:57 ` Andi Shyti
0 siblings, 1 reply; 2+ messages in thread
From: Anton Blanchard @ 2017-05-07 1:00 UTC (permalink / raw)
To: mchehab, andi.shyti, sean; +Cc: linux-media, linux-kernel
From: Anton Blanchard <anton@samba.org>
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: fe052da49201 ("[media] rc: add support for IR LEDs driven through SPI")
Cc: stable@vger.kernel.org
Signed-off-by: Anton Blanchard <anton@samba.org>
---
drivers/media/rc/ir-spi.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/drivers/media/rc/ir-spi.c b/drivers/media/rc/ir-spi.c
index c8863f36686a..f39cf8cb639f 100644
--- a/drivers/media/rc/ir-spi.c
+++ b/drivers/media/rc/ir-spi.c
@@ -57,10 +57,13 @@ static int ir_spi_tx(struct rc_dev *dev,
/* convert the pulse/space signal to raw binary signal */
for (i = 0; i < count; i++) {
+ unsigned int periods;
int j;
u16 val = ((i + 1) % 2) ? idata->pulse : idata->space;
- if (len + buffer[i] >= IR_SPI_MAX_BUFSIZE)
+ periods = DIV_ROUND_CLOSEST(buffer[i] * idata->freq, 1000000);
+
+ if (len + periods >= IR_SPI_MAX_BUFSIZE)
return -EINVAL;
/*
@@ -69,13 +72,13 @@ static int ir_spi_tx(struct rc_dev *dev,
* contain a space duration.
*/
val = (i % 2) ? idata->space : idata->pulse;
- for (j = 0; j < buffer[i]; j++)
+ for (j = 0; j < periods; j++)
idata->tx_buf[len++] = val;
}
memset(&xfer, 0, sizeof(xfer));
- xfer.speed_hz = idata->freq;
+ xfer.speed_hz = idata->freq * 16;
xfer.len = len * sizeof(*idata->tx_buf);
xfer.tx_buf = idata->tx_buf;
--
2.11.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] [media] ir-spi: Fix issues with lirc API
2017-05-07 1:00 ` [PATCH] [media] ir-spi: Fix issues with lirc API Anton Blanchard
@ 2017-06-13 3:57 ` Andi Shyti
0 siblings, 0 replies; 2+ messages in thread
From: Andi Shyti @ 2017-06-13 3:57 UTC (permalink / raw)
To: Anton Blanchard; +Cc: mchehab, sean, linux-media, linux-kernel
Hi Anton,
On Sun, May 07, 2017 at 11:00:11AM +1000, Anton Blanchard wrote:
> From: Anton Blanchard <anton@samba.org>
>
> 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: fe052da49201 ("[media] rc: add support for IR LEDs driven through SPI")
> Cc: stable@vger.kernel.org
> Signed-off-by: Anton Blanchard <anton@samba.org>
Thanks for fixing it.
Reviewed-by: Andi Shyti <andi.shyti@samsung.com>
Andi
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-06-13 3:57 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <CGME20170507010024epcas1p34864c073092a997d8941f58cc41b17b6@epcas1p3.samsung.com>
2017-05-07 1:00 ` [PATCH] [media] ir-spi: Fix issues with lirc API Anton Blanchard
2017-06-13 3:57 ` Andi Shyti
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).