From eff15cfea957f6a9714e305cf99ebe641a343144 Mon Sep 17 00:00:00 2001 From: Dave Stevenson Date: Wed, 11 Oct 2023 11:12:41 +0100 Subject: [PATCH 0663/1085] media: i2c: ov9282: Read chip ID via 2 reads 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 --- drivers/media/i2c/ov9282.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) --- a/drivers/media/i2c/ov9282.c +++ b/drivers/media/i2c/ov9282.c @@ -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);