summaryrefslogtreecommitdiff
path: root/linux
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@redhat.com>2008-10-25 09:56:22 -0200
committerMauro Carvalho Chehab <mchehab@redhat.com>2008-10-25 09:56:22 -0200
commitddd730e4a38d2c5bc43579d550bdad19686d768b (patch)
treeefc27cce55e157eb13b40df6ad03e1d68a1e9bae /linux
parente4a1ecf9bf28859305f1093c30b5c2ebf658112c (diff)
downloadmediapointer-dvb-s2-ddd730e4a38d2c5bc43579d550bdad19686d768b.tar.gz
mediapointer-dvb-s2-ddd730e4a38d2c5bc43579d550bdad19686d768b.tar.bz2
tm6000: add support for HVR900H
From: Mauro Carvalho Chehab <mchehab@redhat.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'linux')
-rw-r--r--linux/drivers/staging/tm6000/tm6000-cards.c40
1 files changed, 31 insertions, 9 deletions
diff --git a/linux/drivers/staging/tm6000/tm6000-cards.c b/linux/drivers/staging/tm6000/tm6000-cards.c
index d1fbaaa3d..22b73af9c 100644
--- a/linux/drivers/staging/tm6000/tm6000-cards.c
+++ b/linux/drivers/staging/tm6000/tm6000-cards.c
@@ -41,6 +41,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 };
@@ -176,6 +177,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 */
@@ -185,23 +200,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;
@@ -210,6 +221,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);