The patch number 12351 was added via Jean-Francois Moine <[email protected]>
to http://linuxtv.org/hg/v4l-dvb master development tree.

Kernel patches in this development tree may be modified to be backward
compatible with older kernels. Compatibility modifications will be
removed before inclusion into the mainstream Kernel

If anyone has any objections, please let us know by sending a message to:
        Linux Media Mailing List <[email protected]>

------

From: Brian Johnson  <[email protected]>
gspca - sn9c20x: Misc fixes.


* use i2c_w instead of reg_w
* return error on failure
* read the correct number of bytes

Priority: normal

Signed-off-by: Brian Johnson <[email protected]>
Signed-off-by: Jean-Francois Moine <[email protected]>


---

 linux/drivers/media/video/gspca/sn9c20x.c |   38 +++++++++++-----------
 1 file changed, 20 insertions(+), 18 deletions(-)

diff -r fd96af63f79b -r d34d547d159b linux/drivers/media/video/gspca/sn9c20x.c
--- a/linux/drivers/media/video/gspca/sn9c20x.c Fri Jun 19 19:56:56 2009 +0000
+++ b/linux/drivers/media/video/gspca/sn9c20x.c Thu Jul 23 10:55:43 2009 +0200
@@ -1099,12 +1099,12 @@
                reg_r(gspca_dev, 0x10c0, 1);
                if (gspca_dev->usb_buf[0] & 0x04) {
                        if (gspca_dev->usb_buf[0] & 0x08)
-                               return -1;
+                               return -EIO;
                        return 0;
                }
                msleep(1);
        }
-       return -1;
+       return -EIO;
 }
 
 int i2c_w1(struct gspca_dev *gspca_dev, u8 reg, u8 val)
@@ -1155,7 +1155,7 @@
        struct sd *sd = (struct sd *) gspca_dev;
        u8 row[8];
 
-       row[0] = 0x81 | 0x10;
+       row[0] = 0x81 | (1 << 4);
        row[1] = sd->i2c_addr;
        row[2] = reg;
        row[3] = 0;
@@ -1163,14 +1163,15 @@
        row[5] = 0;
        row[6] = 0;
        row[7] = 0x10;
-       reg_w(gspca_dev, 0x10c0, row, 8);
-       msleep(1);
-       row[0] = 0x81 | (2 << 4) | 0x02;
+       if (i2c_w(gspca_dev, row) < 0)
+               return -EIO;
+       row[0] = 0x81 | (1 << 4) | 0x02;
        row[2] = 0;
-       reg_w(gspca_dev, 0x10c0, row, 8);
-       msleep(1);
-       reg_r(gspca_dev, 0x10c2, 5);
-       *val = gspca_dev->usb_buf[3];
+       if (i2c_w(gspca_dev, row) < 0)
+               return -EIO;
+       if (reg_r(gspca_dev, 0x10c2, 5) < 0)
+               return -EIO;
+       *val = gspca_dev->usb_buf[4];
        return 0;
 }
 
@@ -1179,7 +1180,7 @@
        struct sd *sd = (struct sd *) gspca_dev;
        u8 row[8];
 
-       row[0] = 0x81 | 0x10;
+       row[0] = 0x81 | (1 << 4);
        row[1] = sd->i2c_addr;
        row[2] = reg;
        row[3] = 0;
@@ -1187,14 +1188,15 @@
        row[5] = 0;
        row[6] = 0;
        row[7] = 0x10;
-       reg_w(gspca_dev, 0x10c0, row, 8);
-       msleep(1);
-       row[0] = 0x81 | (3 << 4) | 0x02;
+       if (i2c_w(gspca_dev, row) < 0)
+               return -EIO;
+       row[0] = 0x81 | (2 << 4) | 0x02;
        row[2] = 0;
-       reg_w(gspca_dev, 0x10c0, row, 8);
-       msleep(1);
-       reg_r(gspca_dev, 0x10c2, 5);
-       *val = (gspca_dev->usb_buf[2] << 8) | gspca_dev->usb_buf[3];
+       if (i2c_w(gspca_dev, row) < 0)
+               return -EIO;
+       if (reg_r(gspca_dev, 0x10c2, 5) < 0)
+               return -EIO;
+       *val = (gspca_dev->usb_buf[3] << 8) | gspca_dev->usb_buf[4];
        return 0;
 }
 


---

Patch is available at: 
http://linuxtv.org/hg/v4l-dvb/rev/d34d547d159b4ec0d09e4d3c1d77bb21e62a6b16

_______________________________________________
linuxtv-commits mailing list
[email protected]
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to