V4L/DVB (12840): tm6000: add support for HVR900H
authorMauro Carvalho Chehab <mchehab@redhat.com>
Sat, 25 Oct 2008 11:56:22 +0000 (08:56 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 18 May 2010 03:40:18 +0000 (00:40 -0300)
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/staging/tm6000/tm6000-cards.c

index 650ed8e88f38db69feaf08c4e118d333b2e0eaa1..4e9fa38f2cfe0cc1a9889dc32dfa1a185e378011 100644 (file)
@@ -40,6 +40,7 @@
 #define TM6000_BOARD_ADSTECH_DUAL_TV           6
 #define TM6000_BOARD_FREECOM_AND_SIMILAR       7
 #define TM6000_BOARD_ADSTECH_MINI_DUAL_TV      8
+#define TM6010_BOARD_HAUPPAUGE_900H            9
 
 #define TM6000_MAXBOARDS        16
 static unsigned int card[]     = {[0 ... (TM6000_MAXBOARDS - 1)] = UNSET };
@@ -161,6 +162,20 @@ struct tm6000_board tm6000_boards[] = {
                },
                .gpio_addr_tun_reset = TM6000_GPIO_4,
        },
+       [TM6010_BOARD_HAUPPAUGE_900H] = {
+               .name         = "Hauppauge HVR-900H",
+               .tuner_type   = TUNER_XC2028, /* has a XC3028 */
+               .tuner_addr   = 0xc2,
+               .demod_addr   = 0x1e,
+               .type         = TM6010,
+               .caps = {
+                       .has_tuner    = 1,
+                       .has_dvb      = 1,
+                       .has_zl10353  = 1,
+                       .has_eeprom   = 1,
+               },
+               .gpio_addr_tun_reset = TM6000_GPIO_2,
+       },
 };
 
 /* table of devices that work with this driver */
@@ -170,23 +185,19 @@ struct usb_device_id tm6000_id_table [] = {
        { USB_DEVICE(0x06e1, 0xf332), .driver_info = TM6000_BOARD_ADSTECH_DUAL_TV },
        { USB_DEVICE(0x14aa, 0x0620), .driver_info = TM6000_BOARD_FREECOM_AND_SIMILAR },
        { USB_DEVICE(0x06e1, 0xb339), .driver_info = TM6000_BOARD_ADSTECH_MINI_DUAL_TV },
+       { USB_DEVICE(0x2040, 0x6600), .driver_info = TM6010_BOARD_HAUPPAUGE_900H },
        { },
 };
 
 static void tm6000_config_tuner (struct tm6000_core *dev)
 {
-       struct v4l2_priv_tun_config  xc2028_cfg;
-       struct xc2028_ctrl           ctl;
-
-       memset (&ctl,0,sizeof(ctl));
-
        request_module ("tuner");
 
        if (dev->tuner_type == TUNER_XC2028) {
-               if (dev->dev_type == TM6010)
-                       ctl.fname = "xc3028-v27.fw";
-               else
-                       ctl.fname = "tm6000-xc3028.fw";
+               struct v4l2_priv_tun_config  xc2028_cfg;
+               struct xc2028_ctrl           ctl;
+
+               memset (&ctl,0,sizeof(ctl));
 
                ctl.mts   = 1;
                ctl.read_not_reliable = 1;
@@ -195,6 +206,17 @@ static void tm6000_config_tuner (struct tm6000_core *dev)
                xc2028_cfg.tuner = TUNER_XC2028;
                xc2028_cfg.priv  = &ctl;
 
+               switch(dev->model) {
+               case TM6010_BOARD_HAUPPAUGE_900H:
+                       ctl.fname = "xc3028L-v36.fw";
+                       break;
+               default:
+                       if (dev->dev_type == TM6010)
+                               ctl.fname = "xc3028-v27.fw";
+                       else
+                               ctl.fname = "tm6000-xc3028.fw";
+               }
+
                printk(KERN_INFO "Setting firmware parameters for xc2028\n");
 
                tm6000_i2c_call_clients(dev, TUNER_SET_CONFIG, &xc2028_cfg);