aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc Koschewski <marc@osknowledge.org>2006-01-09 15:21:36 -0500
committerMauro Carvalho Chehab <mchehab@infradead.org>2006-01-09 15:21:36 -0500
commit1157020d542684e273242663d0befb58e284ade7 (patch)
treeae05b2ce05f678999f245dd2c1dc0e3fd75f30c2
parent00e34579feb563ca663be82d977c90241824503e (diff)
V4L/DVB (3323): Add Kconfig option for wrongly programmed devices
- A new Kconfig option makes the user able to select if the dibusb-mb driver shall claim faulty programmed USB devices which are coming with default Cypress USB IDs. Signed-off-by: Patrick Boettcher <pb@linuxtv.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@brturbo.com.br>
-rw-r--r--drivers/media/dvb/dvb-usb/Kconfig24
-rw-r--r--drivers/media/dvb/dvb-usb/dibusb-mb.c46
2 files changed, 43 insertions, 27 deletions
diff --git a/drivers/media/dvb/dvb-usb/Kconfig b/drivers/media/dvb/dvb-usb/Kconfig
index 54e2b29076b1..90a69d343b79 100644
--- a/drivers/media/dvb/dvb-usb/Kconfig
+++ b/drivers/media/dvb/dvb-usb/Kconfig
@@ -37,16 +37,16 @@ config DVB_USB_DIBUSB_MB
37 DiBcom (<http://www.dibcom.fr>) equipped with a DiB3000M-B demodulator. 37 DiBcom (<http://www.dibcom.fr>) equipped with a DiB3000M-B demodulator.
38 38
39 Devices supported by this driver: 39 Devices supported by this driver:
40 TwinhanDTV USB-Ter (VP7041) 40 Artec T1 USB1.1 boxes
41 TwinhanDTV Magic Box (VP7041e) 41 Avermedia AverTV DVBT USB1.1
42 KWorld/JetWay/ADSTech V-Stream XPERT DTV - DVB-T USB1.1 and USB2.0
43 Hama DVB-T USB1.1-Box
44 DiBcom USB1.1 reference devices (non-public)
45 Ultima Electronic/Artec T1 USB TVBOX
46 Compro Videomate DVB-U2000 - DVB-T USB 42 Compro Videomate DVB-U2000 - DVB-T USB
43 DiBcom USB1.1 reference devices (non-public)
47 Grandtec DVB-T USB 44 Grandtec DVB-T USB
48 Avermedia AverTV DVBT USB1.1 45 Hama DVB-T USB1.1-Box
49 Artec T1 USB1.1 boxes 46 KWorld/JetWay/ADSTech V-Stream XPERT DTV - DVB-T USB1.1 and USB2.0
47 TwinhanDTV Magic Box (VP7041e)
48 TwinhanDTV USB-Ter (VP7041)
49 Ultima Electronic/Artec T1 USB TVBOX
50 50
51 The VP7041 seems to be identical to "CTS Portable" (Chinese 51 The VP7041 seems to be identical to "CTS Portable" (Chinese
52 Television System). 52 Television System).
@@ -54,6 +54,12 @@ config DVB_USB_DIBUSB_MB
54 Say Y if you own such a device and want to use it. You should build it as 54 Say Y if you own such a device and want to use it. You should build it as
55 a module. 55 a module.
56 56
57config DVB_USB_DIBUSB_MB_FAULTY
58 bool "Support faulty USB IDs"
59 depends on DVB_USB_DIBUSB_MB
60 help
61 Support for faulty USB IDs due to an invalid EEPROM on some Artec devices.
62
57config DVB_USB_DIBUSB_MC 63config DVB_USB_DIBUSB_MC
58 tristate "DiBcom USB DVB-T devices (based on the DiB3000M-C/P) (see help for device list)" 64 tristate "DiBcom USB DVB-T devices (based on the DiB3000M-C/P) (see help for device list)"
59 depends on DVB_USB 65 depends on DVB_USB
@@ -63,8 +69,8 @@ config DVB_USB_DIBUSB_MC
63 DiBcom (<http://www.dibcom.fr>) equipped with a DiB3000M-C/P demodulator. 69 DiBcom (<http://www.dibcom.fr>) equipped with a DiB3000M-C/P demodulator.
64 70
65 Devices supported by this driver: 71 Devices supported by this driver:
66 DiBcom USB2.0 reference devices (non-public)
67 Artec T1 USB2.0 boxes 72 Artec T1 USB2.0 boxes
73 DiBcom USB2.0 reference devices (non-public)
68 74
69 Say Y if you own such a device and want to use it. You should build it as 75 Say Y if you own such a device and want to use it. You should build it as
70 a module. 76 a module.
diff --git a/drivers/media/dvb/dvb-usb/dibusb-mb.c b/drivers/media/dvb/dvb-usb/dibusb-mb.c
index 52ac3e5adf5d..dd5a13195886 100644
--- a/drivers/media/dvb/dvb-usb/dibusb-mb.c
+++ b/drivers/media/dvb/dvb-usb/dibusb-mb.c
@@ -65,11 +65,11 @@ static int dibusb_tuner_probe_and_attach(struct dvb_usb_device *d)
65 d->tuner_pass_ctrl(d->fe,0,msg[0].addr); 65 d->tuner_pass_ctrl(d->fe,0,msg[0].addr);
66 66
67 if (b2[0] == 0xfe) { 67 if (b2[0] == 0xfe) {
68 info("this device has the Thomson Cable onboard. Which is default."); 68 info("This device has the Thomson Cable onboard. Which is default.");
69 dibusb_thomson_tuner_attach(d); 69 dibusb_thomson_tuner_attach(d);
70 } else { 70 } else {
71 u8 bpll[4] = { 0x0b, 0xf5, 0x85, 0xab }; 71 u8 bpll[4] = { 0x0b, 0xf5, 0x85, 0xab };
72 info("this device has the Panasonic ENV77H11D5 onboard."); 72 info("This device has the Panasonic ENV77H11D5 onboard.");
73 d->pll_addr = 0x60; 73 d->pll_addr = 0x60;
74 memcpy(d->pll_init,bpll,4); 74 memcpy(d->pll_init,bpll,4);
75 d->pll_desc = &dvb_pll_tda665x; 75 d->pll_desc = &dvb_pll_tda665x;
@@ -98,15 +98,15 @@ static int dibusb_probe(struct usb_interface *intf,
98 98
99/* do not change the order of the ID table */ 99/* do not change the order of the ID table */
100static struct usb_device_id dibusb_dib3000mb_table [] = { 100static struct usb_device_id dibusb_dib3000mb_table [] = {
101/* 00 */ { USB_DEVICE(USB_VID_WIDEVIEW, USB_PID_AVERMEDIA_DVBT_USB_COLD)}, 101/* 00 */ { USB_DEVICE(USB_VID_WIDEVIEW, USB_PID_AVERMEDIA_DVBT_USB_COLD) },
102/* 01 */ { USB_DEVICE(USB_VID_WIDEVIEW, USB_PID_AVERMEDIA_DVBT_USB_WARM)}, 102/* 01 */ { USB_DEVICE(USB_VID_WIDEVIEW, USB_PID_AVERMEDIA_DVBT_USB_WARM) },
103/* 02 */ { USB_DEVICE(USB_VID_COMPRO, USB_PID_COMPRO_DVBU2000_COLD) }, 103/* 02 */ { USB_DEVICE(USB_VID_COMPRO, USB_PID_COMPRO_DVBU2000_COLD) },
104/* 03 */ { USB_DEVICE(USB_VID_COMPRO, USB_PID_COMPRO_DVBU2000_WARM) }, 104/* 03 */ { USB_DEVICE(USB_VID_COMPRO, USB_PID_COMPRO_DVBU2000_WARM) },
105/* 04 */ { USB_DEVICE(USB_VID_COMPRO_UNK, USB_PID_COMPRO_DVBU2000_UNK_COLD) }, 105/* 04 */ { USB_DEVICE(USB_VID_COMPRO_UNK, USB_PID_COMPRO_DVBU2000_UNK_COLD) },
106/* 05 */ { USB_DEVICE(USB_VID_DIBCOM, USB_PID_DIBCOM_MOD3000_COLD) }, 106/* 05 */ { USB_DEVICE(USB_VID_DIBCOM, USB_PID_DIBCOM_MOD3000_COLD) },
107/* 06 */ { USB_DEVICE(USB_VID_DIBCOM, USB_PID_DIBCOM_MOD3000_WARM) }, 107/* 06 */ { USB_DEVICE(USB_VID_DIBCOM, USB_PID_DIBCOM_MOD3000_WARM) },
108/* 07 */ { USB_DEVICE(USB_VID_EMPIA, USB_PID_KWORLD_VSTREAM_COLD) }, 108/* 07 */ { USB_DEVICE(USB_VID_EMPIA, USB_PID_KWORLD_VSTREAM_COLD) },
109/* 08 */ { USB_DEVICE(USB_VID_EMPIA, USB_PID_KWORLD_VSTREAM_WARM) }, 109/* 08 */ { USB_DEVICE(USB_VID_EMPIA, USB_PID_KWORLD_VSTREAM_WARM) },
110/* 09 */ { USB_DEVICE(USB_VID_GRANDTEC, USB_PID_GRANDTEC_DVBT_USB_COLD) }, 110/* 09 */ { USB_DEVICE(USB_VID_GRANDTEC, USB_PID_GRANDTEC_DVBT_USB_COLD) },
111/* 10 */ { USB_DEVICE(USB_VID_GRANDTEC, USB_PID_GRANDTEC_DVBT_USB_WARM) }, 111/* 10 */ { USB_DEVICE(USB_VID_GRANDTEC, USB_PID_GRANDTEC_DVBT_USB_WARM) },
112/* 11 */ { USB_DEVICE(USB_VID_GRANDTEC, USB_PID_DIBCOM_MOD3000_COLD) }, 112/* 11 */ { USB_DEVICE(USB_VID_GRANDTEC, USB_PID_DIBCOM_MOD3000_COLD) },
@@ -117,27 +117,34 @@ static struct usb_device_id dibusb_dib3000mb_table [] = {
117/* 16 */ { USB_DEVICE(USB_VID_VISIONPLUS, USB_PID_TWINHAN_VP7041_WARM) }, 117/* 16 */ { USB_DEVICE(USB_VID_VISIONPLUS, USB_PID_TWINHAN_VP7041_WARM) },
118/* 17 */ { USB_DEVICE(USB_VID_TWINHAN, USB_PID_TWINHAN_VP7041_COLD) }, 118/* 17 */ { USB_DEVICE(USB_VID_TWINHAN, USB_PID_TWINHAN_VP7041_COLD) },
119/* 18 */ { USB_DEVICE(USB_VID_TWINHAN, USB_PID_TWINHAN_VP7041_WARM) }, 119/* 18 */ { USB_DEVICE(USB_VID_TWINHAN, USB_PID_TWINHAN_VP7041_WARM) },
120/* 19 */ { USB_DEVICE(USB_VID_ULTIMA_ELECTRONIC, USB_PID_ULTIMA_TVBOX_COLD) }, 120/* 19 */ { USB_DEVICE(USB_VID_ULTIMA_ELECTRONIC, USB_PID_ULTIMA_TVBOX_COLD) },
121/* 20 */ { USB_DEVICE(USB_VID_ULTIMA_ELECTRONIC, USB_PID_ULTIMA_TVBOX_WARM) }, 121/* 20 */ { USB_DEVICE(USB_VID_ULTIMA_ELECTRONIC, USB_PID_ULTIMA_TVBOX_WARM) },
122/* 21 */ { USB_DEVICE(USB_VID_ULTIMA_ELECTRONIC, USB_PID_ULTIMA_TVBOX_AN2235_COLD) }, 122/* 21 */ { USB_DEVICE(USB_VID_ULTIMA_ELECTRONIC, USB_PID_ULTIMA_TVBOX_AN2235_COLD) },
123/* 22 */ { USB_DEVICE(USB_VID_ULTIMA_ELECTRONIC, USB_PID_ULTIMA_TVBOX_AN2235_WARM) }, 123/* 22 */ { USB_DEVICE(USB_VID_ULTIMA_ELECTRONIC, USB_PID_ULTIMA_TVBOX_AN2235_WARM) },
124/* 23 */ { USB_DEVICE(USB_VID_ADSTECH, USB_PID_ADSTECH_USB2_COLD) }, 124/* 23 */ { USB_DEVICE(USB_VID_ADSTECH, USB_PID_ADSTECH_USB2_COLD) },
125 125
126/* device ID with default DIBUSB2_0-firmware and with the hacked firmware */ 126/* device ID with default DIBUSB2_0-firmware and with the hacked firmware */
127/* 24 */ { USB_DEVICE(USB_VID_ADSTECH, USB_PID_ADSTECH_USB2_WARM) }, 127/* 24 */ { USB_DEVICE(USB_VID_ADSTECH, USB_PID_ADSTECH_USB2_WARM) },
128/* 25 */ { USB_DEVICE(USB_VID_KYE, USB_PID_KYE_DVB_T_COLD) }, 128/* 25 */ { USB_DEVICE(USB_VID_KYE, USB_PID_KYE_DVB_T_COLD) },
129/* 26 */ { USB_DEVICE(USB_VID_KYE, USB_PID_KYE_DVB_T_WARM) }, 129/* 26 */ { USB_DEVICE(USB_VID_KYE, USB_PID_KYE_DVB_T_WARM) },
130 130
131/* 27 */ { USB_DEVICE(USB_VID_KWORLD, USB_PID_KWORLD_VSTREAM_COLD) }, 131/* 27 */ { USB_DEVICE(USB_VID_KWORLD, USB_PID_KWORLD_VSTREAM_COLD) },
132 132
133/* 28 */ { USB_DEVICE(USB_VID_ULTIMA_ELECTRONIC, USB_PID_ULTIMA_TVBOX_USB2_COLD) }, 133/* 28 */ { USB_DEVICE(USB_VID_ULTIMA_ELECTRONIC, USB_PID_ULTIMA_TVBOX_USB2_COLD) },
134/* 29 */ { USB_DEVICE(USB_VID_ULTIMA_ELECTRONIC, USB_PID_ULTIMA_TVBOX_USB2_WARM) }, 134/* 29 */ { USB_DEVICE(USB_VID_ULTIMA_ELECTRONIC, USB_PID_ULTIMA_TVBOX_USB2_WARM) },
135 135
136// #define DVB_USB_DIBUSB_MB_FAULTY_USB_IDs 136/*
137 * XXX: As Artec just 'forgot' to program the EEPROM on some Artec T1 devices
138 * we don't catch these faulty IDs (namely 'Cypress FX1 USB controller') that
139 * have been left on the device. If you don't have such a device but an Artec
140 * device that's supposed to work with this driver but is not detected by it,
141 * free to enable CONFIG_DVB_USB_DIBUSB_MB_FAULTY via your kernel config.
142 */
137 143
138#ifdef DVB_USB_DIBUSB_MB_FAULTY_USB_IDs 144#ifdef CONFIG_DVB_USB_DIBUSB_MB_FAULTY
139/* 30 */ { USB_DEVICE(USB_VID_ANCHOR, USB_PID_ULTIMA_TVBOX_ANCHOR_COLD) }, 145/* 30 */ { USB_DEVICE(USB_VID_ANCHOR, USB_PID_ULTIMA_TVBOX_ANCHOR_COLD) },
140#endif 146#endif
147
141 { } /* Terminating entry */ 148 { } /* Terminating entry */
142}; 149};
143MODULE_DEVICE_TABLE (usb, dibusb_dib3000mb_table); 150MODULE_DEVICE_TABLE (usb, dibusb_dib3000mb_table);
@@ -257,7 +264,7 @@ static struct dvb_usb_properties dibusb1_1_an2235_properties = {
257 } 264 }
258 }, 265 },
259 266
260#ifdef DVB_USB_DIBUSB_MB_FAULTY_USB_IDs 267#ifdef CONFIG_DVB_USB_DIBUSB_MB_FAULTY
261 .num_device_descs = 2, 268 .num_device_descs = 2,
262#else 269#else
263 .num_device_descs = 1, 270 .num_device_descs = 1,
@@ -267,11 +274,12 @@ static struct dvb_usb_properties dibusb1_1_an2235_properties = {
267 { &dibusb_dib3000mb_table[20], NULL }, 274 { &dibusb_dib3000mb_table[20], NULL },
268 { &dibusb_dib3000mb_table[21], NULL }, 275 { &dibusb_dib3000mb_table[21], NULL },
269 }, 276 },
270#ifdef DVB_USB_DIBUSB_MB_FAULTY_USB_IDs 277#ifdef CONFIG_DVB_USB_DIBUSB_MB_FAULTY
271 { "Artec T1 USB1.1 TVBOX with AN2235 (faulty USB IDs)", 278 { "Artec T1 USB1.1 TVBOX with AN2235 (faulty USB IDs)",
272 { &dibusb_dib3000mb_table[30], NULL }, 279 { &dibusb_dib3000mb_table[30], NULL },
273 { NULL }, 280 { NULL },
274 }, 281 },
282 { NULL },
275#endif 283#endif
276 } 284 }
277}; 285};
@@ -323,6 +331,7 @@ static struct dvb_usb_properties dibusb2_0b_properties = {
323 { &dibusb_dib3000mb_table[27], NULL }, 331 { &dibusb_dib3000mb_table[27], NULL },
324 { NULL } 332 { NULL }
325 }, 333 },
334 { NULL },
326 } 335 }
327}; 336};
328 337
@@ -369,6 +378,7 @@ static struct dvb_usb_properties artec_t1_usb2_properties = {
369 { &dibusb_dib3000mb_table[28], NULL }, 378 { &dibusb_dib3000mb_table[28], NULL },
370 { &dibusb_dib3000mb_table[29], NULL }, 379 { &dibusb_dib3000mb_table[29], NULL },
371 }, 380 },
381 { NULL },
372 } 382 }
373}; 383};
374 384