aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntti Palosaari <crope@iki.fi>2013-01-07 14:29:13 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2013-03-21 17:49:02 -0400
commite8c7aab50ddcb84f164422b5c8e0042a6fec6649 (patch)
tree8d594099eaef6b1d9aaf557144a2971376357769
parent0d94d6a04b503bed97911d80963ff8e63deee60e (diff)
[media] af9015: reject device TerraTec Cinergy T Stick Dual RC (rev. 2)
That same USB ID is used both AF9015 and AF9035 driver. iManufacturer is only thing we can select correct driver without a I/O. Signed-off-by: Antti Palosaari <crope@iki.fi> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/media/usb/dvb-usb-v2/af9015.c40
1 files changed, 39 insertions, 1 deletions
diff --git a/drivers/media/usb/dvb-usb-v2/af9015.c b/drivers/media/usb/dvb-usb-v2/af9015.c
index 2fa7c6ee5a70..d556042cf312 100644
--- a/drivers/media/usb/dvb-usb-v2/af9015.c
+++ b/drivers/media/usb/dvb-usb-v2/af9015.c
@@ -1320,6 +1320,43 @@ static int af9015_get_rc_config(struct dvb_usb_device *d, struct dvb_usb_rc *rc)
1320 #define af9015_get_rc_config NULL 1320 #define af9015_get_rc_config NULL
1321#endif 1321#endif
1322 1322
1323static int af9015_probe(struct usb_interface *intf,
1324 const struct usb_device_id *id)
1325{
1326 struct usb_device *udev = interface_to_usbdev(intf);
1327 char manufacturer[sizeof("ITE Technologies, Inc.")];
1328
1329 memset(manufacturer, 0, sizeof(manufacturer));
1330 usb_string(udev, udev->descriptor.iManufacturer,
1331 manufacturer, sizeof(manufacturer));
1332 /*
1333 * There is two devices having same ID but different chipset. One uses
1334 * AF9015 and the other IT9135 chipset. Only difference seen on lsusb
1335 * is iManufacturer string.
1336 *
1337 * idVendor 0x0ccd TerraTec Electronic GmbH
1338 * idProduct 0x0099
1339 * bcdDevice 2.00
1340 * iManufacturer 1 Afatech
1341 * iProduct 2 DVB-T 2
1342 *
1343 * idVendor 0x0ccd TerraTec Electronic GmbH
1344 * idProduct 0x0099
1345 * bcdDevice 2.00
1346 * iManufacturer 1 ITE Technologies, Inc.
1347 * iProduct 2 DVB-T TV Stick
1348 */
1349 if ((le16_to_cpu(udev->descriptor.idVendor) == USB_VID_TERRATEC) &&
1350 (le16_to_cpu(udev->descriptor.idProduct) == 0x0099)) {
1351 if (!strcmp("ITE Technologies, Inc.", manufacturer)) {
1352 dev_dbg(&udev->dev, "%s: rejecting device\n", __func__);
1353 return -ENODEV;
1354 }
1355 }
1356
1357 return dvb_usbv2_probe(intf, id);
1358}
1359
1323/* interface 0 is used by DVB-T receiver and 1360/* interface 0 is used by DVB-T receiver and
1324 interface 1 is for remote controller (HID) */ 1361 interface 1 is for remote controller (HID) */
1325static struct dvb_usb_device_properties af9015_props = { 1362static struct dvb_usb_device_properties af9015_props = {
@@ -1428,6 +1465,7 @@ static const struct usb_device_id af9015_id_table[] = {
1428 &af9015_props, "AverMedia AVerTV Volar M (A815Mac)", NULL) }, 1465 &af9015_props, "AverMedia AVerTV Volar M (A815Mac)", NULL) },
1429 { DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_T_STICK_RC, 1466 { DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_T_STICK_RC,
1430 &af9015_props, "TerraTec Cinergy T Stick RC", RC_MAP_TERRATEC_SLIM_2) }, 1467 &af9015_props, "TerraTec Cinergy T Stick RC", RC_MAP_TERRATEC_SLIM_2) },
1468 /* XXX: that same ID [0ccd:0099] is used by af9035 driver too */
1431 { DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_T_STICK_DUAL_RC, 1469 { DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_T_STICK_DUAL_RC,
1432 &af9015_props, "TerraTec Cinergy T Stick Dual RC", RC_MAP_TERRATEC_SLIM) }, 1470 &af9015_props, "TerraTec Cinergy T Stick Dual RC", RC_MAP_TERRATEC_SLIM) },
1433 { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A850T, 1471 { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A850T,
@@ -1444,7 +1482,7 @@ MODULE_DEVICE_TABLE(usb, af9015_id_table);
1444static struct usb_driver af9015_usb_driver = { 1482static struct usb_driver af9015_usb_driver = {
1445 .name = KBUILD_MODNAME, 1483 .name = KBUILD_MODNAME,
1446 .id_table = af9015_id_table, 1484 .id_table = af9015_id_table,
1447 .probe = dvb_usbv2_probe, 1485 .probe = af9015_probe,
1448 .disconnect = dvb_usbv2_disconnect, 1486 .disconnect = dvb_usbv2_disconnect,
1449 .suspend = dvb_usbv2_suspend, 1487 .suspend = dvb_usbv2_suspend,
1450 .resume = dvb_usbv2_resume, 1488 .resume = dvb_usbv2_resume,