summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Hsu <mhsu@nvidia.com>2011-11-07 14:51:20 -0800
committerDan Willemsen <dwillemsen@nvidia.com>2011-11-30 21:49:54 -0800
commit74492e93192504bd410b26a61ae73eb68492e7d0 (patch)
tree9d235c1f30010ddc66698717784e4e64b3718e7d
parent164b0c30949873f3465a06339afc4f7ec3900fc2 (diff)
usb: cdc-acm: blocking non-real ACM device
Adding a new quirk tag to prevent ACM driver taking over the interfaces of a device which is not a real ACM device. Bug 860566 Reviewed-on: http://git-master/r/55303 (cherry picked from commit 354c48f813fad182d9ce2c2fcf404d89f75e46cf) Change-Id: I951328549980cf0b284907ef8e216acf9b2a8c59 Reviewed-on: http://git-master/r/62776 Reviewed-by: Varun Colbert <vcolbert@nvidia.com> Tested-by: Varun Colbert <vcolbert@nvidia.com> Rebase-Id: R8fbe1a32c92114407783f9745616ed8304676b49
-rw-r--r--drivers/usb/class/cdc-acm.c6
-rw-r--r--drivers/usb/class/cdc-acm.h1
2 files changed, 6 insertions, 1 deletions
diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
index acd4285e87d4..f0ec26b4a797 100644
--- a/drivers/usb/class/cdc-acm.c
+++ b/drivers/usb/class/cdc-acm.c
@@ -865,6 +865,10 @@ static int acm_probe(struct usb_interface *intf,
quirks = (unsigned long)id->driver_info;
num_rx_buf = (quirks == SINGLE_RX_URB) ? 1 : ACM_NR;
+ /* not a real CDC ACM device */
+ if (quirks == NOT_REAL_ACM)
+ return -ENODEV;
+
/* handle quirks deadly to normal probing*/
if (quirks == NO_UNION_NORMAL) {
data_interface = usb_ifnum_to_if(usb_dev, 1);
@@ -1556,7 +1560,7 @@ static const struct usb_device_id acm_ids[] = {
/* Exclude XMM6260 boot rom (not running modem software yet) */
{ USB_DEVICE(0x058b, 0x0041),
- .driver_info = NOT_A_MODEM,
+ .driver_info = NOT_REAL_ACM,
},
/* control interfaces without any protocol set */
diff --git a/drivers/usb/class/cdc-acm.h b/drivers/usb/class/cdc-acm.h
index ca7937f26e27..64365cc0e646 100644
--- a/drivers/usb/class/cdc-acm.h
+++ b/drivers/usb/class/cdc-acm.h
@@ -127,3 +127,4 @@ struct acm {
#define NO_CAP_LINE 4
#define NOT_A_MODEM 8
#define NO_DATA_INTERFACE 16
+#define NOT_REAL_ACM 32