Skip to content

Commit

Permalink
V4L/DVB (6404): cx23885: i2c 16bit reg/val read/write fix
Browse files Browse the repository at this point in the history
Fix i2c reads and writes of 16bit register address / values

Signed-off-by: Steven Toth <stoth@hauppauge.com>
Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
  • Loading branch information
Steven Toth authored and Mauro Carvalho Chehab committed Jan 25, 2008
1 parent 289d4d2 commit e92adc2
Showing 1 changed file with 9 additions and 7 deletions.
16 changes: 9 additions & 7 deletions drivers/media/video/cx23885/cx23885-i2c.c
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,8 @@ static int i2c_sendbytes(struct i2c_adapter *i2c_adap,
u32 wdata, addr, ctrl;
int retval, cnt;

dprintk(1, "%s()\n", __FUNCTION__);
dprintk(1, "%s(msg->len=%d, last=%d)\n", __FUNCTION__, msg->len, last);

/* Deal with i2c probe functions with zero payload */
if (msg->len == 0) {
cx_write(bus->reg_addr, msg->addr << 25);
Expand Down Expand Up @@ -127,7 +128,7 @@ static int i2c_sendbytes(struct i2c_adapter *i2c_adap,
wdata = msg->buf[cnt];
ctrl = bus->i2c_period | (1 << 12) | (1 << 2);

if (cnt < msg->len-1 || !last)
if (cnt < msg->len - 1)
ctrl |= I2C_NOSTOP | I2C_EXTEND;

cx_write(bus->reg_addr, addr);
Expand Down Expand Up @@ -162,7 +163,7 @@ static int i2c_readbytes(struct i2c_adapter *i2c_adap,
u32 ctrl, cnt;
int retval;

dprintk(1, "%s()\n", __FUNCTION__);
dprintk(1, "%s(msg->len=%d, last=%d)\n", __FUNCTION__, msg->len, last);

/* Deal with i2c probe functions with zero payload */
if (msg->len == 0) {
Expand All @@ -178,11 +179,14 @@ static int i2c_readbytes(struct i2c_adapter *i2c_adap,
return 0;
}

if (i2c_debug)
printk(" <R %02x", (msg->addr << 1) + 1);

for(cnt = 0; cnt < msg->len; cnt++) {

ctrl = bus->i2c_period | (1 << 12) | (1 << 2) | 1;

if (cnt < msg->len-1 || !last)
if (cnt < msg->len - 1)
ctrl |= I2C_NOSTOP | I2C_EXTEND;

cx_write(bus->reg_addr, msg->addr << 25);
Expand All @@ -195,9 +199,7 @@ static int i2c_readbytes(struct i2c_adapter *i2c_adap,
goto eio;
msg->buf[cnt] = cx_read(bus->reg_rdata) & 0xff;
if (i2c_debug) {
if (!(ctrl & I2C_NOSTOP))
printk(" <R %02x", (msg->addr << 1) +1);
printk(" =%02x", msg->buf[cnt]);
printk(" %02x", msg->buf[cnt]);
if (!(ctrl & I2C_NOSTOP))
printk(" >\n");
}
Expand Down

0 comments on commit e92adc2

Please sign in to comment.