On Fri Jun 13 14:21:52 2025 +0300, Cosmin Tanislav wrote: > Carrier frequency is currently unconstrained, allowing the SPI transfer > to be allocated and filled only for it to be later rejected by the SPI > controller since the frequency is too large. > > Add a check to constrain the carrier frequency inside > ir_spi_set_tx_carrier(). > > Also, move the number of bits per pulse to a macro since it is not used > in multiple places. > > Signed-off-by: Cosmin Tanislav <demonsin...@gmail.com> > Signed-off-by: Sean Young <s...@mess.org> > Signed-off-by: Hans Verkuil <hverk...@xs4all.nl>
Patch committed. Thanks, Hans Verkuil drivers/media/rc/ir-spi.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) --- diff --git a/drivers/media/rc/ir-spi.c b/drivers/media/rc/ir-spi.c index 50e30e2fae22..0b54ad74cec0 100644 --- a/drivers/media/rc/ir-spi.c +++ b/drivers/media/rc/ir-spi.c @@ -21,6 +21,7 @@ #define IR_SPI_DRIVER_NAME "ir-spi" #define IR_SPI_DEFAULT_FREQUENCY 38000 +#define IR_SPI_BITS_PER_PULSE 16 struct ir_spi_data { u32 freq; @@ -70,7 +71,7 @@ static int ir_spi_tx(struct rc_dev *dev, unsigned int *buffer, unsigned int coun memset(&xfer, 0, sizeof(xfer)); - xfer.speed_hz = idata->freq * 16; + xfer.speed_hz = idata->freq * IR_SPI_BITS_PER_PULSE; xfer.len = len * sizeof(*tx_buf); xfer.tx_buf = tx_buf; @@ -98,6 +99,9 @@ static int ir_spi_set_tx_carrier(struct rc_dev *dev, u32 carrier) if (!carrier) return -EINVAL; + if (carrier > idata->spi->max_speed_hz / IR_SPI_BITS_PER_PULSE) + return -EINVAL; + idata->freq = carrier; return 0;