media: i2c: ov9282: Read chip ID via 2 reads
authorDave Stevenson <dave.stevenson@raspberrypi.com>
Wed, 11 Oct 2023 10:12:41 +0000 (11:12 +0100)
committerDom Cobley <popcornmix@gmail.com>
Mon, 19 Feb 2024 11:35:05 +0000 (11:35 +0000)
Vision Components have made an OV9281 module which blocks reading
back the majority of registers to comply with NDAs, and in doing
so doesn't allow auto-increment register reading as used when
reading the chip ID.

Use two reads and manually combine the results.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
drivers/media/i2c/ov9282.c

index 068c744..0b092a4 100644 (file)
@@ -1078,12 +1078,16 @@ error_unlock:
 static int ov9282_detect(struct ov9282 *ov9282)
 {
        int ret;
-       u32 val;
+       u32 val, msb;
 
-       ret = ov9282_read_reg(ov9282, OV9282_REG_ID, 2, &val);
+       ret = ov9282_read_reg(ov9282, OV9282_REG_ID + 1, 1, &val);
+       if (ret)
+               return ret;
+       ret = ov9282_read_reg(ov9282, OV9282_REG_ID, 1, &msb);
        if (ret)
                return ret;
 
+       val |= (msb << 8);
        if (val != OV9282_ID) {
                dev_err(ov9282->dev, "chip id mismatch: %x!=%x",
                        OV9282_ID, val);