Commit ffb97493 authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab

[media] go7007: fix i2c_xfer return codes

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: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 1589037f
...@@ -52,11 +52,11 @@ static DEFINE_MUTEX(adlink_mpg24_i2c_lock); ...@@ -52,11 +52,11 @@ static DEFINE_MUTEX(adlink_mpg24_i2c_lock);
static int go7007_i2c_xfer(struct go7007 *go, u16 addr, int read, static int go7007_i2c_xfer(struct go7007 *go, u16 addr, int read,
u16 command, int flags, u8 *data) u16 command, int flags, u8 *data)
{ {
int i, ret = -1; int i, ret = -EIO;
u16 val; u16 val;
if (go->status == STATUS_SHUTDOWN) if (go->status == STATUS_SHUTDOWN)
return -1; return -ENODEV;
#ifdef GO7007_I2C_DEBUG #ifdef GO7007_I2C_DEBUG
if (read) if (read)
...@@ -146,7 +146,7 @@ static int go7007_smbus_xfer(struct i2c_adapter *adapter, u16 addr, ...@@ -146,7 +146,7 @@ static int go7007_smbus_xfer(struct i2c_adapter *adapter, u16 addr,
struct go7007 *go = i2c_get_adapdata(adapter); struct go7007 *go = i2c_get_adapdata(adapter);
if (size != I2C_SMBUS_BYTE_DATA) if (size != I2C_SMBUS_BYTE_DATA)
return -1; return -EIO;
return go7007_i2c_xfer(go, addr, read_write == I2C_SMBUS_READ, command, return go7007_i2c_xfer(go, addr, read_write == I2C_SMBUS_READ, command,
flags & I2C_CLIENT_SCCB ? 0x10 : 0x00, &data->byte); flags & I2C_CLIENT_SCCB ? 0x10 : 0x00, &data->byte);
} }
...@@ -170,26 +170,26 @@ static int go7007_i2c_master_xfer(struct i2c_adapter *adapter, ...@@ -170,26 +170,26 @@ static int go7007_i2c_master_xfer(struct i2c_adapter *adapter,
(msgs[i].flags & I2C_M_RD) || (msgs[i].flags & I2C_M_RD) ||
!(msgs[i + 1].flags & I2C_M_RD) || !(msgs[i + 1].flags & I2C_M_RD) ||
msgs[i + 1].len != 1) msgs[i + 1].len != 1)
return -1; return -EIO;
if (go7007_i2c_xfer(go, msgs[i].addr, 1, if (go7007_i2c_xfer(go, msgs[i].addr, 1,
(msgs[i].buf[0] << 8) | msgs[i].buf[1], (msgs[i].buf[0] << 8) | msgs[i].buf[1],
0x01, &msgs[i + 1].buf[0]) < 0) 0x01, &msgs[i + 1].buf[0]) < 0)
return -1; return -EIO;
++i; ++i;
} else if (msgs[i].len == 3) { } else if (msgs[i].len == 3) {
if (msgs[i].flags & I2C_M_RD) if (msgs[i].flags & I2C_M_RD)
return -1; return -EIO;
if (msgs[i].len != 3) if (msgs[i].len != 3)
return -1; return -EIO;
if (go7007_i2c_xfer(go, msgs[i].addr, 0, if (go7007_i2c_xfer(go, msgs[i].addr, 0,
(msgs[i].buf[0] << 8) | msgs[i].buf[1], (msgs[i].buf[0] << 8) | msgs[i].buf[1],
0x01, &msgs[i].buf[2]) < 0) 0x01, &msgs[i].buf[2]) < 0)
return -1; return -EIO;
} else } else
return -1; return -EIO;
} }
return 0; return num;
} }
static u32 go7007_functionality(struct i2c_adapter *adapter) static u32 go7007_functionality(struct i2c_adapter *adapter)
......
...@@ -876,10 +876,10 @@ static int go7007_usb_i2c_master_xfer(struct i2c_adapter *adapter, ...@@ -876,10 +876,10 @@ static int go7007_usb_i2c_master_xfer(struct i2c_adapter *adapter,
struct go7007_usb *usb = go->hpi_context; struct go7007_usb *usb = go->hpi_context;
u8 buf[16]; u8 buf[16];
int buf_len, i; int buf_len, i;
int ret = -1; int ret = -EIO;
if (go->status == STATUS_SHUTDOWN) if (go->status == STATUS_SHUTDOWN)
return -1; return -ENODEV;
mutex_lock(&usb->i2c_lock); mutex_lock(&usb->i2c_lock);
...@@ -936,7 +936,7 @@ static int go7007_usb_i2c_master_xfer(struct i2c_adapter *adapter, ...@@ -936,7 +936,7 @@ static int go7007_usb_i2c_master_xfer(struct i2c_adapter *adapter,
memcpy(msgs[i].buf, buf + 1, msgs[i].len); memcpy(msgs[i].buf, buf + 1, msgs[i].len);
} }
} }
ret = 0; ret = num;
i2c_done: i2c_done:
mutex_unlock(&usb->i2c_lock); mutex_unlock(&usb->i2c_lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment