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>
This commit is contained in:
committed by
Mauro Carvalho Chehab
parent
00e34579fe
commit
1157020d54
@@ -37,16 +37,16 @@ config DVB_USB_DIBUSB_MB
|
|||||||
DiBcom (<http://www.dibcom.fr>) equipped with a DiB3000M-B demodulator.
|
DiBcom (<http://www.dibcom.fr>) equipped with a DiB3000M-B demodulator.
|
||||||
|
|
||||||
Devices supported by this driver:
|
Devices supported by this driver:
|
||||||
TwinhanDTV USB-Ter (VP7041)
|
|
||||||
TwinhanDTV Magic Box (VP7041e)
|
|
||||||
KWorld/JetWay/ADSTech V-Stream XPERT DTV - DVB-T USB1.1 and USB2.0
|
|
||||||
Hama DVB-T USB1.1-Box
|
|
||||||
DiBcom USB1.1 reference devices (non-public)
|
|
||||||
Ultima Electronic/Artec T1 USB TVBOX
|
|
||||||
Compro Videomate DVB-U2000 - DVB-T USB
|
|
||||||
Grandtec DVB-T USB
|
|
||||||
Avermedia AverTV DVBT USB1.1
|
|
||||||
Artec T1 USB1.1 boxes
|
Artec T1 USB1.1 boxes
|
||||||
|
Avermedia AverTV DVBT USB1.1
|
||||||
|
Compro Videomate DVB-U2000 - DVB-T USB
|
||||||
|
DiBcom USB1.1 reference devices (non-public)
|
||||||
|
Grandtec DVB-T USB
|
||||||
|
Hama DVB-T USB1.1-Box
|
||||||
|
KWorld/JetWay/ADSTech V-Stream XPERT DTV - DVB-T USB1.1 and USB2.0
|
||||||
|
TwinhanDTV Magic Box (VP7041e)
|
||||||
|
TwinhanDTV USB-Ter (VP7041)
|
||||||
|
Ultima Electronic/Artec T1 USB TVBOX
|
||||||
|
|
||||||
The VP7041 seems to be identical to "CTS Portable" (Chinese
|
The VP7041 seems to be identical to "CTS Portable" (Chinese
|
||||||
Television System).
|
Television System).
|
||||||
@@ -54,6 +54,12 @@ config DVB_USB_DIBUSB_MB
|
|||||||
Say Y if you own such a device and want to use it. You should build it as
|
Say Y if you own such a device and want to use it. You should build it as
|
||||||
a module.
|
a module.
|
||||||
|
|
||||||
|
config DVB_USB_DIBUSB_MB_FAULTY
|
||||||
|
bool "Support faulty USB IDs"
|
||||||
|
depends on DVB_USB_DIBUSB_MB
|
||||||
|
help
|
||||||
|
Support for faulty USB IDs due to an invalid EEPROM on some Artec devices.
|
||||||
|
|
||||||
config DVB_USB_DIBUSB_MC
|
config DVB_USB_DIBUSB_MC
|
||||||
tristate "DiBcom USB DVB-T devices (based on the DiB3000M-C/P) (see help for device list)"
|
tristate "DiBcom USB DVB-T devices (based on the DiB3000M-C/P) (see help for device list)"
|
||||||
depends on DVB_USB
|
depends on DVB_USB
|
||||||
@@ -63,8 +69,8 @@ config DVB_USB_DIBUSB_MC
|
|||||||
DiBcom (<http://www.dibcom.fr>) equipped with a DiB3000M-C/P demodulator.
|
DiBcom (<http://www.dibcom.fr>) equipped with a DiB3000M-C/P demodulator.
|
||||||
|
|
||||||
Devices supported by this driver:
|
Devices supported by this driver:
|
||||||
DiBcom USB2.0 reference devices (non-public)
|
|
||||||
Artec T1 USB2.0 boxes
|
Artec T1 USB2.0 boxes
|
||||||
|
DiBcom USB2.0 reference devices (non-public)
|
||||||
|
|
||||||
Say Y if you own such a device and want to use it. You should build it as
|
Say Y if you own such a device and want to use it. You should build it as
|
||||||
a module.
|
a module.
|
||||||
|
@@ -65,11 +65,11 @@ static int dibusb_tuner_probe_and_attach(struct dvb_usb_device *d)
|
|||||||
d->tuner_pass_ctrl(d->fe,0,msg[0].addr);
|
d->tuner_pass_ctrl(d->fe,0,msg[0].addr);
|
||||||
|
|
||||||
if (b2[0] == 0xfe) {
|
if (b2[0] == 0xfe) {
|
||||||
info("this device has the Thomson Cable onboard. Which is default.");
|
info("This device has the Thomson Cable onboard. Which is default.");
|
||||||
dibusb_thomson_tuner_attach(d);
|
dibusb_thomson_tuner_attach(d);
|
||||||
} else {
|
} else {
|
||||||
u8 bpll[4] = { 0x0b, 0xf5, 0x85, 0xab };
|
u8 bpll[4] = { 0x0b, 0xf5, 0x85, 0xab };
|
||||||
info("this device has the Panasonic ENV77H11D5 onboard.");
|
info("This device has the Panasonic ENV77H11D5 onboard.");
|
||||||
d->pll_addr = 0x60;
|
d->pll_addr = 0x60;
|
||||||
memcpy(d->pll_init,bpll,4);
|
memcpy(d->pll_init,bpll,4);
|
||||||
d->pll_desc = &dvb_pll_tda665x;
|
d->pll_desc = &dvb_pll_tda665x;
|
||||||
@@ -98,15 +98,15 @@ static int dibusb_probe(struct usb_interface *intf,
|
|||||||
|
|
||||||
/* do not change the order of the ID table */
|
/* do not change the order of the ID table */
|
||||||
static struct usb_device_id dibusb_dib3000mb_table [] = {
|
static struct usb_device_id dibusb_dib3000mb_table [] = {
|
||||||
/* 00 */ { USB_DEVICE(USB_VID_WIDEVIEW, USB_PID_AVERMEDIA_DVBT_USB_COLD)},
|
/* 00 */ { USB_DEVICE(USB_VID_WIDEVIEW, USB_PID_AVERMEDIA_DVBT_USB_COLD) },
|
||||||
/* 01 */ { USB_DEVICE(USB_VID_WIDEVIEW, USB_PID_AVERMEDIA_DVBT_USB_WARM)},
|
/* 01 */ { USB_DEVICE(USB_VID_WIDEVIEW, USB_PID_AVERMEDIA_DVBT_USB_WARM) },
|
||||||
/* 02 */ { USB_DEVICE(USB_VID_COMPRO, USB_PID_COMPRO_DVBU2000_COLD) },
|
/* 02 */ { USB_DEVICE(USB_VID_COMPRO, USB_PID_COMPRO_DVBU2000_COLD) },
|
||||||
/* 03 */ { USB_DEVICE(USB_VID_COMPRO, USB_PID_COMPRO_DVBU2000_WARM) },
|
/* 03 */ { USB_DEVICE(USB_VID_COMPRO, USB_PID_COMPRO_DVBU2000_WARM) },
|
||||||
/* 04 */ { USB_DEVICE(USB_VID_COMPRO_UNK, USB_PID_COMPRO_DVBU2000_UNK_COLD) },
|
/* 04 */ { USB_DEVICE(USB_VID_COMPRO_UNK, USB_PID_COMPRO_DVBU2000_UNK_COLD) },
|
||||||
/* 05 */ { USB_DEVICE(USB_VID_DIBCOM, USB_PID_DIBCOM_MOD3000_COLD) },
|
/* 05 */ { USB_DEVICE(USB_VID_DIBCOM, USB_PID_DIBCOM_MOD3000_COLD) },
|
||||||
/* 06 */ { USB_DEVICE(USB_VID_DIBCOM, USB_PID_DIBCOM_MOD3000_WARM) },
|
/* 06 */ { USB_DEVICE(USB_VID_DIBCOM, USB_PID_DIBCOM_MOD3000_WARM) },
|
||||||
/* 07 */ { USB_DEVICE(USB_VID_EMPIA, USB_PID_KWORLD_VSTREAM_COLD) },
|
/* 07 */ { USB_DEVICE(USB_VID_EMPIA, USB_PID_KWORLD_VSTREAM_COLD) },
|
||||||
/* 08 */ { USB_DEVICE(USB_VID_EMPIA, USB_PID_KWORLD_VSTREAM_WARM) },
|
/* 08 */ { USB_DEVICE(USB_VID_EMPIA, USB_PID_KWORLD_VSTREAM_WARM) },
|
||||||
/* 09 */ { USB_DEVICE(USB_VID_GRANDTEC, USB_PID_GRANDTEC_DVBT_USB_COLD) },
|
/* 09 */ { USB_DEVICE(USB_VID_GRANDTEC, USB_PID_GRANDTEC_DVBT_USB_COLD) },
|
||||||
/* 10 */ { USB_DEVICE(USB_VID_GRANDTEC, USB_PID_GRANDTEC_DVBT_USB_WARM) },
|
/* 10 */ { USB_DEVICE(USB_VID_GRANDTEC, USB_PID_GRANDTEC_DVBT_USB_WARM) },
|
||||||
/* 11 */ { USB_DEVICE(USB_VID_GRANDTEC, USB_PID_DIBCOM_MOD3000_COLD) },
|
/* 11 */ { USB_DEVICE(USB_VID_GRANDTEC, USB_PID_DIBCOM_MOD3000_COLD) },
|
||||||
@@ -117,27 +117,34 @@ static struct usb_device_id dibusb_dib3000mb_table [] = {
|
|||||||
/* 16 */ { USB_DEVICE(USB_VID_VISIONPLUS, USB_PID_TWINHAN_VP7041_WARM) },
|
/* 16 */ { USB_DEVICE(USB_VID_VISIONPLUS, USB_PID_TWINHAN_VP7041_WARM) },
|
||||||
/* 17 */ { USB_DEVICE(USB_VID_TWINHAN, USB_PID_TWINHAN_VP7041_COLD) },
|
/* 17 */ { USB_DEVICE(USB_VID_TWINHAN, USB_PID_TWINHAN_VP7041_COLD) },
|
||||||
/* 18 */ { USB_DEVICE(USB_VID_TWINHAN, USB_PID_TWINHAN_VP7041_WARM) },
|
/* 18 */ { USB_DEVICE(USB_VID_TWINHAN, USB_PID_TWINHAN_VP7041_WARM) },
|
||||||
/* 19 */ { USB_DEVICE(USB_VID_ULTIMA_ELECTRONIC, USB_PID_ULTIMA_TVBOX_COLD) },
|
/* 19 */ { USB_DEVICE(USB_VID_ULTIMA_ELECTRONIC, USB_PID_ULTIMA_TVBOX_COLD) },
|
||||||
/* 20 */ { USB_DEVICE(USB_VID_ULTIMA_ELECTRONIC, USB_PID_ULTIMA_TVBOX_WARM) },
|
/* 20 */ { USB_DEVICE(USB_VID_ULTIMA_ELECTRONIC, USB_PID_ULTIMA_TVBOX_WARM) },
|
||||||
/* 21 */ { USB_DEVICE(USB_VID_ULTIMA_ELECTRONIC, USB_PID_ULTIMA_TVBOX_AN2235_COLD) },
|
/* 21 */ { USB_DEVICE(USB_VID_ULTIMA_ELECTRONIC, USB_PID_ULTIMA_TVBOX_AN2235_COLD) },
|
||||||
/* 22 */ { USB_DEVICE(USB_VID_ULTIMA_ELECTRONIC, USB_PID_ULTIMA_TVBOX_AN2235_WARM) },
|
/* 22 */ { USB_DEVICE(USB_VID_ULTIMA_ELECTRONIC, USB_PID_ULTIMA_TVBOX_AN2235_WARM) },
|
||||||
/* 23 */ { USB_DEVICE(USB_VID_ADSTECH, USB_PID_ADSTECH_USB2_COLD) },
|
/* 23 */ { USB_DEVICE(USB_VID_ADSTECH, USB_PID_ADSTECH_USB2_COLD) },
|
||||||
|
|
||||||
/* device ID with default DIBUSB2_0-firmware and with the hacked firmware */
|
/* device ID with default DIBUSB2_0-firmware and with the hacked firmware */
|
||||||
/* 24 */ { USB_DEVICE(USB_VID_ADSTECH, USB_PID_ADSTECH_USB2_WARM) },
|
/* 24 */ { USB_DEVICE(USB_VID_ADSTECH, USB_PID_ADSTECH_USB2_WARM) },
|
||||||
/* 25 */ { USB_DEVICE(USB_VID_KYE, USB_PID_KYE_DVB_T_COLD) },
|
/* 25 */ { USB_DEVICE(USB_VID_KYE, USB_PID_KYE_DVB_T_COLD) },
|
||||||
/* 26 */ { USB_DEVICE(USB_VID_KYE, USB_PID_KYE_DVB_T_WARM) },
|
/* 26 */ { USB_DEVICE(USB_VID_KYE, USB_PID_KYE_DVB_T_WARM) },
|
||||||
|
|
||||||
/* 27 */ { USB_DEVICE(USB_VID_KWORLD, USB_PID_KWORLD_VSTREAM_COLD) },
|
/* 27 */ { USB_DEVICE(USB_VID_KWORLD, USB_PID_KWORLD_VSTREAM_COLD) },
|
||||||
|
|
||||||
/* 28 */ { USB_DEVICE(USB_VID_ULTIMA_ELECTRONIC, USB_PID_ULTIMA_TVBOX_USB2_COLD) },
|
/* 28 */ { USB_DEVICE(USB_VID_ULTIMA_ELECTRONIC, USB_PID_ULTIMA_TVBOX_USB2_COLD) },
|
||||||
/* 29 */ { USB_DEVICE(USB_VID_ULTIMA_ELECTRONIC, USB_PID_ULTIMA_TVBOX_USB2_WARM) },
|
/* 29 */ { USB_DEVICE(USB_VID_ULTIMA_ELECTRONIC, USB_PID_ULTIMA_TVBOX_USB2_WARM) },
|
||||||
|
|
||||||
// #define DVB_USB_DIBUSB_MB_FAULTY_USB_IDs
|
/*
|
||||||
|
* XXX: As Artec just 'forgot' to program the EEPROM on some Artec T1 devices
|
||||||
|
* we don't catch these faulty IDs (namely 'Cypress FX1 USB controller') that
|
||||||
|
* have been left on the device. If you don't have such a device but an Artec
|
||||||
|
* device that's supposed to work with this driver but is not detected by it,
|
||||||
|
* free to enable CONFIG_DVB_USB_DIBUSB_MB_FAULTY via your kernel config.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifdef DVB_USB_DIBUSB_MB_FAULTY_USB_IDs
|
#ifdef CONFIG_DVB_USB_DIBUSB_MB_FAULTY
|
||||||
/* 30 */ { USB_DEVICE(USB_VID_ANCHOR, USB_PID_ULTIMA_TVBOX_ANCHOR_COLD) },
|
/* 30 */ { USB_DEVICE(USB_VID_ANCHOR, USB_PID_ULTIMA_TVBOX_ANCHOR_COLD) },
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
{ } /* Terminating entry */
|
{ } /* Terminating entry */
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE (usb, dibusb_dib3000mb_table);
|
MODULE_DEVICE_TABLE (usb, dibusb_dib3000mb_table);
|
||||||
@@ -257,7 +264,7 @@ static struct dvb_usb_properties dibusb1_1_an2235_properties = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
#ifdef DVB_USB_DIBUSB_MB_FAULTY_USB_IDs
|
#ifdef CONFIG_DVB_USB_DIBUSB_MB_FAULTY
|
||||||
.num_device_descs = 2,
|
.num_device_descs = 2,
|
||||||
#else
|
#else
|
||||||
.num_device_descs = 1,
|
.num_device_descs = 1,
|
||||||
@@ -267,11 +274,12 @@ static struct dvb_usb_properties dibusb1_1_an2235_properties = {
|
|||||||
{ &dibusb_dib3000mb_table[20], NULL },
|
{ &dibusb_dib3000mb_table[20], NULL },
|
||||||
{ &dibusb_dib3000mb_table[21], NULL },
|
{ &dibusb_dib3000mb_table[21], NULL },
|
||||||
},
|
},
|
||||||
#ifdef DVB_USB_DIBUSB_MB_FAULTY_USB_IDs
|
#ifdef CONFIG_DVB_USB_DIBUSB_MB_FAULTY
|
||||||
{ "Artec T1 USB1.1 TVBOX with AN2235 (faulty USB IDs)",
|
{ "Artec T1 USB1.1 TVBOX with AN2235 (faulty USB IDs)",
|
||||||
{ &dibusb_dib3000mb_table[30], NULL },
|
{ &dibusb_dib3000mb_table[30], NULL },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
},
|
},
|
||||||
|
{ NULL },
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -323,6 +331,7 @@ static struct dvb_usb_properties dibusb2_0b_properties = {
|
|||||||
{ &dibusb_dib3000mb_table[27], NULL },
|
{ &dibusb_dib3000mb_table[27], NULL },
|
||||||
{ NULL }
|
{ NULL }
|
||||||
},
|
},
|
||||||
|
{ NULL },
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -369,6 +378,7 @@ static struct dvb_usb_properties artec_t1_usb2_properties = {
|
|||||||
{ &dibusb_dib3000mb_table[28], NULL },
|
{ &dibusb_dib3000mb_table[28], NULL },
|
||||||
{ &dibusb_dib3000mb_table[29], NULL },
|
{ &dibusb_dib3000mb_table[29], NULL },
|
||||||
},
|
},
|
||||||
|
{ NULL },
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user