[media] go7007: fix i2c_xfer return codes
authorHans Verkuil <hans.verkuil@cisco.com>
Sat, 9 Mar 2013 09:18:03 +0000 (06:18 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sun, 24 Mar 2013 15:10:36 +0000 (12:10 -0300)
The i2c_xfer functions didn't return the proper error codes and (especially
important) on success they returned 0 instead of the number of transferred
messages.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/staging/media/go7007/go7007-i2c.c
drivers/staging/media/go7007/go7007-usb.c

index 39456a36b2c6d67b732185c59ea152ffe79dfaa4..1d0a40075e66727d4d15149074a64dc9acf37469 100644 (file)
@@ -52,11 +52,11 @@ static DEFINE_MUTEX(adlink_mpg24_i2c_lock);
 static int go7007_i2c_xfer(struct go7007 *go, u16 addr, int read,
                u16 command, int flags, u8 *data)
 {
-       int i, ret = -1;
+       int i, ret = -EIO;
        u16 val;
 
        if (go->status == STATUS_SHUTDOWN)
-               return -1;
+               return -ENODEV;
 
 #ifdef GO7007_I2C_DEBUG
        if (read)
@@ -146,7 +146,7 @@ static int go7007_smbus_xfer(struct i2c_adapter *adapter, u16 addr,
        struct go7007 *go = i2c_get_adapdata(adapter);
 
        if (size != I2C_SMBUS_BYTE_DATA)
-               return -1;
+               return -EIO;
        return go7007_i2c_xfer(go, addr, read_write == I2C_SMBUS_READ, command,
                        flags & I2C_CLIENT_SCCB ? 0x10 : 0x00, &data->byte);
 }
@@ -170,26 +170,26 @@ static int go7007_i2c_master_xfer(struct i2c_adapter *adapter,
                                        (msgs[i].flags & I2C_M_RD) ||
                                        !(msgs[i + 1].flags & I2C_M_RD) ||
                                        msgs[i + 1].len != 1)
-                               return -1;
+                               return -EIO;
                        if (go7007_i2c_xfer(go, msgs[i].addr, 1,
                                        (msgs[i].buf[0] << 8) | msgs[i].buf[1],
                                        0x01, &msgs[i + 1].buf[0]) < 0)
-                               return -1;
+                               return -EIO;
                        ++i;
                } else if (msgs[i].len == 3) {
                        if (msgs[i].flags & I2C_M_RD)
-                               return -1;
+                               return -EIO;
                        if (msgs[i].len != 3)
-                               return -1;
+                               return -EIO;
                        if (go7007_i2c_xfer(go, msgs[i].addr, 0,
                                        (msgs[i].buf[0] << 8) | msgs[i].buf[1],
                                        0x01, &msgs[i].buf[2]) < 0)
-                               return -1;
+                               return -EIO;
                } else
-                       return -1;
+                       return -EIO;
        }
 
-       return 0;
+       return num;
 }
 
 static u32 go7007_functionality(struct i2c_adapter *adapter)
index 9dbf5ecd05a27aca67003243781fd817c03debef..914b247e9652c91a052e94887507b4aed8b18ed3 100644 (file)
@@ -876,10 +876,10 @@ static int go7007_usb_i2c_master_xfer(struct i2c_adapter *adapter,
        struct go7007_usb *usb = go->hpi_context;
        u8 buf[16];
        int buf_len, i;
-       int ret = -1;
+       int ret = -EIO;
 
        if (go->status == STATUS_SHUTDOWN)
-               return -1;
+               return -ENODEV;
 
        mutex_lock(&usb->i2c_lock);
 
@@ -936,7 +936,7 @@ static int go7007_usb_i2c_master_xfer(struct i2c_adapter *adapter,
                        memcpy(msgs[i].buf, buf + 1, msgs[i].len);
                }
        }
-       ret = 0;
+       ret = num;
 
 i2c_done:
        mutex_unlock(&usb->i2c_lock);