diff options
author | Antti Palosaari <crope@iki.fi> | 2013-01-07 14:29:13 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2013-03-21 17:49:02 -0400 |
commit | e8c7aab50ddcb84f164422b5c8e0042a6fec6649 (patch) | |
tree | 8d594099eaef6b1d9aaf557144a2971376357769 | |
parent | 0d94d6a04b503bed97911d80963ff8e63deee60e (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.c | 40 |
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 | ||
1323 | static 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) */ |
1325 | static struct dvb_usb_device_properties af9015_props = { | 1362 | static 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); | |||
1444 | static struct usb_driver af9015_usb_driver = { | 1482 | static 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, |