]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.9-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 7 Jun 2013 23:02:58 +0000 (16:02 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 7 Jun 2013 23:02:58 +0000 (16:02 -0700)
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

29 files changed:
queue-3.9/acpi-cpufreq-set-current-frequency-based-on-target-p-state.patch [new file with mode: 0644]
queue-3.9/acpi-pm-do-not-execute-_ps0-for-devices-without-_psc-during-initialization.patch [new file with mode: 0644]
queue-3.9/acpi-scan-do-not-match-drivers-against-objects-having-scan-handlers.patch [new file with mode: 0644]
queue-3.9/acpi-video-ignore-bios-initial-backlight-value-for-hp-m4.patch [new file with mode: 0644]
queue-3.9/acpi-video-ignore-bios-initial-backlight-value-for-hp-pavilion-g6.patch [new file with mode: 0644]
queue-3.9/alsa-hda-add-keep_eapd_on-flag-to-generic-parser.patch [new file with mode: 0644]
queue-3.9/alsa-hda-allow-setting-automute-automic-hooks-after-parsing.patch [new file with mode: 0644]
queue-3.9/alsa-hda-via-disable-broken-dynamic-power-control.patch [new file with mode: 0644]
queue-3.9/alsa-hda-via-fix-wrongly-cleared-pins-after-suspend-on.patch [new file with mode: 0644]
queue-3.9/alsa-usb-audio-apply-logitech-quickcam-pro-9000-quirk-only-to-audio-iface.patch [new file with mode: 0644]
queue-3.9/alsa-usb-audio-fix-invalid-volume-resolution-on-logitech-hd-webcam-c270.patch [new file with mode: 0644]
queue-3.9/alsa-usb-audio-fix-roland-cakewalk-um-3g-support.patch [new file with mode: 0644]
queue-3.9/series
queue-3.9/usb-ark3116-fix-control-message-timeout.patch [new file with mode: 0644]
queue-3.9/usb-iuu_phoenix-fix-bulk-message-timeout.patch [new file with mode: 0644]
queue-3.9/usb-keyspan-fix-bogus-array-index.patch [new file with mode: 0644]
queue-3.9/usb-mos7720-fix-dma-to-stack.patch [new file with mode: 0644]
queue-3.9/usb-mos7720-fix-hardware-flow-control.patch [new file with mode: 0644]
queue-3.9/usb-mos7720-fix-message-timeouts.patch [new file with mode: 0644]
queue-3.9/usb-mos7840-fix-dma-to-stack.patch [new file with mode: 0644]
queue-3.9/usb-musb-make-use_sg-flag-urb-specific.patch [new file with mode: 0644]
queue-3.9/usb-revert-periodic-scheduling-bugfix.patch [new file with mode: 0644]
queue-3.9/usb-serial-cypress_m8-enable-frwd-dongle-hidcom-device.patch [new file with mode: 0644]
queue-3.9/usb-serial-fix-treo-kyocera-interrrupt-in-urb-context.patch [new file with mode: 0644]
queue-3.9/usb-visor-fix-initialisation-of-treo-kyocera-devices.patch [new file with mode: 0644]
queue-3.9/usb-whiteheat-fix-broken-port-configuration.patch [new file with mode: 0644]
queue-3.9/usb-zte_ev-fix-broken-open.patch [new file with mode: 0644]
queue-3.9/usb-zte_ev-fix-control-message-timeouts.patch [new file with mode: 0644]
queue-3.9/x86-platform-hp_wmi-fix-bluetooth_rfkill-misuse-in-hp_wmi_rfkill_setup.patch [new file with mode: 0644]

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 (file)
index 0000000..4bb7f80
--- /dev/null
@@ -0,0 +1,51 @@
+From 8673b83bf2f013379453b4779047bf3c6ae387e4 Mon Sep 17 00:00:00 2001
+From: Ross Lagerwall <rosslagerwall@gmail.com>
+Date: Fri, 31 May 2013 20:45:17 +0100
+Subject: acpi-cpufreq: set current frequency based on target P-State
+
+From: Ross Lagerwall <rosslagerwall@gmail.com>
+
+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 <rosslagerwall@gmail.com>
+Reviewed-by: Len Brown <len.brown@intel.com>
+Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..d3f95fd
--- /dev/null
@@ -0,0 +1,45 @@
+From 7cd8407d53ef5fb0280fcbe34f42311472f90feb Mon Sep 17 00:00:00 2001
+From: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
+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" <rafael.j.wysocki@intel.com>
+
+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 <jerome.cantenot@gmail.com>
+Tracked-down-by: Lan Tianyu <tianyu.lan@intel.com>
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..c12d95b
--- /dev/null
@@ -0,0 +1,50 @@
+From 9f29ab11ddbfc12db54df5a66dab22b39ad94e8e Mon Sep 17 00:00:00 2001
+From: Aaron Lu <aaron.lu@intel.com>
+Date: Tue, 4 Jun 2013 23:02:58 +0200
+Subject: ACPI / scan: do not match drivers against objects having scan handlers
+
+From: Aaron Lu <aaron.lu@intel.com>
+
+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 <bluesloth600@gmail.com>
+Reported-and-bisected-by: Dmitry S. Demin <dmitryy.demin@gmail.com>
+Signed-off-by: Aaron Lu <aaron.lu@intel.com>
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..7a352c7
--- /dev/null
@@ -0,0 +1,39 @@
+From fedbe9bc6fd3e14b1ffbb3dac407777ac4a3650c Mon Sep 17 00:00:00 2001
+From: Alex Hung <alex.hung@canonical.com>
+Date: Tue, 28 May 2013 02:05:09 +0000
+Subject: ACPI / video: ignore BIOS initial backlight value for HP m4
+
+From: Alex Hung <alex.hung@canonical.com>
+
+commit fedbe9bc6fd3e14b1ffbb3dac407777ac4a3650c upstream.
+
+On HP m4 lapops, BIOS reports minimum backlight on boot and
+causes backlight to dim completely. This ignores the initial backlight
+values and set to max brightness.
+
+References: https://bugs.launchpad.net/bugs/1184501
+Signed-off-by: Alex Hung <alex.hung@canonical.com>
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/acpi/video.c |    8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/drivers/acpi/video.c
++++ b/drivers/acpi/video.c
+@@ -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 (file)
index 0000000..c30d4fb
--- /dev/null
@@ -0,0 +1,40 @@
+From 780a6ec640a3fed671fc2c40e4dd30c03eca3ac3 Mon Sep 17 00:00:00 2001
+From: Ash Willis <ashwillis.kernel@gmail.com>
+Date: Wed, 29 May 2013 01:27:59 +0000
+Subject: ACPI / video: ignore BIOS initial backlight value for HP Pavilion g6
+
+From: Ash Willis <ashwillis.kernel@gmail.com>
+
+commit 780a6ec640a3fed671fc2c40e4dd30c03eca3ac3 upstream.
+
+This patch addresses kernel bug 56661. BIOS reports an incorrect
+backlight value, causing the driver to switch off the backlight
+completely during startup. This patch ignores the incorrect value from
+BIOS.
+
+References: https://bugzilla.kernel.org/show_bug.cgi?id=56661
+Signed-off-by: Ash Willis <ashwillis@programmer.net>
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/acpi/video.c |    8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/drivers/acpi/video.c
++++ b/drivers/acpi/video.c
+@@ -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 (file)
index 0000000..5e76377
--- /dev/null
@@ -0,0 +1,55 @@
+From 05909d5c679cf7c9a8a5bc663677c066a546894f Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Fri, 31 May 2013 19:55:54 +0200
+Subject: ALSA: hda - Add keep_eapd_on flag to generic parser
+
+From: Takashi Iwai <tiwai@suse.de>
+
+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 <raa.lkml@gmail.com>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..a443118
--- /dev/null
@@ -0,0 +1,99 @@
+From 77afe0e94884ae40de29cd813a1fb7ddee583591 Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Fri, 31 May 2013 14:10:03 +0200
+Subject: ALSA: hda - Allow setting automute/automic hooks after parsing
+
+From: Takashi Iwai <tiwai@suse.de>
+
+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 <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..f52b025
--- /dev/null
@@ -0,0 +1,40 @@
+From 087c2e3b4e062573dbbc8a50b9208992e3768dcf Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Fri, 31 May 2013 13:54:10 +0200
+Subject: ALSA: hda/via - Disable broken dynamic power control
+
+From: Takashi Iwai <tiwai@suse.de>
+
+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 <raa.lkml@gmail.com>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..ff70dac
--- /dev/null
@@ -0,0 +1,41 @@
+From 5a6f294e87974e6ec68d7113553ffd975d83bf15 Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Mon, 3 Jun 2013 11:17:38 +0200
+Subject: ALSA: hda/via - Fix wrongly cleared pins after suspend on
+ VT1802
+
+From: Takashi Iwai <tiwai@suse.de>
+
+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 <raa.lkml@gmail.com>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..ff03cf2
--- /dev/null
@@ -0,0 +1,37 @@
+From 8eafc0a161123d90617c9ca2eddfe87b382b1b89 Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Tue, 4 Jun 2013 16:02:54 +0200
+Subject: ALSA: usb-audio - Apply Logitech QuickCam Pro 9000 quirk only to audio iface
+
+From: Takashi Iwai <tiwai@suse.de>
+
+commit 8eafc0a161123d90617c9ca2eddfe87b382b1b89 upstream.
+
+... instead of applying to all interfaces.
+
+Reference: http://forums.gentoo.org/viewtopic-p-6886404.html
+
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ sound/usb/quirks-table.h |    8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+--- a/sound/usb/quirks-table.h
++++ b/sound/usb/quirks-table.h
+@@ -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 (file)
index 0000000..4ef0680
--- /dev/null
@@ -0,0 +1,37 @@
+From 11e7064f35bb87da8f427d1aa4bbd8b7473a3993 Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+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 <tiwai@suse.de>
+
+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 <crrodriguez@opensuse.org>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..9c3ce8f
--- /dev/null
@@ -0,0 +1,37 @@
+From a0c6d309c6df14655f9962f666d1da96318b0b7c Mon Sep 17 00:00:00 2001
+From: Clemens Ladisch <clemens@ladisch.de>
+Date: Sun, 2 Jun 2013 19:49:07 +0200
+Subject: ALSA: usb-audio: fix Roland/Cakewalk UM-3G support
+
+From: Clemens Ladisch <clemens@ladisch.de>
+
+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 <clemens@ladisch.de>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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
++              }
+       }
+ },
+ {
index f4ef90a31652fcbb72f96e53910f546e7dd8115b..b27201ad471ccc633349aa6bfa0993bd3591c2d2 100644 (file)
@@ -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 (file)
index 0000000..bc821dc
--- /dev/null
@@ -0,0 +1,30 @@
+From 634371911730a462626071065b64cd6e1fe213e0 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <jhovold@gmail.com>
+Date: Mon, 27 May 2013 14:44:41 +0200
+Subject: USB: ark3116: fix control-message timeout
+
+From: Johan Hovold <jhovold@gmail.com>
+
+commit 634371911730a462626071065b64cd6e1fe213e0 upstream.
+
+The control-message timeout is specified in milliseconds and should not
+depend on HZ.
+
+Signed-off-by: Johan Hovold <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/ark3116.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/usb/serial/ark3116.c
++++ b/drivers/usb/serial/ark3116.c
+@@ -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 (file)
index 0000000..259f263
--- /dev/null
@@ -0,0 +1,39 @@
+From 6c13ff68a7ce01da7a51b44241a7aad8eaaedde7 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <jhovold@gmail.com>
+Date: Mon, 27 May 2013 14:44:42 +0200
+Subject: USB: iuu_phoenix: fix bulk-message timeout
+
+From: Johan Hovold <jhovold@gmail.com>
+
+commit 6c13ff68a7ce01da7a51b44241a7aad8eaaedde7 upstream.
+
+The bulk-message timeout is specified in milliseconds and should not
+depend on HZ.
+
+Signed-off-by: Johan Hovold <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/iuu_phoenix.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/usb/serial/iuu_phoenix.c
++++ b/drivers/usb/serial/iuu_phoenix.c
+@@ -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 (file)
index 0000000..1916ae9
--- /dev/null
@@ -0,0 +1,31 @@
+From a07088098a650267b2eda689538133a324b9523f Mon Sep 17 00:00:00 2001
+From: Johan Hovold <jhovold@gmail.com>
+Date: Tue, 4 Jun 2013 18:50:29 +0200
+Subject: USB: keyspan: fix bogus array index
+
+From: Johan Hovold <jhovold@gmail.com>
+
+commit a07088098a650267b2eda689538133a324b9523f upstream.
+
+The outcont_endpoints array was indexed using the port minor number
+(which can be greater than the array size) rather than the device port
+number.
+
+Signed-off-by: Johan Hovold <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/keyspan.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/usb/serial/keyspan.c
++++ b/drivers/usb/serial/keyspan.c
+@@ -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 (file)
index 0000000..5a26745
--- /dev/null
@@ -0,0 +1,47 @@
+From 72ea18a558ed7a63a50bb121ba60d73b5b38ae30 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <jhovold@gmail.com>
+Date: Mon, 27 May 2013 14:44:39 +0200
+Subject: USB: mos7720: fix DMA to stack
+
+From: Johan Hovold <jhovold@gmail.com>
+
+commit 72ea18a558ed7a63a50bb121ba60d73b5b38ae30 upstream.
+
+The read_mos_reg function is called with stack-allocated buffers, which
+must not be used for control messages.
+
+Signed-off-by: Johan Hovold <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/mos7720.c |   17 ++++++++++++++---
+ 1 file changed, 14 insertions(+), 3 deletions(-)
+
+--- a/drivers/usb/serial/mos7720.c
++++ b/drivers/usb/serial/mos7720.c
+@@ -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 (file)
index 0000000..0878079
--- /dev/null
@@ -0,0 +1,30 @@
+From a26f009a070e840fadacb91013b2391ba7ab6cc2 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <jhovold@gmail.com>
+Date: Tue, 4 Jun 2013 18:50:31 +0200
+Subject: USB: mos7720: fix hardware flow control
+
+From: Johan Hovold <jhovold@gmail.com>
+
+commit a26f009a070e840fadacb91013b2391ba7ab6cc2 upstream.
+
+The register access to enable hardware flow control depends on the
+device port number and not the port minor number.
+
+Signed-off-by: Johan Hovold <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/mos7720.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/usb/serial/mos7720.c
++++ b/drivers/usb/serial/mos7720.c
+@@ -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 (file)
index 0000000..d1e93f6
--- /dev/null
@@ -0,0 +1,48 @@
+From 849513a7809175420d353625b6f651d961e99d49 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <jhovold@gmail.com>
+Date: Mon, 27 May 2013 14:44:43 +0200
+Subject: USB: mos7720: fix message timeouts
+
+From: Johan Hovold <jhovold@gmail.com>
+
+commit 849513a7809175420d353625b6f651d961e99d49 upstream.
+
+The control and bulk-message timeouts are specified in milliseconds and
+should not depend on HZ.
+
+Signed-off-by: Johan Hovold <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/mos7720.c |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/drivers/usb/serial/mos7720.c
++++ b/drivers/usb/serial/mos7720.c
+@@ -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 (file)
index 0000000..9d17694
--- /dev/null
@@ -0,0 +1,92 @@
+From 15ee89c3347fbf58a4361011eda5ac2731e45126 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <jhovold@gmail.com>
+Date: Mon, 27 May 2013 14:44:40 +0200
+Subject: USB: mos7840: fix DMA to stack
+
+From: Johan Hovold <jhovold@gmail.com>
+
+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 <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..a8670d3
--- /dev/null
@@ -0,0 +1,108 @@
+From ed74df12dc3e07a37d99aab60211496e871488a0 Mon Sep 17 00:00:00 2001
+From: Virupax Sadashivpetimath <virupax.sadashivpetimath@stericsson.com>
+Date: Wed, 24 Apr 2013 08:38:48 +0200
+Subject: usb: musb: make use_sg flag URB specific
+
+From: Virupax Sadashivpetimath <virupax.sadashivpetimath@stericsson.com>
+
+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 <linus.walleij@linaro.org>
+Signed-off-by: Virupax Sadashivpetimath <virupax.sadashivpetimath@stericsson.com>
+Signed-off-by: Fabio Baltieri <fabio.baltieri@linaro.org>
+Signed-off-by: Felipe Balbi <balbi@ti.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..a2faca8
--- /dev/null
@@ -0,0 +1,46 @@
+From fdc03438f53a00294ed9939eb3a1f6db6f3d8963 Mon Sep 17 00:00:00 2001
+From: Alan Stern <stern@rowland.harvard.edu>
+Date: Tue, 28 May 2013 14:03:10 -0400
+Subject: USB: revert periodic scheduling bugfix
+
+From: Alan Stern <stern@rowland.harvard.edu>
+
+commit fdc03438f53a00294ed9939eb3a1f6db6f3d8963 upstream.
+
+This patch reverts commit 3e619d04159be54b3daa0b7036b0ce9e067f4b5d
+(USB: EHCI: fix bug in scheduling periodic split transfers).  The
+commit was valid -- it fixed a real bug -- but the periodic scheduler
+in ehci-hcd is in such bad shape (especially the part that handles
+split transactions) that fixing one bug is very likely to cause
+another to surface.  That's what happened in this case; the result was
+choppy and noisy playback on certain 24-bit audio devices.
+
+The only real fix will be to rewrite this entire section of code.  My
+next project...
+
+This fixes https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1136110.
+
+Thanks to Tim Richardson for extra testing and feedback, and to Joseph
+Salisbury and Tyson Tan for tracking down the original source of the
+problem.
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+CC: Joseph Salisbury <joseph.salisbury@canonical.com>
+CC: Tim Richardson <tim@tim-richardson.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/host/ehci-sched.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/usb/host/ehci-sched.c
++++ b/drivers/usb/host/ehci-sched.c
+@@ -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 (file)
index 0000000..c2a3c20
--- /dev/null
@@ -0,0 +1,92 @@
+From 6529591e3eef65f0f528a81ac169f6e294b947a7 Mon Sep 17 00:00:00 2001
+From: Robert Butora <robert.butora.fi@gmail.com>
+Date: Fri, 31 May 2013 18:09:51 +0300
+Subject: USB: Serial: cypress_M8: Enable FRWD Dongle hidcom device
+
+From: Robert Butora <robert.butora.fi@gmail.com>
+
+commit 6529591e3eef65f0f528a81ac169f6e294b947a7 upstream.
+
+The patch adds a new HIDCOM device and does not affect other devices
+driven by the cypress_M8 module. Changes are:
+- add VendorID ProductID to device tables
+- skip unstable speed check because FRWD uses 115200bps
+- skip reset at probe which is an issue workaround for this
+particular device.
+
+Signed-off-by: Robert Butora <robert.butora.fi@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/cypress_m8.c |   18 +++++++++++++++++-
+ drivers/usb/serial/cypress_m8.h |    4 ++++
+ 2 files changed, 21 insertions(+), 1 deletion(-)
+
+--- a/drivers/usb/serial/cypress_m8.c
++++ b/drivers/usb/serial/cypress_m8.c
+@@ -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 (file)
index 0000000..2f0374e
--- /dev/null
@@ -0,0 +1,29 @@
+From 5f8e2c07d75967ee49a5da1d21ddf5f50d48cda0 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <jhovold@gmail.com>
+Date: Mon, 27 May 2013 14:44:37 +0200
+Subject: USB: serial: fix Treo/Kyocera interrrupt-in urb context
+
+From: Johan Hovold <jhovold@gmail.com>
+
+commit 5f8e2c07d75967ee49a5da1d21ddf5f50d48cda0 upstream.
+
+The first and second interrupt-in urbs are swapped for some Treo/Kyocera
+devices, but the urb context was never updated with the new port.
+
+Signed-off-by: Johan Hovold <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/visor.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/usb/serial/visor.c
++++ b/drivers/usb/serial/visor.c
+@@ -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 (file)
index 0000000..127b153
--- /dev/null
@@ -0,0 +1,40 @@
+From 420021a395ce38b7ab2cceb52dee4038be7d8fa3 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <jhovold@gmail.com>
+Date: Mon, 27 May 2013 14:44:38 +0200
+Subject: USB: visor: fix initialisation of Treo/Kyocera devices
+
+From: Johan Hovold <jhovold@gmail.com>
+
+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 <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..01684b1
--- /dev/null
@@ -0,0 +1,31 @@
+From 9eecf22d2b375b9064a20421c6c307b760b03d46 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <jhovold@gmail.com>
+Date: Thu, 6 Jun 2013 13:32:47 +0200
+Subject: USB: whiteheat: fix broken port configuration
+
+From: Johan Hovold <jhovold@gmail.com>
+
+commit 9eecf22d2b375b9064a20421c6c307b760b03d46 upstream.
+
+When configuring the port (e.g. set_termios) the port minor number
+rather than the port number was used in the request (and they only
+coincide for minor number 0).
+
+Signed-off-by: Johan Hovold <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/whiteheat.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/usb/serial/whiteheat.c
++++ b/drivers/usb/serial/whiteheat.c
+@@ -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 (file)
index 0000000..f035ac6
--- /dev/null
@@ -0,0 +1,41 @@
+From d8a1d0d54d5fdac0347b75e9afd554b3dfaa465f Mon Sep 17 00:00:00 2001
+From: Johan Hovold <jhovold@gmail.com>
+Date: Tue, 4 Jun 2013 18:50:28 +0200
+Subject: USB: zte_ev: fix broken open
+
+From: Johan Hovold <jhovold@gmail.com>
+
+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 <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..171e0fc
--- /dev/null
@@ -0,0 +1,147 @@
+From 5cbfa3acdcbf19e1d29cf3479ad8200d2e644e44 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <jhovold@gmail.com>
+Date: Mon, 27 May 2013 14:44:44 +0200
+Subject: USB: zte_ev: fix control-message timeouts
+
+From: Johan Hovold <jhovold@gmail.com>
+
+commit 5cbfa3acdcbf19e1d29cf3479ad8200d2e644e44 upstream.
+
+The control-message timeout is specified in milliseconds and should not
+depend on HZ.
+
+Signed-off-by: Johan Hovold <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/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 (file)
index 0000000..95ccf4f
--- /dev/null
@@ -0,0 +1,60 @@
+From af1d486c18bad7820b0ca52b413458914231102c Mon Sep 17 00:00:00 2001
+From: "lan,Tianyu" <tianyu.lan@intel.com>
+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" <tianyu.lan@intel.com>
+
+commit af1d486c18bad7820b0ca52b413458914231102c upstream.
+
+HP wmi platform driver fails to initialize GPS and causes poweroff
+failure in HP Elitebook 6930p.
+
+Call Trace:
+ [<ffffffffa088d25a>] hp_wmi_bios_setup+0x25a/0x3a0 [hp_wmi]
+ [<ffffffff8135978c>] platform_drv_probe+0x3c/0x70
+ [<ffffffff81356d6a>] ? driver_sysfs_add+0x7a/0xb0
+ [<ffffffff81357407>] driver_probe_device+0x87/0x3a0
+ [<ffffffff813577f3>] __driver_attach+0x93/0xa0
+ [<ffffffff81357760>] ? __device_attach+0x40/0x40
+ [<ffffffff81355403>] bus_for_each_dev+0x63/0xa0
+ [<ffffffff81356e8e>] driver_attach+0x1e/0x20
+ [<ffffffff81356a28>] bus_add_driver+0x1f8/0x2b0
+ [<ffffffff81357e81>] driver_register+0x71/0x150
+ [<ffffffff813594e6>] platform_driver_register+0x46/0x50
+ [<ffffffff813595ab>] platform_driver_probe+0x1b/0xa0
+ [<ffffffffa088d55e>] hp_wmi_init+0x1be/0x1fb [hp_wmi]
+ [<ffffffffa088d3a0>] ? hp_wmi_bios_setup+0x3a0/0x3a0 [hp_wmi]
+ [<ffffffff8100210a>] do_one_initcall+0x10a/0x160
+ [<ffffffff810bdac6>] load_module+0x1b46/0x2640
+ [<ffffffff8128da20>] ? ddebug_proc_write+0xf0/0xf0
+ [<ffffffff810be662>] sys_init_module+0xa2/0xf0
+ [<ffffffff814d975d>] 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  [<ffffffffa05c57af>] rfkill_set_hw_state+0x9f/0xb0 [rfkill]
+ RSP <ffff880071523b60>
+
+Check code and find this error is caused by misusing variable bluetooth_rfkill
+where gps_rfkill should be.
+
+Reported-and-tested-by: Iru Cai <mytbk920423@gmail.com>
+References: https://bugzilla.kernel.org/show_bug.cgi?id=58401
+Signed-off-by: Lan Tianyu <tianyu.lan@intel.com>
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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)