Преглед на файлове

USB: cdc-acm - blacklist IMS PCU device

The IMS PCU (Passenger Control Unit) device used custom protocol over serial
line, so it is presenting itself as CDC ACM device.

Now that we have proper in-kernel driver for it we need to black-list the
device in cdc-acm driver.

Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Dmitry Torokhov преди 12 години
родител
ревизия
1614265526
променени са 2 файла, в които са добавени 14 реда и са изтрити 0 реда
  1. 13 0
      drivers/usb/class/cdc-acm.c
  2. 1 0
      drivers/usb/class/cdc-acm.h

+ 13 - 0
drivers/usb/class/cdc-acm.c

@@ -949,6 +949,10 @@ static int acm_probe(struct usb_interface *intf,
 
 
 	/* normal quirks */
 	/* normal quirks */
 	quirks = (unsigned long)id->driver_info;
 	quirks = (unsigned long)id->driver_info;
+
+	if (quirks == IGNORE_DEVICE)
+		return -ENODEV;
+
 	num_rx_buf = (quirks == SINGLE_RX_URB) ? 1 : ACM_NR;
 	num_rx_buf = (quirks == SINGLE_RX_URB) ? 1 : ACM_NR;
 
 
 	/* handle quirks deadly to normal probing*/
 	/* handle quirks deadly to normal probing*/
@@ -1650,6 +1654,15 @@ static const struct usb_device_id acm_ids[] = {
 	.driver_info = NO_DATA_INTERFACE,
 	.driver_info = NO_DATA_INTERFACE,
 	},
 	},
 
 
+#if IS_ENABLED(CONFIG_INPUT_IMS_PCU)
+	{ USB_DEVICE(0x04d8, 0x0082),	/* Application mode */
+	.driver_info = IGNORE_DEVICE,
+	},
+	{ USB_DEVICE(0x04d8, 0x0083),	/* Bootloader mode */
+	.driver_info = IGNORE_DEVICE,
+	},
+#endif
+
 	/* control interfaces without any protocol set */
 	/* control interfaces without any protocol set */
 	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
 	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
 		USB_CDC_PROTO_NONE) },
 		USB_CDC_PROTO_NONE) },

+ 1 - 0
drivers/usb/class/cdc-acm.h

@@ -128,3 +128,4 @@ struct acm {
 #define NO_CAP_LINE			4
 #define NO_CAP_LINE			4
 #define NOT_A_MODEM			8
 #define NOT_A_MODEM			8
 #define NO_DATA_INTERFACE		16
 #define NO_DATA_INTERFACE		16
+#define IGNORE_DEVICE			32