Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 208126
b: refs/heads/master
c: 5f27264
h: refs/heads/master
v: v3
  • Loading branch information
Andy Walls authored and Mauro Carvalho Chehab committed Aug 9, 2010
1 parent 64472d8 commit 6ac61c1
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 20 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 18a87becf85d50e7f3d547f1b7a75108b151374d
refs/heads/master: 5f272644464bfb8cf8cec958cfc06020283c2f14
58 changes: 39 additions & 19 deletions trunk/drivers/media/video/cx25840/cx25840-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -80,33 +80,53 @@ int cx25840_write4(struct i2c_client *client, u16 addr, u32 value)

u8 cx25840_read(struct i2c_client * client, u16 addr)
{
u8 buffer[2];
buffer[0] = addr >> 8;
buffer[1] = addr & 0xff;

if (i2c_master_send(client, buffer, 2) < 2)
return 0;

if (i2c_master_recv(client, buffer, 1) < 1)
struct i2c_msg msgs[2];
u8 tx_buf[2], rx_buf[1];

/* Write register address */
tx_buf[0] = addr >> 8;
tx_buf[1] = addr & 0xff;
msgs[0].addr = client->addr;
msgs[0].flags = 0;
msgs[0].len = 2;
msgs[0].buf = (char *) tx_buf;

/* Read data from register */
msgs[1].addr = client->addr;
msgs[1].flags = I2C_M_RD;
msgs[1].len = 1;
msgs[1].buf = (char *) rx_buf;

if (i2c_transfer(client->adapter, msgs, 2) < 2)
return 0;

return buffer[0];
return rx_buf[0];
}

u32 cx25840_read4(struct i2c_client * client, u16 addr)
{
u8 buffer[4];
buffer[0] = addr >> 8;
buffer[1] = addr & 0xff;

if (i2c_master_send(client, buffer, 2) < 2)
return 0;

if (i2c_master_recv(client, buffer, 4) < 4)
struct i2c_msg msgs[2];
u8 tx_buf[2], rx_buf[4];

/* Write register address */
tx_buf[0] = addr >> 8;
tx_buf[1] = addr & 0xff;
msgs[0].addr = client->addr;
msgs[0].flags = 0;
msgs[0].len = 2;
msgs[0].buf = (char *) tx_buf;

/* Read data from registers */
msgs[1].addr = client->addr;
msgs[1].flags = I2C_M_RD;
msgs[1].len = 4;
msgs[1].buf = (char *) rx_buf;

if (i2c_transfer(client->adapter, msgs, 2) < 2)
return 0;

return (buffer[3] << 24) | (buffer[2] << 16) |
(buffer[1] << 8) | buffer[0];
return (rx_buf[3] << 24) | (rx_buf[2] << 16) | (rx_buf[1] << 8) |
rx_buf[0];
}

int cx25840_and_or(struct i2c_client *client, u16 addr, unsigned and_mask,
Expand Down

0 comments on commit 6ac61c1

Please sign in to comment.