From: Greg Kroah-Hartman Date: Fri, 7 Jun 2013 23:02:58 +0000 (-0700) Subject: 3.9-stable patches X-Git-Tag: v3.0.82~12 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=71c45d2379856ceb5fa21fe1aab92c4f00bb49d9;p=thirdparty%2Fkernel%2Fstable-queue.git 3.9-stable patches added patches: acpi-cpufreq-set-current-frequency-based-on-target-p-state.patch acpi-pm-do-not-execute-_ps0-for-devices-without-_psc-during-initialization.patch acpi-scan-do-not-match-drivers-against-objects-having-scan-handlers.patch acpi-video-ignore-bios-initial-backlight-value-for-hp-m4.patch acpi-video-ignore-bios-initial-backlight-value-for-hp-pavilion-g6.patch alsa-hda-add-keep_eapd_on-flag-to-generic-parser.patch alsa-hda-allow-setting-automute-automic-hooks-after-parsing.patch alsa-hda-via-disable-broken-dynamic-power-control.patch alsa-hda-via-fix-wrongly-cleared-pins-after-suspend-on.patch alsa-usb-audio-apply-logitech-quickcam-pro-9000-quirk-only-to-audio-iface.patch alsa-usb-audio-fix-invalid-volume-resolution-on-logitech-hd-webcam-c270.patch alsa-usb-audio-fix-roland-cakewalk-um-3g-support.patch usb-ark3116-fix-control-message-timeout.patch usb-iuu_phoenix-fix-bulk-message-timeout.patch usb-keyspan-fix-bogus-array-index.patch usb-mos7720-fix-dma-to-stack.patch usb-mos7720-fix-hardware-flow-control.patch usb-mos7720-fix-message-timeouts.patch usb-mos7840-fix-dma-to-stack.patch usb-musb-make-use_sg-flag-urb-specific.patch usb-revert-periodic-scheduling-bugfix.patch usb-serial-cypress_m8-enable-frwd-dongle-hidcom-device.patch usb-serial-fix-treo-kyocera-interrrupt-in-urb-context.patch usb-visor-fix-initialisation-of-treo-kyocera-devices.patch usb-whiteheat-fix-broken-port-configuration.patch usb-zte_ev-fix-broken-open.patch usb-zte_ev-fix-control-message-timeouts.patch x86-platform-hp_wmi-fix-bluetooth_rfkill-misuse-in-hp_wmi_rfkill_setup.patch --- diff --git a/queue-3.9/acpi-cpufreq-set-current-frequency-based-on-target-p-state.patch b/queue-3.9/acpi-cpufreq-set-current-frequency-based-on-target-p-state.patch new file mode 100644 index 00000000000..4bb7f80ad3a --- /dev/null +++ b/queue-3.9/acpi-cpufreq-set-current-frequency-based-on-target-p-state.patch @@ -0,0 +1,51 @@ +From 8673b83bf2f013379453b4779047bf3c6ae387e4 Mon Sep 17 00:00:00 2001 +From: Ross Lagerwall +Date: Fri, 31 May 2013 20:45:17 +0100 +Subject: acpi-cpufreq: set current frequency based on target P-State + +From: Ross Lagerwall + +commit 8673b83bf2f013379453b4779047bf3c6ae387e4 upstream. + +Commit 4b31e774 (Always set P-state on initialization) fixed bug +#4634 and caused the driver to always set the target P-State at +least once since the initial P-State may not be the desired one. +Commit 5a1c0228 (cpufreq: Avoid calling cpufreq driver's target() +routine if target_freq == policy->cur) caused a regression in +this behavior. + +This fixes the regression by setting policy->cur based on the CPU's +target frequency rather than the CPU's current reported frequency +(which may be different). This means that the P-State will be set +initially if the CPU's target frequency is different from the +governor's target frequency. + +This fixes an issue where setting the default governor to +performance wouldn't correctly enable turbo mode on all cores. + +Signed-off-by: Ross Lagerwall +Reviewed-by: Len Brown +Acked-by: Viresh Kumar +Signed-off-by: Rafael J. Wysocki +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/cpufreq/acpi-cpufreq.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/cpufreq/acpi-cpufreq.c ++++ b/drivers/cpufreq/acpi-cpufreq.c +@@ -347,11 +347,11 @@ static u32 get_cur_val(const struct cpum + switch (per_cpu(acfreq_data, cpumask_first(mask))->cpu_feature) { + case SYSTEM_INTEL_MSR_CAPABLE: + cmd.type = SYSTEM_INTEL_MSR_CAPABLE; +- cmd.addr.msr.reg = MSR_IA32_PERF_STATUS; ++ cmd.addr.msr.reg = MSR_IA32_PERF_CTL; + break; + case SYSTEM_AMD_MSR_CAPABLE: + cmd.type = SYSTEM_AMD_MSR_CAPABLE; +- cmd.addr.msr.reg = MSR_AMD_PERF_STATUS; ++ cmd.addr.msr.reg = MSR_AMD_PERF_CTL; + break; + case SYSTEM_IO_CAPABLE: + cmd.type = SYSTEM_IO_CAPABLE; diff --git a/queue-3.9/acpi-pm-do-not-execute-_ps0-for-devices-without-_psc-during-initialization.patch b/queue-3.9/acpi-pm-do-not-execute-_ps0-for-devices-without-_psc-during-initialization.patch new file mode 100644 index 00000000000..d3f95fdca21 --- /dev/null +++ b/queue-3.9/acpi-pm-do-not-execute-_ps0-for-devices-without-_psc-during-initialization.patch @@ -0,0 +1,45 @@ +From 7cd8407d53ef5fb0280fcbe34f42311472f90feb Mon Sep 17 00:00:00 2001 +From: "Rafael J. Wysocki" +Date: Wed, 5 Jun 2013 14:01:19 +0200 +Subject: ACPI / PM: Do not execute _PS0 for devices without _PSC during initialization + +From: "Rafael J. Wysocki" + +commit 7cd8407d53ef5fb0280fcbe34f42311472f90feb upstream. + +Commit b378549 (ACPI / PM: Do not power manage devices in unknown +initial states) added code to force devices without _PSC, but having +_PS0 defined in the ACPI namespace, into ACPI power state D0 by +executing _PS0 for them. That turned out to break Toshiba P870-303, +however, so revert that code. + +References: https://bugzilla.kernel.org/show_bug.cgi?id=58201 +Reported-and-tested-by: Jerome Cantenot +Tracked-down-by: Lan Tianyu +Signed-off-by: Rafael J. Wysocki +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/acpi/device_pm.c | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +--- a/drivers/acpi/device_pm.c ++++ b/drivers/acpi/device_pm.c +@@ -269,11 +269,13 @@ int acpi_bus_init_power(struct acpi_devi + if (result) + return result; + } else if (state == ACPI_STATE_UNKNOWN) { +- /* No power resources and missing _PSC? Try to force D0. */ ++ /* ++ * No power resources and missing _PSC? Cross fingers and make ++ * it D0 in hope that this is what the BIOS put the device into. ++ * [We tried to force D0 here by executing _PS0, but that broke ++ * Toshiba P870-303 in a nasty way.] ++ */ + state = ACPI_STATE_D0; +- result = acpi_dev_pm_explicit_set(device, state); +- if (result) +- return result; + } + device->power.state = state; + return 0; diff --git a/queue-3.9/acpi-scan-do-not-match-drivers-against-objects-having-scan-handlers.patch b/queue-3.9/acpi-scan-do-not-match-drivers-against-objects-having-scan-handlers.patch new file mode 100644 index 00000000000..c12d95baec8 --- /dev/null +++ b/queue-3.9/acpi-scan-do-not-match-drivers-against-objects-having-scan-handlers.patch @@ -0,0 +1,50 @@ +From 9f29ab11ddbfc12db54df5a66dab22b39ad94e8e Mon Sep 17 00:00:00 2001 +From: Aaron Lu +Date: Tue, 4 Jun 2013 23:02:58 +0200 +Subject: ACPI / scan: do not match drivers against objects having scan handlers + +From: Aaron Lu + +commit 9f29ab11ddbfc12db54df5a66dab22b39ad94e8e upstream. + +With the introduction of ACPI scan handlers, an ACPI device object +with an ACPI scan handler attached to it must not be bound to an ACPI +driver any more. Therefore it doesn't make sense to match those +ACPI device objects against a newly registered ACPI driver in +acpi_bus_match(), so make that function return 0 if the device +object passed to it has an ACPI scan handler attached. + +This also addresses a regression related to a broken ACPI table in +the BIOS, where it has defined a _ROM method under the PCI root +bridge object. This causes the video module to treat that object +as a display controller device (since only display devices are +supposed to have a _ROM method defined according to the ACPI spec). +As a result, the ACPI video driver binds to the PCI root bridge +object and overwrites the previously assigned driver_data field of +it, causing subsequent calls to acpi_get_pci_dev() to fail. + +[rjw: Subject and changelog] +References: https://bugzilla.kernel.org/show_bug.cgi?id=58091 +Reported-by: Jason Cassell +Reported-and-bisected-by: Dmitry S. Demin +Signed-off-by: Aaron Lu +Signed-off-by: Rafael J. Wysocki +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/acpi/scan.c | 4 ++++ + 1 file changed, 4 insertions(+) + +--- a/drivers/acpi/scan.c ++++ b/drivers/acpi/scan.c +@@ -553,6 +553,10 @@ static int acpi_bus_match(struct device + struct acpi_device *acpi_dev = to_acpi_device(dev); + struct acpi_driver *acpi_drv = to_acpi_driver(drv); + ++ /* Skip ACPI device objects with scan handlers attached. */ ++ if (acpi_dev->handler) ++ return 0; ++ + return acpi_dev->flags.match_driver + && !acpi_match_device_ids(acpi_dev, acpi_drv->ids); + } diff --git a/queue-3.9/acpi-video-ignore-bios-initial-backlight-value-for-hp-m4.patch b/queue-3.9/acpi-video-ignore-bios-initial-backlight-value-for-hp-m4.patch new file mode 100644 index 00000000000..7a352c7cc1d --- /dev/null +++ b/queue-3.9/acpi-video-ignore-bios-initial-backlight-value-for-hp-m4.patch @@ -0,0 +1,39 @@ +From fedbe9bc6fd3e14b1ffbb3dac407777ac4a3650c Mon Sep 17 00:00:00 2001 +From: Alex Hung +Date: Tue, 28 May 2013 02:05:09 +0000 +Subject: ACPI / video: ignore BIOS initial backlight value for HP m4 + +From: Alex Hung + +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 +Signed-off-by: Rafael J. Wysocki +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/acpi/video.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +--- a/drivers/acpi/video.c ++++ b/drivers/acpi/video.c +@@ -447,6 +447,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"), ++ }, ++ }, + {} + }; + diff --git a/queue-3.9/acpi-video-ignore-bios-initial-backlight-value-for-hp-pavilion-g6.patch b/queue-3.9/acpi-video-ignore-bios-initial-backlight-value-for-hp-pavilion-g6.patch new file mode 100644 index 00000000000..c30d4fb0bb4 --- /dev/null +++ b/queue-3.9/acpi-video-ignore-bios-initial-backlight-value-for-hp-pavilion-g6.patch @@ -0,0 +1,40 @@ +From 780a6ec640a3fed671fc2c40e4dd30c03eca3ac3 Mon Sep 17 00:00:00 2001 +From: Ash Willis +Date: Wed, 29 May 2013 01:27:59 +0000 +Subject: ACPI / video: ignore BIOS initial backlight value for HP Pavilion g6 + +From: Ash Willis + +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 +Signed-off-by: Rafael J. Wysocki +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/acpi/video.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +--- a/drivers/acpi/video.c ++++ b/drivers/acpi/video.c +@@ -449,6 +449,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"), diff --git a/queue-3.9/alsa-hda-add-keep_eapd_on-flag-to-generic-parser.patch b/queue-3.9/alsa-hda-add-keep_eapd_on-flag-to-generic-parser.patch new file mode 100644 index 00000000000..5e763774833 --- /dev/null +++ b/queue-3.9/alsa-hda-add-keep_eapd_on-flag-to-generic-parser.patch @@ -0,0 +1,55 @@ +From 05909d5c679cf7c9a8a5bc663677c066a546894f Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Fri, 31 May 2013 19:55:54 +0200 +Subject: ALSA: hda - Add keep_eapd_on flag to generic parser + +From: Takashi Iwai + +commit 05909d5c679cf7c9a8a5bc663677c066a546894f upstream. + +VT1802 codec seems to reset EAPD of other pins in the hardware level, +and this was another reason of the silent headphone output on some +machines. As a workaround, introduce a new flag indicating to keep +the EPAD on to the generic parser, and set it in patch_via.c. + +Reported-by: Alex Riesen +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/hda/hda_generic.c | 2 ++ + sound/pci/hda/hda_generic.h | 1 + + sound/pci/hda/patch_via.c | 1 + + 3 files changed, 4 insertions(+) + +--- a/sound/pci/hda/hda_generic.c ++++ b/sound/pci/hda/hda_generic.c +@@ -772,6 +772,8 @@ static void set_pin_eapd(struct hda_code + return; + if (codec->inv_eapd) + enable = !enable; ++ if (spec->keep_eapd_on && !enable) ++ return; + snd_hda_codec_update_cache(codec, pin, 0, + AC_VERB_SET_EAPD_BTLENABLE, + enable ? 0x02 : 0x00); +--- a/sound/pci/hda/hda_generic.h ++++ b/sound/pci/hda/hda_generic.h +@@ -205,6 +205,7 @@ struct hda_gen_spec { + unsigned int multi_cap_vol:1; /* allow multiple capture xxx volumes */ + unsigned int inv_dmic_split:1; /* inverted dmic w/a for conexant */ + unsigned int own_eapd_ctl:1; /* set EAPD by own function */ ++ unsigned int keep_eapd_on:1; /* don't turn off EAPD automatically */ + unsigned int vmaster_mute_enum:1; /* add vmaster mute mode enum */ + unsigned int indep_hp:1; /* independent HP supported */ + unsigned int prefer_hp_amp:1; /* enable HP amp for speaker if any */ +--- a/sound/pci/hda/patch_via.c ++++ b/sound/pci/hda/patch_via.c +@@ -136,6 +136,7 @@ static struct via_spec *via_new_spec(str + spec->codec_type = VT1708S; + spec->no_pin_power_ctl = 1; + spec->gen.indep_hp = 1; ++ spec->gen.keep_eapd_on = 1; + spec->gen.pcm_playback_hook = via_playback_pcm_hook; + return spec; + } diff --git a/queue-3.9/alsa-hda-allow-setting-automute-automic-hooks-after-parsing.patch b/queue-3.9/alsa-hda-allow-setting-automute-automic-hooks-after-parsing.patch new file mode 100644 index 00000000000..a4431180d1f --- /dev/null +++ b/queue-3.9/alsa-hda-allow-setting-automute-automic-hooks-after-parsing.patch @@ -0,0 +1,99 @@ +From 77afe0e94884ae40de29cd813a1fb7ddee583591 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Fri, 31 May 2013 14:10:03 +0200 +Subject: ALSA: hda - Allow setting automute/automic hooks after parsing + +From: Takashi Iwai + +commit 77afe0e94884ae40de29cd813a1fb7ddee583591 upstream. + +Some codec drivers (VIA codecs and some Realtek fixups) set the +automute and automic hooks after calling +snd_hda_gen_parse_auto_config(). In the current code, the hook +pointers are referred only in snd_hda_gen_parse_auto_config() and +passed to snd_hda_jack_detect_enable_callback(), thus changing the +hook values won't change the actually called callbacks properly. + +This patch fixes this bug by setting the static functions as the +primary callback functions for the jack detection, and let them +calling the appropriate hooks dynamically. + +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/hda/hda_generic.c | 42 +++++++++++++++++++++++++++++++++--------- + 1 file changed, 33 insertions(+), 9 deletions(-) + +--- a/sound/pci/hda/hda_generic.c ++++ b/sound/pci/hda/hda_generic.c +@@ -3671,6 +3671,36 @@ static void update_automute_all(struct h + snd_hda_gen_mic_autoswitch(codec, NULL); + } + ++/* call appropriate hooks */ ++static void call_hp_automute(struct hda_codec *codec, struct hda_jack_tbl *jack) ++{ ++ struct hda_gen_spec *spec = codec->spec; ++ if (spec->hp_automute_hook) ++ spec->hp_automute_hook(codec, jack); ++ else ++ snd_hda_gen_hp_automute(codec, jack); ++} ++ ++static void call_line_automute(struct hda_codec *codec, ++ struct hda_jack_tbl *jack) ++{ ++ struct hda_gen_spec *spec = codec->spec; ++ if (spec->line_automute_hook) ++ spec->line_automute_hook(codec, jack); ++ else ++ snd_hda_gen_line_automute(codec, jack); ++} ++ ++static void call_mic_autoswitch(struct hda_codec *codec, ++ struct hda_jack_tbl *jack) ++{ ++ struct hda_gen_spec *spec = codec->spec; ++ if (spec->mic_autoswitch_hook) ++ spec->mic_autoswitch_hook(codec, jack); ++ else ++ snd_hda_gen_mic_autoswitch(codec, jack); ++} ++ + /* + * Auto-Mute mode mixer enum support + */ +@@ -3805,9 +3835,7 @@ static int check_auto_mute_availability( + snd_printdd("hda-codec: Enable HP auto-muting on NID 0x%x\n", + nid); + snd_hda_jack_detect_enable_callback(codec, nid, HDA_GEN_HP_EVENT, +- spec->hp_automute_hook ? +- spec->hp_automute_hook : +- snd_hda_gen_hp_automute); ++ call_hp_automute); + spec->detect_hp = 1; + } + +@@ -3820,9 +3848,7 @@ static int check_auto_mute_availability( + snd_printdd("hda-codec: Enable Line-Out auto-muting on NID 0x%x\n", nid); + snd_hda_jack_detect_enable_callback(codec, nid, + HDA_GEN_FRONT_EVENT, +- spec->line_automute_hook ? +- spec->line_automute_hook : +- snd_hda_gen_line_automute); ++ call_line_automute); + spec->detect_lo = 1; + } + spec->automute_lo_possible = spec->detect_hp; +@@ -3864,9 +3890,7 @@ static bool auto_mic_check_imux(struct h + snd_hda_jack_detect_enable_callback(codec, + spec->am_entry[i].pin, + HDA_GEN_MIC_EVENT, +- spec->mic_autoswitch_hook ? +- spec->mic_autoswitch_hook : +- snd_hda_gen_mic_autoswitch); ++ call_mic_autoswitch); + return true; + } + diff --git a/queue-3.9/alsa-hda-via-disable-broken-dynamic-power-control.patch b/queue-3.9/alsa-hda-via-disable-broken-dynamic-power-control.patch new file mode 100644 index 00000000000..f52b0258a26 --- /dev/null +++ b/queue-3.9/alsa-hda-via-disable-broken-dynamic-power-control.patch @@ -0,0 +1,40 @@ +From 087c2e3b4e062573dbbc8a50b9208992e3768dcf Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Fri, 31 May 2013 13:54:10 +0200 +Subject: ALSA: hda/via - Disable broken dynamic power control + +From: Takashi Iwai + +commit 087c2e3b4e062573dbbc8a50b9208992e3768dcf upstream. + +Since the transition to the generic parser, the actual routes used +there don't match always with the assumed static paths in some +set_widgets_power_state callbacks. This results in the wrong power +setup in the end. As a temporary workaround, we need to disable the +calls together with the non-functional dynamic power control enum. + +Reported-by: Alex Riesen +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/hda/patch_via.c | 5 +++++ + 1 file changed, 5 insertions(+) + +--- a/sound/pci/hda/patch_via.c ++++ b/sound/pci/hda/patch_via.c +@@ -231,9 +231,14 @@ static void vt1708_update_hp_work(struct + + static void set_widgets_power_state(struct hda_codec *codec) + { ++#if 0 /* FIXME: the assumed connections don't match always with the ++ * actual routes by the generic parser, so better to disable ++ * the control for safety. ++ */ + struct via_spec *spec = codec->spec; + if (spec->set_widgets_power_state) + spec->set_widgets_power_state(codec); ++#endif + } + + static void update_power_state(struct hda_codec *codec, hda_nid_t nid, diff --git a/queue-3.9/alsa-hda-via-fix-wrongly-cleared-pins-after-suspend-on.patch b/queue-3.9/alsa-hda-via-fix-wrongly-cleared-pins-after-suspend-on.patch new file mode 100644 index 00000000000..ff70dac6f10 --- /dev/null +++ b/queue-3.9/alsa-hda-via-fix-wrongly-cleared-pins-after-suspend-on.patch @@ -0,0 +1,41 @@ +From 5a6f294e87974e6ec68d7113553ffd975d83bf15 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Mon, 3 Jun 2013 11:17:38 +0200 +Subject: ALSA: hda/via - Fix wrongly cleared pins after suspend on + VT1802 + +From: Takashi Iwai + +commit 5a6f294e87974e6ec68d7113553ffd975d83bf15 upstream. + +VIA driver has a special suspend handling only for VT1802 to reduce +the pop noise. During the transition to the generic parser, the +behavior of snd_hda_set_pin_ctl() was also changed to modify the +cached values, too. And this caused a regression where the pin is +still cleared even after the resume (including the resume from power +save), resulting in the silent output. + +The fix is simply to replace snd_hda_set_pin_ctl() with the explicit +call of snd_hda_codec_write() again. + +Reported-by: Alex Riesen +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/hda/patch_via.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +--- a/sound/pci/hda/patch_via.c ++++ b/sound/pci/hda/patch_via.c +@@ -483,7 +483,9 @@ static int via_suspend(struct hda_codec + /* Fix pop noise on headphones */ + int i; + for (i = 0; i < spec->gen.autocfg.hp_outs; i++) +- snd_hda_set_pin_ctl(codec, spec->gen.autocfg.hp_pins[i], 0); ++ snd_hda_codec_write(codec, spec->gen.autocfg.hp_pins[i], ++ 0, AC_VERB_SET_PIN_WIDGET_CONTROL, ++ 0x00); + } + + return 0; diff --git a/queue-3.9/alsa-usb-audio-apply-logitech-quickcam-pro-9000-quirk-only-to-audio-iface.patch b/queue-3.9/alsa-usb-audio-apply-logitech-quickcam-pro-9000-quirk-only-to-audio-iface.patch new file mode 100644 index 00000000000..ff03cf2bd6d --- /dev/null +++ b/queue-3.9/alsa-usb-audio-apply-logitech-quickcam-pro-9000-quirk-only-to-audio-iface.patch @@ -0,0 +1,37 @@ +From 8eafc0a161123d90617c9ca2eddfe87b382b1b89 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +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 + +commit 8eafc0a161123d90617c9ca2eddfe87b382b1b89 upstream. + +... instead of applying to all interfaces. + +Reference: http://forums.gentoo.org/viewtopic-p-6886404.html + +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + 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 +@@ -215,7 +215,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", diff --git a/queue-3.9/alsa-usb-audio-fix-invalid-volume-resolution-on-logitech-hd-webcam-c270.patch b/queue-3.9/alsa-usb-audio-fix-invalid-volume-resolution-on-logitech-hd-webcam-c270.patch new file mode 100644 index 00000000000..4ef0680b5d9 --- /dev/null +++ b/queue-3.9/alsa-usb-audio-fix-invalid-volume-resolution-on-logitech-hd-webcam-c270.patch @@ -0,0 +1,37 @@ +From 11e7064f35bb87da8f427d1aa4bbd8b7473a3993 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Wed, 5 Jun 2013 08:35:26 +0200 +Subject: ALSA: usb-audio - Fix invalid volume resolution on Logitech HD webcam c270 + +From: Takashi Iwai + +commit 11e7064f35bb87da8f427d1aa4bbd8b7473a3993 upstream. + +USB audio driver spews an error message when probing Logitech HD +webcam c270: + ALSA mixer.c:1300 usb_audio: Warning! Unlikely big volume range (=6144), cval->res is probably wrong. + ALSA mixer.c:1304 usb_audio: [5] FU [Mic Capture Volume] ch = 1, val = 1536/7680/1 + +Obviously the device needs a fixed volume resolution (cval->res = 384) +like other Logitech devices. + +Bugzilla: https://bugzilla.novell.com/show_bug.cgi?id=821735 + +Reported-and-tested-by: Cristian Rodríguez +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/usb/mixer.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/sound/usb/mixer.c ++++ b/sound/usb/mixer.c +@@ -886,6 +886,7 @@ static void volume_control_quirks(struct + case USB_ID(0x046d, 0x0808): + case USB_ID(0x046d, 0x0809): + case USB_ID(0x046d, 0x081d): /* HD Webcam c510 */ ++ case USB_ID(0x046d, 0x0825): /* HD Webcam c270 */ + case USB_ID(0x046d, 0x0991): + /* Most audio usb devices lie about volume resolution. + * Most Logitech webcams have res = 384. diff --git a/queue-3.9/alsa-usb-audio-fix-roland-cakewalk-um-3g-support.patch b/queue-3.9/alsa-usb-audio-fix-roland-cakewalk-um-3g-support.patch new file mode 100644 index 00000000000..9c3ce8fd857 --- /dev/null +++ b/queue-3.9/alsa-usb-audio-fix-roland-cakewalk-um-3g-support.patch @@ -0,0 +1,37 @@ +From a0c6d309c6df14655f9962f666d1da96318b0b7c Mon Sep 17 00:00:00 2001 +From: Clemens Ladisch +Date: Sun, 2 Jun 2013 19:49:07 +0200 +Subject: ALSA: usb-audio: fix Roland/Cakewalk UM-3G support + +From: Clemens Ladisch + +commit a0c6d309c6df14655f9962f666d1da96318b0b7c upstream. + +Commit 927c9423dd5f2d1c0b93d5e694ab84b4a5559713 (ALSA: usb-audio: add +Edirol UM-3G support) used a wrong quirk type, which would make the +driver refuse to attach with the error message "MIDIStreaming interface +descriptor not found". + +Signed-off-by: Clemens Ladisch +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/usb/quirks-table.h | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +--- a/sound/usb/quirks-table.h ++++ b/sound/usb/quirks-table.h +@@ -1714,7 +1714,11 @@ YAMAHA_DEVICE(0x7010, "UB99"), + USB_DEVICE_VENDOR_SPEC(0x0582, 0x0108), + .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { + .ifnum = 0, +- .type = QUIRK_MIDI_STANDARD_INTERFACE ++ .type = QUIRK_MIDI_FIXED_ENDPOINT, ++ .data = & (const struct snd_usb_midi_endpoint_info) { ++ .out_cables = 0x0007, ++ .in_cables = 0x0007 ++ } + } + }, + { diff --git a/queue-3.9/series b/queue-3.9/series index f4ef90a3165..b27201ad471 100644 --- a/queue-3.9/series +++ b/queue-3.9/series @@ -7,3 +7,31 @@ xhci-mem-init-list-heads-at-the-beginning-of-init.patch xhci-fix-list-access-before-init.patch xhci-disable-d3cold-for-buggy-ti-redrivers.patch x86-pci-map-pci-setup-data-with-ioremap-so-it-can-be-in-highmem.patch +usb-musb-make-use_sg-flag-urb-specific.patch +alsa-usb-audio-fix-roland-cakewalk-um-3g-support.patch +alsa-usb-audio-apply-logitech-quickcam-pro-9000-quirk-only-to-audio-iface.patch +alsa-usb-audio-fix-invalid-volume-resolution-on-logitech-hd-webcam-c270.patch +usb-iuu_phoenix-fix-bulk-message-timeout.patch +usb-keyspan-fix-bogus-array-index.patch +usb-ark3116-fix-control-message-timeout.patch +usb-visor-fix-initialisation-of-treo-kyocera-devices.patch +usb-zte_ev-fix-control-message-timeouts.patch +usb-zte_ev-fix-broken-open.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-mos7840-fix-dma-to-stack.patch +usb-mos7720-fix-dma-to-stack.patch +usb-mos7720-fix-message-timeouts.patch +usb-mos7720-fix-hardware-flow-control.patch +acpi-cpufreq-set-current-frequency-based-on-target-p-state.patch +acpi-video-ignore-bios-initial-backlight-value-for-hp-m4.patch +acpi-video-ignore-bios-initial-backlight-value-for-hp-pavilion-g6.patch +acpi-scan-do-not-match-drivers-against-objects-having-scan-handlers.patch +acpi-pm-do-not-execute-_ps0-for-devices-without-_psc-during-initialization.patch +x86-platform-hp_wmi-fix-bluetooth_rfkill-misuse-in-hp_wmi_rfkill_setup.patch +alsa-hda-via-disable-broken-dynamic-power-control.patch +alsa-hda-via-fix-wrongly-cleared-pins-after-suspend-on.patch +alsa-hda-allow-setting-automute-automic-hooks-after-parsing.patch +alsa-hda-add-keep_eapd_on-flag-to-generic-parser.patch diff --git a/queue-3.9/usb-ark3116-fix-control-message-timeout.patch b/queue-3.9/usb-ark3116-fix-control-message-timeout.patch new file mode 100644 index 00000000000..bc821dcbf9d --- /dev/null +++ b/queue-3.9/usb-ark3116-fix-control-message-timeout.patch @@ -0,0 +1,30 @@ +From 634371911730a462626071065b64cd6e1fe213e0 Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Mon, 27 May 2013 14:44:41 +0200 +Subject: USB: ark3116: fix control-message timeout + +From: Johan Hovold + +commit 634371911730a462626071065b64cd6e1fe213e0 upstream. + +The control-message timeout is specified in milliseconds and should not +depend on HZ. + +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + 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 +@@ -43,7 +43,7 @@ + #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) }, diff --git a/queue-3.9/usb-iuu_phoenix-fix-bulk-message-timeout.patch b/queue-3.9/usb-iuu_phoenix-fix-bulk-message-timeout.patch new file mode 100644 index 00000000000..259f26386f0 --- /dev/null +++ b/queue-3.9/usb-iuu_phoenix-fix-bulk-message-timeout.patch @@ -0,0 +1,39 @@ +From 6c13ff68a7ce01da7a51b44241a7aad8eaaedde7 Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Mon, 27 May 2013 14:44:42 +0200 +Subject: USB: iuu_phoenix: fix bulk-message timeout + +From: Johan Hovold + +commit 6c13ff68a7ce01da7a51b44241a7aad8eaaedde7 upstream. + +The bulk-message timeout is specified in milliseconds and should not +depend on HZ. + +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + 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 +@@ -289,7 +289,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) + dev_dbg(&port->dev, "%s - error = %2x\n", __func__, status); +@@ -309,7 +309,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) + dev_dbg(&port->dev, "%s - error = %2x\n", __func__, status); diff --git a/queue-3.9/usb-keyspan-fix-bogus-array-index.patch b/queue-3.9/usb-keyspan-fix-bogus-array-index.patch new file mode 100644 index 00000000000..1916ae9ffb1 --- /dev/null +++ b/queue-3.9/usb-keyspan-fix-bogus-array-index.patch @@ -0,0 +1,31 @@ +From a07088098a650267b2eda689538133a324b9523f Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Tue, 4 Jun 2013 18:50:29 +0200 +Subject: USB: keyspan: fix bogus array index + +From: Johan Hovold + +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 +Signed-off-by: Greg Kroah-Hartman + +--- + 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 +@@ -1594,7 +1594,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; + + dev_dbg(&port->dev, "%s - endpoint %d\n", __func__, usb_pipeendpoint(this_urb->pipe)); diff --git a/queue-3.9/usb-mos7720-fix-dma-to-stack.patch b/queue-3.9/usb-mos7720-fix-dma-to-stack.patch new file mode 100644 index 00000000000..5a26745c837 --- /dev/null +++ b/queue-3.9/usb-mos7720-fix-dma-to-stack.patch @@ -0,0 +1,47 @@ +From 72ea18a558ed7a63a50bb121ba60d73b5b38ae30 Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Mon, 27 May 2013 14:44:39 +0200 +Subject: USB: mos7720: fix DMA to stack + +From: Johan Hovold + +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 +Signed-off-by: Greg Kroah-Hartman + +--- + 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 +@@ -228,11 +228,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; + } + diff --git a/queue-3.9/usb-mos7720-fix-hardware-flow-control.patch b/queue-3.9/usb-mos7720-fix-hardware-flow-control.patch new file mode 100644 index 00000000000..0878079d690 --- /dev/null +++ b/queue-3.9/usb-mos7720-fix-hardware-flow-control.patch @@ -0,0 +1,30 @@ +From a26f009a070e840fadacb91013b2391ba7ab6cc2 Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Tue, 4 Jun 2013 18:50:31 +0200 +Subject: USB: mos7720: fix hardware flow control + +From: Johan Hovold + +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 +Signed-off-by: Greg Kroah-Hartman + +--- + 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 +@@ -1644,7 +1644,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); diff --git a/queue-3.9/usb-mos7720-fix-message-timeouts.patch b/queue-3.9/usb-mos7720-fix-message-timeouts.patch new file mode 100644 index 00000000000..d1e93f626b9 --- /dev/null +++ b/queue-3.9/usb-mos7720-fix-message-timeouts.patch @@ -0,0 +1,48 @@ +From 849513a7809175420d353625b6f651d961e99d49 Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Mon, 27 May 2013 14:44:43 +0200 +Subject: USB: mos7720: fix message timeouts + +From: Johan Hovold + +commit 849513a7809175420d353625b6f651d961e99d49 upstream. + +The control and bulk-message timeouts are specified in milliseconds and +should not depend on HZ. + +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + 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 +@@ -40,7 +40,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 +@@ -2003,7 +2003,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); +@@ -2046,7 +2046,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); diff --git a/queue-3.9/usb-mos7840-fix-dma-to-stack.patch b/queue-3.9/usb-mos7840-fix-dma-to-stack.patch new file mode 100644 index 00000000000..9d1769405d1 --- /dev/null +++ b/queue-3.9/usb-mos7840-fix-dma-to-stack.patch @@ -0,0 +1,92 @@ +From 15ee89c3347fbf58a4361011eda5ac2731e45126 Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Mon, 27 May 2013 14:44:40 +0200 +Subject: USB: mos7840: fix DMA to stack + +From: Johan Hovold + +commit 15ee89c3347fbf58a4361011eda5ac2731e45126 upstream. + +Fix regression introduced by commit 0eafe4de1a ("USB: serial: mos7840: +add support for MCS7810 devices") which used stack-allocated buffers for +control messages. + +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/mos7840.c | 35 +++++++++++++++++++++++++++-------- + 1 file changed, 27 insertions(+), 8 deletions(-) + +--- a/drivers/usb/serial/mos7840.c ++++ b/drivers/usb/serial/mos7840.c +@@ -2255,13 +2255,21 @@ static int mos7840_ioctl(struct tty_stru + static int mos7810_check(struct usb_serial *serial) + { + int i, pass_count = 0; ++ u8 *buf; + __u16 data = 0, mcr_data = 0; + __u16 test_pattern = 0x55AA; ++ int res; ++ ++ buf = kmalloc(VENDOR_READ_LENGTH, GFP_KERNEL); ++ if (!buf) ++ return 0; /* failed to identify 7810 */ + + /* Store MCR setting */ +- usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0), ++ res = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0), + MCS_RDREQ, MCS_RD_RTYPE, 0x0300, MODEM_CONTROL_REGISTER, +- &mcr_data, VENDOR_READ_LENGTH, MOS_WDR_TIMEOUT); ++ buf, VENDOR_READ_LENGTH, MOS_WDR_TIMEOUT); ++ if (res == VENDOR_READ_LENGTH) ++ mcr_data = *buf; + + for (i = 0; i < 16; i++) { + /* Send the 1-bit test pattern out to MCS7810 test pin */ +@@ -2271,9 +2279,12 @@ static int mos7810_check(struct usb_seri + MODEM_CONTROL_REGISTER, NULL, 0, MOS_WDR_TIMEOUT); + + /* Read the test pattern back */ +- usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0), +- MCS_RDREQ, MCS_RD_RTYPE, 0, GPIO_REGISTER, &data, +- VENDOR_READ_LENGTH, MOS_WDR_TIMEOUT); ++ res = usb_control_msg(serial->dev, ++ usb_rcvctrlpipe(serial->dev, 0), MCS_RDREQ, ++ MCS_RD_RTYPE, 0, GPIO_REGISTER, buf, ++ VENDOR_READ_LENGTH, MOS_WDR_TIMEOUT); ++ if (res == VENDOR_READ_LENGTH) ++ data = *buf; + + /* If this is a MCS7810 device, both test patterns must match */ + if (((test_pattern >> i) ^ (~data >> 1)) & 0x0001) +@@ -2287,6 +2298,8 @@ static int mos7810_check(struct usb_seri + MCS_WR_RTYPE, 0x0300 | mcr_data, MODEM_CONTROL_REGISTER, NULL, + 0, MOS_WDR_TIMEOUT); + ++ kfree(buf); ++ + if (pass_count == 16) + return 1; + +@@ -2296,11 +2309,17 @@ static int mos7810_check(struct usb_seri + static int mos7840_calc_num_ports(struct usb_serial *serial) + { + __u16 data = 0x00; ++ u8 *buf; + int mos7840_num_ports; + +- usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0), +- MCS_RDREQ, MCS_RD_RTYPE, 0, GPIO_REGISTER, &data, +- VENDOR_READ_LENGTH, MOS_WDR_TIMEOUT); ++ buf = kzalloc(VENDOR_READ_LENGTH, GFP_KERNEL); ++ if (buf) { ++ usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0), ++ MCS_RDREQ, MCS_RD_RTYPE, 0, GPIO_REGISTER, buf, ++ VENDOR_READ_LENGTH, MOS_WDR_TIMEOUT); ++ data = *buf; ++ kfree(buf); ++ } + + if (serial->dev->descriptor.idProduct == MOSCHIP_DEVICE_ID_7810 || + serial->dev->descriptor.idProduct == MOSCHIP_DEVICE_ID_7820) { diff --git a/queue-3.9/usb-musb-make-use_sg-flag-urb-specific.patch b/queue-3.9/usb-musb-make-use_sg-flag-urb-specific.patch new file mode 100644 index 00000000000..a8670d33665 --- /dev/null +++ b/queue-3.9/usb-musb-make-use_sg-flag-urb-specific.patch @@ -0,0 +1,108 @@ +From ed74df12dc3e07a37d99aab60211496e871488a0 Mon Sep 17 00:00:00 2001 +From: Virupax Sadashivpetimath +Date: Wed, 24 Apr 2013 08:38:48 +0200 +Subject: usb: musb: make use_sg flag URB specific + +From: Virupax Sadashivpetimath + +commit ed74df12dc3e07a37d99aab60211496e871488a0 upstream. + +Since highmem PIO URB handling was introduced in: + +8e8a551 usb: musb: host: Handle highmem in PIO mode + +when a URB is being handled it may happen that the static use_sg flag +was set by a previous URB with buffer in highmem. This leads to error +in handling the present URB. + +Fix this by making the use_sg flag URB specific. + +Acked-by: Linus Walleij +Signed-off-by: Virupax Sadashivpetimath +Signed-off-by: Fabio Baltieri +Signed-off-by: Felipe Balbi +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/musb/musb_host.c | 18 ++++++++---------- + drivers/usb/musb/musb_host.h | 1 + + 2 files changed, 9 insertions(+), 10 deletions(-) + +--- a/drivers/usb/musb/musb_host.c ++++ b/drivers/usb/musb/musb_host.c +@@ -1232,7 +1232,6 @@ void musb_host_tx(struct musb *musb, u8 + void __iomem *mbase = musb->mregs; + struct dma_channel *dma; + bool transfer_pending = false; +- static bool use_sg; + + musb_ep_select(mbase, epnum); + tx_csr = musb_readw(epio, MUSB_TXCSR); +@@ -1463,9 +1462,9 @@ done: + * NULL. + */ + if (!urb->transfer_buffer) +- use_sg = true; ++ qh->use_sg = true; + +- if (use_sg) { ++ if (qh->use_sg) { + /* sg_miter_start is already done in musb_ep_program */ + if (!sg_miter_next(&qh->sg_miter)) { + dev_err(musb->controller, "error: sg list empty\n"); +@@ -1484,9 +1483,9 @@ done: + + qh->segsize = length; + +- if (use_sg) { ++ if (qh->use_sg) { + if (offset + length >= urb->transfer_buffer_length) +- use_sg = false; ++ qh->use_sg = false; + } + + musb_ep_select(mbase, epnum); +@@ -1552,7 +1551,6 @@ void musb_host_rx(struct musb *musb, u8 + bool done = false; + u32 status; + struct dma_channel *dma; +- static bool use_sg; + unsigned int sg_flags = SG_MITER_ATOMIC | SG_MITER_TO_SG; + + musb_ep_select(mbase, epnum); +@@ -1878,12 +1876,12 @@ void musb_host_rx(struct musb *musb, u8 + * NULL. + */ + if (!urb->transfer_buffer) { +- use_sg = true; ++ qh->use_sg = true; + sg_miter_start(&qh->sg_miter, urb->sg, 1, + sg_flags); + } + +- if (use_sg) { ++ if (qh->use_sg) { + if (!sg_miter_next(&qh->sg_miter)) { + dev_err(musb->controller, "error: sg list empty\n"); + sg_miter_stop(&qh->sg_miter); +@@ -1913,8 +1911,8 @@ finish: + urb->actual_length += xfer_len; + qh->offset += xfer_len; + if (done) { +- if (use_sg) +- use_sg = false; ++ if (qh->use_sg) ++ qh->use_sg = false; + + if (urb->status == -EINPROGRESS) + urb->status = status; +--- a/drivers/usb/musb/musb_host.h ++++ b/drivers/usb/musb/musb_host.h +@@ -74,6 +74,7 @@ struct musb_qh { + u16 frame; /* for periodic schedule */ + unsigned iso_idx; /* in urb->iso_frame_desc[] */ + struct sg_mapping_iter sg_miter; /* for highmem in PIO mode */ ++ bool use_sg; /* to track urb using sglist */ + }; + + /* map from control or bulk queue head to the first qh on that ring */ diff --git a/queue-3.9/usb-revert-periodic-scheduling-bugfix.patch b/queue-3.9/usb-revert-periodic-scheduling-bugfix.patch new file mode 100644 index 00000000000..a2faca841e9 --- /dev/null +++ b/queue-3.9/usb-revert-periodic-scheduling-bugfix.patch @@ -0,0 +1,46 @@ +From fdc03438f53a00294ed9939eb3a1f6db6f3d8963 Mon Sep 17 00:00:00 2001 +From: Alan Stern +Date: Tue, 28 May 2013 14:03:10 -0400 +Subject: USB: revert periodic scheduling bugfix + +From: Alan Stern + +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 +CC: Joseph Salisbury +CC: Tim Richardson +Signed-off-by: Greg Kroah-Hartman + +--- + 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 +@@ -213,7 +213,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]) diff --git a/queue-3.9/usb-serial-cypress_m8-enable-frwd-dongle-hidcom-device.patch b/queue-3.9/usb-serial-cypress_m8-enable-frwd-dongle-hidcom-device.patch new file mode 100644 index 00000000000..c2a3c2079e7 --- /dev/null +++ b/queue-3.9/usb-serial-cypress_m8-enable-frwd-dongle-hidcom-device.patch @@ -0,0 +1,92 @@ +From 6529591e3eef65f0f528a81ac169f6e294b947a7 Mon Sep 17 00:00:00 2001 +From: Robert Butora +Date: Fri, 31 May 2013 18:09:51 +0300 +Subject: USB: Serial: cypress_M8: Enable FRWD Dongle hidcom device + +From: Robert Butora + +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 +Signed-off-by: Greg Kroah-Hartman + +--- + 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 +@@ -65,6 +65,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 */ + }; + +@@ -78,6 +79,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 */ + }; +@@ -230,6 +232,12 @@ static struct usb_serial_driver * const + * 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) + { +@@ -239,6 +247,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 +@@ -449,7 +461,11 @@ static int cypress_generic_port_probe(st + return -ENOMEM; + } + +- 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 diff --git a/queue-3.9/usb-serial-fix-treo-kyocera-interrrupt-in-urb-context.patch b/queue-3.9/usb-serial-fix-treo-kyocera-interrrupt-in-urb-context.patch new file mode 100644 index 00000000000..2f0374eac60 --- /dev/null +++ b/queue-3.9/usb-serial-fix-treo-kyocera-interrrupt-in-urb-context.patch @@ -0,0 +1,29 @@ +From 5f8e2c07d75967ee49a5da1d21ddf5f50d48cda0 Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Mon, 27 May 2013 14:44:37 +0200 +Subject: USB: serial: fix Treo/Kyocera interrrupt-in urb context + +From: Johan Hovold + +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 +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/visor.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/usb/serial/visor.c ++++ b/drivers/usb/serial/visor.c +@@ -578,6 +578,7 @@ static int treo_attach(struct usb_serial + dest->bulk_in_buffer = src->bulk_in_buffer; \ + dest->bulk_in_size = src->bulk_in_size; \ + 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; \ diff --git a/queue-3.9/usb-visor-fix-initialisation-of-treo-kyocera-devices.patch b/queue-3.9/usb-visor-fix-initialisation-of-treo-kyocera-devices.patch new file mode 100644 index 00000000000..127b153bca5 --- /dev/null +++ b/queue-3.9/usb-visor-fix-initialisation-of-treo-kyocera-devices.patch @@ -0,0 +1,40 @@ +From 420021a395ce38b7ab2cceb52dee4038be7d8fa3 Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Mon, 27 May 2013 14:44:38 +0200 +Subject: USB: visor: fix initialisation of Treo/Kyocera devices + +From: Johan Hovold + +commit 420021a395ce38b7ab2cceb52dee4038be7d8fa3 upstream. + +Fix regression introduced by commit 214916f2e ("USB: visor: reimplement +using generic framework") which broke initialisation of Treo/Kyocera +devices that re-mapped bulk-in endpoints. + +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/visor.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +--- a/drivers/usb/serial/visor.c ++++ b/drivers/usb/serial/visor.c +@@ -566,9 +566,17 @@ static int treo_attach(struct usb_serial + */ + #define COPY_PORT(dest, src) \ + do { \ ++ int i; \ ++ \ ++ for (i = 0; i < ARRAY_SIZE(src->read_urbs); ++i) { \ ++ dest->read_urbs[i] = src->read_urbs[i]; \ ++ dest->read_urbs[i]->context = dest; \ ++ dest->bulk_in_buffers[i] = src->bulk_in_buffers[i]; \ ++ } \ + dest->read_urb = src->read_urb; \ + dest->bulk_in_endpointAddress = src->bulk_in_endpointAddress;\ + dest->bulk_in_buffer = src->bulk_in_buffer; \ ++ dest->bulk_in_size = src->bulk_in_size; \ + dest->interrupt_in_urb = src->interrupt_in_urb; \ + dest->interrupt_in_endpointAddress = \ + src->interrupt_in_endpointAddress;\ diff --git a/queue-3.9/usb-whiteheat-fix-broken-port-configuration.patch b/queue-3.9/usb-whiteheat-fix-broken-port-configuration.patch new file mode 100644 index 00000000000..01684b18d6d --- /dev/null +++ b/queue-3.9/usb-whiteheat-fix-broken-port-configuration.patch @@ -0,0 +1,31 @@ +From 9eecf22d2b375b9064a20421c6c307b760b03d46 Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Thu, 6 Jun 2013 13:32:47 +0200 +Subject: USB: whiteheat: fix broken port configuration + +From: Johan Hovold + +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 +Signed-off-by: Greg Kroah-Hartman + +--- + 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 +@@ -649,7 +649,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) { diff --git a/queue-3.9/usb-zte_ev-fix-broken-open.patch b/queue-3.9/usb-zte_ev-fix-broken-open.patch new file mode 100644 index 00000000000..f035ac6bb03 --- /dev/null +++ b/queue-3.9/usb-zte_ev-fix-broken-open.patch @@ -0,0 +1,41 @@ +From d8a1d0d54d5fdac0347b75e9afd554b3dfaa465f Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Tue, 4 Jun 2013 18:50:28 +0200 +Subject: USB: zte_ev: fix broken open + +From: Johan Hovold + +commit d8a1d0d54d5fdac0347b75e9afd554b3dfaa465f upstream. + +Remove bogus port-number check in open and close, which prevented this +driver from being used with a minor number different from zero. + +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/zte_ev.c | 6 ------ + 1 file changed, 6 deletions(-) + +--- a/drivers/usb/serial/zte_ev.c ++++ b/drivers/usb/serial/zte_ev.c +@@ -41,9 +41,6 @@ static int zte_ev_usb_serial_open(struct + int len; + unsigned char *buf; + +- if (port->number != 0) +- return -ENODEV; +- + buf = kmalloc(MAX_SETUP_DATA_SIZE, GFP_KERNEL); + if (!buf) + return -ENOMEM; +@@ -166,9 +163,6 @@ static void zte_ev_usb_serial_close(stru + int len; + unsigned char *buf; + +- if (port->number != 0) +- return; +- + buf = kmalloc(MAX_SETUP_DATA_SIZE, GFP_KERNEL); + if (!buf) + return; diff --git a/queue-3.9/usb-zte_ev-fix-control-message-timeouts.patch b/queue-3.9/usb-zte_ev-fix-control-message-timeouts.patch new file mode 100644 index 00000000000..171e0fc909c --- /dev/null +++ b/queue-3.9/usb-zte_ev-fix-control-message-timeouts.patch @@ -0,0 +1,147 @@ +From 5cbfa3acdcbf19e1d29cf3479ad8200d2e644e44 Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Mon, 27 May 2013 14:44:44 +0200 +Subject: USB: zte_ev: fix control-message timeouts + +From: Johan Hovold + +commit 5cbfa3acdcbf19e1d29cf3479ad8200d2e644e44 upstream. + +The control-message timeout is specified in milliseconds and should not +depend on HZ. + +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/zte_ev.c | 28 ++++++++++++++-------------- + 1 file changed, 14 insertions(+), 14 deletions(-) + +--- a/drivers/usb/serial/zte_ev.c ++++ b/drivers/usb/serial/zte_ev.c +@@ -53,7 +53,7 @@ static int zte_ev_usb_serial_open(struct + result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), + 0x22, 0x21, + 0x0001, 0x0000, NULL, len, +- HZ * USB_CTRL_GET_TIMEOUT); ++ USB_CTRL_GET_TIMEOUT); + dev_dbg(dev, "result = %d\n", result); + + /* send 2st cmd and recieve data */ +@@ -65,7 +65,7 @@ static int zte_ev_usb_serial_open(struct + result = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), + 0x21, 0xa1, + 0x0000, 0x0000, buf, len, +- HZ * USB_CTRL_GET_TIMEOUT); ++ USB_CTRL_GET_TIMEOUT); + debug_data(dev, __func__, len, buf, result); + + /* send 3 cmd */ +@@ -84,7 +84,7 @@ static int zte_ev_usb_serial_open(struct + result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), + 0x20, 0x21, + 0x0000, 0x0000, buf, len, +- HZ * USB_CTRL_GET_TIMEOUT); ++ USB_CTRL_GET_TIMEOUT); + debug_data(dev, __func__, len, buf, result); + + /* send 4 cmd */ +@@ -95,7 +95,7 @@ static int zte_ev_usb_serial_open(struct + result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), + 0x22, 0x21, + 0x0003, 0x0000, NULL, len, +- HZ * USB_CTRL_GET_TIMEOUT); ++ USB_CTRL_GET_TIMEOUT); + dev_dbg(dev, "result = %d\n", result); + + /* send 5 cmd */ +@@ -107,7 +107,7 @@ static int zte_ev_usb_serial_open(struct + result = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), + 0x21, 0xa1, + 0x0000, 0x0000, buf, len, +- HZ * USB_CTRL_GET_TIMEOUT); ++ USB_CTRL_GET_TIMEOUT); + debug_data(dev, __func__, len, buf, result); + + /* send 6 cmd */ +@@ -126,7 +126,7 @@ static int zte_ev_usb_serial_open(struct + result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), + 0x20, 0x21, + 0x0000, 0x0000, buf, len, +- HZ * USB_CTRL_GET_TIMEOUT); ++ USB_CTRL_GET_TIMEOUT); + debug_data(dev, __func__, len, buf, result); + kfree(buf); + +@@ -178,7 +178,7 @@ static void zte_ev_usb_serial_close(stru + result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), + 0x22, 0x21, + 0x0002, 0x0000, NULL, len, +- HZ * USB_CTRL_GET_TIMEOUT); ++ USB_CTRL_GET_TIMEOUT); + dev_dbg(dev, "result = %d\n", result); + + /* send 2st ctl cmd(CTL 21 22 03 00 00 00 00 00 ) */ +@@ -186,7 +186,7 @@ static void zte_ev_usb_serial_close(stru + result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), + 0x22, 0x21, + 0x0003, 0x0000, NULL, len, +- HZ * USB_CTRL_GET_TIMEOUT); ++ USB_CTRL_GET_TIMEOUT); + dev_dbg(dev, "result = %d\n", result); + + /* send 3st cmd and recieve data */ +@@ -198,7 +198,7 @@ static void zte_ev_usb_serial_close(stru + result = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), + 0x21, 0xa1, + 0x0000, 0x0000, buf, len, +- HZ * USB_CTRL_GET_TIMEOUT); ++ USB_CTRL_GET_TIMEOUT); + debug_data(dev, __func__, len, buf, result); + + /* send 4 cmd */ +@@ -217,7 +217,7 @@ static void zte_ev_usb_serial_close(stru + result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), + 0x20, 0x21, + 0x0000, 0x0000, buf, len, +- HZ * USB_CTRL_GET_TIMEOUT); ++ USB_CTRL_GET_TIMEOUT); + debug_data(dev, __func__, len, buf, result); + + /* send 5 cmd */ +@@ -228,7 +228,7 @@ static void zte_ev_usb_serial_close(stru + result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), + 0x22, 0x21, + 0x0003, 0x0000, NULL, len, +- HZ * USB_CTRL_GET_TIMEOUT); ++ USB_CTRL_GET_TIMEOUT); + dev_dbg(dev, "result = %d\n", result); + + /* send 6 cmd */ +@@ -240,7 +240,7 @@ static void zte_ev_usb_serial_close(stru + result = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), + 0x21, 0xa1, + 0x0000, 0x0000, buf, len, +- HZ * USB_CTRL_GET_TIMEOUT); ++ USB_CTRL_GET_TIMEOUT); + debug_data(dev, __func__, len, buf, result); + + /* send 7 cmd */ +@@ -259,7 +259,7 @@ static void zte_ev_usb_serial_close(stru + result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), + 0x20, 0x21, + 0x0000, 0x0000, buf, len, +- HZ * USB_CTRL_GET_TIMEOUT); ++ USB_CTRL_GET_TIMEOUT); + debug_data(dev, __func__, len, buf, result); + + /* send 8 cmd */ +@@ -270,7 +270,7 @@ static void zte_ev_usb_serial_close(stru + result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), + 0x22, 0x21, + 0x0003, 0x0000, NULL, len, +- HZ * USB_CTRL_GET_TIMEOUT); ++ USB_CTRL_GET_TIMEOUT); + dev_dbg(dev, "result = %d\n", result); + + kfree(buf); diff --git a/queue-3.9/x86-platform-hp_wmi-fix-bluetooth_rfkill-misuse-in-hp_wmi_rfkill_setup.patch b/queue-3.9/x86-platform-hp_wmi-fix-bluetooth_rfkill-misuse-in-hp_wmi_rfkill_setup.patch new file mode 100644 index 00000000000..95ccf4f9cb4 --- /dev/null +++ b/queue-3.9/x86-platform-hp_wmi-fix-bluetooth_rfkill-misuse-in-hp_wmi_rfkill_setup.patch @@ -0,0 +1,60 @@ +From af1d486c18bad7820b0ca52b413458914231102c Mon Sep 17 00:00:00 2001 +From: "lan,Tianyu" +Date: Tue, 28 May 2013 02:25:33 +0000 +Subject: x86 / platform / hp_wmi: Fix bluetooth_rfkill misuse in hp_wmi_rfkill_setup() + +From: "lan,Tianyu" + +commit af1d486c18bad7820b0ca52b413458914231102c upstream. + +HP wmi platform driver fails to initialize GPS and causes poweroff +failure in HP Elitebook 6930p. + +Call Trace: + [] hp_wmi_bios_setup+0x25a/0x3a0 [hp_wmi] + [] platform_drv_probe+0x3c/0x70 + [] ? driver_sysfs_add+0x7a/0xb0 + [] driver_probe_device+0x87/0x3a0 + [] __driver_attach+0x93/0xa0 + [] ? __device_attach+0x40/0x40 + [] bus_for_each_dev+0x63/0xa0 + [] driver_attach+0x1e/0x20 + [] bus_add_driver+0x1f8/0x2b0 + [] driver_register+0x71/0x150 + [] platform_driver_register+0x46/0x50 + [] platform_driver_probe+0x1b/0xa0 + [] hp_wmi_init+0x1be/0x1fb [hp_wmi] + [] ? hp_wmi_bios_setup+0x3a0/0x3a0 [hp_wmi] + [] do_one_initcall+0x10a/0x160 + [] load_module+0x1b46/0x2640 + [] ? ddebug_proc_write+0xf0/0xf0 + [] sys_init_module+0xa2/0xf0 + [] system_call_fastpath+0x1a/0x1f +Code: 48 ff ff ff 80 7b 24 00 74 d2 41 83 e5 01 45 38 ec 74 c9 48 8d bb a0 03 00 00 e8 ed fb aa e0 5b 41 5c 41 5d 44 89 f0 41 5e 5d c3 <0f> 0b 66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 66 66 66 66 +RIP [] rfkill_set_hw_state+0x9f/0xb0 [rfkill] + RSP + +Check code and find this error is caused by misusing variable bluetooth_rfkill +where gps_rfkill should be. + +Reported-and-tested-by: Iru Cai +References: https://bugzilla.kernel.org/show_bug.cgi?id=58401 +Signed-off-by: Lan Tianyu +Signed-off-by: Rafael J. Wysocki +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/platform/x86/hp-wmi.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/platform/x86/hp-wmi.c ++++ b/drivers/platform/x86/hp-wmi.c +@@ -679,7 +679,7 @@ static int hp_wmi_rfkill_setup(struct pl + } + rfkill_init_sw_state(gps_rfkill, + hp_wmi_get_sw_state(HPWMI_GPS)); +- rfkill_set_hw_state(bluetooth_rfkill, ++ rfkill_set_hw_state(gps_rfkill, + hp_wmi_get_hw_state(HPWMI_GPS)); + err = rfkill_register(gps_rfkill); + if (err)