V4L/DVB (11062): au8522: fix register read/write high bits
authorDevin Heitmueller <dheitmueller@linuxtv.org>
Wed, 11 Mar 2009 06:00:19 +0000 (03:00 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Mon, 30 Mar 2009 15:43:24 +0000 (12:43 -0300)
For the i2c messages to read and write registers, the two high order bits
of the first byte dictates whether it is a read or a write operation.

Thanks to Michael Krufky <mkrufky@linuxtv.org> and Steven Toth
<stoth@linuxtv.org> for providing sample hardware, engineering level support,
and testing.

Signed-off-by: Devin Heitmueller <dheitmueller@linuxtv.org>
Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/dvb/frontends/au8522_dig.c

index 8082547c73e2e94ad24564e68cfaa9bdac1ab946..17bdbe2c67e6cd484f6d9ae52c8e5b62cca64bfd 100644 (file)
@@ -40,7 +40,7 @@ static int debug;
 int au8522_writereg(struct au8522_state *state, u16 reg, u8 data)
 {
        int ret;
-       u8 buf [] = { reg >> 8, reg & 0xff, data };
+       u8 buf [] = { (reg >> 8) | 0x80, reg & 0xff, data };
 
        struct i2c_msg msg = { .addr = state->config->demod_address,
                               .flags = 0, .buf = buf, .len = 3 };
@@ -57,7 +57,7 @@ int au8522_writereg(struct au8522_state *state, u16 reg, u8 data)
 u8 au8522_readreg(struct au8522_state *state, u16 reg)
 {
        int ret;
-       u8 b0 [] = { reg >> 8, reg & 0xff };
+       u8 b0 [] = { (reg >> 8) | 0x40, reg & 0xff };
        u8 b1 [] = { 0 };
 
        struct i2c_msg msg [] = {