Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6
[pandora-kernel.git] / drivers / media / dvb / dvb-usb / dw2102.c
index 1b75da0..f5b9da1 100644 (file)
@@ -156,8 +156,7 @@ static int dw2102_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],
                /* read stv0299 register */
                value = msg[0].buf[0];/* register */
                for (i = 0; i < msg[1].len; i++) {
-                       value = value + i;
-                       ret = dw210x_op_rw(d->udev, 0xb5, value, 0,
+                       ret = dw210x_op_rw(d->udev, 0xb5, value + i, 0,
                                        buf6, 2, DW210X_READ_MSG);
                        msg[1].buf[i] = buf6[0];
                }
@@ -564,14 +563,15 @@ static int s6x0_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],
                                        i += 16;
                                        len -= 16;
                                } while (len > 0);
-                       } else if ((udev->descriptor.idProduct == 0x7500)
-                                       && (j < (num - 1))) {
+                       } else if (j < (num - 1)) {
                                /* write register addr before read */
                                u8 obuf[msg[j].len + 2];
                                obuf[0] = msg[j + 1].len;
                                obuf[1] = (msg[j].addr << 1);
                                memcpy(obuf + 2, msg[j].buf, msg[j].len);
-                               ret = dw210x_op_rw(d->udev, 0x92, 0, 0,
+                               ret = dw210x_op_rw(d->udev,
+                                               udev->descriptor.idProduct ==
+                                               0x7500 ? 0x92 : 0x90, 0, 0,
                                                obuf, msg[j].len + 2,
                                                DW210X_WRITE_MSG);
                                break;
@@ -581,8 +581,7 @@ static int s6x0_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],
                                obuf[0] = msg[j].len + 1;
                                obuf[1] = (msg[j].addr << 1);
                                memcpy(obuf + 2, msg[j].buf, msg[j].len);
-                               ret = dw210x_op_rw(d->udev,
-                                               (num > 1 ? 0x90 : 0x80), 0, 0,
+                               ret = dw210x_op_rw(d->udev, 0x80, 0, 0,
                                                obuf, msg[j].len + 2,
                                                DW210X_WRITE_MSG);
                                break;
@@ -1112,18 +1111,25 @@ static int zl100313_frontend_attach(struct dvb_usb_adapter *d)
 
 static int stv0288_frontend_attach(struct dvb_usb_adapter *d)
 {
+       u8 obuf[] = {7, 1};
+
        d->fe = dvb_attach(stv0288_attach, &earda_config,
                        &d->dev->i2c_adap);
-       if (d->fe != NULL) {
-               if (dvb_attach(stb6000_attach, d->fe, 0x61,
-                               &d->dev->i2c_adap)) {
-                       d->fe->ops.set_voltage = dw210x_set_voltage;
-                       info("Attached stv0288+stb6000!\n");
-                       return 0;
-               }
-       }
 
-       return -EIO;
+       if (d->fe == NULL)
+               return -EIO;
+
+       if (NULL == dvb_attach(stb6000_attach, d->fe, 0x61, &d->dev->i2c_adap))
+               return -EIO;
+
+       d->fe->ops.set_voltage = dw210x_set_voltage;
+
+       dw210x_op_rw(d->dev->udev, 0x8a, 0, 0, obuf, 2, DW210X_WRITE_MSG);
+
+       info("Attached stv0288+stb6000!\n");
+
+       return 0;
+
 }
 
 static int ds3000_frontend_attach(struct dvb_usb_adapter *d)
@@ -1218,8 +1224,8 @@ static int dw3101_tuner_attach(struct dvb_usb_adapter *adap)
 }
 
 static struct rc_map_table rc_map_dw210x_table[] = {
-       { 0xf80a, KEY_Q },              /*power*/
-       { 0xf80c, KEY_M },              /*mute*/
+       { 0xf80a, KEY_POWER2 },         /*power*/
+       { 0xf80c, KEY_MUTE },           /*mute*/
        { 0xf811, KEY_1 },
        { 0xf812, KEY_2 },
        { 0xf813, KEY_3 },
@@ -1230,25 +1236,25 @@ static struct rc_map_table rc_map_dw210x_table[] = {
        { 0xf818, KEY_8 },
        { 0xf819, KEY_9 },
        { 0xf810, KEY_0 },
-       { 0xf81c, KEY_PAGEUP }, /*ch+*/
-       { 0xf80f, KEY_PAGEDOWN },       /*ch-*/
-       { 0xf81a, KEY_O },              /*vol+*/
-       { 0xf80e, KEY_Z },              /*vol-*/
-       { 0xf804, KEY_R },              /*rec*/
-       { 0xf809, KEY_D },              /*fav*/
-       { 0xf808, KEY_BACKSPACE },      /*rewind*/
-       { 0xf807, KEY_A },              /*fast*/
-       { 0xf80b, KEY_P },              /*pause*/
-       { 0xf802, KEY_ESC },    /*cancel*/
-       { 0xf803, KEY_G },              /*tab*/
+       { 0xf81c, KEY_CHANNELUP },      /*ch+*/
+       { 0xf80f, KEY_CHANNELDOWN },    /*ch-*/
+       { 0xf81a, KEY_VOLUMEUP },       /*vol+*/
+       { 0xf80e, KEY_VOLUMEDOWN },     /*vol-*/
+       { 0xf804, KEY_RECORD },         /*rec*/
+       { 0xf809, KEY_FAVORITES },      /*fav*/
+       { 0xf808, KEY_REWIND },         /*rewind*/
+       { 0xf807, KEY_FASTFORWARD },    /*fast*/
+       { 0xf80b, KEY_PAUSE },          /*pause*/
+       { 0xf802, KEY_ESC },            /*cancel*/
+       { 0xf803, KEY_TAB },            /*tab*/
        { 0xf800, KEY_UP },             /*up*/
-       { 0xf81f, KEY_ENTER },  /*ok*/
-       { 0xf801, KEY_DOWN },   /*down*/
-       { 0xf805, KEY_C },              /*cap*/
-       { 0xf806, KEY_S },              /*stop*/
-       { 0xf840, KEY_F },              /*full*/
-       { 0xf81e, KEY_W },              /*tvmode*/
-       { 0xf81b, KEY_B },              /*recall*/
+       { 0xf81f, KEY_OK },             /*ok*/
+       { 0xf801, KEY_DOWN },           /*down*/
+       { 0xf805, KEY_CAMERA },         /*cap*/
+       { 0xf806, KEY_STOP },           /*stop*/
+       { 0xf840, KEY_ZOOM },           /*full*/
+       { 0xf81e, KEY_TV },             /*tvmode*/
+       { 0xf81b, KEY_LAST },           /*recall*/
 };
 
 static struct rc_map_table rc_map_tevii_table[] = {