--- /dev/null
+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
+@@ -305,7 +305,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 */
+
+ { }
+ };
parisc-fix-epoll_pwait-syscall-on-compat-kernel.patch
mm-hugetlb.c-add-cond_resched_lock-in-return_unused_surplus_pages.patch
+usb-cdc-acm-remove-motorola-telit-h24-serial-interfaces-from-acm-driver.patch
+usb-cp210x-add-8281-nanotec-plug-drive.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-io_ti-fix-firmware-download-on-big-endian-machines.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
--- /dev/null
+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
+@@ -1587,13 +1587,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
--- /dev/null
+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
+@@ -110,6 +110,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 */
--- /dev/null
+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
+@@ -29,6 +29,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>
+@@ -298,7 +299,7 @@ static int read_download_mem(struct usb_
+ {
+ int status = 0;
+ __u8 read_length;
+- __be16 be_start_address;
++ u16 be_start_address;
+
+ dbg("%s - @ %x for %d", __func__, start_address, length);
+
+@@ -315,10 +316,14 @@ static int read_download_mem(struct usb_
+ dbg("%s - @ %x for %d", __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) {
+@@ -418,7 +423,7 @@ static int write_i2c_mem(struct edgeport
+ {
+ 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 */
+
+@@ -434,11 +439,16 @@ static int write_i2c_mem(struct edgeport
+ usb_serial_debug_data(debug, &serial->serial->dev->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) {
+ dbg("%s - ERROR %d", __func__, status);
+@@ -462,11 +472,16 @@ static int write_i2c_mem(struct edgeport
+ usb_serial_debug_data(debug, &serial->serial->dev->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(&serial->serial->dev->dev, "%s - ERROR %d\n",
+@@ -673,8 +688,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);
+
+@@ -687,7 +702,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) {
+@@ -741,7 +756,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;
+ dbg("%s - structure too big, erroring out.", __func__);
+ break;
+@@ -756,7 +771,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;
+
+@@ -765,7 +781,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));
+@@ -804,7 +820,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;
+
--- /dev/null
+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
+@@ -292,6 +292,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
+@@ -1521,6 +1522,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),
--- /dev/null
+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
+@@ -517,6 +540,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),
+ };
+@@ -1051,8 +1078,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) },
--- /dev/null
+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
+@@ -354,6 +354,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
+@@ -1565,6 +1566,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) },
--- /dev/null
+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 */
+@@ -1055,6 +1056,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 */
--- /dev/null
+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
+@@ -920,6 +920,39 @@ static struct usb_device_id id_table_com
+ { 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) },
+ { }, /* Optional parameter entry */
+ { } /* 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 */