V4L/DVB (10927): dib0700: add support for Hauppauge ATSC MiniCard
authorMichael Krufky <mkrufky@linuxtv.org>
Mon, 19 Jan 2009 04:12:55 +0000 (01:12 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Mon, 30 Mar 2009 15:43:16 +0000 (12:43 -0300)
Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/dvb/dvb-usb/Kconfig
drivers/media/dvb/dvb-usb/dib0700_devices.c
drivers/media/dvb/dvb-usb/dvb-usb-ids.h

index 64fa1d1..b899d50 100644 (file)
@@ -73,11 +73,13 @@ config DVB_USB_DIB0700
        select DVB_DIB7000M if !DVB_FE_CUSTOMISE
        select DVB_DIB3000MC if !DVB_FE_CUSTOMISE
        select DVB_S5H1411 if !DVB_FE_CUSTOMISE
+       select DVB_LGDT3305 if !DVB_FE_CUSTOMISE
        select DVB_TUNER_DIB0070 if !DVB_FE_CUSTOMISE
        select MEDIA_TUNER_MT2060 if !MEDIA_TUNER_CUSTOMIZE
        select MEDIA_TUNER_MT2266 if !MEDIA_TUNER_CUSTOMIZE
        select MEDIA_TUNER_XC2028 if !MEDIA_TUNER_CUSTOMIZE
        select MEDIA_TUNER_XC5000 if !MEDIA_TUNER_CUSTOMIZE
+       select MEDIA_TUNER_MXL5007T if !MEDIA_TUNER_CUSTOMIZE
        help
          Support for USB2.0/1.1 DVB receivers based on the DiB0700 USB bridge. The
          USB bridge is also present in devices having the DiB7700 DVB-T-USB
index 8877215..1dba4ea 100644 (file)
@@ -17,6 +17,8 @@
 #include "xc5000.h"
 #include "s5h1411.h"
 #include "dib0070.h"
+#include "lgdt3305.h"
+#include "mxl5007t.h"
 
 static int force_lna_activation;
 module_param(force_lna_activation, int, 0644);
@@ -1370,6 +1372,72 @@ static int xc5000_tuner_attach(struct dvb_usb_adapter *adap)
                == NULL ? -ENODEV : 0;
 }
 
+static struct lgdt3305_config hcw_lgdt3305_config = {
+       .i2c_addr           = 0x0e,
+       .mpeg_mode          = LGDT3305_MPEG_PARALLEL,
+       .tpclk_edge         = LGDT3305_TPCLK_FALLING_EDGE,
+       .tpvalid_polarity   = LGDT3305_TP_VALID_LOW,
+       .deny_i2c_rptr      = 0,
+       .spectral_inversion = 1,
+       .qam_if_khz         = 6000,
+       .vsb_if_khz         = 6000,
+       .usref_8vsb         = 0x0500,
+};
+
+static struct mxl5007t_config hcw_mxl5007t_config = {
+       .xtal_freq_hz = MxL_XTAL_25_MHZ,
+       .if_freq_hz = MxL_IF_6_MHZ,
+       .invert_if = 1,
+};
+
+/* TIGER-ATSC map:
+   GPIO0  - LNA_CTR  (H: LNA power enabled, L: LNA power disabled)
+   GPIO1  - ANT_SEL  (H: VPA, L: MCX)
+   GPIO4  - SCL2
+   GPIO6  - EN_TUNER
+   GPIO7  - SDA2
+   GPIO10 - DEM_RST
+
+   MXL is behind LG's i2c repeater.  LG is on SCL2/SDA2 gpios on the DIB
+ */
+static int lgdt3305_frontend_attach(struct dvb_usb_adapter *adap)
+{
+       struct dib0700_state *st = adap->dev->priv;
+
+       /* Make use of the new i2c functions from FW 1.20 */
+       st->fw_use_new_i2c_api = 1;
+
+       st->disable_streaming_master_mode = 1;
+
+       /* fe power enable */
+       dib0700_set_gpio(adap->dev, GPIO6, GPIO_OUT, 0);
+       msleep(30);
+       dib0700_set_gpio(adap->dev, GPIO6, GPIO_OUT, 1);
+       msleep(30);
+
+       /* demod reset */
+       dib0700_set_gpio(adap->dev, GPIO10, GPIO_OUT, 1);
+       msleep(30);
+       dib0700_set_gpio(adap->dev, GPIO10, GPIO_OUT, 0);
+       msleep(30);
+       dib0700_set_gpio(adap->dev, GPIO10, GPIO_OUT, 1);
+       msleep(30);
+
+       adap->fe = dvb_attach(lgdt3305_attach,
+                             &hcw_lgdt3305_config,
+                             &adap->dev->i2c_adap);
+
+       return adap->fe == NULL ? -ENODEV : 0;
+}
+
+static int mxl5007t_tuner_attach(struct dvb_usb_adapter *adap)
+{
+       return dvb_attach(mxl5007t_attach, adap->fe,
+                         &adap->dev->i2c_adap, 0x60,
+                         &hcw_mxl5007t_config) == NULL ? -ENODEV : 0;
+}
+
+
 /* DVB-USB and USB stuff follows */
 struct usb_device_id dib0700_usb_id_table[] = {
 /* 0 */        { USB_DEVICE(USB_VID_DIBCOM,    USB_PID_DIBCOM_STK7700P) },
@@ -1421,6 +1489,8 @@ struct usb_device_id dib0700_usb_id_table[] = {
                        USB_PID_TERRATEC_CINERGY_DT_XS_DIVERSITY_2) },
        { USB_DEVICE(USB_VID_SONY,      USB_PID_SONY_PLAYTV) },
 /* 45 */{ USB_DEVICE(USB_VID_YUAN,      USB_PID_YUAN_PD378S) },
+       { USB_DEVICE(USB_VID_HAUPPAUGE, USB_PID_HAUPPAUGE_TIGER_ATSC) },
+       { USB_DEVICE(USB_VID_HAUPPAUGE, USB_PID_HAUPPAUGE_TIGER_ATSC_B210) },
        { 0 }           /* Terminating entry */
 };
 MODULE_DEVICE_TABLE(usb, dib0700_usb_id_table);
@@ -1796,6 +1866,31 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                .rc_key_map       = dib0700_rc_keys,
                .rc_key_map_size  = ARRAY_SIZE(dib0700_rc_keys),
                .rc_query         = dib0700_rc_query
+       }, { DIB0700_DEFAULT_DEVICE_PROPERTIES,
+               .num_adapters = 1,
+               .adapter = {
+                       {
+                               .frontend_attach  = lgdt3305_frontend_attach,
+                               .tuner_attach     = mxl5007t_tuner_attach,
+
+                               DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
+
+                               .size_of_priv = sizeof(struct
+                                               dib0700_adapter_state),
+                       },
+               },
+
+               .num_device_descs = 2,
+               .devices = {
+                       {   "Hauppauge ATSC MiniCard (B200)",
+                               { &dib0700_usb_id_table[46], NULL },
+                               { NULL },
+                       },
+                       {   "Hauppauge ATSC MiniCard (B210)",
+                               { &dib0700_usb_id_table[47], NULL },
+                               { NULL },
+                       },
+               },
        },
 };
 
index 6d70576..3dfb271 100644 (file)
 #define USB_PID_HAUPPAUGE_MYTV_T                       0x7080
 #define USB_PID_HAUPPAUGE_NOVA_TD_STICK                        0x9580
 #define USB_PID_HAUPPAUGE_NOVA_TD_STICK_52009          0x5200
+#define USB_PID_HAUPPAUGE_TIGER_ATSC                   0xb200
+#define USB_PID_HAUPPAUGE_TIGER_ATSC_B210              0xb210
 #define USB_PID_AVERMEDIA_EXPRESS                      0xb568
 #define USB_PID_AVERMEDIA_VOLAR                                0xa807
 #define USB_PID_AVERMEDIA_VOLAR_2                      0xb808