[media] gspca/sn9c20x: Test if sensor is a OV sensor
authorMauro Carvalho Chehab <mchehab@redhat.com>
Mon, 6 Dec 2010 09:53:05 +0000 (06:53 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Wed, 29 Dec 2010 10:16:59 +0000 (08:16 -0200)
Instead of just assuming a ov9650 sensor based on USB ID,
double-check it, by reading the sensor ID.

Acked-by: Jean-Francois Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/gspca/sn9c20x.c

index 6b155ae..1e0f219 100644 (file)
@@ -1224,8 +1224,17 @@ static int i2c_r2(struct gspca_dev *gspca_dev, u8 reg, u16 *val)
 static int ov9650_init_sensor(struct gspca_dev *gspca_dev)
 {
        int i;
+       u16 id;
        struct sd *sd = (struct sd *) gspca_dev;
 
+       if (i2c_r2(gspca_dev, 0x1c, &id) < 0)
+               return -EINVAL;
+
+       if (id != 0x7fa2) {
+               err("sensor id for ov9650 doesn't match (0x%04x)", id);
+               return -ENODEV;
+       }
+
        for (i = 0; i < ARRAY_SIZE(ov9650_init); i++) {
                if (i2c_w1(gspca_dev, ov9650_init[i].reg,
                                ov9650_init[i].val) < 0) {