| From f33a7f72e5fc033daccbb8d4753d7c5c41a4d67b Mon Sep 17 00:00:00 2001 |
| From: Jonas Jonsson <jonas@ludd.ltu.se> |
| Date: Sun, 22 Nov 2015 11:47:17 +0100 |
| Subject: USB: cdc_acm: Ignore Infineon Flash Loader utility |
| |
| From: Jonas Jonsson <jonas@ludd.ltu.se> |
| |
| commit f33a7f72e5fc033daccbb8d4753d7c5c41a4d67b upstream. |
| |
| Some modems, such as the Telit UE910, are using an Infineon Flash Loader |
| utility. It has two interfaces, 2/2/0 (Abstract Modem) and 10/0/0 (CDC |
| Data). The latter can be used as a serial interface to upgrade the |
| firmware of the modem. However, that isn't possible when the cdc-acm |
| driver takes control of the device. |
| |
| The following is an explanation of the behaviour by Daniele Palmas during |
| discussion on linux-usb. |
| |
| "This is what happens when the device is turned on (without modifying |
| the drivers): |
| |
| [155492.352031] usb 1-3: new high-speed USB device number 27 using ehci-pci |
| [155492.485429] usb 1-3: config 1 interface 0 altsetting 0 endpoint 0x81 has an invalid bInterval 255, changing to 11 |
| [155492.485436] usb 1-3: New USB device found, idVendor=058b, idProduct=0041 |
| [155492.485439] usb 1-3: New USB device strings: Mfr=0, Product=0, SerialNumber=0 |
| [155492.485952] cdc_acm 1-3:1.0: ttyACM0: USB ACM device |
| |
| This is the flashing device that is caught by the cdc-acm driver. Once |
| the ttyACM appears, the application starts sending a magic string |
| (simple write on the file descriptor) to keep the device in flashing |
| mode. If this magic string is not properly received in a certain time |
| interval, the modem goes on in normal operative mode: |
| |
| [155493.748094] usb 1-3: USB disconnect, device number 27 |
| [155494.916025] usb 1-3: new high-speed USB device number 28 using ehci-pci |
| [155495.059978] usb 1-3: New USB device found, idVendor=1bc7, idProduct=0021 |
| [155495.059983] usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3 |
| [155495.059986] usb 1-3: Product: 6 CDC-ACM + 1 CDC-ECM |
| [155495.059989] usb 1-3: Manufacturer: Telit |
| [155495.059992] usb 1-3: SerialNumber: 359658044004697 |
| [155495.138958] cdc_acm 1-3:1.0: ttyACM0: USB ACM device |
| [155495.140832] cdc_acm 1-3:1.2: ttyACM1: USB ACM device |
| [155495.142827] cdc_acm 1-3:1.4: ttyACM2: USB ACM device |
| [155495.144462] cdc_acm 1-3:1.6: ttyACM3: USB ACM device |
| [155495.145967] cdc_acm 1-3:1.8: ttyACM4: USB ACM device |
| [155495.147588] cdc_acm 1-3:1.10: ttyACM5: USB ACM device |
| [155495.154322] cdc_ether 1-3:1.12 wwan0: register 'cdc_ether' at usb-0000:00:1a.7-3, Mobile Broadband Network Device, 00:00:11:12:13:14 |
| |
| Using the cdc-acm driver, the string, though being sent in the same way |
| than using the usb-serial-simple driver (I can confirm that the data is |
| passing properly since I used an hw usb sniffer), does not make the |
| device to stay in flashing mode." |
| |
| Signed-off-by: Jonas Jonsson <jonas@ludd.ltu.se> |
| Tested-by: Daniele Palmas <dnlplm@gmail.com> |
| Signed-off-by: Johan Hovold <johan@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/usb/class/cdc-acm.c | 5 +++++ |
| 1 file changed, 5 insertions(+) |
| |
| --- a/drivers/usb/class/cdc-acm.c |
| +++ b/drivers/usb/class/cdc-acm.c |
| @@ -1726,6 +1726,11 @@ static const struct usb_device_id acm_id |
| }, |
| #endif |
| |
| + /* Exclude Infineon Flash Loader utility */ |
| + { USB_DEVICE(0x058b, 0x0041), |
| + .driver_info = IGNORE_DEVICE, |
| + }, |
| + |
| /* control interfaces without any protocol set */ |
| { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, |
| USB_CDC_PROTO_NONE) }, |