--- /dev/null
+From c29cb5eb8157a0049c882672a7f941261f23ea34 Mon Sep 17 00:00:00 2001
+From: Hui Wang <hui.wang@canonical.com>
+Date: Fri, 13 Dec 2013 11:57:05 +0800
+Subject: ALSA: hda - Add Dell headset detection quirk for three laptop models
+
+From: Hui Wang <hui.wang@canonical.com>
+
+commit c29cb5eb8157a0049c882672a7f941261f23ea34 upstream.
+
+On the Dell machines with codec whose Subsystem Id is 0x10280610,
+0x10280629 or 0x1028063e, no external microphone can be detected when
+plugging a 3-ring headset. If we add "model=dell-headset-multi" for
+the snd-hda-intel.ko, the problem will disappear.
+
+The codecs on these machines belong to alc_269 family.
+
+BugLink: https://bugs.launchpad.net/bugs/1260303
+Cc: David Henningsson <david.henningsson@canonical.com>
+Signed-off-by: Hui Wang <hui.wang@canonical.com>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ sound/pci/hda/patch_realtek.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -4004,10 +4004,13 @@ static const struct snd_pci_quirk alc269
+ SND_PCI_QUIRK(0x1028, 0x0606, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
+ SND_PCI_QUIRK(0x1028, 0x0608, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
+ SND_PCI_QUIRK(0x1028, 0x0609, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
++ SND_PCI_QUIRK(0x1028, 0x0610, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
+ SND_PCI_QUIRK(0x1028, 0x0613, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
+ SND_PCI_QUIRK(0x1028, 0x0614, "Dell Inspiron 3135", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
+ SND_PCI_QUIRK(0x1028, 0x0616, "Dell Vostro 5470", ALC290_FIXUP_MONO_SPEAKERS),
++ SND_PCI_QUIRK(0x1028, 0x0629, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
+ SND_PCI_QUIRK(0x1028, 0x0638, "Dell Inspiron 5439", ALC290_FIXUP_MONO_SPEAKERS),
++ SND_PCI_QUIRK(0x1028, 0x063e, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
+ SND_PCI_QUIRK(0x1028, 0x15cc, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE),
+ SND_PCI_QUIRK(0x1028, 0x15cd, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE),
+ SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2),
--- /dev/null
+From 20fb4eb96fb0350d28fc4d7cbfd5506711079592 Mon Sep 17 00:00:00 2001
+From: Marc Kleine-Budde <mkl@pengutronix.de>
+Date: Sat, 14 Dec 2013 14:36:25 +0100
+Subject: can: peak_usb: fix mem leak in pcan_usb_pro_init()
+
+From: Marc Kleine-Budde <mkl@pengutronix.de>
+
+commit 20fb4eb96fb0350d28fc4d7cbfd5506711079592 upstream.
+
+This patch fixes a memory leak in pcan_usb_pro_init(). In patch
+
+ f14e224 net: can: peak_usb: Do not do dma on the stack
+
+the struct pcan_usb_pro_fwinfo *fi and struct pcan_usb_pro_blinfo *bi were
+converted from stack to dynamic allocation va kmalloc(). However the
+corresponding kfree() was not introduced.
+
+This patch adds the missing kfree().
+
+Reported-by: Stephane Grosjean <s.grosjean@peak-system.com>
+Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/can/usb/peak_usb/pcan_usb_pro.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/drivers/net/can/usb/peak_usb/pcan_usb_pro.c
++++ b/drivers/net/can/usb/peak_usb/pcan_usb_pro.c
+@@ -927,6 +927,9 @@ static int pcan_usb_pro_init(struct peak
+ /* set LED in default state (end of init phase) */
+ pcan_usb_pro_set_led(dev, 0, 1);
+
++ kfree(bi);
++ kfree(fi);
++
+ return 0;
+
+ err_out:
--- /dev/null
+From e39d99059ad7f75d7ae2d3c59055d3c476cdb0d9 Mon Sep 17 00:00:00 2001
+From: Jonathan Cameron <jic23@kernel.org>
+Date: Wed, 11 Dec 2013 18:45:00 +0000
+Subject: iio:adc:ad7887 Fix channel reported endianness from cpu to big endian
+
+From: Jonathan Cameron <jic23@kernel.org>
+
+commit e39d99059ad7f75d7ae2d3c59055d3c476cdb0d9 upstream.
+
+Note this also sets the endianness to big endian whereas it would
+previously have defaulted to the cpu endian. Hence technically
+this is a bug fix on LE platforms.
+
+Signed-off-by: Jonathan Cameron <jic23@kernel.org>
+Acked-by: Lars-Peter Clausen <lars@metafoo.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/iio/adc/ad7887.c | 16 ++++++++++++++--
+ 1 file changed, 14 insertions(+), 2 deletions(-)
+
+--- a/drivers/iio/adc/ad7887.c
++++ b/drivers/iio/adc/ad7887.c
+@@ -211,7 +211,13 @@ static const struct ad7887_chip_info ad7
+ .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
+ .address = 1,
+ .scan_index = 1,
+- .scan_type = IIO_ST('u', 12, 16, 0),
++ .scan_type = {
++ .sign = 'u',
++ .realbits = 12,
++ .storagebits = 16,
++ .shift = 0,
++ .endianness = IIO_BE,
++ },
+ },
+ .channel[1] = {
+ .type = IIO_VOLTAGE,
+@@ -221,7 +227,13 @@ static const struct ad7887_chip_info ad7
+ .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
+ .address = 0,
+ .scan_index = 0,
+- .scan_type = IIO_ST('u', 12, 16, 0),
++ .scan_type = {
++ .sign = 'u',
++ .realbits = 12,
++ .storagebits = 16,
++ .shift = 0,
++ .endianness = IIO_BE,
++ },
+ },
+ .channel[2] = IIO_CHAN_SOFT_TIMESTAMP(2),
+ .int_vref_mv = 2500,
--- /dev/null
+From 3425c0f7ac61f2fcfb7f2728e9b7ba7e27aec429 Mon Sep 17 00:00:00 2001
+From: Jonathan Cameron <jic23@kernel.org>
+Date: Wed, 11 Dec 2013 18:45:00 +0000
+Subject: iio:imu:adis16400 fix pressure channel scan type
+
+From: Jonathan Cameron <jic23@kernel.org>
+
+commit 3425c0f7ac61f2fcfb7f2728e9b7ba7e27aec429 upstream.
+
+A single channel in this driver was using the IIO_ST macro.
+This does not provide a parameter for setting the endianness of
+the channel. Thus this channel will have been reported as whatever
+is the native endianness of the cpu rather than big endian. This
+means it would be incorrect on little endian platforms.
+
+Signed-off-by: Jonathan Cameron <jic23@kernel.org>
+Acked-by: Lars-Peter Clausen <lars@metafoo.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/iio/imu/adis16400_core.c | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+--- a/drivers/iio/imu/adis16400_core.c
++++ b/drivers/iio/imu/adis16400_core.c
+@@ -651,7 +651,12 @@ static const struct iio_chan_spec adis16
+ .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
+ .address = ADIS16448_BARO_OUT,
+ .scan_index = ADIS16400_SCAN_BARO,
+- .scan_type = IIO_ST('s', 16, 16, 0),
++ .scan_type = {
++ .sign = 's',
++ .realbits = 16,
++ .storagebits = 16,
++ .endianness = IIO_BE,
++ },
+ },
+ ADIS16400_TEMP_CHAN(ADIS16448_TEMP_OUT, 12),
+ IIO_CHAN_SOFT_TIMESTAMP(11)
--- /dev/null
+From d24c195f90cb1adb178d26d84c722d4b9e551e05 Mon Sep 17 00:00:00 2001
+From: Mika Westerberg <mika.westerberg@linux.intel.com>
+Date: Tue, 10 Dec 2013 12:56:59 +0200
+Subject: serial: 8250_dw: add new ACPI IDs
+
+From: Mika Westerberg <mika.westerberg@linux.intel.com>
+
+commit d24c195f90cb1adb178d26d84c722d4b9e551e05 upstream.
+
+Newer Intel PCHs with LPSS have the same Designware controllers than
+Haswell but ACPI IDs are different. Add these IDs to the driver list.
+
+Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/tty/serial/8250/8250_dw.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/tty/serial/8250/8250_dw.c
++++ b/drivers/tty/serial/8250/8250_dw.c
+@@ -417,6 +417,8 @@ MODULE_DEVICE_TABLE(of, dw8250_of_match)
+ static const struct acpi_device_id dw8250_acpi_match[] = {
+ { "INT33C4", 0 },
+ { "INT33C5", 0 },
++ { "INT3434", 0 },
++ { "INT3435", 0 },
+ { "80860F0A", 0 },
+ { },
+ };
asoc-wm5110-correct-hpout3-dapm-route-typo.patch
alsa-add-sndrv_pcm_state_paused-case-in-wait_for_avail-function.patch
alsa-hda-add-enable_msi-0-workaround-for-four-hp-machines.patch
+alsa-hda-add-dell-headset-detection-quirk-for-three-laptop-models.patch
+iio-imu-adis16400-fix-pressure-channel-scan-type.patch
+iio-adc-ad7887-fix-channel-reported-endianness-from-cpu-to-big-endian.patch
+serial-8250_dw-add-new-acpi-ids.patch
+usb-serial-zte_ev-move-support-for-zte-ac2726-from-zte_ev-back-to-option.patch
+xhci-limit-the-spurious-wakeup-fix-only-to-hp-machines.patch
+can-peak_usb-fix-mem-leak-in-pcan_usb_pro_init.patch
+usb-cdc-wdm-manage_power-should-always-set-needs_remote_wakeup.patch
+usb-chipidea-host-only-disable-the-vbus-regulator-if-it-is-not-null.patch
+usb-chipidea-fix-nobody-cared-irq-when-booting-with-host-role.patch
+usb-musb-core-call-dma_controller_destroy-in-error-path-only-once.patch
+usb-musb-only-cancel-work-if-it-is-initialized.patch
--- /dev/null
+From 4144bc861ed7934d56f16d2acd808d44af0fcc90 Mon Sep 17 00:00:00 2001
+From: Bjørn Mork <bjorn@mork.no>
+Date: Fri, 29 Nov 2013 20:17:45 +0100
+Subject: usb: cdc-wdm: manage_power should always set needs_remote_wakeup
+
+From: Bjørn Mork <bjorn@mork.no>
+
+commit 4144bc861ed7934d56f16d2acd808d44af0fcc90 upstream.
+
+Reported-by: Oliver Neukum <oneukum@suse.de>
+Signed-off-by: Bjørn Mork <bjorn@mork.no>
+Acked-by: Oliver Neukum <oneukum@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/class/cdc-wdm.c | 8 +++-----
+ 1 file changed, 3 insertions(+), 5 deletions(-)
+
+--- a/drivers/usb/class/cdc-wdm.c
++++ b/drivers/usb/class/cdc-wdm.c
+@@ -820,13 +820,11 @@ static int wdm_manage_power(struct usb_i
+ {
+ /* need autopm_get/put here to ensure the usbcore sees the new value */
+ int rv = usb_autopm_get_interface(intf);
+- if (rv < 0)
+- goto err;
+
+ intf->needs_remote_wakeup = on;
+- usb_autopm_put_interface(intf);
+-err:
+- return rv;
++ if (!rv)
++ usb_autopm_put_interface(intf);
++ return 0;
+ }
+
+ static int wdm_probe(struct usb_interface *intf, const struct usb_device_id *id)
--- /dev/null
+From 5a1e1456fc633da5291285b1fff75d2a7507375b Mon Sep 17 00:00:00 2001
+From: Peter Chen <peter.chen@freescale.com>
+Date: Thu, 5 Dec 2013 15:20:50 +0800
+Subject: usb: chipidea: fix nobody cared IRQ when booting with host role
+
+From: Peter Chen <peter.chen@freescale.com>
+
+commit 5a1e1456fc633da5291285b1fff75d2a7507375b upstream.
+
+If we connect Male-A-To-Male-A cable between otg-host and host pc,
+the ci->vbus_active is set wrongly, and cause the controller run
+at peripheral mode when we load gadget module (ci_udc_start will be run),
+but the software runs at host mode due to id = 0. The ehci_irq
+can't handle suspend (USBi_SLI) interrupt which is enabled for
+peripheral mode, it causes no one will handle irq error.
+
+This patch is needed for 3.12 stable
+
+Acked-by: Michael Grzeschik <mgr@pengutronix.de>
+Reported-by: Marc Kleine-Budde <mkl@pengutronix.de>
+Tested-by: Marc Kleine-Budde <mkl@pengutronix.de>
+Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
+Signed-off-by: Peter Chen <peter.chen@freescale.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/chipidea/core.c | 4 ++++
+ drivers/usb/chipidea/udc.c | 3 ---
+ 2 files changed, 4 insertions(+), 3 deletions(-)
+
+--- a/drivers/usb/chipidea/core.c
++++ b/drivers/usb/chipidea/core.c
+@@ -575,6 +575,10 @@ static int ci_hdrc_probe(struct platform
+ : CI_ROLE_GADGET;
+ }
+
++ /* only update vbus status for peripheral */
++ if (ci->role == CI_ROLE_GADGET)
++ ci_handle_vbus_change(ci);
++
+ ret = ci_role_start(ci, ci->role);
+ if (ret) {
+ dev_err(dev, "can't start %s role\n", ci_role(ci)->name);
+--- a/drivers/usb/chipidea/udc.c
++++ b/drivers/usb/chipidea/udc.c
+@@ -1818,9 +1818,6 @@ static int udc_start(struct ci_hdrc *ci)
+ pm_runtime_no_callbacks(&ci->gadget.dev);
+ pm_runtime_enable(&ci->gadget.dev);
+
+- /* Update ci->vbus_active */
+- ci_handle_vbus_change(ci);
+-
+ return retval;
+
+ remove_trans:
--- /dev/null
+From cc5c9eb67f912cb2c349b04063ff9f444affbc59 Mon Sep 17 00:00:00 2001
+From: Fabio Estevam <fabio.estevam@freescale.com>
+Date: Thu, 5 Dec 2013 15:20:49 +0800
+Subject: usb: chipidea: host: Only disable the vbus regulator if it is not NULL
+
+From: Fabio Estevam <fabio.estevam@freescale.com>
+
+commit cc5c9eb67f912cb2c349b04063ff9f444affbc59 upstream.
+
+Commit 40ed51a4b (usb: chipidea: host: add vbus regulator
+control) introduced a smatch complaint because regulator_disable() is called
+without checking whether ci->platdata->reg_vbus is not NULL.
+
+Fix this by adding the check.
+
+This patch is needed for 3.12 stable
+
+Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
+Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
+Signed-off-by: Peter Chen <peter.chen@freescale.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/chipidea/host.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/drivers/usb/chipidea/host.c
++++ b/drivers/usb/chipidea/host.c
+@@ -88,7 +88,8 @@ static int host_start(struct ci_hdrc *ci
+ return ret;
+
+ disable_reg:
+- regulator_disable(ci->platdata->reg_vbus);
++ if (ci->platdata->reg_vbus)
++ regulator_disable(ci->platdata->reg_vbus);
+
+ put_hcd:
+ usb_put_hcd(hcd);
--- /dev/null
+From 8d1aad7485e653c2c5fd985b326096f680f7d918 Mon Sep 17 00:00:00 2001
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Wed, 16 Oct 2013 12:50:07 +0200
+Subject: usb: musb: core: Call dma_controller_destroy() in error path only once.
+
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+
+commit 8d1aad7485e653c2c5fd985b326096f680f7d918 upstream.
+
+In commit f3ce4d5 ("usb: musb: core: call dma_controller_destroy() in the err path")
+I erroneously assumed that the dma controller is not removed in the
+error patch. This was wrong because it happens later via musb_free().
+That means the original commit can be reverted because it is wrong or we
+do this, so it is more obvious.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Signed-off-by: Felipe Balbi <balbi@ti.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/musb/musb_core.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+--- a/drivers/usb/musb/musb_core.c
++++ b/drivers/usb/musb/musb_core.c
+@@ -1810,8 +1810,6 @@ static void musb_free(struct musb *musb)
+ free_irq(musb->nIrq, musb);
+ }
+ cancel_work_sync(&musb->irq_work);
+- if (musb->dma_controller)
+- dma_controller_destroy(musb->dma_controller);
+
+ musb_host_free(musb);
+ }
+@@ -2036,6 +2034,9 @@ static int musb_remove(struct platform_d
+ musb_exit_debugfs(musb);
+ musb_shutdown(pdev);
+
++ if (musb->dma_controller)
++ dma_controller_destroy(musb->dma_controller);
++
+ musb_free(musb);
+ device_init_wakeup(dev, 0);
+ return 0;
--- /dev/null
+From 66fadea5b79c07154126bb0db375be915f611246 Mon Sep 17 00:00:00 2001
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Wed, 6 Nov 2013 09:25:27 +0100
+Subject: usb: musb: only cancel work if it is initialized
+
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+
+commit 66fadea5b79c07154126bb0db375be915f611246 upstream.
+
+Since commit c5340bd14 ("usb: musb: cancel work on removal") the workqueue
+is cancelled but then if we bail out before the workqueue is setup we
+get this:
+
+|INFO: trying to register non-static key.
+|the code is fine but needs lockdep annotation.
+|turning off the locking correctness validator.
+|CPU: 0 PID: 708 Comm: modprobe Not tainted 3.12.0+ #435
+|[<c00867bc>] (lock_acquire+0xf0/0x108) from [<c00529d0>] (flush_work+0x38/0x2ec)
+|[<c00529d0>] (flush_work+0x38/0x2ec) from [<c0052d24>] (__cancel_work_timer+0xa0/0x134)
+|[<c0052d24>] (__cancel_work_timer+0xa0/0x134) from [<bf0e4ae4>] (musb_free+0x40/0x60 [musb_hdrc])
+|[<bf0e4ae4>] (musb_free+0x40/0x60 [musb_hdrc]) from [<bf0e5364>] (musb_probe+0x678/0xb78 [musb_hdrc])
+|[<bf0e5364>] (musb_probe+0x678/0xb78 [musb_hdrc]) from [<c0294bf0>] (platform_drv_probe+0x1c/0x24)
+|[<c0294bf0>] (platform_drv_probe+0x1c/0x24) from [<c0293970>] (driver_probe_device+0x90/0x224)
+|[<c0293970>] (driver_probe_device+0x90/0x224) from [<c0291ef0>] (bus_for_each_drv+0x60/0x8c)
+|[<c0291ef0>] (bus_for_each_drv+0x60/0x8c) from [<c02938bc>] (device_attach+0x80/0xa4)
+|[<c02938bc>] (device_attach+0x80/0xa4) from [<c0292b24>] (bus_probe_device+0x88/0xac)
+|[<c0292b24>] (bus_probe_device+0x88/0xac) from [<c0291490>] (device_add+0x388/0x6c8)
+|[<c0291490>] (device_add+0x388/0x6c8) from [<c02952a0>] (platform_device_add+0x188/0x22c)
+|[<c02952a0>] (platform_device_add+0x188/0x22c) from [<bf11ea30>] (dsps_probe+0x294/0x394 [musb_dsps])
+|[<bf11ea30>] (dsps_probe+0x294/0x394 [musb_dsps]) from [<c0294bf0>] (platform_drv_probe+0x1c/0x24)
+|platform musb-hdrc.1.auto: Driver musb-hdrc requests probe deferral
+|musb-hdrc musb-hdrc.1.auto: musb_init_controller failed with status -517
+
+This patch moves the init part to earlier part so it can be cleaned as
+part of the fail3 label because now it is surrounded by the fail4 label.
+Step two is to remove it from musb_free() and add it to the two cleanup
+paths (error path and device removal) separately.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Signed-off-by: Felipe Balbi <balbi@ti.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/musb/musb_core.c | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+--- a/drivers/usb/musb/musb_core.c
++++ b/drivers/usb/musb/musb_core.c
+@@ -1809,7 +1809,6 @@ static void musb_free(struct musb *musb)
+ disable_irq_wake(musb->nIrq);
+ free_irq(musb->nIrq, musb);
+ }
+- cancel_work_sync(&musb->irq_work);
+
+ musb_host_free(musb);
+ }
+@@ -1891,6 +1890,9 @@ musb_init_controller(struct device *dev,
+ musb_platform_disable(musb);
+ musb_generic_disable(musb);
+
++ /* Init IRQ workqueue before request_irq */
++ INIT_WORK(&musb->irq_work, musb_irq_work);
++
+ /* setup musb parts of the core (especially endpoints) */
+ status = musb_core_init(plat->config->multipoint
+ ? MUSB_CONTROLLER_MHDRC
+@@ -1900,9 +1902,6 @@ musb_init_controller(struct device *dev,
+
+ setup_timer(&musb->otg_timer, musb_otg_timer_func, (unsigned long) musb);
+
+- /* Init IRQ workqueue before request_irq */
+- INIT_WORK(&musb->irq_work, musb_irq_work);
+-
+ /* attach to the IRQ */
+ if (request_irq(nIrq, musb->isr, 0, dev_name(dev), musb)) {
+ dev_err(dev, "request_irq %d failed!\n", nIrq);
+@@ -1976,6 +1975,7 @@ fail4:
+ musb_host_cleanup(musb);
+
+ fail3:
++ cancel_work_sync(&musb->irq_work);
+ if (musb->dma_controller)
+ dma_controller_destroy(musb->dma_controller);
+ pm_runtime_put_sync(musb->controller);
+@@ -2037,6 +2037,7 @@ static int musb_remove(struct platform_d
+ if (musb->dma_controller)
+ dma_controller_destroy(musb->dma_controller);
+
++ cancel_work_sync(&musb->irq_work);
+ musb_free(musb);
+ device_init_wakeup(dev, 0);
+ return 0;
--- /dev/null
+From 52d0dc7597c89b2ab779f3dcb9b9bf0800dd9218 Mon Sep 17 00:00:00 2001
+From: Dmitry Kunilov <dmitry.kunilov@gmail.com>
+Date: Tue, 3 Dec 2013 12:11:30 -0800
+Subject: usb: serial: zte_ev: move support for ZTE AC2726 from zte_ev back to option
+
+From: Dmitry Kunilov <dmitry.kunilov@gmail.com>
+
+commit 52d0dc7597c89b2ab779f3dcb9b9bf0800dd9218 upstream.
+
+ZTE AC2726 EVDO modem drops ppp connection every minute when driven by
+zte_ev but works fine when driven by option. Move the support for AC2726
+back to option driver.
+
+Signed-off-by: Dmitry Kunilov <dmitry.kunilov@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/option.c | 2 ++
+ drivers/usb/serial/zte_ev.c | 3 +--
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -251,6 +251,7 @@ static void option_instat_callback(struc
+ #define ZTE_PRODUCT_MF628 0x0015
+ #define ZTE_PRODUCT_MF626 0x0031
+ #define ZTE_PRODUCT_MC2718 0xffe8
++#define ZTE_PRODUCT_AC2726 0xfff1
+
+ #define BENQ_VENDOR_ID 0x04a5
+ #define BENQ_PRODUCT_H10 0x4068
+@@ -1453,6 +1454,7 @@ static const struct usb_device_id option
+ { USB_VENDOR_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff, 0x02, 0x01) },
+ { USB_VENDOR_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff, 0x02, 0x05) },
+ { USB_VENDOR_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff, 0x86, 0x10) },
++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC2726, 0xff, 0xff, 0xff) },
+
+ { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_H10) },
+ { USB_DEVICE(DLINK_VENDOR_ID, DLINK_PRODUCT_DWM_652) },
+--- a/drivers/usb/serial/zte_ev.c
++++ b/drivers/usb/serial/zte_ev.c
+@@ -281,8 +281,7 @@ static const struct usb_device_id id_tab
+ { USB_DEVICE(0x19d2, 0xfffd) },
+ { USB_DEVICE(0x19d2, 0xfffc) },
+ { USB_DEVICE(0x19d2, 0xfffb) },
+- /* AC2726, AC8710_V3 */
+- { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xfff1, 0xff, 0xff, 0xff) },
++ /* AC8710_V3 */
+ { USB_DEVICE(0x19d2, 0xfff6) },
+ { USB_DEVICE(0x19d2, 0xfff7) },
+ { USB_DEVICE(0x19d2, 0xfff8) },
--- /dev/null
+From 6962d914f317b119e0db7189199b21ec77a4b3e0 Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Mon, 9 Dec 2013 14:53:36 +0100
+Subject: xhci: Limit the spurious wakeup fix only to HP machines
+
+From: Takashi Iwai <tiwai@suse.de>
+
+commit 6962d914f317b119e0db7189199b21ec77a4b3e0 upstream.
+
+We've got regression reports that my previous fix for spurious wakeups
+after S5 on HP Haswell machines leads to the automatic reboot at
+shutdown on some machines. It turned out that the fix for one side
+triggers another BIOS bug in other side. So, it's exclusive.
+
+Since the original S5 wakeups have been confirmed only on HP machines,
+it'd be safer to apply it only to limited machines. As a wild guess,
+limiting to machines with HP PCI SSID should suffice.
+
+This patch should be backported to kernels as old as 3.12, that
+contain the commit 638298dc66ea36623dbc2757a24fc2c4ab41b016 "xhci: Fix
+spurious wakeups after S5 on Haswell".
+
+Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=66171
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
+Tested-by: <dashing.meng@gmail.com>
+Reported-by: Niklas Schnelle <niklas@komani.de>
+Reported-by: Giorgos <ganastasiouGR@gmail.com>
+Reported-by: <art1@vhex.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/host/xhci-pci.c | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+--- a/drivers/usb/host/xhci-pci.c
++++ b/drivers/usb/host/xhci-pci.c
+@@ -128,7 +128,12 @@ static void xhci_pci_quirks(struct devic
+ * any other sleep) on Haswell machines with LPT and LPT-LP
+ * with the new Intel BIOS
+ */
+- xhci->quirks |= XHCI_SPURIOUS_WAKEUP;
++ /* Limit the quirk to only known vendors, as this triggers
++ * yet another BIOS bug on some other machines
++ * https://bugzilla.kernel.org/show_bug.cgi?id=66171
++ */
++ if (pdev->subsystem_vendor == PCI_VENDOR_ID_HP)
++ xhci->quirks |= XHCI_SPURIOUS_WAKEUP;
+ }
+ if (pdev->vendor == PCI_VENDOR_ID_ETRON &&
+ pdev->device == PCI_DEVICE_ID_ASROCK_P67) {