[media] anysee: add support for Anysee E7 T2C
authorAntti Palosaari <crope@iki.fi>
Fri, 12 Aug 2011 21:29:46 +0000 (18:29 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Mon, 7 Nov 2011 12:26:57 +0000 (10:26 -0200)
Signed-off-by: Antti Palosaari <crope@iki.fi>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/dvb/dvb-usb/Kconfig
drivers/media/dvb/dvb-usb/anysee.c
drivers/media/dvb/dvb-usb/anysee.h

index 58257165761e1b016a58b30019a9388d395400b2..3e316f2f7de13b93b41f3b8bd1be1ee866c569cc 100644 (file)
@@ -311,6 +311,7 @@ config DVB_USB_ANYSEE
        select DVB_STV0900 if !DVB_FE_CUSTOMISE
        select DVB_STV6110 if !DVB_FE_CUSTOMISE
        select DVB_ISL6423 if !DVB_FE_CUSTOMISE
+       select DVB_CXD2820R if !DVB_FE_CUSTOMISE
        help
          Say Y here to support the Anysee E30, Anysee E30 Plus or
          Anysee E30 C Plus DVB USB2.0 receiver.
index 5f2278b73ee9c4375cea917d8bc45fd75e9827b7..9c1ed3b2da8b8982f700ef1337f175b118f49043 100644 (file)
@@ -41,6 +41,7 @@
 #include "stv0900.h"
 #include "stv6110.h"
 #include "isl6423.h"
+#include "cxd2820r.h"
 
 /* debug */
 static int dvb_usb_anysee_debug;
@@ -309,6 +310,17 @@ static struct tda18212_config anysee_tda18212_config = {
        .if_dvbc = 5000,
 };
 
+static struct tda18212_config anysee_tda18212_config2 = {
+       .i2c_address = 0x60 /* (0xc0 >> 1) */,
+       .if_dvbt_6 = 3550,
+       .if_dvbt_7 = 3700,
+       .if_dvbt_8 = 4150,
+       .if_dvbt2_6 = 3250,
+       .if_dvbt2_7 = 4000,
+       .if_dvbt2_8 = 4000,
+       .if_dvbc = 5000,
+};
+
 static struct cx24116_config anysee_cx24116_config = {
        .demod_address = (0xaa >> 1),
        .mpg_clk_pos_pol = 0x00,
@@ -339,6 +351,18 @@ static struct isl6423_config anysee_isl6423_config = {
        .addr = (0x10 >> 1),
 };
 
+static struct cxd2820r_config anysee_cxd2820r_config = {
+       .i2c_address = 0x6d, /* (0xda >> 1) */
+       .ts_mode = 0x38,
+       .if_dvbt_6 = 3550,
+       .if_dvbt_7 = 3700,
+       .if_dvbt_8 = 4150,
+       .if_dvbt2_6 = 3250,
+       .if_dvbt2_7 = 4000,
+       .if_dvbt2_8 = 4000,
+       .if_dvbc = 5000,
+};
+
 /*
  * New USB device strings: Mfr=1, Product=2, SerialNumber=0
  * Manufacturer: AMT.CO.KR
@@ -421,6 +445,14 @@ static struct isl6423_config anysee_isl6423_config = {
  * IOA[7] TS 1=enabled
  * IOE[5] STV0903 1=enabled
  *
+ * E7 T2C VID=1c73 PID=861f HW=20 FW=0.1 AMTCI=0.5 "anysee-E7T2C(LP)"
+ * PCB: 508T2C (rev0.3)
+ * parts: DNOQ44QCH106A(CXD2820R, TDA18212), TDA8024
+ * OEA=80 OEB=00 OEC=03 OED=f7 OEE=ff
+ * IOA=4d IOB=00 IOC=cc IOD=48 IOE=e4
+ * IOA[7] TS 1=enabled
+ * IOE[5] CXD2820R 1=enabled
+ *
  * E7 PTC VID=1c73 PID=861f HW=21 FW=0.1 AMTCI=?? "anysee-E7PTC(LP)"
  * PCB: 508PTC (rev0.5)
  * parts: ZL10353, TDA10023, DNOD44CDH086A(TDA18212)
@@ -437,7 +469,7 @@ static struct isl6423_config anysee_isl6423_config = {
  * IOD[6] ZL10353 1=enabled
  * IOE[0] IF 0=enabled
  *
- * E7 S2 VID=1c73 PID=861f HW=22 FW=0.1 AMTCI=?? "anysee-E7PS2(LP)"
+ * E7 PS2 VID=1c73 PID=861f HW=22 FW=0.1 AMTCI=?? "anysee-E7PS2(LP)"
  * PCB: 508PS2 (rev0.4)
  * parts: DNBU10512IST(STV0903, STV6110), ISL6423
  * OEA=80 OEB=00 OEC=03 OED=f7 OEE=ff
@@ -817,6 +849,32 @@ static int anysee_frontend_attach(struct dvb_usb_adapter *adap)
                adap->fe_adap[0].fe = dvb_attach(stv0900_attach, &anysee_stv0900_config,
                        &adap->dev->i2c_adap, 0);
 
+               break;
+       case ANYSEE_HW_508T2C: /* 20 */
+               /* E7 T2C */
+
+               /* enable transport stream on IOA[7] */
+               ret = anysee_wr_reg_mask(adap->dev, REG_IOA, (1 << 7), 0x80);
+               if (ret)
+                       goto error;
+
+               /* enable DVB-T/T2/C demod on IOE[5] */
+               ret = anysee_wr_reg_mask(adap->dev, REG_IOE, (1 << 5), 0x20);
+               if (ret)
+                       goto error;
+
+               if (state->fe_id == 0)  {
+                       /* DVB-T/T2 */
+                       adap->fe[0] = dvb_attach(cxd2820r_attach,
+                               &anysee_cxd2820r_config,
+                               &adap->dev->i2c_adap, NULL);
+               } else {
+                       /* DVB-C */
+                       adap->fe[1] = dvb_attach(cxd2820r_attach,
+                               &anysee_cxd2820r_config,
+                               &adap->dev->i2c_adap, adap->fe[0]);
+               }
+
                break;
        }
 
@@ -930,6 +988,15 @@ static int anysee_tuner_attach(struct dvb_usb_adapter *adap)
                }
 
                break;
+
+       case ANYSEE_HW_508T2C: /* 20 */
+               /* E7 T2C */
+
+               /* attach tuner */
+               fe = dvb_attach(tda18212_attach, adap->fe[state->fe_id],
+                       &adap->dev->i2c_adap, &anysee_tda18212_config2);
+
+               break;
        default:
                fe = NULL;
        }
index 57ee500b8c0e1c16d8c41e8bf51d40b1e6058014..da323507b50459a6c8c875b4aad577a6bfb9088f 100644 (file)
@@ -69,6 +69,7 @@ struct anysee_state {
 #define ANYSEE_HW_507FA  15 /* E30 Combo Plus / E30 C Plus */
 #define ANYSEE_HW_508TC  18 /* E7 TC */
 #define ANYSEE_HW_508S2  19 /* E7 S2 */
+#define ANYSEE_HW_508T2C 20 /* E7 T2C */
 #define ANYSEE_HW_508PTC 21 /* E7 PTC Plus */
 #define ANYSEE_HW_508PS2 22 /* E7 PS2 Plus */