Merge branch 'sh-latest' of git://git.kernel.org/pub/scm/linux/kernel/git/lethal...
[pandora-kernel.git] / drivers / media / dvb / frontends / dib0070.c
index d4e466a..1d47d4d 100644 (file)
@@ -73,27 +73,47 @@ struct dib0070_state {
 
     u8  wbd_gain_current;
        u16 wbd_offset_3_3[2];
+
+       /* for the I2C transfer */
+       struct i2c_msg msg[2];
+       u8 i2c_write_buffer[3];
+       u8 i2c_read_buffer[2];
 };
 
 static uint16_t dib0070_read_reg(struct dib0070_state *state, u8 reg)
 {
-       u8 b[2];
-       struct i2c_msg msg[2] = {
-               { .addr = state->cfg->i2c_address, .flags = 0,        .buf = &reg, .len = 1 },
-               { .addr = state->cfg->i2c_address, .flags = I2C_M_RD, .buf = b,  .len = 2 },
-       };
-       if (i2c_transfer(state->i2c, msg, 2) != 2) {
+       state->i2c_write_buffer[0] = reg;
+
+       memset(state->msg, 0, 2 * sizeof(struct i2c_msg));
+       state->msg[0].addr = state->cfg->i2c_address;
+       state->msg[0].flags = 0;
+       state->msg[0].buf = state->i2c_write_buffer;
+       state->msg[0].len = 1;
+       state->msg[1].addr = state->cfg->i2c_address;
+       state->msg[1].flags = I2C_M_RD;
+       state->msg[1].buf = state->i2c_read_buffer;
+       state->msg[1].len = 2;
+
+       if (i2c_transfer(state->i2c, state->msg, 2) != 2) {
                printk(KERN_WARNING "DiB0070 I2C read failed\n");
                return 0;
        }
-       return (b[0] << 8) | b[1];
+       return (state->i2c_read_buffer[0] << 8) | state->i2c_read_buffer[1];
 }
 
 static int dib0070_write_reg(struct dib0070_state *state, u8 reg, u16 val)
 {
-       u8 b[3] = { reg, val >> 8, val & 0xff };
-       struct i2c_msg msg = { .addr = state->cfg->i2c_address, .flags = 0, .buf = b, .len = 3 };
-       if (i2c_transfer(state->i2c, &msg, 1) != 1) {
+       state->i2c_write_buffer[0] = reg;
+       state->i2c_write_buffer[1] = val >> 8;
+       state->i2c_write_buffer[2] = val & 0xff;
+
+       memset(state->msg, 0, sizeof(struct i2c_msg));
+       state->msg[0].addr = state->cfg->i2c_address;
+       state->msg[0].flags = 0;
+       state->msg[0].buf = state->i2c_write_buffer;
+       state->msg[0].len = 3;
+
+       if (i2c_transfer(state->i2c, state->msg, 1) != 1) {
                printk(KERN_WARNING "DiB0070 I2C write failed\n");
                return -EREMOTEIO;
        }