From 85480e8634f1e7c2999eb3546eecddb5b820a34d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Moine?= Date: Sun, 25 Apr 2010 14:41:51 -0300 Subject: [PATCH] --- yaml --- r: 193059 b: refs/heads/master c: e3302cad9bc111e158e03eff763dff36bce02fe6 h: refs/heads/master i: 193057: 89429d7d2b2cd1f40bf8a1956b43840709fd3253 193055: aecb8e768a50e32380cf300f52b6ba637c1ac66d v: v3 --- [refs] | 2 +- trunk/drivers/media/video/gspca/sonixj.c | 41 +++++++++++------------- 2 files changed, 20 insertions(+), 23 deletions(-) diff --git a/[refs] b/[refs] index 01bb4d018f5f..cbeae09414fe 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 0a85c74b5d48f6cb41770ec3951a582738446b33 +refs/heads/master: e3302cad9bc111e158e03eff763dff36bce02fe6 diff --git a/trunk/drivers/media/video/gspca/sonixj.c b/trunk/drivers/media/video/gspca/sonixj.c index a4ca3c11c429..19ae4f5ca73c 100644 --- a/trunk/drivers/media/video/gspca/sonixj.c +++ b/trunk/drivers/media/video/gspca/sonixj.c @@ -1498,42 +1498,43 @@ static void mi0360_probe(struct gspca_dev *gspca_dev) static void ov7648_probe(struct gspca_dev *gspca_dev) { struct sd *sd = (struct sd *) gspca_dev; + u16 val; /* check ov76xx */ reg_w1(gspca_dev, 0x17, 0x62); reg_w1(gspca_dev, 0x01, 0x08); sd->i2c_addr = 0x21; i2c_r(gspca_dev, 0x0a, 2); - if (gspca_dev->usb_buf[3] == 0x76) { /* ov76xx */ - PDEBUG(D_PROBE, "Sensor ov%02x%02x", - gspca_dev->usb_buf[3], gspca_dev->usb_buf[4]); - return; - } - - /* reset */ + val = (gspca_dev->usb_buf[3] << 8) | gspca_dev->usb_buf[4]; reg_w1(gspca_dev, 0x01, 0x29); reg_w1(gspca_dev, 0x17, 0x42); + if ((val & 0xff00) == 0x7600) { /* ov76xx */ + PDEBUG(D_PROBE, "Sensor ov%04x", val); + return; + } /* check po1030 */ reg_w1(gspca_dev, 0x17, 0x62); reg_w1(gspca_dev, 0x01, 0x08); sd->i2c_addr = 0x6e; i2c_r(gspca_dev, 0x00, 2); - if (gspca_dev->usb_buf[3] == 0x10 /* po1030 */ - && gspca_dev->usb_buf[4] == 0x30) { + val = (gspca_dev->usb_buf[3] << 8) | gspca_dev->usb_buf[4]; + reg_w1(gspca_dev, 0x01, 0x29); + reg_w1(gspca_dev, 0x17, 0x42); + if (val == 0x1030) { /* po1030 */ PDEBUG(D_PROBE, "Sensor po1030"); sd->sensor = SENSOR_PO1030; return; } - PDEBUG(D_PROBE, "Unknown sensor %02x%02x", - gspca_dev->usb_buf[3], gspca_dev->usb_buf[4]); + PDEBUG(D_PROBE, "Unknown sensor %04x", val); } /* 0c45:6142 sensor may be po2030n, gc0305 or gc0307 */ static void po2030n_probe(struct gspca_dev *gspca_dev) { struct sd *sd = (struct sd *) gspca_dev; + u16 val; /* check gc0307 */ reg_w1(gspca_dev, 0x17, 0x62); @@ -1541,11 +1542,10 @@ static void po2030n_probe(struct gspca_dev *gspca_dev) reg_w1(gspca_dev, 0x02, 0x22); sd->i2c_addr = 0x21; i2c_r(gspca_dev, 0x00, 1); - + val = gspca_dev->usb_buf[4]; reg_w1(gspca_dev, 0x01, 0x29); /* reset */ reg_w1(gspca_dev, 0x17, 0x42); - - if (gspca_dev->usb_buf[4] == 0x99) { /* gc0307 (?) */ + if (val == 0x99) { /* gc0307 (?) */ PDEBUG(D_PROBE, "Sensor gc0307"); sd->sensor = SENSOR_GC0307; return; @@ -1556,18 +1556,15 @@ static void po2030n_probe(struct gspca_dev *gspca_dev) reg_w1(gspca_dev, 0x01, 0x0a); sd->i2c_addr = 0x6e; i2c_r(gspca_dev, 0x00, 2); - + val = (gspca_dev->usb_buf[3] << 8) | gspca_dev->usb_buf[4]; reg_w1(gspca_dev, 0x01, 0x29); reg_w1(gspca_dev, 0x17, 0x42); - - if (gspca_dev->usb_buf[3] == 0x20 - && gspca_dev->usb_buf[4] == 0x30) + if (val == 0x2030) { PDEBUG(D_PROBE, "Sensor po2030n"); /* sd->sensor = SENSOR_PO2030N; */ - else - PDEBUG(D_PROBE, "Unknown sensor ID %02x%02x", - gspca_dev->usb_buf[3], - gspca_dev->usb_buf[4]); + } else { + PDEBUG(D_PROBE, "Unknown sensor ID %04x", val); + } } static void bridge_init(struct gspca_dev *gspca_dev,