[media] af9035: correct TS mode handling
authorAntti Palosaari <crope@iki.fi>
Mon, 3 Jun 2013 22:39:51 +0000 (19:39 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sun, 9 Jun 2013 00:45:22 +0000 (21:45 -0300)
Signed-off-by: Antti Palosaari <crope@iki.fi>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/usb/dvb-usb-v2/af9035.c
drivers/media/usb/dvb-usb-v2/af9035.h

index e855ee6c86b573b279df01eb8e98105b68433ebc..1ea17dc2a76ed51b6560ae642c6f31301f4a57fe 100644 (file)
@@ -518,11 +518,11 @@ static int af9035_download_firmware(struct dvb_usb_device *d,
         * which is done by master demod.
         * Master feeds also clock and controls power via GPIO.
         */
-       ret = af9035_rd_reg(d, state->eeprom_addr + EEPROM_DUAL_MODE, &tmp);
+       ret = af9035_rd_reg(d, state->eeprom_addr + EEPROM_TS_MODE, &tmp);
        if (ret < 0)
                goto err;
 
-       if (tmp) {
+       if (tmp == 1 || tmp == 3) {
                /* configure gpioh1, reset & power slave demod */
                ret = af9035_wr_reg_mask(d, 0x00d8b0, 0x01, 0x01);
                if (ret < 0)
@@ -640,13 +640,15 @@ static int af9035_read_config(struct dvb_usb_device *d)
        }
 
        /* check if there is dual tuners */
-       ret = af9035_rd_reg(d, state->eeprom_addr + EEPROM_DUAL_MODE, &tmp);
+       ret = af9035_rd_reg(d, state->eeprom_addr + EEPROM_TS_MODE, &tmp);
        if (ret < 0)
                goto err;
 
-       state->dual_mode = tmp;
-       dev_dbg(&d->udev->dev, "%s: dual mode=%d\n", __func__,
-                       state->dual_mode);
+       if (tmp == 1 || tmp == 3)
+               state->dual_mode = true;
+
+       dev_dbg(&d->udev->dev, "%s: ts mode=%d dual mode=%d\n", __func__,
+                       tmp, state->dual_mode);
 
        if (state->dual_mode) {
                /* read 2nd demodulator I2C address */
index b5827ca3a01ea811b2a7d47531ec420d16a292f9..a1c68d829b8ce7be68542ad1085dad46ce636b49 100644 (file)
@@ -100,8 +100,13 @@ static const u32 clock_lut_it9135[] = {
  * eeprom is memory mapped as read only. Writing that memory mapped address
  * will not corrupt eeprom.
  *
- * eeprom has value 0x00 single mode and 0x03 for dual mode as far as I have
- * seen to this day.
+ * TS mode:
+ * 0  TS
+ * 1  DCA + PIP
+ * 3  PIP
+ * n  DCA
+ *
+ * Values 0 and 3 are seen to this day. 0 for single TS and 3 for dual TS.
  */
 
 #define EEPROM_BASE_AF9035        0x42fd
@@ -109,7 +114,7 @@ static const u32 clock_lut_it9135[] = {
 #define EEPROM_SHIFT                0x10
 
 #define EEPROM_IR_MODE              0x10
-#define EEPROM_DUAL_MODE            0x29
+#define EEPROM_TS_MODE              0x29
 #define EEPROM_2ND_DEMOD_ADDR       0x2a
 #define EEPROM_IR_TYPE              0x2c
 #define EEPROM_1_IF_L               0x30