diff options
Diffstat (limited to 'linux/drivers/media/dvb/dibusb/dvb-dibusb-core.c')
-rw-r--r-- | linux/drivers/media/dvb/dibusb/dvb-dibusb-core.c | 59 |
1 files changed, 39 insertions, 20 deletions
diff --git a/linux/drivers/media/dvb/dibusb/dvb-dibusb-core.c b/linux/drivers/media/dvb/dibusb/dvb-dibusb-core.c index 67fe74515..464b31c6e 100644 --- a/linux/drivers/media/dvb/dibusb/dvb-dibusb-core.c +++ b/linux/drivers/media/dvb/dibusb/dvb-dibusb-core.c @@ -52,7 +52,8 @@ MODULE_PARM_DESC(rc_key_repeat_count, "how many key repeats will be dropped befo /* Vendor IDs */ #define USB_VID_ADSTECH 0x06e1 #define USB_VID_ANCHOR 0x0547 -#define USB_VID_AVERMEDIA 0x14aa +#define USB_VID_AVERMEDIA_UNK 0x14aa +#define USB_VID_AVERMEDIA 0x07ca #define USB_VID_COMPRO 0x185b #define USB_VID_COMPRO_UNK 0x145f #define USB_VID_CYPRESS 0x04b4 @@ -71,6 +72,8 @@ MODULE_PARM_DESC(rc_key_repeat_count, "how many key repeats will be dropped befo #define USB_PID_ADSTECH_USB2_WARM 0xa334 #define USB_PID_AVERMEDIA_DVBT_USB_COLD 0x0001 #define USB_PID_AVERMEDIA_DVBT_USB_WARM 0x0002 +#define USB_PID_AVERMEDIA_DVBT_USB2_COLD 0xa800 +#define USB_PID_AVERMEDIA_DVBT_USB2_WARM 0xa801 #define USB_PID_COMPRO_DVBU2000_COLD 0xd000 #define USB_PID_COMPRO_DVBU2000_WARM 0xd001 #define USB_PID_COMPRO_DVBU2000_UNK_COLD 0x010c @@ -115,10 +118,10 @@ MODULE_PARM_DESC(rc_key_repeat_count, "how many key repeats will be dropped befo * vendor and product id is done, here. */ static struct usb_device_id dib_table [] = { -/* 00 */ { USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_DVBT_USB_COLD)}, -/* 01 */ { USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_DVBT_USB_WARM)}, -/* 02 */ { USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_YAKUMO_DTT200U_COLD) }, -/* 03 */ { USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_YAKUMO_DTT200U_WARM) }, +/* 00 */ { USB_DEVICE(USB_VID_AVERMEDIA_UNK, USB_PID_AVERMEDIA_DVBT_USB_COLD)}, +/* 01 */ { USB_DEVICE(USB_VID_AVERMEDIA_UNK, USB_PID_AVERMEDIA_DVBT_USB_WARM)}, +/* 02 */ { USB_DEVICE(USB_VID_AVERMEDIA_UNK, USB_PID_YAKUMO_DTT200U_COLD) }, +/* 03 */ { USB_DEVICE(USB_VID_AVERMEDIA_UNK, USB_PID_YAKUMO_DTT200U_WARM) }, /* 04 */ { USB_DEVICE(USB_VID_COMPRO, USB_PID_COMPRO_DVBU2000_COLD) }, /* 05 */ { USB_DEVICE(USB_VID_COMPRO, USB_PID_COMPRO_DVBU2000_WARM) }, @@ -152,16 +155,18 @@ static struct usb_device_id dib_table [] = { /* 31 */ { USB_DEVICE(USB_VID_HAUPPAUGE, USB_PID_WINTV_NOVA_T_USB2_WARM) }, /* 32 */ { USB_DEVICE(USB_VID_ADSTECH, USB_PID_ADSTECH_USB2_COLD) }, /* 33 */ { USB_DEVICE(USB_VID_ADSTECH, USB_PID_ADSTECH_USB2_WARM) }, +/* 34 */ { USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_DVBT_USB2_COLD) }, +/* 35 */ { USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_DVBT_USB2_WARM) }, /* * activate the following define when you have one of the devices and want to * build it from build-2.6 in dvb-kernel */ -#define CONFIG_DVB_DIBUSB_MISDESIGNED_DEVICES +// #define CONFIG_DVB_DIBUSB_MISDESIGNED_DEVICES #ifdef CONFIG_DVB_DIBUSB_MISDESIGNED_DEVICES -/* 34 */ { USB_DEVICE(USB_VID_ANCHOR, USB_PID_ULTIMA_TVBOX_ANCHOR_COLD) }, -/* 35 */ { USB_DEVICE(USB_VID_CYPRESS, USB_PID_ULTIMA_TVBOX_USB2_FX_COLD) }, -/* 36 */ { USB_DEVICE(USB_VID_ANCHOR, USB_PID_ULTIMA_TVBOX_USB2_FX_WARM) }, -/* 37 */ { USB_DEVICE(USB_VID_ANCHOR, USB_PID_DIBCOM_ANCHOR_2135_COLD) }, +/* 36 */ { USB_DEVICE(USB_VID_ANCHOR, USB_PID_ULTIMA_TVBOX_ANCHOR_COLD) }, +/* 37 */ { USB_DEVICE(USB_VID_CYPRESS, USB_PID_ULTIMA_TVBOX_USB2_FX_COLD) }, +/* 38 */ { USB_DEVICE(USB_VID_ANCHOR, USB_PID_ULTIMA_TVBOX_USB2_FX_WARM) }, +/* 39 */ { USB_DEVICE(USB_VID_ANCHOR, USB_PID_DIBCOM_ANCHOR_2135_COLD) }, #endif { } /* Terminating entry */ }; @@ -257,6 +262,14 @@ static struct dibusb_device_class dibusb_device_classes[] = { &dibusb_demod[DIBUSB_DIB3000MC], &dibusb_tuner[DIBUSB_TUNER_COFDM_PANASONIC_ENV57H1XD5], }, + { AVERTV_USB2,&dibusb_usb_ctrl[2], + "dvb-dibusb-avertv-usb2-1.fw", + 0x01, 0x06, + 7, 4096, + DIBUSB_RC_NO, + &dibusb_demod[DIBUSB_DIB3000MC], + &dibusb_tuner[DIBUSB_TUNER_COFDM_PANASONIC_ENV57H1XD5], + }, { DTT200U,&dibusb_usb_ctrl[2], "dvb-dtt200u-1.fw", 0x01, 0x02, @@ -298,7 +311,7 @@ static struct dibusb_usb_device dibusb_devices[] = { { &dib_table[25], NULL }, { &dib_table[26], NULL }, }, - { "Avermedia AverTV DVBT USB1.1", + { "AVerMedia AverTV DVBT USB1.1", &dibusb_device_classes[DIBUSB1_1], { &dib_table[0], NULL }, { &dib_table[1], NULL }, @@ -343,20 +356,25 @@ static struct dibusb_usb_device dibusb_devices[] = { { &dib_table[32], NULL }, { &dib_table[33], NULL }, /* device ID with default DIBUSB2_0-firmware */ }, + { "AVerMedia AverTV DVB-T USB 2.0 (A800)", + &dibusb_device_classes[AVERTV_USB2], + { &dib_table[34], NULL }, + { &dib_table[35], NULL }, + }, #ifdef CONFIG_DVB_DIBUSB_MISDESIGNED_DEVICES { "Artec T1 USB1.1 TVBOX with AN2235 (misdesigned)", &dibusb_device_classes[DIBUSB1_1_AN2235], - { &dib_table[34], NULL }, + { &dib_table[36], NULL }, { NULL }, }, { "Artec T1 USB2.0 TVBOX with FX2 IDs (misdesigned, please report the warm ID)", &dibusb_device_classes[DTT200U], - { &dib_table[35], NULL }, - { &dib_table[36], NULL }, /* undefined, it could be that the device will get another USB ID in warm state */ + { &dib_table[37], NULL }, + { &dib_table[38], NULL }, /* undefined, it could be that the device will get another USB ID in warm state */ }, { "DiBcom USB1.1 DVB-T reference design (MOD3000) with AN2135 default IDs", &dibusb_device_classes[DIBUSB1_1], - { &dib_table[37], NULL }, + { &dib_table[39], NULL }, { NULL }, }, #endif @@ -400,13 +418,14 @@ static int dibusb_init(struct usb_dibusb *dib) return 0; } -static struct dibusb_usb_device * dibusb_device_class_quirk(struct usb_device *udev, struct dibusb_usb_device *dev) +static struct dibusb_usb_device * dibusb_device_class_quirk(struct usb_device + *udev, struct dibusb_usb_device *dev, int *cold) { int i; - /* Quirk for the Kworld/ADSTech Instant USB2.0 device. It has the same USB - * IDs like the USB1.1 KWorld after loading the firmware. Which is a bad - * idea and make this quirk necessary. + /* Quirk-handling for the Kworld/ADSTech Instant USB2.0 device. It has the + * same USB IDs like the USB1.1 KWorld after loading the firmware. Which is + * a bad idea and make this quirk necessary. */ if (dev->dev_cl->id == DIBUSB1_1 && udev->speed == USB_SPEED_HIGH) { info("this seems to be the Kworld/ADSTech Instant USB2.0 device or equal."); @@ -453,7 +472,7 @@ static struct dibusb_usb_device * dibusb_find_device (struct usb_device *udev,in } if (dev != NULL) - dev = dibusb_device_class_quirk(udev,dev); + dev = dibusb_device_class_quirk(udev,dev,cold); return dev; } |