]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 21 May 2014 05:31:09 +0000 (14:31 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 21 May 2014 05:31:09 +0000 (14:31 +0900)
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

15 files changed:
queue-3.14/revert-usb-serial-add-usbid-for-dell-wwan-card-to-sierra.c.patch [new file with mode: 0644]
queue-3.14/series
queue-3.14/usb-cdc-acm-remove-motorola-telit-h24-serial-interfaces-from-acm-driver.patch [new file with mode: 0644]
queue-3.14/usb-cp210x-add-8281-nanotec-plug-drive.patch [new file with mode: 0644]
queue-3.14/usb-io_ti-fix-firmware-download-on-big-endian-machines.patch [new file with mode: 0644]
queue-3.14/usb-option-add-alcatel-l800ma.patch [new file with mode: 0644]
queue-3.14/usb-option-add-and-update-a-number-of-cmotech-devices.patch [new file with mode: 0644]
queue-3.14/usb-option-add-olivetti-olicard-500.patch [new file with mode: 0644]
queue-3.14/usb-option-driver-add-support-for-telit-ue910v2.patch [new file with mode: 0644]
queue-3.14/usb-qcserial-add-sierra-wireless-em7355.patch [new file with mode: 0644]
queue-3.14/usb-qcserial-add-sierra-wireless-mc7305-mc7355.patch [new file with mode: 0644]
queue-3.14/usb-qcserial-add-sierra-wireless-mc73xx.patch [new file with mode: 0644]
queue-3.14/usb-serial-fix-sysfs-attribute-removal-deadlock.patch [new file with mode: 0644]
queue-3.14/usb-serial-ftdi_sio-add-id-for-brainboxes-serial-cards.patch [new file with mode: 0644]
queue-3.14/usb-usb_wwan-fix-handling-of-missing-bulk-endpoints.patch [new file with mode: 0644]

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 (file)
index 0000000..f27ba03
--- /dev/null
@@ -0,0 +1,32 @@
+From 2e01280d2801c72878cf3a7119eac30077b463d5 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <jhovold@gmail.com>
+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 <jhovold@gmail.com>
+
+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 <sidhayn@gmail.com>
+Signed-off-by: Johan Hovold <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 */
+       { }
+ };
index fc0257e436df7c1f825788f1b4c54e24b104975f..a5295a07725ef26862022347ffb057e6b4dbf6d3 100644 (file)
@@ -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 (file)
index 0000000..b23b502
--- /dev/null
@@ -0,0 +1,59 @@
+From 895d240d1db0b2736d779200788e4c4aea28a0c6 Mon Sep 17 00:00:00 2001
+From: Michael Ulbricht <michael.ulbricht@systec-electronic.com>
+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 <michael.ulbricht@systec-electronic.com>
+
+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 <michael.ulbricht@systec-electronic.com>
+Signed-off-by: Alexander Stein <alexander.stein@systec-electronic.com>
+Signed-off-by: Oliver Neukum <oliver@neukum.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..69ce134
--- /dev/null
@@ -0,0 +1,27 @@
+From 72b3007951010ce1bbf950e23b19d9839fa905a5 Mon Sep 17 00:00:00 2001
+From: Tristan Bruns <tristan@tristanbruns.de>
+Date: Sun, 13 Apr 2014 23:57:16 +0200
+Subject: USB: cp210x: Add 8281 (Nanotec Plug & Drive)
+
+From: Tristan Bruns <tristan@tristanbruns.de>
+
+commit 72b3007951010ce1bbf950e23b19d9839fa905a5 upstream.
+
+Signed-off-by: Tristan Bruns <tristan@tristanbruns.de>
+Signed-off-by: Johan Hovold <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..69a7004
--- /dev/null
@@ -0,0 +1,168 @@
+From 5509076d1b4485ce9fb07705fcbcd2695907ab5b Mon Sep 17 00:00:00 2001
+From: Johan Hovold <jhovold@gmail.com>
+Date: Fri, 25 Apr 2014 15:23:03 +0200
+Subject: USB: io_ti: fix firmware download on big-endian machines
+
+From: Johan Hovold <jhovold@gmail.com>
+
+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 <ldrolez@debian.org>
+Tested-by: Ludovic Drolez <ldrolez@debian.org>
+Signed-off-by: Johan Hovold <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 <linux/spinlock.h>
+ #include <linux/mutex.h>
+ #include <linux/serial.h>
++#include <linux/swab.h>
+ #include <linux/kfifo.h>
+ #include <linux/ioctl.h>
+ #include <linux/firmware.h>
+@@ -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 (file)
index 0000000..dca4e73
--- /dev/null
@@ -0,0 +1,44 @@
+From dd6b48ecec2ea7d15f28d5e5474388681899a5e1 Mon Sep 17 00:00:00 2001
+From: Bjørn Mork <bjorn@mork.no>
+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 <bjorn@mork.no>
+
+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 <bjorn@mork.no>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..6c82a09
--- /dev/null
@@ -0,0 +1,120 @@
+From 34f972d6156fe9eea2ab7bb418c71f9d1d5c8e7b Mon Sep 17 00:00:00 2001
+From: Bjørn Mork <bjorn@mork.no>
+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 <bjorn@mork.no>
+
+commit 34f972d6156fe9eea2ab7bb418c71f9d1d5c8e7b upstream.
+
+A number of older CMOTech modems are based on Qualcomm
+chips.  The blacklisted interfaces are QMI/wwan.
+
+Reported-by: Lars Melin <larsm17@gmail.com>
+Signed-off-by: Bjørn Mork <bjorn@mork.no>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..384d20c
--- /dev/null
@@ -0,0 +1,47 @@
+From 533b3994610f316e5cd61b56d0c4daa15c830f89 Mon Sep 17 00:00:00 2001
+From: Bjørn Mork <bjorn@mork.no>
+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 <bjorn@mork.no>
+
+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 <julio.araujo@wllctel.com.br>
+Signed-off-by: Bjørn Mork <bjorn@mork.no>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..29386f7
--- /dev/null
@@ -0,0 +1,37 @@
+From d6de486bc22255779bd54b0fceb4c240962bf146 Mon Sep 17 00:00:00 2001
+From: Daniele Palmas <dnlplm@gmail.com>
+Date: Wed, 2 Apr 2014 11:19:48 +0200
+Subject: usb: option driver, add support for Telit UE910v2
+
+From: Daniele Palmas <dnlplm@gmail.com>
+
+commit d6de486bc22255779bd54b0fceb4c240962bf146 upstream.
+
+option driver, added VID/PID for Telit UE910v2 modem
+
+Signed-off-by: Daniele Palmas <dnlplm@gmail.com>
+Signed-off-by: Johan Hovold <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..399dcce
--- /dev/null
@@ -0,0 +1,31 @@
+From a00986f81182a69dee4d2c48e8c19805bdf0f790 Mon Sep 17 00:00:00 2001
+From: Bjørn Mork <bjorn@mork.no>
+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 <bjorn@mork.no>
+
+commit a00986f81182a69dee4d2c48e8c19805bdf0f790 upstream.
+
+Signed-off-by: Bjørn Mork <bjorn@mork.no>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..367c924
--- /dev/null
@@ -0,0 +1,31 @@
+From bce4f588f19d59fc07fadfeb0b2a3a06c942827a Mon Sep 17 00:00:00 2001
+From: Bjørn Mork <bjorn@mork.no>
+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 <bjorn@mork.no>
+
+commit bce4f588f19d59fc07fadfeb0b2a3a06c942827a upstream.
+
+Signed-off-by: Bjørn Mork <bjorn@mork.no>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..f79cbb7
--- /dev/null
@@ -0,0 +1,31 @@
+From 70a3615fc07c2330ed7c1e922f3c44f4a67c0762 Mon Sep 17 00:00:00 2001
+From: Bjørn Mork <bjorn@mork.no>
+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 <bjorn@mork.no>
+
+commit 70a3615fc07c2330ed7c1e922f3c44f4a67c0762 upstream.
+
+Signed-off-by: Bjørn Mork <bjorn@mork.no>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..5a5f610
--- /dev/null
@@ -0,0 +1,138 @@
+From 10164c2ad6d2c16809f6c09e278f946e47801b3a Mon Sep 17 00:00:00 2001
+From: Johan Hovold <jhovold@gmail.com>
+Date: Wed, 23 Apr 2014 11:32:19 +0200
+Subject: USB: serial: fix sysfs-attribute removal deadlock
+
+From: Johan Hovold <jhovold@gmail.com>
+
+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: [<c0167aa0>] kernfs_remove_by_name_ns+0x4c/0x94
+
+but task is already holding lock:
+ (table_lock){+.+.+.}, at: [<bf004d84>] 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){+.+.+.}:
+       [<c0075f84>] __lock_acquire+0x1694/0x1ce4
+       [<c0076de8>] lock_acquire+0xb4/0x154
+       [<c03af3cc>] _raw_spin_lock+0x4c/0x5c
+       [<c02bbc24>] usb_store_new_id+0x14c/0x1ac
+       [<bf007eb4>] new_id_store+0x68/0x70 [usbserial]
+       [<c025f568>] drv_attr_store+0x30/0x3c
+       [<c01690e0>] sysfs_kf_write+0x5c/0x60
+       [<c01682c0>] kernfs_fop_write+0xd4/0x194
+       [<c010881c>] vfs_write+0xbc/0x198
+       [<c0108e4c>] SyS_write+0x4c/0xa0
+       [<c000f880>] ret_fast_syscall+0x0/0x48
+
+-> #0 (s_active#4){++++.+}:
+       [<c03a7a28>] print_circular_bug+0x68/0x2f8
+       [<c0076218>] __lock_acquire+0x1928/0x1ce4
+       [<c0076de8>] lock_acquire+0xb4/0x154
+       [<c0166b70>] __kernfs_remove+0x254/0x310
+       [<c0167aa0>] kernfs_remove_by_name_ns+0x4c/0x94
+       [<c0169fb8>] remove_files.isra.1+0x48/0x84
+       [<c016a2fc>] sysfs_remove_group+0x58/0xac
+       [<c016a414>] sysfs_remove_groups+0x34/0x44
+       [<c02623b8>] driver_remove_groups+0x1c/0x20
+       [<c0260e9c>] bus_remove_driver+0x3c/0xe4
+       [<c026235c>] driver_unregister+0x38/0x58
+       [<bf007fb4>] usb_serial_bus_deregister+0x84/0x88 [usbserial]
+       [<bf004db4>] usb_serial_deregister+0x6c/0x78 [usbserial]
+       [<bf005330>] usb_serial_deregister_drivers+0x2c/0x4c [usbserial]
+       [<bf016618>] usb_serial_module_exit+0x14/0x1c [sierra]
+       [<c009d6cc>] SyS_delete_module+0x184/0x210
+       [<c000f880>] 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: [<bf004d84>] usb_serial_deregister+0x3c/0x78 [usbserial]
+
+stack backtrace:
+CPU: 0 PID: 190 Comm: modprobe Tainted: G        W     3.15.0-rc2 #123
+[<c0015e10>] (unwind_backtrace) from [<c0013728>] (show_stack+0x20/0x24)
+[<c0013728>] (show_stack) from [<c03a9a54>] (dump_stack+0x24/0x28)
+[<c03a9a54>] (dump_stack) from [<c03a7cac>] (print_circular_bug+0x2ec/0x2f8)
+[<c03a7cac>] (print_circular_bug) from [<c0076218>] (__lock_acquire+0x1928/0x1ce4)
+[<c0076218>] (__lock_acquire) from [<c0076de8>] (lock_acquire+0xb4/0x154)
+[<c0076de8>] (lock_acquire) from [<c0166b70>] (__kernfs_remove+0x254/0x310)
+[<c0166b70>] (__kernfs_remove) from [<c0167aa0>] (kernfs_remove_by_name_ns+0x4c/0x94)
+[<c0167aa0>] (kernfs_remove_by_name_ns) from [<c0169fb8>] (remove_files.isra.1+0x48/0x84)
+[<c0169fb8>] (remove_files.isra.1) from [<c016a2fc>] (sysfs_remove_group+0x58/0xac)
+[<c016a2fc>] (sysfs_remove_group) from [<c016a414>] (sysfs_remove_groups+0x34/0x44)
+[<c016a414>] (sysfs_remove_groups) from [<c02623b8>] (driver_remove_groups+0x1c/0x20)
+[<c02623b8>] (driver_remove_groups) from [<c0260e9c>] (bus_remove_driver+0x3c/0xe4)
+[<c0260e9c>] (bus_remove_driver) from [<c026235c>] (driver_unregister+0x38/0x58)
+[<c026235c>] (driver_unregister) from [<bf007fb4>] (usb_serial_bus_deregister+0x84/0x88 [usbserial])
+[<bf007fb4>] (usb_serial_bus_deregister [usbserial]) from [<bf004db4>] (usb_serial_deregister+0x6c/0x78 [usbserial])
+[<bf004db4>] (usb_serial_deregister [usbserial]) from [<bf005330>] (usb_serial_deregister_drivers+0x2c/0x4c [usbserial])
+[<bf005330>] (usb_serial_deregister_drivers [usbserial]) from [<bf016618>] (usb_serial_module_exit+0x14/0x1c [sierra])
+[<bf016618>] (usb_serial_module_exit [sierra]) from [<c009d6cc>] (SyS_delete_module+0x184/0x210)
+[<c009d6cc>] (SyS_delete_module) from [<c000f880>] (ret_fast_syscall+0x0/0x48)
+
+Signed-off-by: Johan Hovold <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..4d76a58
--- /dev/null
@@ -0,0 +1,106 @@
+From efe26e16b1d93ac0085e69178cc18811629e8fc5 Mon Sep 17 00:00:00 2001
+From: Michele Baldessari <michele@acksyn.org>
+Date: Mon, 31 Mar 2014 10:51:00 +0200
+Subject: USB: serial: ftdi_sio: add id for Brainboxes serial cards
+
+From: Michele Baldessari <michele@acksyn.org>
+
+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 <michele@acksyn.org>
+Signed-off-by: Johan Hovold <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..08a6e2c
--- /dev/null
@@ -0,0 +1,76 @@
+From bd73bd8831696f189a479a0712ae95208e513d7e Mon Sep 17 00:00:00 2001
+From: Johan Hovold <jhovold@gmail.com>
+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 <jhovold@gmail.com>
+
+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 <zajec5@gmail.com>
+Signed-off-by: Johan Hovold <jhovold@gmail.com>
+Tested-by: Rafał Miłecki <zajec5@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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;