[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: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
1589037f87
commit
ffb9749346
|
@ -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,
|
||||||
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,
|
||||||
(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,
|
||||||
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,
|
||||||
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);
|
||||||
|
|
Loading…
Reference in New Issue