--- /dev/null
+From fedbe9bc6fd3e14b1ffbb3dac407777ac4a3650c Mon Sep 17 00:00:00 2001
+From: Alex Hung <alex.hung@canonical.com>
+Date: Tue, 28 May 2013 02:05:09 +0000
+Subject: ACPI / video: ignore BIOS initial backlight value for HP m4
+
+From: Alex Hung <alex.hung@canonical.com>
+
+commit fedbe9bc6fd3e14b1ffbb3dac407777ac4a3650c upstream.
+
+On HP m4 lapops, BIOS reports minimum backlight on boot and
+causes backlight to dim completely. This ignores the initial backlight
+values and set to max brightness.
+
+References: https://bugs.launchpad.net/bugs/1184501
+Signed-off-by: Alex Hung <alex.hung@canonical.com>
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/acpi/video.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/drivers/acpi/video.c
++++ b/drivers/acpi/video.c
+@@ -448,6 +448,14 @@ static struct dmi_system_id video_dmi_ta
+ DMI_MATCH(DMI_PRODUCT_NAME, "HP Folio 13 - 2000 Notebook PC"),
+ },
+ },
++ {
++ .callback = video_ignore_initial_backlight,
++ .ident = "HP Pavilion m4",
++ .matches = {
++ DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"),
++ DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion m4 Notebook PC"),
++ },
++ },
+ {}
+ };
+
--- /dev/null
+From 780a6ec640a3fed671fc2c40e4dd30c03eca3ac3 Mon Sep 17 00:00:00 2001
+From: Ash Willis <ashwillis.kernel@gmail.com>
+Date: Wed, 29 May 2013 01:27:59 +0000
+Subject: ACPI / video: ignore BIOS initial backlight value for HP Pavilion g6
+
+From: Ash Willis <ashwillis.kernel@gmail.com>
+
+commit 780a6ec640a3fed671fc2c40e4dd30c03eca3ac3 upstream.
+
+This patch addresses kernel bug 56661. BIOS reports an incorrect
+backlight value, causing the driver to switch off the backlight
+completely during startup. This patch ignores the incorrect value from
+BIOS.
+
+References: https://bugzilla.kernel.org/show_bug.cgi?id=56661
+Signed-off-by: Ash Willis <ashwillis@programmer.net>
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/acpi/video.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/drivers/acpi/video.c
++++ b/drivers/acpi/video.c
+@@ -450,6 +450,14 @@ static struct dmi_system_id video_dmi_ta
+ },
+ {
+ .callback = video_ignore_initial_backlight,
++ .ident = "HP Pavilion g6 Notebook PC",
++ .matches = {
++ DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"),
++ DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion g6 Notebook PC"),
++ },
++ },
++ {
++ .callback = video_ignore_initial_backlight,
+ .ident = "HP Pavilion m4",
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"),
--- /dev/null
+From 8eafc0a161123d90617c9ca2eddfe87b382b1b89 Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Tue, 4 Jun 2013 16:02:54 +0200
+Subject: ALSA: usb-audio - Apply Logitech QuickCam Pro 9000 quirk only to audio iface
+
+From: Takashi Iwai <tiwai@suse.de>
+
+commit 8eafc0a161123d90617c9ca2eddfe87b382b1b89 upstream.
+
+... instead of applying to all interfaces.
+
+Reference: http://forums.gentoo.org/viewtopic-p-6886404.html
+
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ sound/usb/quirks-table.h | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+--- a/sound/usb/quirks-table.h
++++ b/sound/usb/quirks-table.h
+@@ -146,7 +146,13 @@
+ .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
+ },
+ {
+- USB_DEVICE(0x046d, 0x0990),
++ .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
++ USB_DEVICE_ID_MATCH_INT_CLASS |
++ USB_DEVICE_ID_MATCH_INT_SUBCLASS,
++ .idVendor = 0x046d,
++ .idProduct = 0x0990,
++ .bInterfaceClass = USB_CLASS_AUDIO,
++ .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
+ .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
+ .vendor_name = "Logitech, Inc.",
+ .product_name = "QuickCam Pro 9000",
--- /dev/null
+usb-option-blacklist-network-interface-on-huawei-e1820.patch
+alsa-usb-audio-apply-logitech-quickcam-pro-9000-quirk-only-to-audio-iface.patch
+usb-iuu_phoenix-fix-bulk-message-timeout.patch
+usb-keyspan-fix-bogus-array-index.patch
+usb-ark3116-fix-control-message-timeout.patch
+usb-serial-cypress_m8-enable-frwd-dongle-hidcom-device.patch
+usb-whiteheat-fix-broken-port-configuration.patch
+usb-serial-fix-treo-kyocera-interrrupt-in-urb-context.patch
+usb-revert-periodic-scheduling-bugfix.patch
+usb-mos7720-fix-dma-to-stack.patch
+usb-mos7720-fix-message-timeouts.patch
+usb-mos7720-fix-hardware-flow-control.patch
+acpi-video-ignore-bios-initial-backlight-value-for-hp-m4.patch
+acpi-video-ignore-bios-initial-backlight-value-for-hp-pavilion-g6.patch
--- /dev/null
+From 634371911730a462626071065b64cd6e1fe213e0 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <jhovold@gmail.com>
+Date: Mon, 27 May 2013 14:44:41 +0200
+Subject: USB: ark3116: fix control-message timeout
+
+From: Johan Hovold <jhovold@gmail.com>
+
+commit 634371911730a462626071065b64cd6e1fe213e0 upstream.
+
+The control-message timeout is specified in milliseconds and should not
+depend on HZ.
+
+Signed-off-by: Johan Hovold <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/ark3116.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/usb/serial/ark3116.c
++++ b/drivers/usb/serial/ark3116.c
+@@ -49,7 +49,7 @@ static int debug;
+ #define DRIVER_NAME "ark3116"
+
+ /* usb timeout of 1 second */
+-#define ARK_TIMEOUT (1*HZ)
++#define ARK_TIMEOUT 1000
+
+ static const struct usb_device_id id_table[] = {
+ { USB_DEVICE(0x6547, 0x0232) },
--- /dev/null
+From 6c13ff68a7ce01da7a51b44241a7aad8eaaedde7 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <jhovold@gmail.com>
+Date: Mon, 27 May 2013 14:44:42 +0200
+Subject: USB: iuu_phoenix: fix bulk-message timeout
+
+From: Johan Hovold <jhovold@gmail.com>
+
+commit 6c13ff68a7ce01da7a51b44241a7aad8eaaedde7 upstream.
+
+The bulk-message timeout is specified in milliseconds and should not
+depend on HZ.
+
+Signed-off-by: Johan Hovold <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/iuu_phoenix.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/usb/serial/iuu_phoenix.c
++++ b/drivers/usb/serial/iuu_phoenix.c
+@@ -327,7 +327,7 @@ static int bulk_immediate(struct usb_ser
+ usb_bulk_msg(serial->dev,
+ usb_sndbulkpipe(serial->dev,
+ port->bulk_out_endpointAddress), buf,
+- count, &actual, HZ * 1);
++ count, &actual, 1000);
+
+ if (status != IUU_OPERATION_OK)
+ dbg("%s - error = %2x", __func__, status);
+@@ -350,7 +350,7 @@ static int read_immediate(struct usb_ser
+ usb_bulk_msg(serial->dev,
+ usb_rcvbulkpipe(serial->dev,
+ port->bulk_in_endpointAddress), buf,
+- count, &actual, HZ * 1);
++ count, &actual, 1000);
+
+ if (status != IUU_OPERATION_OK)
+ dbg("%s - error = %2x", __func__, status);
--- /dev/null
+From a07088098a650267b2eda689538133a324b9523f Mon Sep 17 00:00:00 2001
+From: Johan Hovold <jhovold@gmail.com>
+Date: Tue, 4 Jun 2013 18:50:29 +0200
+Subject: USB: keyspan: fix bogus array index
+
+From: Johan Hovold <jhovold@gmail.com>
+
+commit a07088098a650267b2eda689538133a324b9523f upstream.
+
+The outcont_endpoints array was indexed using the port minor number
+(which can be greater than the array size) rather than the device port
+number.
+
+Signed-off-by: Johan Hovold <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/keyspan.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/usb/serial/keyspan.c
++++ b/drivers/usb/serial/keyspan.c
+@@ -1833,7 +1833,7 @@ static int keyspan_usa26_send_setup(stru
+ d_details = s_priv->device_details;
+ device_port = port->number - port->serial->minor;
+
+- outcont_urb = d_details->outcont_endpoints[port->number];
++ outcont_urb = d_details->outcont_endpoints[device_port];
+ this_urb = p_priv->outcont_urb;
+
+ dbg("%s - endpoint %d", __func__, usb_pipeendpoint(this_urb->pipe));
--- /dev/null
+From 72ea18a558ed7a63a50bb121ba60d73b5b38ae30 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <jhovold@gmail.com>
+Date: Mon, 27 May 2013 14:44:39 +0200
+Subject: USB: mos7720: fix DMA to stack
+
+From: Johan Hovold <jhovold@gmail.com>
+
+commit 72ea18a558ed7a63a50bb121ba60d73b5b38ae30 upstream.
+
+The read_mos_reg function is called with stack-allocated buffers, which
+must not be used for control messages.
+
+Signed-off-by: Johan Hovold <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/mos7720.c | 17 ++++++++++++++---
+ 1 file changed, 14 insertions(+), 3 deletions(-)
+
+--- a/drivers/usb/serial/mos7720.c
++++ b/drivers/usb/serial/mos7720.c
+@@ -234,11 +234,22 @@ static int read_mos_reg(struct usb_seria
+ __u8 requesttype = (__u8)0xc0;
+ __u16 index = get_reg_index(reg);
+ __u16 value = get_reg_value(reg, serial_portnum);
+- int status = usb_control_msg(usbdev, pipe, request, requesttype, value,
+- index, data, 1, MOS_WDR_TIMEOUT);
+- if (status < 0)
++ u8 *buf;
++ int status;
++
++ buf = kmalloc(1, GFP_KERNEL);
++ if (!buf)
++ return -ENOMEM;
++
++ status = usb_control_msg(usbdev, pipe, request, requesttype, value,
++ index, buf, 1, MOS_WDR_TIMEOUT);
++ if (status == 1)
++ *data = *buf;
++ else if (status < 0)
+ dev_err(&usbdev->dev,
+ "mos7720: usb_control_msg() failed: %d", status);
++ kfree(buf);
++
+ return status;
+ }
+
--- /dev/null
+From a26f009a070e840fadacb91013b2391ba7ab6cc2 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <jhovold@gmail.com>
+Date: Tue, 4 Jun 2013 18:50:31 +0200
+Subject: USB: mos7720: fix hardware flow control
+
+From: Johan Hovold <jhovold@gmail.com>
+
+commit a26f009a070e840fadacb91013b2391ba7ab6cc2 upstream.
+
+The register access to enable hardware flow control depends on the
+device port number and not the port minor number.
+
+Signed-off-by: Johan Hovold <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/mos7720.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/usb/serial/mos7720.c
++++ b/drivers/usb/serial/mos7720.c
+@@ -1711,7 +1711,7 @@ static void change_port_settings(struct
+ mos7720_port->shadowMCR |= (UART_MCR_XONANY);
+ /* To set hardware flow control to the specified *
+ * serial port, in SP1/2_CONTROL_REG */
+- if (port->number)
++ if (port_number)
+ write_mos_reg(serial, dummy, SP_CONTROL_REG, 0x01);
+ else
+ write_mos_reg(serial, dummy, SP_CONTROL_REG, 0x02);
--- /dev/null
+From 849513a7809175420d353625b6f651d961e99d49 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <jhovold@gmail.com>
+Date: Mon, 27 May 2013 14:44:43 +0200
+Subject: USB: mos7720: fix message timeouts
+
+From: Johan Hovold <jhovold@gmail.com>
+
+commit 849513a7809175420d353625b6f651d961e99d49 upstream.
+
+The control and bulk-message timeouts are specified in milliseconds and
+should not depend on HZ.
+
+Signed-off-by: Johan Hovold <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/mos7720.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/drivers/usb/serial/mos7720.c
++++ b/drivers/usb/serial/mos7720.c
+@@ -44,7 +44,7 @@
+ #define DRIVER_DESC "Moschip USB Serial Driver"
+
+ /* default urb timeout */
+-#define MOS_WDR_TIMEOUT (HZ * 5)
++#define MOS_WDR_TIMEOUT 5000
+
+ #define MOS_MAX_PORT 0x02
+ #define MOS_WRITE 0x0E
+@@ -2124,7 +2124,7 @@ static int mos7720_startup(struct usb_se
+
+ /* setting configuration feature to one */
+ usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
+- (__u8)0x03, 0x00, 0x01, 0x00, NULL, 0x00, 5*HZ);
++ (__u8)0x03, 0x00, 0x01, 0x00, NULL, 0x00, 5000);
+
+ /* start the interrupt urb */
+ ret_val = usb_submit_urb(serial->port[0]->interrupt_in_urb, GFP_KERNEL);
+@@ -2169,7 +2169,7 @@ static void mos7720_release(struct usb_s
+ /* wait for synchronous usb calls to return */
+ if (mos_parport->msg_pending)
+ wait_for_completion_timeout(&mos_parport->syncmsg_compl,
+- MOS_WDR_TIMEOUT);
++ msecs_to_jiffies(MOS_WDR_TIMEOUT));
+
+ parport_remove_port(mos_parport->pp);
+ usb_set_serial_data(serial, NULL);
--- /dev/null
+From b8a24e6281d37243c06b9497dcbfaa98c1e2ad35 Mon Sep 17 00:00:00 2001
+From: Bjørn Mork <bjorn@mork.no>
+Date: Thu, 6 Jun 2013 12:57:24 +0200
+Subject: USB: option: blacklist network interface on Huawei E1820
+
+From: Bjørn Mork <bjorn@mork.no>
+
+commit b8a24e6281d37243c06b9497dcbfaa98c1e2ad35 upstream.
+
+The mode used by Windows for the Huawei E1820 will use the
+same ff/ff/ff class codes for both serial and network
+functions.
+
+Reported-by: Graham Inggs <graham.inggs@uct.ac.za>
+Signed-off-by: Bjørn Mork <bjorn@mork.no>
+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
+@@ -593,6 +593,8 @@ static const struct usb_device_id option
+ .driver_info = (kernel_ulong_t) &huawei_cdc12_blacklist },
+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3765, 0xff, 0xff, 0xff),
+ .driver_info = (kernel_ulong_t) &huawei_cdc12_blacklist },
++ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x14ac, 0xff, 0xff, 0xff), /* Huawei E1820 */
++ .driver_info = (kernel_ulong_t) &net_intf1_blacklist },
+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4605, 0xff, 0xff, 0xff),
+ .driver_info = (kernel_ulong_t) &huawei_cdc12_blacklist },
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0xff, 0xff) },
--- /dev/null
+From fdc03438f53a00294ed9939eb3a1f6db6f3d8963 Mon Sep 17 00:00:00 2001
+From: Alan Stern <stern@rowland.harvard.edu>
+Date: Tue, 28 May 2013 14:03:10 -0400
+Subject: USB: revert periodic scheduling bugfix
+
+From: Alan Stern <stern@rowland.harvard.edu>
+
+commit fdc03438f53a00294ed9939eb3a1f6db6f3d8963 upstream.
+
+This patch reverts commit 3e619d04159be54b3daa0b7036b0ce9e067f4b5d
+(USB: EHCI: fix bug in scheduling periodic split transfers). The
+commit was valid -- it fixed a real bug -- but the periodic scheduler
+in ehci-hcd is in such bad shape (especially the part that handles
+split transactions) that fixing one bug is very likely to cause
+another to surface. That's what happened in this case; the result was
+choppy and noisy playback on certain 24-bit audio devices.
+
+The only real fix will be to rewrite this entire section of code. My
+next project...
+
+This fixes https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1136110.
+
+Thanks to Tim Richardson for extra testing and feedback, and to Joseph
+Salisbury and Tyson Tan for tracking down the original source of the
+problem.
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+CC: Joseph Salisbury <joseph.salisbury@canonical.com>
+CC: Tim Richardson <tim@tim-richardson.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/host/ehci-sched.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/usb/host/ehci-sched.c
++++ b/drivers/usb/host/ehci-sched.c
+@@ -236,7 +236,7 @@ static inline unsigned char tt_start_ufr
+ }
+
+ static const unsigned char
+-max_tt_usecs[] = { 125, 125, 125, 125, 125, 125, 125, 25 };
++max_tt_usecs[] = { 125, 125, 125, 125, 125, 125, 30, 0 };
+
+ /* carryover low/fullspeed bandwidth that crosses uframe boundries */
+ static inline void carryover_tt_bandwidth(unsigned short tt_usecs[8])
--- /dev/null
+From 6529591e3eef65f0f528a81ac169f6e294b947a7 Mon Sep 17 00:00:00 2001
+From: Robert Butora <robert.butora.fi@gmail.com>
+Date: Fri, 31 May 2013 18:09:51 +0300
+Subject: USB: Serial: cypress_M8: Enable FRWD Dongle hidcom device
+
+From: Robert Butora <robert.butora.fi@gmail.com>
+
+commit 6529591e3eef65f0f528a81ac169f6e294b947a7 upstream.
+
+The patch adds a new HIDCOM device and does not affect other devices
+driven by the cypress_M8 module. Changes are:
+- add VendorID ProductID to device tables
+- skip unstable speed check because FRWD uses 115200bps
+- skip reset at probe which is an issue workaround for this
+particular device.
+
+Signed-off-by: Robert Butora <robert.butora.fi@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/cypress_m8.c | 18 +++++++++++++++++-
+ drivers/usb/serial/cypress_m8.h | 4 ++++
+ 2 files changed, 21 insertions(+), 1 deletion(-)
+
+--- a/drivers/usb/serial/cypress_m8.c
++++ b/drivers/usb/serial/cypress_m8.c
+@@ -96,6 +96,7 @@ static const struct usb_device_id id_tab
+ static const struct usb_device_id id_table_cyphidcomrs232[] = {
+ { USB_DEVICE(VENDOR_ID_CYPRESS, PRODUCT_ID_CYPHIDCOM) },
+ { USB_DEVICE(VENDOR_ID_POWERCOM, PRODUCT_ID_UPS) },
++ { USB_DEVICE(VENDOR_ID_FRWD, PRODUCT_ID_CYPHIDCOM_FRWD) },
+ { } /* Terminating entry */
+ };
+
+@@ -109,6 +110,7 @@ static const struct usb_device_id id_tab
+ { USB_DEVICE(VENDOR_ID_DELORME, PRODUCT_ID_EARTHMATEUSB_LT20) },
+ { USB_DEVICE(VENDOR_ID_CYPRESS, PRODUCT_ID_CYPHIDCOM) },
+ { USB_DEVICE(VENDOR_ID_POWERCOM, PRODUCT_ID_UPS) },
++ { USB_DEVICE(VENDOR_ID_FRWD, PRODUCT_ID_CYPHIDCOM_FRWD) },
+ { USB_DEVICE(VENDOR_ID_DAZZLE, PRODUCT_ID_CA42) },
+ { } /* Terminating entry */
+ };
+@@ -268,6 +270,12 @@ static struct usb_serial_driver cypress_
+ * Cypress serial helper functions
+ *****************************************************************************/
+
++/* FRWD Dongle hidcom needs to skip reset and speed checks */
++static inline bool is_frwd(struct usb_device *dev)
++{
++ return ((le16_to_cpu(dev->descriptor.idVendor) == VENDOR_ID_FRWD) &&
++ (le16_to_cpu(dev->descriptor.idProduct) == PRODUCT_ID_CYPHIDCOM_FRWD));
++}
+
+ static int analyze_baud_rate(struct usb_serial_port *port, speed_t new_rate)
+ {
+@@ -277,6 +285,10 @@ static int analyze_baud_rate(struct usb_
+ if (unstable_bauds)
+ return new_rate;
+
++ /* FRWD Dongle uses 115200 bps */
++ if (is_frwd(port->serial->dev))
++ return new_rate;
++
+ /*
+ * The general purpose firmware for the Cypress M8 allows for
+ * a maximum speed of 57600bps (I have no idea whether DeLorme
+@@ -490,7 +502,11 @@ static int generic_startup(struct usb_se
+ }
+ init_waitqueue_head(&priv->delta_msr_wait);
+
+- usb_reset_configuration(serial->dev);
++ /* Skip reset for FRWD device. It is a workaound:
++ device hangs if it receives SET_CONFIGURE in Configured
++ state. */
++ if (!is_frwd(serial->dev))
++ usb_reset_configuration(serial->dev);
+
+ priv->cmd_ctrl = 0;
+ priv->line_control = 0;
+--- a/drivers/usb/serial/cypress_m8.h
++++ b/drivers/usb/serial/cypress_m8.h
+@@ -24,6 +24,10 @@
+ #define VENDOR_ID_CYPRESS 0x04b4
+ #define PRODUCT_ID_CYPHIDCOM 0x5500
+
++/* FRWD Dongle - a GPS sports watch */
++#define VENDOR_ID_FRWD 0x6737
++#define PRODUCT_ID_CYPHIDCOM_FRWD 0x0001
++
+ /* Powercom UPS, chip CY7C63723 */
+ #define VENDOR_ID_POWERCOM 0x0d9f
+ #define PRODUCT_ID_UPS 0x0002
--- /dev/null
+From 5f8e2c07d75967ee49a5da1d21ddf5f50d48cda0 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <jhovold@gmail.com>
+Date: Mon, 27 May 2013 14:44:37 +0200
+Subject: USB: serial: fix Treo/Kyocera interrrupt-in urb context
+
+From: Johan Hovold <jhovold@gmail.com>
+
+commit 5f8e2c07d75967ee49a5da1d21ddf5f50d48cda0 upstream.
+
+The first and second interrupt-in urbs are swapped for some Treo/Kyocera
+devices, but the urb context was never updated with the new port.
+
+Signed-off-by: Johan Hovold <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/visor.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/usb/serial/visor.c
++++ b/drivers/usb/serial/visor.c
+@@ -600,6 +600,7 @@ static int treo_attach(struct usb_serial
+ dest->bulk_in_endpointAddress = src->bulk_in_endpointAddress;\
+ dest->bulk_in_buffer = src->bulk_in_buffer; \
+ dest->interrupt_in_urb = src->interrupt_in_urb; \
++ dest->interrupt_in_urb->context = dest; \
+ dest->interrupt_in_endpointAddress = \
+ src->interrupt_in_endpointAddress;\
+ dest->interrupt_in_buffer = src->interrupt_in_buffer; \
--- /dev/null
+From 9eecf22d2b375b9064a20421c6c307b760b03d46 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <jhovold@gmail.com>
+Date: Thu, 6 Jun 2013 13:32:47 +0200
+Subject: USB: whiteheat: fix broken port configuration
+
+From: Johan Hovold <jhovold@gmail.com>
+
+commit 9eecf22d2b375b9064a20421c6c307b760b03d46 upstream.
+
+When configuring the port (e.g. set_termios) the port minor number
+rather than the port number was used in the request (and they only
+coincide for minor number 0).
+
+Signed-off-by: Johan Hovold <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/whiteheat.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/usb/serial/whiteheat.c
++++ b/drivers/usb/serial/whiteheat.c
+@@ -1209,7 +1209,7 @@ static void firm_setup_port(struct tty_s
+ struct whiteheat_port_settings port_settings;
+ unsigned int cflag = tty->termios->c_cflag;
+
+- port_settings.port = port->number + 1;
++ port_settings.port = port->number - port->serial->minor + 1;
+
+ /* get the byte size */
+ switch (cflag & CSIZE) {