From: Greg Kroah-Hartman Date: Tue, 31 Dec 2013 05:50:33 +0000 (-0800) Subject: 3.12-stable patches X-Git-Tag: v3.4.76~65 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5bb144ceb56762cd8369ace27af4c5d2fc96957d;p=thirdparty%2Fkernel%2Fstable-queue.git 3.12-stable patches added patches: alsa-hda-add-dell-headset-detection-quirk-for-three-laptop-models.patch can-peak_usb-fix-mem-leak-in-pcan_usb_pro_init.patch iio-adc-ad7887-fix-channel-reported-endianness-from-cpu-to-big-endian.patch iio-imu-adis16400-fix-pressure-channel-scan-type.patch serial-8250_dw-add-new-acpi-ids.patch usb-cdc-wdm-manage_power-should-always-set-needs_remote_wakeup.patch usb-chipidea-fix-nobody-cared-irq-when-booting-with-host-role.patch usb-chipidea-host-only-disable-the-vbus-regulator-if-it-is-not-null.patch usb-musb-core-call-dma_controller_destroy-in-error-path-only-once.patch usb-musb-only-cancel-work-if-it-is-initialized.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 --- diff --git a/queue-3.12/alsa-hda-add-dell-headset-detection-quirk-for-three-laptop-models.patch b/queue-3.12/alsa-hda-add-dell-headset-detection-quirk-for-three-laptop-models.patch new file mode 100644 index 00000000000..295d7f1cb1b --- /dev/null +++ b/queue-3.12/alsa-hda-add-dell-headset-detection-quirk-for-three-laptop-models.patch @@ -0,0 +1,42 @@ +From c29cb5eb8157a0049c882672a7f941261f23ea34 Mon Sep 17 00:00:00 2001 +From: Hui Wang +Date: Fri, 13 Dec 2013 11:57:05 +0800 +Subject: ALSA: hda - Add Dell headset detection quirk for three laptop models + +From: Hui Wang + +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 +Signed-off-by: Hui Wang +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + 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), diff --git a/queue-3.12/can-peak_usb-fix-mem-leak-in-pcan_usb_pro_init.patch b/queue-3.12/can-peak_usb-fix-mem-leak-in-pcan_usb_pro_init.patch new file mode 100644 index 00000000000..5352993d77f --- /dev/null +++ b/queue-3.12/can-peak_usb-fix-mem-leak-in-pcan_usb_pro_init.patch @@ -0,0 +1,39 @@ +From 20fb4eb96fb0350d28fc4d7cbfd5506711079592 Mon Sep 17 00:00:00 2001 +From: Marc Kleine-Budde +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 + +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 +Signed-off-by: Marc Kleine-Budde +Signed-off-by: Greg Kroah-Hartman + +--- + 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: diff --git a/queue-3.12/iio-adc-ad7887-fix-channel-reported-endianness-from-cpu-to-big-endian.patch b/queue-3.12/iio-adc-ad7887-fix-channel-reported-endianness-from-cpu-to-big-endian.patch new file mode 100644 index 00000000000..bd478d176d4 --- /dev/null +++ b/queue-3.12/iio-adc-ad7887-fix-channel-reported-endianness-from-cpu-to-big-endian.patch @@ -0,0 +1,53 @@ +From e39d99059ad7f75d7ae2d3c59055d3c476cdb0d9 Mon Sep 17 00:00:00 2001 +From: Jonathan Cameron +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 + +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 +Acked-by: Lars-Peter Clausen +Signed-off-by: Greg Kroah-Hartman + +--- + 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, diff --git a/queue-3.12/iio-imu-adis16400-fix-pressure-channel-scan-type.patch b/queue-3.12/iio-imu-adis16400-fix-pressure-channel-scan-type.patch new file mode 100644 index 00000000000..680251c15cd --- /dev/null +++ b/queue-3.12/iio-imu-adis16400-fix-pressure-channel-scan-type.patch @@ -0,0 +1,39 @@ +From 3425c0f7ac61f2fcfb7f2728e9b7ba7e27aec429 Mon Sep 17 00:00:00 2001 +From: Jonathan Cameron +Date: Wed, 11 Dec 2013 18:45:00 +0000 +Subject: iio:imu:adis16400 fix pressure channel scan type + +From: Jonathan Cameron + +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 +Acked-by: Lars-Peter Clausen +Signed-off-by: Greg Kroah-Hartman + +--- + 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) diff --git a/queue-3.12/serial-8250_dw-add-new-acpi-ids.patch b/queue-3.12/serial-8250_dw-add-new-acpi-ids.patch new file mode 100644 index 00000000000..f1ba3d00e8d --- /dev/null +++ b/queue-3.12/serial-8250_dw-add-new-acpi-ids.patch @@ -0,0 +1,30 @@ +From d24c195f90cb1adb178d26d84c722d4b9e551e05 Mon Sep 17 00:00:00 2001 +From: Mika Westerberg +Date: Tue, 10 Dec 2013 12:56:59 +0200 +Subject: serial: 8250_dw: add new ACPI IDs + +From: Mika Westerberg + +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 +Signed-off-by: Greg Kroah-Hartman + +--- + 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 }, + { }, + }; diff --git a/queue-3.12/series b/queue-3.12/series index b87c20183da..71f281a4f0a 100644 --- a/queue-3.12/series +++ b/queue-3.12/series @@ -16,3 +16,15 @@ asoc-wm_adsp-add-small-delay-while-polling-dsp-ram-start.patch 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 diff --git a/queue-3.12/usb-cdc-wdm-manage_power-should-always-set-needs_remote_wakeup.patch b/queue-3.12/usb-cdc-wdm-manage_power-should-always-set-needs_remote_wakeup.patch new file mode 100644 index 00000000000..22c492dafdc --- /dev/null +++ b/queue-3.12/usb-cdc-wdm-manage_power-should-always-set-needs_remote_wakeup.patch @@ -0,0 +1,37 @@ +From 4144bc861ed7934d56f16d2acd808d44af0fcc90 Mon Sep 17 00:00:00 2001 +From: Bjørn Mork +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 + +commit 4144bc861ed7934d56f16d2acd808d44af0fcc90 upstream. + +Reported-by: Oliver Neukum +Signed-off-by: Bjørn Mork +Acked-by: Oliver Neukum +Signed-off-by: Greg Kroah-Hartman + +--- + 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) diff --git a/queue-3.12/usb-chipidea-fix-nobody-cared-irq-when-booting-with-host-role.patch b/queue-3.12/usb-chipidea-fix-nobody-cared-irq-when-booting-with-host-role.patch new file mode 100644 index 00000000000..9097c3b499a --- /dev/null +++ b/queue-3.12/usb-chipidea-fix-nobody-cared-irq-when-booting-with-host-role.patch @@ -0,0 +1,55 @@ +From 5a1e1456fc633da5291285b1fff75d2a7507375b Mon Sep 17 00:00:00 2001 +From: Peter Chen +Date: Thu, 5 Dec 2013 15:20:50 +0800 +Subject: usb: chipidea: fix nobody cared IRQ when booting with host role + +From: Peter Chen + +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 +Reported-by: Marc Kleine-Budde +Tested-by: Marc Kleine-Budde +Signed-off-by: Marc Kleine-Budde +Signed-off-by: Peter Chen +Signed-off-by: Greg Kroah-Hartman + +--- + 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: diff --git a/queue-3.12/usb-chipidea-host-only-disable-the-vbus-regulator-if-it-is-not-null.patch b/queue-3.12/usb-chipidea-host-only-disable-the-vbus-regulator-if-it-is-not-null.patch new file mode 100644 index 00000000000..95fecaca8c6 --- /dev/null +++ b/queue-3.12/usb-chipidea-host-only-disable-the-vbus-regulator-if-it-is-not-null.patch @@ -0,0 +1,38 @@ +From cc5c9eb67f912cb2c349b04063ff9f444affbc59 Mon Sep 17 00:00:00 2001 +From: Fabio Estevam +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 + +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 +Signed-off-by: Fabio Estevam +Signed-off-by: Peter Chen +Signed-off-by: Greg Kroah-Hartman + +--- + 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); diff --git a/queue-3.12/usb-musb-core-call-dma_controller_destroy-in-error-path-only-once.patch b/queue-3.12/usb-musb-core-call-dma_controller_destroy-in-error-path-only-once.patch new file mode 100644 index 00000000000..7624235129d --- /dev/null +++ b/queue-3.12/usb-musb-core-call-dma_controller_destroy-in-error-path-only-once.patch @@ -0,0 +1,44 @@ +From 8d1aad7485e653c2c5fd985b326096f680f7d918 Mon Sep 17 00:00:00 2001 +From: Sebastian Andrzej Siewior +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 + +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 +Signed-off-by: Felipe Balbi +Signed-off-by: Greg Kroah-Hartman + +--- + 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; diff --git a/queue-3.12/usb-musb-only-cancel-work-if-it-is-initialized.patch b/queue-3.12/usb-musb-only-cancel-work-if-it-is-initialized.patch new file mode 100644 index 00000000000..dd6399d50ce --- /dev/null +++ b/queue-3.12/usb-musb-only-cancel-work-if-it-is-initialized.patch @@ -0,0 +1,92 @@ +From 66fadea5b79c07154126bb0db375be915f611246 Mon Sep 17 00:00:00 2001 +From: Sebastian Andrzej Siewior +Date: Wed, 6 Nov 2013 09:25:27 +0100 +Subject: usb: musb: only cancel work if it is initialized + +From: Sebastian Andrzej Siewior + +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 +|[] (lock_acquire+0xf0/0x108) from [] (flush_work+0x38/0x2ec) +|[] (flush_work+0x38/0x2ec) from [] (__cancel_work_timer+0xa0/0x134) +|[] (__cancel_work_timer+0xa0/0x134) from [] (musb_free+0x40/0x60 [musb_hdrc]) +|[] (musb_free+0x40/0x60 [musb_hdrc]) from [] (musb_probe+0x678/0xb78 [musb_hdrc]) +|[] (musb_probe+0x678/0xb78 [musb_hdrc]) from [] (platform_drv_probe+0x1c/0x24) +|[] (platform_drv_probe+0x1c/0x24) from [] (driver_probe_device+0x90/0x224) +|[] (driver_probe_device+0x90/0x224) from [] (bus_for_each_drv+0x60/0x8c) +|[] (bus_for_each_drv+0x60/0x8c) from [] (device_attach+0x80/0xa4) +|[] (device_attach+0x80/0xa4) from [] (bus_probe_device+0x88/0xac) +|[] (bus_probe_device+0x88/0xac) from [] (device_add+0x388/0x6c8) +|[] (device_add+0x388/0x6c8) from [] (platform_device_add+0x188/0x22c) +|[] (platform_device_add+0x188/0x22c) from [] (dsps_probe+0x294/0x394 [musb_dsps]) +|[] (dsps_probe+0x294/0x394 [musb_dsps]) from [] (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 +Signed-off-by: Felipe Balbi +Signed-off-by: Greg Kroah-Hartman + +--- + 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; diff --git a/queue-3.12/usb-serial-zte_ev-move-support-for-zte-ac2726-from-zte_ev-back-to-option.patch b/queue-3.12/usb-serial-zte_ev-move-support-for-zte-ac2726-from-zte_ev-back-to-option.patch new file mode 100644 index 00000000000..d4c36cc1b48 --- /dev/null +++ b/queue-3.12/usb-serial-zte_ev-move-support-for-zte-ac2726-from-zte_ev-back-to-option.patch @@ -0,0 +1,51 @@ +From 52d0dc7597c89b2ab779f3dcb9b9bf0800dd9218 Mon Sep 17 00:00:00 2001 +From: Dmitry Kunilov +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 + +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 +Signed-off-by: Greg Kroah-Hartman + +--- + 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) }, diff --git a/queue-3.12/xhci-limit-the-spurious-wakeup-fix-only-to-hp-machines.patch b/queue-3.12/xhci-limit-the-spurious-wakeup-fix-only-to-hp-machines.patch new file mode 100644 index 00000000000..6aa68c207e3 --- /dev/null +++ b/queue-3.12/xhci-limit-the-spurious-wakeup-fix-only-to-hp-machines.patch @@ -0,0 +1,51 @@ +From 6962d914f317b119e0db7189199b21ec77a4b3e0 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Mon, 9 Dec 2013 14:53:36 +0100 +Subject: xhci: Limit the spurious wakeup fix only to HP machines + +From: Takashi Iwai + +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 +Signed-off-by: Sarah Sharp +Tested-by: +Reported-by: Niklas Schnelle +Reported-by: Giorgos +Reported-by: +Signed-off-by: Greg Kroah-Hartman + +--- + 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) {