]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
media: anysee: accept read buffers of length 1 in anysee_master_xfer
authorIstván Váradi <ivaradi@varadiistvan.hu>
Tue, 13 Feb 2024 20:20:32 +0000 (21:20 +0100)
committerHans Verkuil <hverkuil-cisco@xs4all.nl>
Mon, 8 Apr 2024 11:48:18 +0000 (13:48 +0200)
anysee_master_xfer currently accepts read messages of length 2 only.
However, several frontends, e.g. tda10023 send buffers of length 1,
containing an 8-bit register number (see tda10023_readreg).
These buffers are rejected currently, making many Anysee variants
to not work. In these cases the "Unsupported Anysee version"
message is logged.

This patch alters the function to accept buffers of a length of 1 too.

Signed-off-by: István Váradi <ivaradi@varadiistvan.hu>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
[hverkuil: add spaces around '<', fix typo in 'sevaral']

drivers/media/usb/dvb-usb-v2/anysee.c

index a1235d0cce92f76ebd2497a4bac9630134d9f406..8699846eb4162c6e0ff0e4784acfcab305108103 100644 (file)
@@ -202,14 +202,14 @@ static int anysee_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msg,
 
        while (i < num) {
                if (num > i + 1 && (msg[i+1].flags & I2C_M_RD)) {
-                       if (msg[i].len != 2 || msg[i + 1].len > 60) {
+                       if (msg[i].len < 1 || msg[i].len > 2 || msg[i + 1].len > 60) {
                                ret = -EOPNOTSUPP;
                                break;
                        }
                        buf[0] = CMD_I2C_READ;
                        buf[1] = (msg[i].addr << 1) | 0x01;
                        buf[2] = msg[i].buf[0];
-                       buf[3] = msg[i].buf[1];
+                       buf[3] = (msg[i].len < 2) ? 0 : msg[i].buf[1];
                        buf[4] = msg[i].len-1;
                        buf[5] = msg[i+1].len;
                        ret = anysee_ctrl_msg(d, buf, 6, msg[i+1].buf,