From e025dcd99fc7f3835b556e9be273732cb02aa87c Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 21 May 2014 14:31:09 +0900 Subject: [PATCH] 3.14-stable patches added patches: revert-usb-serial-add-usbid-for-dell-wwan-card-to-sierra.c.patch usb-cdc-acm-remove-motorola-telit-h24-serial-interfaces-from-acm-driver.patch usb-cp210x-add-8281-nanotec-plug-drive.patch usb-io_ti-fix-firmware-download-on-big-endian-machines.patch usb-option-add-alcatel-l800ma.patch usb-option-add-and-update-a-number-of-cmotech-devices.patch usb-option-add-olivetti-olicard-500.patch usb-option-driver-add-support-for-telit-ue910v2.patch usb-qcserial-add-sierra-wireless-em7355.patch usb-qcserial-add-sierra-wireless-mc7305-mc7355.patch usb-qcserial-add-sierra-wireless-mc73xx.patch usb-serial-fix-sysfs-attribute-removal-deadlock.patch usb-serial-ftdi_sio-add-id-for-brainboxes-serial-cards.patch usb-usb_wwan-fix-handling-of-missing-bulk-endpoints.patch --- ...usbid-for-dell-wwan-card-to-sierra.c.patch | 32 ++++ queue-3.14/series | 14 ++ ...24-serial-interfaces-from-acm-driver.patch | 59 ++++++ ...b-cp210x-add-8281-nanotec-plug-drive.patch | 27 +++ ...ware-download-on-big-endian-machines.patch | 168 ++++++++++++++++++ .../usb-option-add-alcatel-l800ma.patch | 44 +++++ ...d-update-a-number-of-cmotech-devices.patch | 120 +++++++++++++ .../usb-option-add-olivetti-olicard-500.patch | 47 +++++ ...driver-add-support-for-telit-ue910v2.patch | 37 ++++ ...-qcserial-add-sierra-wireless-em7355.patch | 31 ++++ ...al-add-sierra-wireless-mc7305-mc7355.patch | 31 ++++ ...-qcserial-add-sierra-wireless-mc73xx.patch | 31 ++++ ...fix-sysfs-attribute-removal-deadlock.patch | 138 ++++++++++++++ ...o-add-id-for-brainboxes-serial-cards.patch | 106 +++++++++++ ...x-handling-of-missing-bulk-endpoints.patch | 76 ++++++++ 15 files changed, 961 insertions(+) create mode 100644 queue-3.14/revert-usb-serial-add-usbid-for-dell-wwan-card-to-sierra.c.patch create mode 100644 queue-3.14/usb-cdc-acm-remove-motorola-telit-h24-serial-interfaces-from-acm-driver.patch create mode 100644 queue-3.14/usb-cp210x-add-8281-nanotec-plug-drive.patch create mode 100644 queue-3.14/usb-io_ti-fix-firmware-download-on-big-endian-machines.patch create mode 100644 queue-3.14/usb-option-add-alcatel-l800ma.patch create mode 100644 queue-3.14/usb-option-add-and-update-a-number-of-cmotech-devices.patch create mode 100644 queue-3.14/usb-option-add-olivetti-olicard-500.patch create mode 100644 queue-3.14/usb-option-driver-add-support-for-telit-ue910v2.patch create mode 100644 queue-3.14/usb-qcserial-add-sierra-wireless-em7355.patch create mode 100644 queue-3.14/usb-qcserial-add-sierra-wireless-mc7305-mc7355.patch create mode 100644 queue-3.14/usb-qcserial-add-sierra-wireless-mc73xx.patch create mode 100644 queue-3.14/usb-serial-fix-sysfs-attribute-removal-deadlock.patch create mode 100644 queue-3.14/usb-serial-ftdi_sio-add-id-for-brainboxes-serial-cards.patch create mode 100644 queue-3.14/usb-usb_wwan-fix-handling-of-missing-bulk-endpoints.patch diff --git a/queue-3.14/revert-usb-serial-add-usbid-for-dell-wwan-card-to-sierra.c.patch b/queue-3.14/revert-usb-serial-add-usbid-for-dell-wwan-card-to-sierra.c.patch new file mode 100644 index 00000000000..f27ba03e829 --- /dev/null +++ b/queue-3.14/revert-usb-serial-add-usbid-for-dell-wwan-card-to-sierra.c.patch @@ -0,0 +1,32 @@ +From 2e01280d2801c72878cf3a7119eac30077b463d5 Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Fri, 28 Mar 2014 18:05:10 +0100 +Subject: Revert "USB: serial: add usbid for dell wwan card to sierra.c" + +From: Johan Hovold + +commit 2e01280d2801c72878cf3a7119eac30077b463d5 upstream. + +This reverts commit 1ebca9dad5abe8b2ed4dbd186cd657fb47c1f321. + +This device was erroneously added to the sierra driver even though it's +not a Sierra device and was already handled by the option driver. + +Cc: Richard Farina +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/sierra.c | 1 - + 1 file changed, 1 deletion(-) + +--- a/drivers/usb/serial/sierra.c ++++ b/drivers/usb/serial/sierra.c +@@ -291,7 +291,6 @@ static const struct usb_device_id id_tab + { USB_DEVICE(0x0f3d, 0x68A3), /* Airprime/Sierra Wireless Direct IP modems */ + .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist + }, +- { USB_DEVICE(0x413C, 0x08133) }, /* Dell Computer Corp. Wireless 5720 VZW Mobile Broadband (EVDO Rev-A) Minicard GPS Port */ + + { } + }; diff --git a/queue-3.14/series b/queue-3.14/series index fc0257e436d..a5295a07725 100644 --- a/queue-3.14/series +++ b/queue-3.14/series @@ -34,3 +34,17 @@ init-kconfig-move-the-trusted-keyring-config-option-to-general-setup.patch thp-close-race-between-split-and-zap-huge-pages.patch mm-hugetlb.c-add-cond_resched_lock-in-return_unused_surplus_pages.patch mm-use-paravirt-friendly-ops-for-numa-hinting-ptes.patch +usb-cdc-acm-remove-motorola-telit-h24-serial-interfaces-from-acm-driver.patch +usb-cp210x-add-8281-nanotec-plug-drive.patch +usb-usb_wwan-fix-handling-of-missing-bulk-endpoints.patch +usb-serial-ftdi_sio-add-id-for-brainboxes-serial-cards.patch +usb-option-driver-add-support-for-telit-ue910v2.patch +revert-usb-serial-add-usbid-for-dell-wwan-card-to-sierra.c.patch +usb-serial-fix-sysfs-attribute-removal-deadlock.patch +usb-io_ti-fix-firmware-download-on-big-endian-machines.patch +usb-qcserial-add-sierra-wireless-em7355.patch +usb-qcserial-add-sierra-wireless-mc73xx.patch +usb-qcserial-add-sierra-wireless-mc7305-mc7355.patch +usb-option-add-olivetti-olicard-500.patch +usb-option-add-alcatel-l800ma.patch +usb-option-add-and-update-a-number-of-cmotech-devices.patch diff --git a/queue-3.14/usb-cdc-acm-remove-motorola-telit-h24-serial-interfaces-from-acm-driver.patch b/queue-3.14/usb-cdc-acm-remove-motorola-telit-h24-serial-interfaces-from-acm-driver.patch new file mode 100644 index 00000000000..b23b5026918 --- /dev/null +++ b/queue-3.14/usb-cdc-acm-remove-motorola-telit-h24-serial-interfaces-from-acm-driver.patch @@ -0,0 +1,59 @@ +From 895d240d1db0b2736d779200788e4c4aea28a0c6 Mon Sep 17 00:00:00 2001 +From: Michael Ulbricht +Date: Tue, 25 Mar 2014 10:34:18 +0100 +Subject: USB: cdc-acm: Remove Motorola/Telit H24 serial interfaces from ACM driver + +From: Michael Ulbricht + +commit 895d240d1db0b2736d779200788e4c4aea28a0c6 upstream. + +By specifying NO_UNION_NORMAL the ACM driver does only use the first two +USB interfaces (modem data & control). The AT Port, Diagnostic and NMEA +interfaces are left to the USB serial driver. + +Signed-off-by: Michael Ulbricht +Signed-off-by: Alexander Stein +Signed-off-by: Oliver Neukum +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/class/cdc-acm.c | 28 +++++++++++++++++++++------- + 1 file changed, 21 insertions(+), 7 deletions(-) + +--- a/drivers/usb/class/cdc-acm.c ++++ b/drivers/usb/class/cdc-acm.c +@@ -1652,13 +1652,27 @@ static const struct usb_device_id acm_id + }, + /* Motorola H24 HSPA module: */ + { USB_DEVICE(0x22b8, 0x2d91) }, /* modem */ +- { USB_DEVICE(0x22b8, 0x2d92) }, /* modem + diagnostics */ +- { USB_DEVICE(0x22b8, 0x2d93) }, /* modem + AT port */ +- { USB_DEVICE(0x22b8, 0x2d95) }, /* modem + AT port + diagnostics */ +- { USB_DEVICE(0x22b8, 0x2d96) }, /* modem + NMEA */ +- { USB_DEVICE(0x22b8, 0x2d97) }, /* modem + diagnostics + NMEA */ +- { USB_DEVICE(0x22b8, 0x2d99) }, /* modem + AT port + NMEA */ +- { USB_DEVICE(0x22b8, 0x2d9a) }, /* modem + AT port + diagnostics + NMEA */ ++ { USB_DEVICE(0x22b8, 0x2d92), /* modem + diagnostics */ ++ .driver_info = NO_UNION_NORMAL, /* handle only modem interface */ ++ }, ++ { USB_DEVICE(0x22b8, 0x2d93), /* modem + AT port */ ++ .driver_info = NO_UNION_NORMAL, /* handle only modem interface */ ++ }, ++ { USB_DEVICE(0x22b8, 0x2d95), /* modem + AT port + diagnostics */ ++ .driver_info = NO_UNION_NORMAL, /* handle only modem interface */ ++ }, ++ { USB_DEVICE(0x22b8, 0x2d96), /* modem + NMEA */ ++ .driver_info = NO_UNION_NORMAL, /* handle only modem interface */ ++ }, ++ { USB_DEVICE(0x22b8, 0x2d97), /* modem + diagnostics + NMEA */ ++ .driver_info = NO_UNION_NORMAL, /* handle only modem interface */ ++ }, ++ { USB_DEVICE(0x22b8, 0x2d99), /* modem + AT port + NMEA */ ++ .driver_info = NO_UNION_NORMAL, /* handle only modem interface */ ++ }, ++ { USB_DEVICE(0x22b8, 0x2d9a), /* modem + AT port + diagnostics + NMEA */ ++ .driver_info = NO_UNION_NORMAL, /* handle only modem interface */ ++ }, + + { USB_DEVICE(0x0572, 0x1329), /* Hummingbird huc56s (Conexant) */ + .driver_info = NO_UNION_NORMAL, /* union descriptor misplaced on diff --git a/queue-3.14/usb-cp210x-add-8281-nanotec-plug-drive.patch b/queue-3.14/usb-cp210x-add-8281-nanotec-plug-drive.patch new file mode 100644 index 00000000000..69ce1348eb7 --- /dev/null +++ b/queue-3.14/usb-cp210x-add-8281-nanotec-plug-drive.patch @@ -0,0 +1,27 @@ +From 72b3007951010ce1bbf950e23b19d9839fa905a5 Mon Sep 17 00:00:00 2001 +From: Tristan Bruns +Date: Sun, 13 Apr 2014 23:57:16 +0200 +Subject: USB: cp210x: Add 8281 (Nanotec Plug & Drive) + +From: Tristan Bruns + +commit 72b3007951010ce1bbf950e23b19d9839fa905a5 upstream. + +Signed-off-by: Tristan Bruns +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/cp210x.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/usb/serial/cp210x.c ++++ b/drivers/usb/serial/cp210x.c +@@ -104,6 +104,7 @@ static const struct usb_device_id id_tab + { USB_DEVICE(0x10C4, 0x8218) }, /* Lipowsky Industrie Elektronik GmbH, HARP-1 */ + { USB_DEVICE(0x10C4, 0x822B) }, /* Modem EDGE(GSM) Comander 2 */ + { USB_DEVICE(0x10C4, 0x826B) }, /* Cygnal Integrated Products, Inc., Fasttrax GPS demonstration module */ ++ { USB_DEVICE(0x10C4, 0x8281) }, /* Nanotec Plug & Drive */ + { USB_DEVICE(0x10C4, 0x8293) }, /* Telegesis ETRX2USB */ + { USB_DEVICE(0x10C4, 0x82F9) }, /* Procyon AVS */ + { USB_DEVICE(0x10C4, 0x8341) }, /* Siemens MC35PU GPRS Modem */ diff --git a/queue-3.14/usb-io_ti-fix-firmware-download-on-big-endian-machines.patch b/queue-3.14/usb-io_ti-fix-firmware-download-on-big-endian-machines.patch new file mode 100644 index 00000000000..69a700408be --- /dev/null +++ b/queue-3.14/usb-io_ti-fix-firmware-download-on-big-endian-machines.patch @@ -0,0 +1,168 @@ +From 5509076d1b4485ce9fb07705fcbcd2695907ab5b Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Fri, 25 Apr 2014 15:23:03 +0200 +Subject: USB: io_ti: fix firmware download on big-endian machines + +From: Johan Hovold + +commit 5509076d1b4485ce9fb07705fcbcd2695907ab5b upstream. + +During firmware download the device expects memory addresses in +big-endian byte order. As the wIndex parameter which hold the address is +sent in little-endian byte order regardless of host byte order, we need +to use swab16 rather than cpu_to_be16. + +Also make sure to handle the struct ti_i2c_desc size parameter which is +returned in little-endian byte order. + +Reported-by: Ludovic Drolez +Tested-by: Ludovic Drolez +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/io_ti.c | 50 +++++++++++++++++++++++++++++---------------- + 1 file changed, 33 insertions(+), 17 deletions(-) + +--- a/drivers/usb/serial/io_ti.c ++++ b/drivers/usb/serial/io_ti.c +@@ -28,6 +28,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -280,7 +281,7 @@ static int read_download_mem(struct usb_ + { + int status = 0; + __u8 read_length; +- __be16 be_start_address; ++ u16 be_start_address; + + dev_dbg(&dev->dev, "%s - @ %x for %d\n", __func__, start_address, length); + +@@ -296,10 +297,14 @@ static int read_download_mem(struct usb_ + if (read_length > 1) { + dev_dbg(&dev->dev, "%s - @ %x for %d\n", __func__, start_address, read_length); + } +- be_start_address = cpu_to_be16(start_address); ++ /* ++ * NOTE: Must use swab as wIndex is sent in little-endian ++ * byte order regardless of host byte order. ++ */ ++ be_start_address = swab16((u16)start_address); + status = ti_vread_sync(dev, UMPC_MEMORY_READ, + (__u16)address_type, +- (__force __u16)be_start_address, ++ be_start_address, + buffer, read_length); + + if (status) { +@@ -394,7 +399,7 @@ static int write_i2c_mem(struct edgeport + struct device *dev = &serial->serial->dev->dev; + int status = 0; + int write_length; +- __be16 be_start_address; ++ u16 be_start_address; + + /* We can only send a maximum of 1 aligned byte page at a time */ + +@@ -409,11 +414,16 @@ static int write_i2c_mem(struct edgeport + __func__, start_address, write_length); + usb_serial_debug_data(dev, __func__, write_length, buffer); + +- /* Write first page */ +- be_start_address = cpu_to_be16(start_address); ++ /* ++ * Write first page. ++ * ++ * NOTE: Must use swab as wIndex is sent in little-endian byte order ++ * regardless of host byte order. ++ */ ++ be_start_address = swab16((u16)start_address); + status = ti_vsend_sync(serial->serial->dev, + UMPC_MEMORY_WRITE, (__u16)address_type, +- (__force __u16)be_start_address, ++ be_start_address, + buffer, write_length); + if (status) { + dev_dbg(dev, "%s - ERROR %d\n", __func__, status); +@@ -436,11 +446,16 @@ static int write_i2c_mem(struct edgeport + __func__, start_address, write_length); + usb_serial_debug_data(dev, __func__, write_length, buffer); + +- /* Write next page */ +- be_start_address = cpu_to_be16(start_address); ++ /* ++ * Write next page. ++ * ++ * NOTE: Must use swab as wIndex is sent in little-endian byte ++ * order regardless of host byte order. ++ */ ++ be_start_address = swab16((u16)start_address); + status = ti_vsend_sync(serial->serial->dev, UMPC_MEMORY_WRITE, + (__u16)address_type, +- (__force __u16)be_start_address, ++ be_start_address, + buffer, write_length); + if (status) { + dev_err(dev, "%s - ERROR %d\n", __func__, status); +@@ -585,8 +600,8 @@ static int get_descriptor_addr(struct ed + if (rom_desc->Type == desc_type) + return start_address; + +- start_address = start_address + sizeof(struct ti_i2c_desc) +- + rom_desc->Size; ++ start_address = start_address + sizeof(struct ti_i2c_desc) + ++ le16_to_cpu(rom_desc->Size); + + } while ((start_address < TI_MAX_I2C_SIZE) && rom_desc->Type); + +@@ -599,7 +614,7 @@ static int valid_csum(struct ti_i2c_desc + __u16 i; + __u8 cs = 0; + +- for (i = 0; i < rom_desc->Size; i++) ++ for (i = 0; i < le16_to_cpu(rom_desc->Size); i++) + cs = (__u8)(cs + buffer[i]); + + if (cs != rom_desc->CheckSum) { +@@ -650,7 +665,7 @@ static int check_i2c_image(struct edgepo + break; + + if ((start_address + sizeof(struct ti_i2c_desc) + +- rom_desc->Size) > TI_MAX_I2C_SIZE) { ++ le16_to_cpu(rom_desc->Size)) > TI_MAX_I2C_SIZE) { + status = -ENODEV; + dev_dbg(dev, "%s - structure too big, erroring out.\n", __func__); + break; +@@ -665,7 +680,8 @@ static int check_i2c_image(struct edgepo + /* Read the descriptor data */ + status = read_rom(serial, start_address + + sizeof(struct ti_i2c_desc), +- rom_desc->Size, buffer); ++ le16_to_cpu(rom_desc->Size), ++ buffer); + if (status) + break; + +@@ -674,7 +690,7 @@ static int check_i2c_image(struct edgepo + break; + } + start_address = start_address + sizeof(struct ti_i2c_desc) + +- rom_desc->Size; ++ le16_to_cpu(rom_desc->Size); + + } while ((rom_desc->Type != I2C_DESC_TYPE_ION) && + (start_address < TI_MAX_I2C_SIZE)); +@@ -712,7 +728,7 @@ static int get_manuf_info(struct edgepor + + /* Read the descriptor data */ + status = read_rom(serial, start_address+sizeof(struct ti_i2c_desc), +- rom_desc->Size, buffer); ++ le16_to_cpu(rom_desc->Size), buffer); + if (status) + goto exit; + diff --git a/queue-3.14/usb-option-add-alcatel-l800ma.patch b/queue-3.14/usb-option-add-alcatel-l800ma.patch new file mode 100644 index 00000000000..dca4e739128 --- /dev/null +++ b/queue-3.14/usb-option-add-alcatel-l800ma.patch @@ -0,0 +1,44 @@ +From dd6b48ecec2ea7d15f28d5e5474388681899a5e1 Mon Sep 17 00:00:00 2001 +From: Bjørn Mork +Date: Fri, 25 Apr 2014 18:49:19 +0200 +Subject: usb: option: add Alcatel L800MA +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Bjørn Mork + +commit dd6b48ecec2ea7d15f28d5e5474388681899a5e1 upstream. + +Device interface layout: +0: ff/ff/ff - serial +1: ff/00/00 - serial AT+PPP +2: ff/ff/ff - QMI/wwan +3: 08/06/50 - storage + +Signed-off-by: Bjørn Mork +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/option.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -287,6 +287,7 @@ static void option_instat_callback(struc + #define ALCATEL_PRODUCT_X060S_X200 0x0000 + #define ALCATEL_PRODUCT_X220_X500D 0x0017 + #define ALCATEL_PRODUCT_L100V 0x011e ++#define ALCATEL_PRODUCT_L800MA 0x0203 + + #define PIRELLI_VENDOR_ID 0x1266 + #define PIRELLI_PRODUCT_C100_1 0x1002 +@@ -1501,6 +1502,8 @@ static const struct usb_device_id option + .driver_info = (kernel_ulong_t)&net_intf5_blacklist }, + { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_L100V), + .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, ++ { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_L800MA), ++ .driver_info = (kernel_ulong_t)&net_intf2_blacklist }, + { USB_DEVICE(AIRPLUS_VENDOR_ID, AIRPLUS_PRODUCT_MCD650) }, + { USB_DEVICE(TLAYTECH_VENDOR_ID, TLAYTECH_PRODUCT_TEU800) }, + { USB_DEVICE(LONGCHEER_VENDOR_ID, FOUR_G_SYSTEMS_PRODUCT_W14), diff --git a/queue-3.14/usb-option-add-and-update-a-number-of-cmotech-devices.patch b/queue-3.14/usb-option-add-and-update-a-number-of-cmotech-devices.patch new file mode 100644 index 00000000000..6c82a093dde --- /dev/null +++ b/queue-3.14/usb-option-add-and-update-a-number-of-cmotech-devices.patch @@ -0,0 +1,120 @@ +From 34f972d6156fe9eea2ab7bb418c71f9d1d5c8e7b Mon Sep 17 00:00:00 2001 +From: Bjørn Mork +Date: Fri, 25 Apr 2014 18:49:20 +0200 +Subject: usb: option: add and update a number of CMOTech devices +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Bjørn Mork + +commit 34f972d6156fe9eea2ab7bb418c71f9d1d5c8e7b upstream. + +A number of older CMOTech modems are based on Qualcomm +chips. The blacklisted interfaces are QMI/wwan. + +Reported-by: Lars Melin +Signed-off-by: Bjørn Mork +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/option.c | 74 +++++++++++++++++++++++++++++++++++++++++--- + 1 file changed, 70 insertions(+), 4 deletions(-) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -234,8 +234,31 @@ static void option_instat_callback(struc + #define QUALCOMM_VENDOR_ID 0x05C6 + + #define CMOTECH_VENDOR_ID 0x16d8 +-#define CMOTECH_PRODUCT_6008 0x6008 +-#define CMOTECH_PRODUCT_6280 0x6280 ++#define CMOTECH_PRODUCT_6001 0x6001 ++#define CMOTECH_PRODUCT_CMU_300 0x6002 ++#define CMOTECH_PRODUCT_6003 0x6003 ++#define CMOTECH_PRODUCT_6004 0x6004 ++#define CMOTECH_PRODUCT_6005 0x6005 ++#define CMOTECH_PRODUCT_CGU_628A 0x6006 ++#define CMOTECH_PRODUCT_CHE_628S 0x6007 ++#define CMOTECH_PRODUCT_CMU_301 0x6008 ++#define CMOTECH_PRODUCT_CHU_628 0x6280 ++#define CMOTECH_PRODUCT_CHU_628S 0x6281 ++#define CMOTECH_PRODUCT_CDU_680 0x6803 ++#define CMOTECH_PRODUCT_CDU_685A 0x6804 ++#define CMOTECH_PRODUCT_CHU_720S 0x7001 ++#define CMOTECH_PRODUCT_7002 0x7002 ++#define CMOTECH_PRODUCT_CHU_629K 0x7003 ++#define CMOTECH_PRODUCT_7004 0x7004 ++#define CMOTECH_PRODUCT_7005 0x7005 ++#define CMOTECH_PRODUCT_CGU_629 0x7006 ++#define CMOTECH_PRODUCT_CHU_629S 0x700a ++#define CMOTECH_PRODUCT_CHU_720I 0x7211 ++#define CMOTECH_PRODUCT_7212 0x7212 ++#define CMOTECH_PRODUCT_7213 0x7213 ++#define CMOTECH_PRODUCT_7251 0x7251 ++#define CMOTECH_PRODUCT_7252 0x7252 ++#define CMOTECH_PRODUCT_7253 0x7253 + + #define TELIT_VENDOR_ID 0x1bc7 + #define TELIT_PRODUCT_UC864E 0x1003 +@@ -504,6 +527,10 @@ static const struct option_blacklist_inf + .reserved = BIT(1) | BIT(2), + }; + ++static const struct option_blacklist_info net_intf0_blacklist = { ++ .reserved = BIT(0), ++}; ++ + static const struct option_blacklist_info net_intf1_blacklist = { + .reserved = BIT(1), + }; +@@ -1037,8 +1064,47 @@ static const struct usb_device_id option + { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */ + { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x0023)}, /* ONYX 3G device */ + { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000)}, /* SIMCom SIM5218 */ +- { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6280) }, /* BP3-USB & BP3-EXT HSDPA */ +- { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6008) }, ++ { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) }, ++ { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CMU_300) }, ++ { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6003), ++ .driver_info = (kernel_ulong_t)&net_intf0_blacklist }, ++ { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6004) }, ++ { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6005) }, ++ { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CGU_628A) }, ++ { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CHE_628S), ++ .driver_info = (kernel_ulong_t)&net_intf0_blacklist }, ++ { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CMU_301), ++ .driver_info = (kernel_ulong_t)&net_intf0_blacklist }, ++ { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CHU_628), ++ .driver_info = (kernel_ulong_t)&net_intf0_blacklist }, ++ { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CHU_628S) }, ++ { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CDU_680) }, ++ { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CDU_685A) }, ++ { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CHU_720S), ++ .driver_info = (kernel_ulong_t)&net_intf0_blacklist }, ++ { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_7002), ++ .driver_info = (kernel_ulong_t)&net_intf0_blacklist }, ++ { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CHU_629K), ++ .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, ++ { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_7004), ++ .driver_info = (kernel_ulong_t)&net_intf3_blacklist }, ++ { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_7005) }, ++ { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CGU_629), ++ .driver_info = (kernel_ulong_t)&net_intf5_blacklist }, ++ { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CHU_629S), ++ .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, ++ { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CHU_720I), ++ .driver_info = (kernel_ulong_t)&net_intf0_blacklist }, ++ { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_7212), ++ .driver_info = (kernel_ulong_t)&net_intf0_blacklist }, ++ { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_7213), ++ .driver_info = (kernel_ulong_t)&net_intf0_blacklist }, ++ { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_7251), ++ .driver_info = (kernel_ulong_t)&net_intf1_blacklist }, ++ { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_7252), ++ .driver_info = (kernel_ulong_t)&net_intf1_blacklist }, ++ { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_7253), ++ .driver_info = (kernel_ulong_t)&net_intf1_blacklist }, + { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864E) }, + { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864G) }, + { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_CC864_DUAL) }, diff --git a/queue-3.14/usb-option-add-olivetti-olicard-500.patch b/queue-3.14/usb-option-add-olivetti-olicard-500.patch new file mode 100644 index 00000000000..384d20c04d4 --- /dev/null +++ b/queue-3.14/usb-option-add-olivetti-olicard-500.patch @@ -0,0 +1,47 @@ +From 533b3994610f316e5cd61b56d0c4daa15c830f89 Mon Sep 17 00:00:00 2001 +From: Bjørn Mork +Date: Fri, 25 Apr 2014 18:49:18 +0200 +Subject: usb: option: add Olivetti Olicard 500 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Bjørn Mork + +commit 533b3994610f316e5cd61b56d0c4daa15c830f89 upstream. + +Device interface layout: +0: ff/ff/ff - serial +1: ff/ff/ff - serial AT+PPP +2: 08/06/50 - storage +3: ff/ff/ff - serial +4: ff/ff/ff - QMI/wwan + +Reported-by: Julio Araujo +Signed-off-by: Bjørn Mork +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/option.c | 4 ++++ + 1 file changed, 4 insertions(+) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -349,6 +349,7 @@ static void option_instat_callback(struc + #define OLIVETTI_PRODUCT_OLICARD100 0xc000 + #define OLIVETTI_PRODUCT_OLICARD145 0xc003 + #define OLIVETTI_PRODUCT_OLICARD200 0xc005 ++#define OLIVETTI_PRODUCT_OLICARD500 0xc00b + + /* Celot products */ + #define CELOT_VENDOR_ID 0x211f +@@ -1545,6 +1546,9 @@ static const struct usb_device_id option + { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD200), + .driver_info = (kernel_ulong_t)&net_intf6_blacklist + }, ++ { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD500), ++ .driver_info = (kernel_ulong_t)&net_intf4_blacklist ++ }, + { USB_DEVICE(CELOT_VENDOR_ID, CELOT_PRODUCT_CT680M) }, /* CT-650 CDMA 450 1xEVDO modem */ + { USB_DEVICE_AND_INTERFACE_INFO(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_GT_B3730, USB_CLASS_CDC_DATA, 0x00, 0x00) }, /* Samsung GT-B3730 LTE USB modem.*/ + { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM600) }, diff --git a/queue-3.14/usb-option-driver-add-support-for-telit-ue910v2.patch b/queue-3.14/usb-option-driver-add-support-for-telit-ue910v2.patch new file mode 100644 index 00000000000..29386f73a48 --- /dev/null +++ b/queue-3.14/usb-option-driver-add-support-for-telit-ue910v2.patch @@ -0,0 +1,37 @@ +From d6de486bc22255779bd54b0fceb4c240962bf146 Mon Sep 17 00:00:00 2001 +From: Daniele Palmas +Date: Wed, 2 Apr 2014 11:19:48 +0200 +Subject: usb: option driver, add support for Telit UE910v2 + +From: Daniele Palmas + +commit d6de486bc22255779bd54b0fceb4c240962bf146 upstream. + +option driver, added VID/PID for Telit UE910v2 modem + +Signed-off-by: Daniele Palmas +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/option.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -243,6 +243,7 @@ static void option_instat_callback(struc + #define TELIT_PRODUCT_CC864_DUAL 0x1005 + #define TELIT_PRODUCT_CC864_SINGLE 0x1006 + #define TELIT_PRODUCT_DE910_DUAL 0x1010 ++#define TELIT_PRODUCT_UE910_V2 0x1012 + #define TELIT_PRODUCT_LE920 0x1200 + + /* ZTE PRODUCTS */ +@@ -1041,6 +1042,7 @@ static const struct usb_device_id option + { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_CC864_DUAL) }, + { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_CC864_SINGLE) }, + { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_DE910_DUAL) }, ++ { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UE910_V2) }, + { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920), + .driver_info = (kernel_ulong_t)&telit_le920_blacklist }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622, 0xff, 0xff, 0xff) }, /* ZTE WCDMA products */ diff --git a/queue-3.14/usb-qcserial-add-sierra-wireless-em7355.patch b/queue-3.14/usb-qcserial-add-sierra-wireless-em7355.patch new file mode 100644 index 00000000000..399dccecde2 --- /dev/null +++ b/queue-3.14/usb-qcserial-add-sierra-wireless-em7355.patch @@ -0,0 +1,31 @@ +From a00986f81182a69dee4d2c48e8c19805bdf0f790 Mon Sep 17 00:00:00 2001 +From: Bjørn Mork +Date: Fri, 25 Apr 2014 18:49:15 +0200 +Subject: usb: qcserial: add Sierra Wireless EM7355 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Bjørn Mork + +commit a00986f81182a69dee4d2c48e8c19805bdf0f790 upstream. + +Signed-off-by: Bjørn Mork +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/qcserial.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/drivers/usb/serial/qcserial.c ++++ b/drivers/usb/serial/qcserial.c +@@ -139,6 +139,9 @@ static const struct usb_device_id id_tab + {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901c, 0)}, /* Sierra Wireless EM7700 Device Management */ + {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901c, 2)}, /* Sierra Wireless EM7700 NMEA */ + {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901c, 3)}, /* Sierra Wireless EM7700 Modem */ ++ {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901f, 0)}, /* Sierra Wireless EM7355 Device Management */ ++ {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901f, 2)}, /* Sierra Wireless EM7355 NMEA */ ++ {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901f, 3)}, /* Sierra Wireless EM7355 Modem */ + {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9051, 0)}, /* Netgear AirCard 340U Device Management */ + {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9051, 2)}, /* Netgear AirCard 340U NMEA */ + {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9051, 3)}, /* Netgear AirCard 340U Modem */ diff --git a/queue-3.14/usb-qcserial-add-sierra-wireless-mc7305-mc7355.patch b/queue-3.14/usb-qcserial-add-sierra-wireless-mc7305-mc7355.patch new file mode 100644 index 00000000000..367c924ada3 --- /dev/null +++ b/queue-3.14/usb-qcserial-add-sierra-wireless-mc7305-mc7355.patch @@ -0,0 +1,31 @@ +From bce4f588f19d59fc07fadfeb0b2a3a06c942827a Mon Sep 17 00:00:00 2001 +From: Bjørn Mork +Date: Fri, 25 Apr 2014 18:49:17 +0200 +Subject: usb: qcserial: add Sierra Wireless MC7305/MC7355 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Bjørn Mork + +commit bce4f588f19d59fc07fadfeb0b2a3a06c942827a upstream. + +Signed-off-by: Bjørn Mork +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/qcserial.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/drivers/usb/serial/qcserial.c ++++ b/drivers/usb/serial/qcserial.c +@@ -145,6 +145,9 @@ static const struct usb_device_id id_tab + {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901f, 0)}, /* Sierra Wireless EM7355 Device Management */ + {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901f, 2)}, /* Sierra Wireless EM7355 NMEA */ + {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901f, 3)}, /* Sierra Wireless EM7355 Modem */ ++ {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9041, 0)}, /* Sierra Wireless MC7305/MC7355 Device Management */ ++ {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9041, 2)}, /* Sierra Wireless MC7305/MC7355 NMEA */ ++ {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9041, 3)}, /* Sierra Wireless MC7305/MC7355 Modem */ + {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9051, 0)}, /* Netgear AirCard 340U Device Management */ + {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9051, 2)}, /* Netgear AirCard 340U NMEA */ + {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9051, 3)}, /* Netgear AirCard 340U Modem */ diff --git a/queue-3.14/usb-qcserial-add-sierra-wireless-mc73xx.patch b/queue-3.14/usb-qcserial-add-sierra-wireless-mc73xx.patch new file mode 100644 index 00000000000..f79cbb7bbf8 --- /dev/null +++ b/queue-3.14/usb-qcserial-add-sierra-wireless-mc73xx.patch @@ -0,0 +1,31 @@ +From 70a3615fc07c2330ed7c1e922f3c44f4a67c0762 Mon Sep 17 00:00:00 2001 +From: Bjørn Mork +Date: Fri, 25 Apr 2014 18:49:16 +0200 +Subject: usb: qcserial: add Sierra Wireless MC73xx +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Bjørn Mork + +commit 70a3615fc07c2330ed7c1e922f3c44f4a67c0762 upstream. + +Signed-off-by: Bjørn Mork +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/qcserial.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/drivers/usb/serial/qcserial.c ++++ b/drivers/usb/serial/qcserial.c +@@ -136,6 +136,9 @@ static const struct usb_device_id id_tab + {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x68a2, 0)}, /* Sierra Wireless MC7710 Device Management */ + {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x68a2, 2)}, /* Sierra Wireless MC7710 NMEA */ + {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x68a2, 3)}, /* Sierra Wireless MC7710 Modem */ ++ {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x68c0, 0)}, /* Sierra Wireless MC73xx Device Management */ ++ {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x68c0, 2)}, /* Sierra Wireless MC73xx NMEA */ ++ {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x68c0, 3)}, /* Sierra Wireless MC73xx Modem */ + {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901c, 0)}, /* Sierra Wireless EM7700 Device Management */ + {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901c, 2)}, /* Sierra Wireless EM7700 NMEA */ + {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901c, 3)}, /* Sierra Wireless EM7700 Modem */ diff --git a/queue-3.14/usb-serial-fix-sysfs-attribute-removal-deadlock.patch b/queue-3.14/usb-serial-fix-sysfs-attribute-removal-deadlock.patch new file mode 100644 index 00000000000..5a5f610f46e --- /dev/null +++ b/queue-3.14/usb-serial-fix-sysfs-attribute-removal-deadlock.patch @@ -0,0 +1,138 @@ +From 10164c2ad6d2c16809f6c09e278f946e47801b3a Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Wed, 23 Apr 2014 11:32:19 +0200 +Subject: USB: serial: fix sysfs-attribute removal deadlock + +From: Johan Hovold + +commit 10164c2ad6d2c16809f6c09e278f946e47801b3a upstream. + +Fix driver new_id sysfs-attribute removal deadlock by making sure to +not hold any locks that the attribute operations grab when removing the +attribute. + +Specifically, usb_serial_deregister holds the table mutex when +deregistering the driver, which includes removing the new_id attribute. +This can lead to a deadlock as writing to new_id increments the +attribute's active count before trying to grab the same mutex in +usb_serial_probe. + +The deadlock can easily be triggered by inserting a sleep in +usb_serial_deregister and writing the id of an unbound device to new_id +during module unload. + +As the table mutex (in this case) is used to prevent subdriver unload +during probe, it should be sufficient to only hold the lock while +manipulating the usb-serial driver list during deregister. A racing +probe will then either fail to find a matching subdriver or fail to get +the corresponding module reference. + +Since v3.15-rc1 this also triggers the following lockdep warning: + +====================================================== +[ INFO: possible circular locking dependency detected ] +3.15.0-rc2 #123 Tainted: G W +------------------------------------------------------- +modprobe/190 is trying to acquire lock: + (s_active#4){++++.+}, at: [] kernfs_remove_by_name_ns+0x4c/0x94 + +but task is already holding lock: + (table_lock){+.+.+.}, at: [] usb_serial_deregister+0x3c/0x78 [usbserial] + +which lock already depends on the new lock. + +the existing dependency chain (in reverse order) is: + +-> #1 (table_lock){+.+.+.}: + [] __lock_acquire+0x1694/0x1ce4 + [] lock_acquire+0xb4/0x154 + [] _raw_spin_lock+0x4c/0x5c + [] usb_store_new_id+0x14c/0x1ac + [] new_id_store+0x68/0x70 [usbserial] + [] drv_attr_store+0x30/0x3c + [] sysfs_kf_write+0x5c/0x60 + [] kernfs_fop_write+0xd4/0x194 + [] vfs_write+0xbc/0x198 + [] SyS_write+0x4c/0xa0 + [] ret_fast_syscall+0x0/0x48 + +-> #0 (s_active#4){++++.+}: + [] print_circular_bug+0x68/0x2f8 + [] __lock_acquire+0x1928/0x1ce4 + [] lock_acquire+0xb4/0x154 + [] __kernfs_remove+0x254/0x310 + [] kernfs_remove_by_name_ns+0x4c/0x94 + [] remove_files.isra.1+0x48/0x84 + [] sysfs_remove_group+0x58/0xac + [] sysfs_remove_groups+0x34/0x44 + [] driver_remove_groups+0x1c/0x20 + [] bus_remove_driver+0x3c/0xe4 + [] driver_unregister+0x38/0x58 + [] usb_serial_bus_deregister+0x84/0x88 [usbserial] + [] usb_serial_deregister+0x6c/0x78 [usbserial] + [] usb_serial_deregister_drivers+0x2c/0x4c [usbserial] + [] usb_serial_module_exit+0x14/0x1c [sierra] + [] SyS_delete_module+0x184/0x210 + [] ret_fast_syscall+0x0/0x48 + +other info that might help us debug this: + + Possible unsafe locking scenario: + + CPU0 CPU1 + ---- ---- + lock(table_lock); + lock(s_active#4); + lock(table_lock); + lock(s_active#4); + + *** DEADLOCK *** + +1 lock held by modprobe/190: + #0: (table_lock){+.+.+.}, at: [] usb_serial_deregister+0x3c/0x78 [usbserial] + +stack backtrace: +CPU: 0 PID: 190 Comm: modprobe Tainted: G W 3.15.0-rc2 #123 +[] (unwind_backtrace) from [] (show_stack+0x20/0x24) +[] (show_stack) from [] (dump_stack+0x24/0x28) +[] (dump_stack) from [] (print_circular_bug+0x2ec/0x2f8) +[] (print_circular_bug) from [] (__lock_acquire+0x1928/0x1ce4) +[] (__lock_acquire) from [] (lock_acquire+0xb4/0x154) +[] (lock_acquire) from [] (__kernfs_remove+0x254/0x310) +[] (__kernfs_remove) from [] (kernfs_remove_by_name_ns+0x4c/0x94) +[] (kernfs_remove_by_name_ns) from [] (remove_files.isra.1+0x48/0x84) +[] (remove_files.isra.1) from [] (sysfs_remove_group+0x58/0xac) +[] (sysfs_remove_group) from [] (sysfs_remove_groups+0x34/0x44) +[] (sysfs_remove_groups) from [] (driver_remove_groups+0x1c/0x20) +[] (driver_remove_groups) from [] (bus_remove_driver+0x3c/0xe4) +[] (bus_remove_driver) from [] (driver_unregister+0x38/0x58) +[] (driver_unregister) from [] (usb_serial_bus_deregister+0x84/0x88 [usbserial]) +[] (usb_serial_bus_deregister [usbserial]) from [] (usb_serial_deregister+0x6c/0x78 [usbserial]) +[] (usb_serial_deregister [usbserial]) from [] (usb_serial_deregister_drivers+0x2c/0x4c [usbserial]) +[] (usb_serial_deregister_drivers [usbserial]) from [] (usb_serial_module_exit+0x14/0x1c [sierra]) +[] (usb_serial_module_exit [sierra]) from [] (SyS_delete_module+0x184/0x210) +[] (SyS_delete_module) from [] (ret_fast_syscall+0x0/0x48) + +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/usb-serial.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +--- a/drivers/usb/serial/usb-serial.c ++++ b/drivers/usb/serial/usb-serial.c +@@ -1348,10 +1348,12 @@ static int usb_serial_register(struct us + static void usb_serial_deregister(struct usb_serial_driver *device) + { + pr_info("USB Serial deregistering driver %s\n", device->description); ++ + mutex_lock(&table_lock); + list_del(&device->driver_list); +- usb_serial_bus_deregister(device); + mutex_unlock(&table_lock); ++ ++ usb_serial_bus_deregister(device); + } + + /** diff --git a/queue-3.14/usb-serial-ftdi_sio-add-id-for-brainboxes-serial-cards.patch b/queue-3.14/usb-serial-ftdi_sio-add-id-for-brainboxes-serial-cards.patch new file mode 100644 index 00000000000..4d76a582355 --- /dev/null +++ b/queue-3.14/usb-serial-ftdi_sio-add-id-for-brainboxes-serial-cards.patch @@ -0,0 +1,106 @@ +From efe26e16b1d93ac0085e69178cc18811629e8fc5 Mon Sep 17 00:00:00 2001 +From: Michele Baldessari +Date: Mon, 31 Mar 2014 10:51:00 +0200 +Subject: USB: serial: ftdi_sio: add id for Brainboxes serial cards + +From: Michele Baldessari + +commit efe26e16b1d93ac0085e69178cc18811629e8fc5 upstream. + +Custom VID/PIDs for Brainboxes cards as reported in +https://bugzilla.redhat.com/show_bug.cgi?id=1071914 + +Signed-off-by: Michele Baldessari +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/ftdi_sio.c | 33 +++++++++++++++++++++++++++++++++ + drivers/usb/serial/ftdi_sio_ids.h | 37 +++++++++++++++++++++++++++++++++++++ + 2 files changed, 70 insertions(+) + +--- a/drivers/usb/serial/ftdi_sio.c ++++ b/drivers/usb/serial/ftdi_sio.c +@@ -909,6 +909,39 @@ static const struct usb_device_id id_tab + { USB_DEVICE(FTDI_VID, FTDI_Z3X_PID) }, + /* Cressi Devices */ + { USB_DEVICE(FTDI_VID, FTDI_CRESSI_PID) }, ++ /* Brainboxes Devices */ ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_VX_001_PID) }, ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_VX_012_PID) }, ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_VX_023_PID) }, ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_VX_034_PID) }, ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_101_PID) }, ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_1_PID) }, ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_2_PID) }, ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_3_PID) }, ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_4_PID) }, ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_5_PID) }, ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_6_PID) }, ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_7_PID) }, ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_8_PID) }, ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_257_PID) }, ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_279_1_PID) }, ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_279_2_PID) }, ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_279_3_PID) }, ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_279_4_PID) }, ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_313_PID) }, ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_324_PID) }, ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_346_1_PID) }, ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_346_2_PID) }, ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_357_PID) }, ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_606_1_PID) }, ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_606_2_PID) }, ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_606_3_PID) }, ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_701_1_PID) }, ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_701_2_PID) }, ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_1_PID) }, ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_2_PID) }, ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_3_PID) }, ++ { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_4_PID) }, + { } /* Terminating entry */ + }; + +--- a/drivers/usb/serial/ftdi_sio_ids.h ++++ b/drivers/usb/serial/ftdi_sio_ids.h +@@ -1326,3 +1326,40 @@ + * Manufacturer: Cressi + */ + #define FTDI_CRESSI_PID 0x87d0 ++ ++/* ++ * Brainboxes devices ++ */ ++#define BRAINBOXES_VID 0x05d1 ++#define BRAINBOXES_VX_001_PID 0x1001 /* VX-001 ExpressCard 1 Port RS232 */ ++#define BRAINBOXES_VX_012_PID 0x1002 /* VX-012 ExpressCard 2 Port RS232 */ ++#define BRAINBOXES_VX_023_PID 0x1003 /* VX-023 ExpressCard 1 Port RS422/485 */ ++#define BRAINBOXES_VX_034_PID 0x1004 /* VX-034 ExpressCard 2 Port RS422/485 */ ++#define BRAINBOXES_US_101_PID 0x1011 /* US-101 1xRS232 */ ++#define BRAINBOXES_US_324_PID 0x1013 /* US-324 1xRS422/485 1Mbaud */ ++#define BRAINBOXES_US_606_1_PID 0x2001 /* US-606 6 Port RS232 Serial Port 1 and 2 */ ++#define BRAINBOXES_US_606_2_PID 0x2002 /* US-606 6 Port RS232 Serial Port 3 and 4 */ ++#define BRAINBOXES_US_606_3_PID 0x2003 /* US-606 6 Port RS232 Serial Port 4 and 6 */ ++#define BRAINBOXES_US_701_1_PID 0x2011 /* US-701 4xRS232 1Mbaud Port 1 and 2 */ ++#define BRAINBOXES_US_701_2_PID 0x2012 /* US-701 4xRS422 1Mbaud Port 3 and 4 */ ++#define BRAINBOXES_US_279_1_PID 0x2021 /* US-279 8xRS422 1Mbaud Port 1 and 2 */ ++#define BRAINBOXES_US_279_2_PID 0x2022 /* US-279 8xRS422 1Mbaud Port 3 and 4 */ ++#define BRAINBOXES_US_279_3_PID 0x2023 /* US-279 8xRS422 1Mbaud Port 5 and 6 */ ++#define BRAINBOXES_US_279_4_PID 0x2024 /* US-279 8xRS422 1Mbaud Port 7 and 8 */ ++#define BRAINBOXES_US_346_1_PID 0x3011 /* US-346 4xRS422/485 1Mbaud Port 1 and 2 */ ++#define BRAINBOXES_US_346_2_PID 0x3012 /* US-346 4xRS422/485 1Mbaud Port 3 and 4 */ ++#define BRAINBOXES_US_257_PID 0x5001 /* US-257 2xRS232 1Mbaud */ ++#define BRAINBOXES_US_313_PID 0x6001 /* US-313 2xRS422/485 1Mbaud */ ++#define BRAINBOXES_US_357_PID 0x7001 /* US_357 1xRS232/422/485 */ ++#define BRAINBOXES_US_842_1_PID 0x8001 /* US-842 8xRS422/485 1Mbaud Port 1 and 2 */ ++#define BRAINBOXES_US_842_2_PID 0x8002 /* US-842 8xRS422/485 1Mbaud Port 3 and 4 */ ++#define BRAINBOXES_US_842_3_PID 0x8003 /* US-842 8xRS422/485 1Mbaud Port 5 and 6 */ ++#define BRAINBOXES_US_842_4_PID 0x8004 /* US-842 8xRS422/485 1Mbaud Port 7 and 8 */ ++#define BRAINBOXES_US_160_1_PID 0x9001 /* US-160 16xRS232 1Mbaud Port 1 and 2 */ ++#define BRAINBOXES_US_160_2_PID 0x9002 /* US-160 16xRS232 1Mbaud Port 3 and 4 */ ++#define BRAINBOXES_US_160_3_PID 0x9003 /* US-160 16xRS232 1Mbaud Port 5 and 6 */ ++#define BRAINBOXES_US_160_4_PID 0x9004 /* US-160 16xRS232 1Mbaud Port 7 and 8 */ ++#define BRAINBOXES_US_160_5_PID 0x9005 /* US-160 16xRS232 1Mbaud Port 9 and 10 */ ++#define BRAINBOXES_US_160_6_PID 0x9006 /* US-160 16xRS232 1Mbaud Port 11 and 12 */ ++#define BRAINBOXES_US_160_7_PID 0x9007 /* US-160 16xRS232 1Mbaud Port 13 and 14 */ ++#define BRAINBOXES_US_160_8_PID 0x9008 /* US-160 16xRS232 1Mbaud Port 15 and 16 */ diff --git a/queue-3.14/usb-usb_wwan-fix-handling-of-missing-bulk-endpoints.patch b/queue-3.14/usb-usb_wwan-fix-handling-of-missing-bulk-endpoints.patch new file mode 100644 index 00000000000..08a6e2c22b9 --- /dev/null +++ b/queue-3.14/usb-usb_wwan-fix-handling-of-missing-bulk-endpoints.patch @@ -0,0 +1,76 @@ +From bd73bd8831696f189a479a0712ae95208e513d7e Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Thu, 3 Apr 2014 13:06:46 +0200 +Subject: USB: usb_wwan: fix handling of missing bulk endpoints +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Johan Hovold + +commit bd73bd8831696f189a479a0712ae95208e513d7e upstream. + +Fix regression introduced by commit 8e493ca1767d ("USB: usb_wwan: fix +bulk-urb allocation") by making sure to require both bulk-in and out +endpoints during port probe. + +The original option driver (which usb_wwan is based on) was written +under the assumption that either endpoint could be missing, but +evidently this cannot have been tested properly. Specifically, it would +handle opening a device without bulk-in (but would blow up during resume +which was implemented later), but not a missing bulk-out in write() +(although it is handled in some places such as write_room()). + +Fortunately (?), the driver also got the test for missing endpoints +wrong so the urbs were in fact always allocated, although they would be +initialised using the wrong endpoint address (0) and any submission of +such an urb would fail. + +The commit mentioned above fixed the test for missing endpoints but +thereby exposed the other bugs which would now generate null-pointer +exceptions rather than failed urb submissions. + +The regression was introduced in v3.7, but the offending commit was also +marked for stable. + +Reported-by: Rafał Miłecki +Signed-off-by: Johan Hovold +Tested-by: Rafał Miłecki +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/usb_wwan.c | 9 +++------ + 1 file changed, 3 insertions(+), 6 deletions(-) + +--- a/drivers/usb/serial/usb_wwan.c ++++ b/drivers/usb/serial/usb_wwan.c +@@ -466,6 +466,9 @@ int usb_wwan_port_probe(struct usb_seria + int err; + int i; + ++ if (!port->bulk_in_size || !port->bulk_out_size) ++ return -ENODEV; ++ + portdata = kzalloc(sizeof(*portdata), GFP_KERNEL); + if (!portdata) + return -ENOMEM; +@@ -473,9 +476,6 @@ int usb_wwan_port_probe(struct usb_seria + init_usb_anchor(&portdata->delayed); + + for (i = 0; i < N_IN_URB; i++) { +- if (!port->bulk_in_size) +- break; +- + buffer = (u8 *)__get_free_page(GFP_KERNEL); + if (!buffer) + goto bail_out_error; +@@ -489,9 +489,6 @@ int usb_wwan_port_probe(struct usb_seria + } + + for (i = 0; i < N_OUT_URB; i++) { +- if (!port->bulk_out_size) +- break; +- + buffer = kmalloc(OUT_BUFLEN, GFP_KERNEL); + if (!buffer) + goto bail_out_error2; -- 2.47.3