V4L/DVB (12096): Bug fix: stv0900 register read must using i2c in one transaction

Signed-off-by: Abylay Ospan <aospan@netup.ru>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
Abylay Ospan 2009-06-14 14:10:05 -03:00 committed by Mauro Carvalho Chehab
parent 0cde9b2533
commit 68191edeb5

View File

@ -149,31 +149,31 @@ void stv0900_write_reg(struct stv0900_internal *i_params, u16 reg_addr,
dprintk(KERN_ERR "%s: i2c error %d\n", __func__, ret);
}
u8 stv0900_read_reg(struct stv0900_internal *i_params, u16 reg_addr)
u8 stv0900_read_reg(struct stv0900_internal *i_params, u16 reg)
{
u8 data[2];
int ret;
struct i2c_msg i2cmsg = {
.addr = i_params->i2c_addr,
.flags = 0,
.len = 2,
.buf = data,
u8 b0[] = { MSB(reg), LSB(reg) };
u8 buf = 0;
struct i2c_msg msg[] = {
{
.addr = i_params->i2c_addr,
.flags = 0,
.buf = b0,
.len = 2,
}, {
.addr = i_params->i2c_addr,
.flags = I2C_M_RD,
.buf = &buf,
.len = 1,
},
};
data[0] = MSB(reg_addr);
data[1] = LSB(reg_addr);
ret = i2c_transfer(i_params->i2c_adap, msg, 2);
if (ret != 2)
dprintk(KERN_ERR "%s: i2c error %d, reg[0x%02x]\n",
__func__, ret, reg);
ret = i2c_transfer(i_params->i2c_adap, &i2cmsg, 1);
if (ret != 1)
dprintk(KERN_ERR "%s: i2c error %d\n", __func__, ret);
i2cmsg.flags = I2C_M_RD;
i2cmsg.len = 1;
ret = i2c_transfer(i_params->i2c_adap, &i2cmsg, 1);
if (ret != 1)
dprintk(KERN_ERR "%s: i2c error %d\n", __func__, ret);
return data[0];
return buf;
}
void extract_mask_pos(u32 label, u8 *mask, u8 *pos)