From: Greg Kroah-Hartman Date: Sat, 2 May 2015 13:24:27 +0000 (+0200) Subject: 3.19-stable patches X-Git-Tag: v3.10.77~45 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6bc90f43fb77a66f4368c309d97cf8cac0c95148;p=thirdparty%2Fkernel%2Fstable-queue.git 3.19-stable patches added patches: alsa-emu10k1-don-t-deadlock-in-proc-functions.patch alsa-hda-add-dock-support-for-thinkpad-x250-17aa-2226.patch alsa-hda-fix-num_steps-0-error-on-alc256.patch alsa-hda-realtek-enable-the-alc292-dock-fixup-on-the-thinkpad-t450.patch alsa-hda-realtek-fix-headphone-mic-doesn-t-recording-for-alc256.patch clk-at91-usb-propagate-rate-modification-to-the-parent-clk.patch usb-core-hub-use-new-usb_resume_timeout.patch usb-host-ehci-use-new-usb_resume_timeout.patch usb-host-fotg210-use-new-usb_resume_timeout.patch usb-host-fusbh200-use-new-usb_resume_timeout.patch usb-host-isp116x-use-new-usb_resume_timeout.patch usb-host-oxu210hp-use-new-usb_resume_timeout.patch usb-host-r8a66597-use-new-usb_resume_timeout.patch usb-host-sl811-use-new-usb_resume_timeout.patch usb-host-uhci-use-new-usb_resume_timeout.patch usb-host-xhci-use-new-usb_resume_timeout.patch usb-musb-use-new-usb_resume_timeout.patch --- diff --git a/queue-3.19/alsa-emu10k1-don-t-deadlock-in-proc-functions.patch b/queue-3.19/alsa-emu10k1-don-t-deadlock-in-proc-functions.patch new file mode 100644 index 00000000000..263b701de48 --- /dev/null +++ b/queue-3.19/alsa-emu10k1-don-t-deadlock-in-proc-functions.patch @@ -0,0 +1,75 @@ +From 91bf0c2dcb935a87e5c0795f5047456b965fd143 Mon Sep 17 00:00:00 2001 +From: Michael Gernoth +Date: Thu, 9 Apr 2015 23:42:15 +0200 +Subject: ALSA: emu10k1: don't deadlock in proc-functions + +From: Michael Gernoth + +commit 91bf0c2dcb935a87e5c0795f5047456b965fd143 upstream. + +The functions snd_emu10k1_proc_spdif_read and snd_emu1010_fpga_read +acquire the emu_lock before accessing the FPGA. The function used +to access the FPGA (snd_emu1010_fpga_read) also tries to take +the emu_lock which causes a deadlock. +Remove the outer locking in the proc-functions (guarding only the +already safe fpga read) to prevent this deadlock. + +[removed superfluous flags variables too -- tiwai] + +Signed-off-by: Michael Gernoth +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/emu10k1/emuproc.c | 12 ------------ + 1 file changed, 12 deletions(-) + +--- a/sound/pci/emu10k1/emuproc.c ++++ b/sound/pci/emu10k1/emuproc.c +@@ -241,31 +241,22 @@ static void snd_emu10k1_proc_spdif_read( + struct snd_emu10k1 *emu = entry->private_data; + u32 value; + u32 value2; +- unsigned long flags; + u32 rate; + + if (emu->card_capabilities->emu_model) { +- spin_lock_irqsave(&emu->emu_lock, flags); + snd_emu1010_fpga_read(emu, 0x38, &value); +- spin_unlock_irqrestore(&emu->emu_lock, flags); + if ((value & 0x1) == 0) { +- spin_lock_irqsave(&emu->emu_lock, flags); + snd_emu1010_fpga_read(emu, 0x2a, &value); + snd_emu1010_fpga_read(emu, 0x2b, &value2); +- spin_unlock_irqrestore(&emu->emu_lock, flags); + rate = 0x1770000 / (((value << 5) | value2)+1); + snd_iprintf(buffer, "ADAT Locked : %u\n", rate); + } else { + snd_iprintf(buffer, "ADAT Unlocked\n"); + } +- spin_lock_irqsave(&emu->emu_lock, flags); + snd_emu1010_fpga_read(emu, 0x20, &value); +- spin_unlock_irqrestore(&emu->emu_lock, flags); + if ((value & 0x4) == 0) { +- spin_lock_irqsave(&emu->emu_lock, flags); + snd_emu1010_fpga_read(emu, 0x28, &value); + snd_emu1010_fpga_read(emu, 0x29, &value2); +- spin_unlock_irqrestore(&emu->emu_lock, flags); + rate = 0x1770000 / (((value << 5) | value2)+1); + snd_iprintf(buffer, "SPDIF Locked : %d\n", rate); + } else { +@@ -410,14 +401,11 @@ static void snd_emu_proc_emu1010_reg_rea + { + struct snd_emu10k1 *emu = entry->private_data; + u32 value; +- unsigned long flags; + int i; + snd_iprintf(buffer, "EMU1010 Registers:\n\n"); + + for(i = 0; i < 0x40; i+=1) { +- spin_lock_irqsave(&emu->emu_lock, flags); + snd_emu1010_fpga_read(emu, i, &value); +- spin_unlock_irqrestore(&emu->emu_lock, flags); + snd_iprintf(buffer, "%02X: %08X, %02X\n", i, value, (value >> 8) & 0x7f); + } + } diff --git a/queue-3.19/alsa-hda-add-dock-support-for-thinkpad-x250-17aa-2226.patch b/queue-3.19/alsa-hda-add-dock-support-for-thinkpad-x250-17aa-2226.patch new file mode 100644 index 00000000000..9a26b59a8bd --- /dev/null +++ b/queue-3.19/alsa-hda-add-dock-support-for-thinkpad-x250-17aa-2226.patch @@ -0,0 +1,29 @@ +From c0278669fb61596cc1a10ab8686d27c37269c37b Mon Sep 17 00:00:00 2001 +From: Yves-Alexis Perez +Date: Sat, 11 Apr 2015 09:31:35 +0200 +Subject: ALSA: hda - Add dock support for ThinkPad X250 (17aa:2226) + +From: Yves-Alexis Perez + +commit c0278669fb61596cc1a10ab8686d27c37269c37b upstream. + +This model uses the same dock port as the previous generation. + +Signed-off-by: Yves-Alexis Perez +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/hda/patch_realtek.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/sound/pci/hda/patch_realtek.c ++++ b/sound/pci/hda/patch_realtek.c +@@ -4946,6 +4946,7 @@ static const struct snd_pci_quirk alc269 + SND_PCI_QUIRK(0x17aa, 0x2212, "Thinkpad T440", ALC292_FIXUP_TPT440_DOCK), + SND_PCI_QUIRK(0x17aa, 0x2214, "Thinkpad X240", ALC292_FIXUP_TPT440_DOCK), + SND_PCI_QUIRK(0x17aa, 0x2215, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST), ++ SND_PCI_QUIRK(0x17aa, 0x2226, "ThinkPad X250", ALC292_FIXUP_TPT440_DOCK), + SND_PCI_QUIRK(0x17aa, 0x3977, "IdeaPad S210", ALC283_FIXUP_INT_MIC), + SND_PCI_QUIRK(0x17aa, 0x3978, "IdeaPad Y410P", ALC269_FIXUP_NO_SHUTUP), + SND_PCI_QUIRK(0x17aa, 0x5013, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST), diff --git a/queue-3.19/alsa-hda-fix-num_steps-0-error-on-alc256.patch b/queue-3.19/alsa-hda-fix-num_steps-0-error-on-alc256.patch new file mode 100644 index 00000000000..870b66fc385 --- /dev/null +++ b/queue-3.19/alsa-hda-fix-num_steps-0-error-on-alc256.patch @@ -0,0 +1,48 @@ +From 7d1b6e29327428993ba568bdd8c66734070f45e0 Mon Sep 17 00:00:00 2001 +From: David Henningsson +Date: Tue, 21 Apr 2015 10:48:46 +0200 +Subject: ALSA: hda - fix "num_steps = 0" error on ALC256 + +From: David Henningsson + +commit 7d1b6e29327428993ba568bdd8c66734070f45e0 upstream. + +The ALC256 does not have a mixer nid at 0x0b, and there's no +loopback path (the output pins are directly connected to the DACs). + +This commit fixes an "num_steps = 0 for NID=0xb (ctl = Beep Playback Volume)" +error (and as a result, problems with amixer/alsamixer). + +If there's pcbeep functionality, it certainly isn't controlled by setting an +amp on 0x0b, so disable beep functionality (at least for now). + +BugLink: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1446517 +Signed-off-by: David Henningsson +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/hda/patch_realtek.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +--- a/sound/pci/hda/patch_realtek.c ++++ b/sound/pci/hda/patch_realtek.c +@@ -5454,6 +5454,7 @@ static int patch_alc269(struct hda_codec + break; + case 0x10ec0256: + spec->codec_variant = ALC269_TYPE_ALC256; ++ spec->gen.mixer_nid = 0; /* ALC256 does not have any loopback mixer path */ + break; + } + +@@ -5467,8 +5468,8 @@ static int patch_alc269(struct hda_codec + if (err < 0) + goto error; + +- if (!spec->gen.no_analog && spec->gen.beep_nid) +- set_beep_amp(spec, 0x0b, 0x04, HDA_INPUT); ++ if (!spec->gen.no_analog && spec->gen.beep_nid && spec->gen.mixer_nid) ++ set_beep_amp(spec, spec->gen.mixer_nid, 0x04, HDA_INPUT); + + codec->patch_ops = alc_patch_ops; + #ifdef CONFIG_PM diff --git a/queue-3.19/alsa-hda-realtek-enable-the-alc292-dock-fixup-on-the-thinkpad-t450.patch b/queue-3.19/alsa-hda-realtek-enable-the-alc292-dock-fixup-on-the-thinkpad-t450.patch new file mode 100644 index 00000000000..fad68256a99 --- /dev/null +++ b/queue-3.19/alsa-hda-realtek-enable-the-alc292-dock-fixup-on-the-thinkpad-t450.patch @@ -0,0 +1,33 @@ +From f2aa111041ce36b94e651d882458dea502e76721 Mon Sep 17 00:00:00 2001 +From: Jo-Philipp Wich +Date: Mon, 13 Apr 2015 12:47:26 +0200 +Subject: ALSA: hda/realtek - Enable the ALC292 dock fixup on the Thinkpad T450 + +From: Jo-Philipp Wich + +commit f2aa111041ce36b94e651d882458dea502e76721 upstream. + +The Lenovo Thinkpad T450 requires the ALC292_FIXUP_TPT440_DOCK as well in +order to get working sound output on the docking stations headphone jack. + +Patch tested on a Thinkpad T450 (20BVCTO1WW) using kernel 4.0-rc7 in +conjunction with a ThinkPad Ultradock. + +Signed-off-by: Jo-Philipp Wich +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/hda/patch_realtek.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/sound/pci/hda/patch_realtek.c ++++ b/sound/pci/hda/patch_realtek.c +@@ -4953,6 +4953,7 @@ static const struct snd_pci_quirk alc269 + SND_PCI_QUIRK(0x17aa, 0x501a, "Thinkpad", ALC283_FIXUP_INT_MIC), + SND_PCI_QUIRK(0x17aa, 0x501e, "Thinkpad L440", ALC292_FIXUP_TPT440_DOCK), + SND_PCI_QUIRK(0x17aa, 0x5026, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST), ++ SND_PCI_QUIRK(0x17aa, 0x5034, "Thinkpad T450", ALC292_FIXUP_TPT440_DOCK), + SND_PCI_QUIRK(0x17aa, 0x5036, "Thinkpad T450s", ALC292_FIXUP_TPT440_DOCK), + SND_PCI_QUIRK(0x17aa, 0x5109, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST), + SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_FIXUP_PCM_44K), diff --git a/queue-3.19/alsa-hda-realtek-fix-headphone-mic-doesn-t-recording-for-alc256.patch b/queue-3.19/alsa-hda-realtek-fix-headphone-mic-doesn-t-recording-for-alc256.patch new file mode 100644 index 00000000000..2d903b53250 --- /dev/null +++ b/queue-3.19/alsa-hda-realtek-fix-headphone-mic-doesn-t-recording-for-alc256.patch @@ -0,0 +1,30 @@ +From d32b66668c702aed0e330dc5ca186afbadcdacf8 Mon Sep 17 00:00:00 2001 +From: Kailang Yang +Date: Thu, 23 Apr 2015 15:10:53 +0800 +Subject: ALSA: hda/realtek - Fix Headphone Mic doesn't recording for ALC256 + +From: Kailang Yang + +commit d32b66668c702aed0e330dc5ca186afbadcdacf8 upstream. + +Switch default pcbeep path to Line in path. + +Signed-off-by: Kailang Yang +Tested-by: Hui Wang +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/hda/patch_realtek.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/sound/pci/hda/patch_realtek.c ++++ b/sound/pci/hda/patch_realtek.c +@@ -5455,6 +5455,7 @@ static int patch_alc269(struct hda_codec + case 0x10ec0256: + spec->codec_variant = ALC269_TYPE_ALC256; + spec->gen.mixer_nid = 0; /* ALC256 does not have any loopback mixer path */ ++ alc_update_coef_idx(codec, 0x36, 1 << 13, 1 << 5); /* Switch pcbeep path to Line in path*/ + break; + } + diff --git a/queue-3.19/clk-at91-usb-propagate-rate-modification-to-the-parent-clk.patch b/queue-3.19/clk-at91-usb-propagate-rate-modification-to-the-parent-clk.patch new file mode 100644 index 00000000000..00800ed255c --- /dev/null +++ b/queue-3.19/clk-at91-usb-propagate-rate-modification-to-the-parent-clk.patch @@ -0,0 +1,137 @@ +From 4591243102faa8de92da320edea47219901461e9 Mon Sep 17 00:00:00 2001 +From: Boris Brezillon +Date: Sun, 29 Mar 2015 03:45:33 +0200 +Subject: clk: at91: usb: propagate rate modification to the parent clk + +From: Boris Brezillon + +commit 4591243102faa8de92da320edea47219901461e9 upstream. + +The at91sam9n12 and at91sam9x5 usb clocks do not propagate rate +modification requests to their parents. +This causes a bug when the PLLB is left uninitialized by the bootloader +(PLL multiplier set to 0, or in other words, PLL rate = 0 Hz). + +Implement the determinate_rate method and propagate the change rate +request to the parent clk. + +Signed-off-by: Boris Brezillon +Reported-by: Bo Shen +Tested-by: Bo Shen +Signed-off-by: Michael Turquette +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/clk/at91/clk-usb.c | 72 +++++++++++++++++++++++++++++++++------------ + 1 file changed, 53 insertions(+), 19 deletions(-) + +--- a/drivers/clk/at91/clk-usb.c ++++ b/drivers/clk/at91/clk-usb.c +@@ -56,22 +56,55 @@ static unsigned long at91sam9x5_clk_usb_ + return DIV_ROUND_CLOSEST(parent_rate, (usbdiv + 1)); + } + +-static long at91sam9x5_clk_usb_round_rate(struct clk_hw *hw, unsigned long rate, +- unsigned long *parent_rate) +-{ +- unsigned long div; +- +- if (!rate) +- return -EINVAL; +- +- if (rate >= *parent_rate) +- return *parent_rate; +- +- div = DIV_ROUND_CLOSEST(*parent_rate, rate); +- if (div > SAM9X5_USB_MAX_DIV + 1) +- div = SAM9X5_USB_MAX_DIV + 1; ++static long at91sam9x5_clk_usb_determine_rate(struct clk_hw *hw, ++ unsigned long rate, ++ unsigned long min_rate, ++ unsigned long max_rate, ++ unsigned long *best_parent_rate, ++ struct clk_hw **best_parent_hw) ++{ ++ struct clk *parent = NULL; ++ long best_rate = -EINVAL; ++ unsigned long tmp_rate; ++ int best_diff = -1; ++ int tmp_diff; ++ int i; ++ ++ for (i = 0; i < __clk_get_num_parents(hw->clk); i++) { ++ int div; ++ ++ parent = clk_get_parent_by_index(hw->clk, i); ++ if (!parent) ++ continue; ++ ++ for (div = 1; div < SAM9X5_USB_MAX_DIV + 2; div++) { ++ unsigned long tmp_parent_rate; ++ ++ tmp_parent_rate = rate * div; ++ tmp_parent_rate = __clk_round_rate(parent, ++ tmp_parent_rate); ++ tmp_rate = DIV_ROUND_CLOSEST(tmp_parent_rate, div); ++ if (tmp_rate < rate) ++ tmp_diff = rate - tmp_rate; ++ else ++ tmp_diff = tmp_rate - rate; ++ ++ if (best_diff < 0 || best_diff > tmp_diff) { ++ best_rate = tmp_rate; ++ best_diff = tmp_diff; ++ *best_parent_rate = tmp_parent_rate; ++ *best_parent_hw = __clk_get_hw(parent); ++ } ++ ++ if (!best_diff || tmp_rate < rate) ++ break; ++ } ++ ++ if (!best_diff) ++ break; ++ } + +- return DIV_ROUND_CLOSEST(*parent_rate, div); ++ return best_rate; + } + + static int at91sam9x5_clk_usb_set_parent(struct clk_hw *hw, u8 index) +@@ -121,7 +154,7 @@ static int at91sam9x5_clk_usb_set_rate(s + + static const struct clk_ops at91sam9x5_usb_ops = { + .recalc_rate = at91sam9x5_clk_usb_recalc_rate, +- .round_rate = at91sam9x5_clk_usb_round_rate, ++ .determine_rate = at91sam9x5_clk_usb_determine_rate, + .get_parent = at91sam9x5_clk_usb_get_parent, + .set_parent = at91sam9x5_clk_usb_set_parent, + .set_rate = at91sam9x5_clk_usb_set_rate, +@@ -159,7 +192,7 @@ static const struct clk_ops at91sam9n12_ + .disable = at91sam9n12_clk_usb_disable, + .is_enabled = at91sam9n12_clk_usb_is_enabled, + .recalc_rate = at91sam9x5_clk_usb_recalc_rate, +- .round_rate = at91sam9x5_clk_usb_round_rate, ++ .determine_rate = at91sam9x5_clk_usb_determine_rate, + .set_rate = at91sam9x5_clk_usb_set_rate, + }; + +@@ -179,7 +212,8 @@ at91sam9x5_clk_register_usb(struct at91_ + init.ops = &at91sam9x5_usb_ops; + init.parent_names = parent_names; + init.num_parents = num_parents; +- init.flags = CLK_SET_RATE_GATE | CLK_SET_PARENT_GATE; ++ init.flags = CLK_SET_RATE_GATE | CLK_SET_PARENT_GATE | ++ CLK_SET_RATE_PARENT; + + usb->hw.init = &init; + usb->pmc = pmc; +@@ -207,7 +241,7 @@ at91sam9n12_clk_register_usb(struct at91 + init.ops = &at91sam9n12_usb_ops; + init.parent_names = &parent_name; + init.num_parents = 1; +- init.flags = CLK_SET_RATE_GATE; ++ init.flags = CLK_SET_RATE_GATE | CLK_SET_RATE_PARENT; + + usb->hw.init = &init; + usb->pmc = pmc; diff --git a/queue-3.19/series b/queue-3.19/series index 7097d6ae40d..23380d8de81 100644 --- a/queue-3.19/series +++ b/queue-3.19/series @@ -65,3 +65,20 @@ arm-dts-fix-mmc-node-updates-for-exynos5250-spring.patch usb-musb-core-fix-tx-rx-endpoint-order.patch usb-phy-find-the-right-match-in-devm_usb_phy_match.patch usb-define-a-generic-usb_resume_timeout-macro.patch +usb-musb-use-new-usb_resume_timeout.patch +usb-host-oxu210hp-use-new-usb_resume_timeout.patch +usb-host-fusbh200-use-new-usb_resume_timeout.patch +usb-host-uhci-use-new-usb_resume_timeout.patch +usb-host-fotg210-use-new-usb_resume_timeout.patch +usb-host-r8a66597-use-new-usb_resume_timeout.patch +usb-host-isp116x-use-new-usb_resume_timeout.patch +usb-host-xhci-use-new-usb_resume_timeout.patch +usb-host-ehci-use-new-usb_resume_timeout.patch +usb-host-sl811-use-new-usb_resume_timeout.patch +usb-core-hub-use-new-usb_resume_timeout.patch +clk-at91-usb-propagate-rate-modification-to-the-parent-clk.patch +alsa-hda-add-dock-support-for-thinkpad-x250-17aa-2226.patch +alsa-emu10k1-don-t-deadlock-in-proc-functions.patch +alsa-hda-realtek-enable-the-alc292-dock-fixup-on-the-thinkpad-t450.patch +alsa-hda-fix-num_steps-0-error-on-alc256.patch +alsa-hda-realtek-fix-headphone-mic-doesn-t-recording-for-alc256.patch diff --git a/queue-3.19/usb-core-hub-use-new-usb_resume_timeout.patch b/queue-3.19/usb-core-hub-use-new-usb_resume_timeout.patch new file mode 100644 index 00000000000..9cffce5d628 --- /dev/null +++ b/queue-3.19/usb-core-hub-use-new-usb_resume_timeout.patch @@ -0,0 +1,34 @@ +From bbc78c07a51f6fd29c227b1220a9016e585358ba Mon Sep 17 00:00:00 2001 +From: Felipe Balbi +Date: Fri, 13 Feb 2015 15:38:33 -0600 +Subject: usb: core: hub: use new USB_RESUME_TIMEOUT + +From: Felipe Balbi + +commit bbc78c07a51f6fd29c227b1220a9016e585358ba upstream. + +Make sure we're using the new macro, so our +resume signaling will always pass certification. + +Signed-off-by: Felipe Balbi +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/core/hub.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/usb/core/hub.c ++++ b/drivers/usb/core/hub.c +@@ -3397,10 +3397,10 @@ int usb_port_resume(struct usb_device *u + if (status) { + dev_dbg(&port_dev->dev, "can't resume, status %d\n", status); + } else { +- /* drive resume for at least 20 msec */ ++ /* drive resume for USB_RESUME_TIMEOUT msec */ + dev_dbg(&udev->dev, "usb %sresume\n", + (PMSG_IS_AUTO(msg) ? "auto-" : "")); +- msleep(25); ++ msleep(USB_RESUME_TIMEOUT); + + /* Virtual root hubs can trigger on GET_PORT_STATUS to + * stop resume signaling. Then finish the resume diff --git a/queue-3.19/usb-host-ehci-use-new-usb_resume_timeout.patch b/queue-3.19/usb-host-ehci-use-new-usb_resume_timeout.patch new file mode 100644 index 00000000000..7aecb87637a --- /dev/null +++ b/queue-3.19/usb-host-ehci-use-new-usb_resume_timeout.patch @@ -0,0 +1,67 @@ +From ea16328f80ca8d74434352157f37ef60e2f55ce2 Mon Sep 17 00:00:00 2001 +From: Felipe Balbi +Date: Fri, 13 Feb 2015 14:42:25 -0600 +Subject: usb: host: ehci: use new USB_RESUME_TIMEOUT + +From: Felipe Balbi + +commit ea16328f80ca8d74434352157f37ef60e2f55ce2 upstream. + +Make sure we're using the new macro, so our +resume signaling will always pass certification. + +Signed-off-by: Felipe Balbi +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/host/ehci-hcd.c | 10 +++++----- + drivers/usb/host/ehci-hub.c | 9 ++++++--- + 2 files changed, 11 insertions(+), 8 deletions(-) + +--- a/drivers/usb/host/ehci-hcd.c ++++ b/drivers/usb/host/ehci-hcd.c +@@ -792,12 +792,12 @@ static irqreturn_t ehci_irq (struct usb_ + ehci->reset_done[i] == 0)) + continue; + +- /* start 20 msec resume signaling from this port, +- * and make hub_wq collect PORT_STAT_C_SUSPEND to +- * stop that signaling. Use 5 ms extra for safety, +- * like usb_port_resume() does. ++ /* start USB_RESUME_TIMEOUT msec resume signaling from ++ * this port, and make hub_wq collect ++ * PORT_STAT_C_SUSPEND to stop that signaling. + */ +- ehci->reset_done[i] = jiffies + msecs_to_jiffies(25); ++ ehci->reset_done[i] = jiffies + ++ msecs_to_jiffies(USB_RESUME_TIMEOUT); + set_bit(i, &ehci->resuming_ports); + ehci_dbg (ehci, "port %d remote wakeup\n", i + 1); + usb_hcd_start_port_resume(&hcd->self, i); +--- a/drivers/usb/host/ehci-hub.c ++++ b/drivers/usb/host/ehci-hub.c +@@ -471,10 +471,13 @@ static int ehci_bus_resume (struct usb_h + ehci_writel(ehci, temp, &ehci->regs->port_status [i]); + } + +- /* msleep for 20ms only if code is trying to resume port */ ++ /* ++ * msleep for USB_RESUME_TIMEOUT ms only if code is trying to resume ++ * port ++ */ + if (resume_needed) { + spin_unlock_irq(&ehci->lock); +- msleep(20); ++ msleep(USB_RESUME_TIMEOUT); + spin_lock_irq(&ehci->lock); + if (ehci->shutdown) + goto shutdown; +@@ -942,7 +945,7 @@ int ehci_hub_control( + temp &= ~PORT_WAKE_BITS; + ehci_writel(ehci, temp | PORT_RESUME, status_reg); + ehci->reset_done[wIndex] = jiffies +- + msecs_to_jiffies(20); ++ + msecs_to_jiffies(USB_RESUME_TIMEOUT); + set_bit(wIndex, &ehci->resuming_ports); + usb_hcd_start_port_resume(&hcd->self, wIndex); + break; diff --git a/queue-3.19/usb-host-fotg210-use-new-usb_resume_timeout.patch b/queue-3.19/usb-host-fotg210-use-new-usb_resume_timeout.patch new file mode 100644 index 00000000000..1d9eed48902 --- /dev/null +++ b/queue-3.19/usb-host-fotg210-use-new-usb_resume_timeout.patch @@ -0,0 +1,30 @@ +From 7e136bb71a08e8b8be3bc492f041d9b0bea3856d Mon Sep 17 00:00:00 2001 +From: Felipe Balbi +Date: Fri, 13 Feb 2015 14:54:38 -0600 +Subject: usb: host: fotg210: use new USB_RESUME_TIMEOUT + +From: Felipe Balbi + +commit 7e136bb71a08e8b8be3bc492f041d9b0bea3856d upstream. + +Make sure we're using the new macro, so our +resume signaling will always pass certification. + +Signed-off-by: Felipe Balbi +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/host/fotg210-hcd.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/usb/host/fotg210-hcd.c ++++ b/drivers/usb/host/fotg210-hcd.c +@@ -1595,7 +1595,7 @@ static int fotg210_hub_control( + /* resume signaling for 20 msec */ + fotg210_writel(fotg210, temp | PORT_RESUME, status_reg); + fotg210->reset_done[wIndex] = jiffies +- + msecs_to_jiffies(20); ++ + msecs_to_jiffies(USB_RESUME_TIMEOUT); + break; + case USB_PORT_FEAT_C_SUSPEND: + clear_bit(wIndex, &fotg210->port_c_suspend); diff --git a/queue-3.19/usb-host-fusbh200-use-new-usb_resume_timeout.patch b/queue-3.19/usb-host-fusbh200-use-new-usb_resume_timeout.patch new file mode 100644 index 00000000000..73ae07d9ec0 --- /dev/null +++ b/queue-3.19/usb-host-fusbh200-use-new-usb_resume_timeout.patch @@ -0,0 +1,33 @@ +From 595227db1f2d98bfc33f02a55842f268e12b247d Mon Sep 17 00:00:00 2001 +From: Felipe Balbi +Date: Fri, 13 Feb 2015 14:55:34 -0600 +Subject: usb: host: fusbh200: use new USB_RESUME_TIMEOUT + +From: Felipe Balbi + +commit 595227db1f2d98bfc33f02a55842f268e12b247d upstream. + +Make sure we're using the new macro, so our +resume signaling will always pass certification. + +Signed-off-by: Felipe Balbi +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/host/fusbh200-hcd.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +--- a/drivers/usb/host/fusbh200-hcd.c ++++ b/drivers/usb/host/fusbh200-hcd.c +@@ -1550,10 +1550,9 @@ static int fusbh200_hub_control ( + if ((temp & PORT_PE) == 0) + goto error; + +- /* resume signaling for 20 msec */ + fusbh200_writel(fusbh200, temp | PORT_RESUME, status_reg); + fusbh200->reset_done[wIndex] = jiffies +- + msecs_to_jiffies(20); ++ + msecs_to_jiffies(USB_RESUME_TIMEOUT); + break; + case USB_PORT_FEAT_C_SUSPEND: + clear_bit(wIndex, &fusbh200->port_c_suspend); diff --git a/queue-3.19/usb-host-isp116x-use-new-usb_resume_timeout.patch b/queue-3.19/usb-host-isp116x-use-new-usb_resume_timeout.patch new file mode 100644 index 00000000000..4001313667d --- /dev/null +++ b/queue-3.19/usb-host-isp116x-use-new-usb_resume_timeout.patch @@ -0,0 +1,30 @@ +From 8c0ae6574ccfd3d619876a65829aad74c9d22ba5 Mon Sep 17 00:00:00 2001 +From: Felipe Balbi +Date: Fri, 13 Feb 2015 14:50:10 -0600 +Subject: usb: host: isp116x: use new USB_RESUME_TIMEOUT + +From: Felipe Balbi + +commit 8c0ae6574ccfd3d619876a65829aad74c9d22ba5 upstream. + +Make sure we're using the new macro, so our +resume signaling will always pass certification. + +Signed-off-by: Felipe Balbi +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/host/isp116x-hcd.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/usb/host/isp116x-hcd.c ++++ b/drivers/usb/host/isp116x-hcd.c +@@ -1487,7 +1487,7 @@ static int isp116x_bus_resume(struct usb + spin_unlock_irq(&isp116x->lock); + + hcd->state = HC_STATE_RESUMING; +- msleep(20); ++ msleep(USB_RESUME_TIMEOUT); + + /* Go operational */ + spin_lock_irq(&isp116x->lock); diff --git a/queue-3.19/usb-host-oxu210hp-use-new-usb_resume_timeout.patch b/queue-3.19/usb-host-oxu210hp-use-new-usb_resume_timeout.patch new file mode 100644 index 00000000000..4f458df2f11 --- /dev/null +++ b/queue-3.19/usb-host-oxu210hp-use-new-usb_resume_timeout.patch @@ -0,0 +1,37 @@ +From 84c0d178eb9f3a3ae4d63dc97a440266cf17f7f5 Mon Sep 17 00:00:00 2001 +From: Felipe Balbi +Date: Fri, 13 Feb 2015 14:57:54 -0600 +Subject: usb: host: oxu210hp: use new USB_RESUME_TIMEOUT + +From: Felipe Balbi + +commit 84c0d178eb9f3a3ae4d63dc97a440266cf17f7f5 upstream. + +Make sure we're using the new macro, so our +resume signaling will always pass certification. + +Signed-off-by: Felipe Balbi +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/host/oxu210hp-hcd.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +--- a/drivers/usb/host/oxu210hp-hcd.c ++++ b/drivers/usb/host/oxu210hp-hcd.c +@@ -2500,11 +2500,12 @@ static irqreturn_t oxu210_hcd_irq(struct + || oxu->reset_done[i] != 0) + continue; + +- /* start 20 msec resume signaling from this port, +- * and make hub_wq collect PORT_STAT_C_SUSPEND to ++ /* start USB_RESUME_TIMEOUT resume signaling from this ++ * port, and make hub_wq collect PORT_STAT_C_SUSPEND to + * stop that signaling. + */ +- oxu->reset_done[i] = jiffies + msecs_to_jiffies(20); ++ oxu->reset_done[i] = jiffies + ++ msecs_to_jiffies(USB_RESUME_TIMEOUT); + oxu_dbg(oxu, "port %d remote wakeup\n", i + 1); + mod_timer(&hcd->rh_timer, oxu->reset_done[i]); + } diff --git a/queue-3.19/usb-host-r8a66597-use-new-usb_resume_timeout.patch b/queue-3.19/usb-host-r8a66597-use-new-usb_resume_timeout.patch new file mode 100644 index 00000000000..f16b92443d2 --- /dev/null +++ b/queue-3.19/usb-host-r8a66597-use-new-usb_resume_timeout.patch @@ -0,0 +1,35 @@ +From 7a606ac29752a3e571b83f9b3fceb1eaa1d37781 Mon Sep 17 00:00:00 2001 +From: Felipe Balbi +Date: Fri, 13 Feb 2015 14:58:53 -0600 +Subject: usb: host: r8a66597: use new USB_RESUME_TIMEOUT + +From: Felipe Balbi + +commit 7a606ac29752a3e571b83f9b3fceb1eaa1d37781 upstream. + +While this driver was already using a 50ms resume +timeout, let's make sure everybody uses the same +macro so it's easy to fix later should anything +go wrong. + +It also gives a more "stable" expectation to Linux +users. + +Signed-off-by: Felipe Balbi +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/host/r8a66597-hcd.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/usb/host/r8a66597-hcd.c ++++ b/drivers/usb/host/r8a66597-hcd.c +@@ -2300,7 +2300,7 @@ static int r8a66597_bus_resume(struct us + rh->port &= ~USB_PORT_STAT_SUSPEND; + rh->port |= USB_PORT_STAT_C_SUSPEND << 16; + r8a66597_mdfy(r8a66597, RESUME, RESUME | UACT, dvstctr_reg); +- msleep(50); ++ msleep(USB_RESUME_TIMEOUT); + r8a66597_mdfy(r8a66597, UACT, RESUME | UACT, dvstctr_reg); + } + diff --git a/queue-3.19/usb-host-sl811-use-new-usb_resume_timeout.patch b/queue-3.19/usb-host-sl811-use-new-usb_resume_timeout.patch new file mode 100644 index 00000000000..7402fa59aba --- /dev/null +++ b/queue-3.19/usb-host-sl811-use-new-usb_resume_timeout.patch @@ -0,0 +1,30 @@ +From 08debfb13b199716da6153940c31968c556b195d Mon Sep 17 00:00:00 2001 +From: Felipe Balbi +Date: Fri, 13 Feb 2015 15:00:38 -0600 +Subject: usb: host: sl811: use new USB_RESUME_TIMEOUT + +From: Felipe Balbi + +commit 08debfb13b199716da6153940c31968c556b195d upstream. + +Make sure we're using the new macro, so our +resume signaling will always pass certification. + +Signed-off-by: Felipe Balbi +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/host/sl811-hcd.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/usb/host/sl811-hcd.c ++++ b/drivers/usb/host/sl811-hcd.c +@@ -1259,7 +1259,7 @@ sl811h_hub_control( + sl811_write(sl811, SL11H_CTLREG1, sl811->ctrl1); + + mod_timer(&sl811->timer, jiffies +- + msecs_to_jiffies(20)); ++ + msecs_to_jiffies(USB_RESUME_TIMEOUT)); + break; + case USB_PORT_FEAT_POWER: + port_power(sl811, 0); diff --git a/queue-3.19/usb-host-uhci-use-new-usb_resume_timeout.patch b/queue-3.19/usb-host-uhci-use-new-usb_resume_timeout.patch new file mode 100644 index 00000000000..d6709304678 --- /dev/null +++ b/queue-3.19/usb-host-uhci-use-new-usb_resume_timeout.patch @@ -0,0 +1,40 @@ +From b8fb6f79f76f478acbbffccc966daa878f172a0a Mon Sep 17 00:00:00 2001 +From: Felipe Balbi +Date: Fri, 13 Feb 2015 14:44:17 -0600 +Subject: usb: host: uhci: use new USB_RESUME_TIMEOUT + +From: Felipe Balbi + +commit b8fb6f79f76f478acbbffccc966daa878f172a0a upstream. + +Make sure we're using the new macro, so our +resume signaling will always pass certification. + +Signed-off-by: Felipe Balbi +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/host/uhci-hub.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +--- a/drivers/usb/host/uhci-hub.c ++++ b/drivers/usb/host/uhci-hub.c +@@ -165,7 +165,7 @@ static void uhci_check_ports(struct uhci + /* Port received a wakeup request */ + set_bit(port, &uhci->resuming_ports); + uhci->ports_timeout = jiffies + +- msecs_to_jiffies(25); ++ msecs_to_jiffies(USB_RESUME_TIMEOUT); + usb_hcd_start_port_resume( + &uhci_to_hcd(uhci)->self, port); + +@@ -337,7 +337,8 @@ static int uhci_hub_control(struct usb_h + uhci_finish_suspend(uhci, port, port_addr); + + /* USB v2.0 7.1.7.5 */ +- uhci->ports_timeout = jiffies + msecs_to_jiffies(50); ++ uhci->ports_timeout = jiffies + ++ msecs_to_jiffies(USB_RESUME_TIMEOUT); + break; + case USB_PORT_FEAT_POWER: + /* UHCI has no power switching */ diff --git a/queue-3.19/usb-host-xhci-use-new-usb_resume_timeout.patch b/queue-3.19/usb-host-xhci-use-new-usb_resume_timeout.patch new file mode 100644 index 00000000000..21650dd9dc9 --- /dev/null +++ b/queue-3.19/usb-host-xhci-use-new-usb_resume_timeout.patch @@ -0,0 +1,31 @@ +From b9e451885deb6262dbaf5cd14aa77d192d9ac759 Mon Sep 17 00:00:00 2001 +From: Felipe Balbi +Date: Fri, 13 Feb 2015 14:39:13 -0600 +Subject: usb: host: xhci: use new USB_RESUME_TIMEOUT + +From: Felipe Balbi + +commit b9e451885deb6262dbaf5cd14aa77d192d9ac759 upstream. + +Make sure we're using the new macro, so our +resume signaling will always pass certification. + +Acked-by: Mathias Nyman +Signed-off-by: Felipe Balbi +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/host/xhci-ring.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/usb/host/xhci-ring.c ++++ b/drivers/usb/host/xhci-ring.c +@@ -1574,7 +1574,7 @@ static void handle_port_status(struct xh + } else { + xhci_dbg(xhci, "resume HS port %d\n", port_id); + bus_state->resume_done[faked_port_index] = jiffies + +- msecs_to_jiffies(20); ++ msecs_to_jiffies(USB_RESUME_TIMEOUT); + set_bit(faked_port_index, &bus_state->resuming_ports); + mod_timer(&hcd->rh_timer, + bus_state->resume_done[faked_port_index]); diff --git a/queue-3.19/usb-musb-use-new-usb_resume_timeout.patch b/queue-3.19/usb-musb-use-new-usb_resume_timeout.patch new file mode 100644 index 00000000000..4085c264b5d --- /dev/null +++ b/queue-3.19/usb-musb-use-new-usb_resume_timeout.patch @@ -0,0 +1,62 @@ +From 309be239369609929d5d3833ee043f7c5afc95d1 Mon Sep 17 00:00:00 2001 +From: Felipe Balbi +Date: Fri, 13 Feb 2015 14:46:27 -0600 +Subject: usb: musb: use new USB_RESUME_TIMEOUT + +From: Felipe Balbi + +commit 309be239369609929d5d3833ee043f7c5afc95d1 upstream. + +Make sure we're using the new macro, so our +resume signaling will always pass certification. + +Based on original work by Bin Liu > + +Cc: Bin Liu +Signed-off-by: Felipe Balbi +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/musb/musb_core.c | 5 +++-- + drivers/usb/musb/musb_virthub.c | 2 +- + 2 files changed, 4 insertions(+), 3 deletions(-) + +--- a/drivers/usb/musb/musb_core.c ++++ b/drivers/usb/musb/musb_core.c +@@ -99,6 +99,7 @@ + #include + #include + #include ++#include + + #include "musb_core.h" + +@@ -562,7 +563,7 @@ static irqreturn_t musb_stage0_irq(struc + (USB_PORT_STAT_C_SUSPEND << 16) + | MUSB_PORT_STAT_RESUME; + musb->rh_timer = jiffies +- + msecs_to_jiffies(20); ++ + msecs_to_jiffies(USB_RESUME_TIMEOUT); + musb->need_finish_resume = 1; + + musb->xceiv->otg->state = OTG_STATE_A_HOST; +@@ -2468,7 +2469,7 @@ static int musb_resume(struct device *de + if (musb->need_finish_resume) { + musb->need_finish_resume = 0; + schedule_delayed_work(&musb->finish_resume_work, +- msecs_to_jiffies(20)); ++ msecs_to_jiffies(USB_RESUME_TIMEOUT)); + } + + /* +--- a/drivers/usb/musb/musb_virthub.c ++++ b/drivers/usb/musb/musb_virthub.c +@@ -137,7 +137,7 @@ void musb_port_suspend(struct musb *musb + /* later, GetPortStatus will stop RESUME signaling */ + musb->port1_status |= MUSB_PORT_STAT_RESUME; + schedule_delayed_work(&musb->finish_resume_work, +- msecs_to_jiffies(20)); ++ msecs_to_jiffies(USB_RESUME_TIMEOUT)); + } + } +