]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
.32 patches
authorGreg Kroah-Hartman <gregkh@suse.de>
Wed, 10 Mar 2010 00:13:36 +0000 (16:13 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 10 Mar 2010 00:13:36 +0000 (16:13 -0800)
20 files changed:
queue-2.6.32/alsa-hda-add-a-position_fix-quirk-for-msi-wind-u115.patch [new file with mode: 0644]
queue-2.6.32/alsa-hda-add-position_fix-quirk-for-hp-dv3.patch [new file with mode: 0644]
queue-2.6.32/alsa-hda-intel-add-position_fix-quirk-for-asus-m2v-mx-se.patch [new file with mode: 0644]
queue-2.6.32/alsa-hda-use-3stack-quirk-for-toshiba-satellite-l40-10q.patch [new file with mode: 0644]
queue-2.6.32/alsa-hda-use-lpib-for-a-biostar-microtech-board.patch [new file with mode: 0644]
queue-2.6.32/alsa-hda-use-lpib-for-dell-latitude-131l.patch [new file with mode: 0644]
queue-2.6.32/alsa-pcm-core-fix-fifo_size-channels-interval-check.patch [new file with mode: 0644]
queue-2.6.32/alsa-usb-midi-support-for-access-music-virusti.patch [new file with mode: 0644]
queue-2.6.32/alsa-via82xx-add-quirk-for-d1289-motherboard.patch [new file with mode: 0644]
queue-2.6.32/asoc-fix-ak4104-register-array-access.patch [new file with mode: 0644]
queue-2.6.32/driver-core-devtmpfs-reset-inode-permissions-before-unlinking.patch [new file with mode: 0644]
queue-2.6.32/driver-core-fix-race-condition-in-get_device_parent.patch [new file with mode: 0644]
queue-2.6.32/p54pci-handle-dma-mapping-errors.patch [new file with mode: 0644]
queue-2.6.32/p54usb-add-the-usb-id-for-belkin-accton-fd7050e-ver-1010ec.patch [new file with mode: 0644]
queue-2.6.32/serial-imx-fix-null-dereference-oops-when-pdata-null.patch [new file with mode: 0644]
queue-2.6.32/series
queue-2.6.32/tty-fix-the-ldisc-hangup-race.patch [new file with mode: 0644]
queue-2.6.32/usb-fix-i2c-api-usage-in-ohci-pnx4008.patch [new file with mode: 0644]
queue-2.6.32/usb-serial-sierra-driver-indat_callback-fix.patch [new file with mode: 0644]
queue-2.6.32/usb-sis-usb2vga-driver-support-kairen-s-usb-vga-adaptor-usb20svga-mb-plus.patch [new file with mode: 0644]

diff --git a/queue-2.6.32/alsa-hda-add-a-position_fix-quirk-for-msi-wind-u115.patch b/queue-2.6.32/alsa-hda-add-a-position_fix-quirk-for-msi-wind-u115.patch
new file mode 100644 (file)
index 0000000..f9f58d8
--- /dev/null
@@ -0,0 +1,29 @@
+From 45d4ebf1a6255f2234a041685789cbecac3453f1 Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Mon, 30 Nov 2009 11:58:30 +0100
+Subject: ALSA: hda - Add a position_fix quirk for MSI Wind U115
+
+From: Takashi Iwai <tiwai@suse.de>
+
+commit 45d4ebf1a6255f2234a041685789cbecac3453f1 upstream.
+
+MSI Wind U115 seems to require position_fix=1 explicitly.
+Otherwise it screws up PulseAudio.
+
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/pci/hda/hda_intel.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/sound/pci/hda/hda_intel.c
++++ b/sound/pci/hda/hda_intel.c
+@@ -2226,6 +2226,7 @@ static struct snd_pci_quirk position_fix
+       SND_PCI_QUIRK(0x1028, 0x01de, "Dell Precision 390", POS_FIX_LPIB),
+       SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB),
+       SND_PCI_QUIRK(0x1028, 0x01f6, "Dell Latitude 131L", POS_FIX_LPIB),
++      SND_PCI_QUIRK(0x1462, 0x1002, "MSI Wind U115", POS_FIX_LPIB),
+       SND_PCI_QUIRK(0x1565, 0x820f, "Biostar Microtech", POS_FIX_LPIB),
+       {}
+ };
diff --git a/queue-2.6.32/alsa-hda-add-position_fix-quirk-for-hp-dv3.patch b/queue-2.6.32/alsa-hda-add-position_fix-quirk-for-hp-dv3.patch
new file mode 100644 (file)
index 0000000..b10613b
--- /dev/null
@@ -0,0 +1,31 @@
+From 2f703e7a2ea5f6d5ea14a7b2cd0d31be07839ac6 Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Tue, 1 Dec 2009 14:17:37 +0100
+Subject: ALSA: hda - Add position_fix quirk for HP dv3
+
+From: Takashi Iwai <tiwai@suse.de>
+
+commit 2f703e7a2ea5f6d5ea14a7b2cd0d31be07839ac6 upstream.
+
+HP dv3 requires position_fix=1.
+
+Reference: Novell bnc#555935
+       https://bugzilla.novell.com/show_bug.cgi?id=555935
+
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/pci/hda/hda_intel.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/sound/pci/hda/hda_intel.c
++++ b/sound/pci/hda/hda_intel.c
+@@ -2224,6 +2224,7 @@ static int azx_dev_free(struct snd_devic
+ static struct snd_pci_quirk position_fix_list[] __devinitdata = {
+       SND_PCI_QUIRK(0x1028, 0x01cc, "Dell D820", POS_FIX_LPIB),
+       SND_PCI_QUIRK(0x1028, 0x01de, "Dell Precision 390", POS_FIX_LPIB),
++      SND_PCI_QUIRK(0x103c, 0x306d, "HP dv3", POS_FIX_LPIB),
+       SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB),
+       SND_PCI_QUIRK(0x1028, 0x01f6, "Dell Latitude 131L", POS_FIX_LPIB),
+       SND_PCI_QUIRK(0x1462, 0x1002, "MSI Wind U115", POS_FIX_LPIB),
diff --git a/queue-2.6.32/alsa-hda-intel-add-position_fix-quirk-for-asus-m2v-mx-se.patch b/queue-2.6.32/alsa-hda-intel-add-position_fix-quirk-for-asus-m2v-mx-se.patch
new file mode 100644 (file)
index 0000000..5aff1e9
--- /dev/null
@@ -0,0 +1,46 @@
+From 0708cc582f0fe2578eaab722841caf2b4f8cfe37 Mon Sep 17 00:00:00 2001
+From: Paul Menzel <paulepanter@users.sourceforge.net>
+Date: Mon, 8 Feb 2010 20:42:46 +0100
+Subject: ALSA: hda-intel: Add position_fix quirk for ASUS M2V-MX SE.
+
+From: Paul Menzel <paulepanter@users.sourceforge.net>
+
+commit 0708cc582f0fe2578eaab722841caf2b4f8cfe37 upstream.
+
+With PulseAudio and an application accessing an input device like `gnome-volume-manager` both have high CPU load as reported in [1].
+
+Loading `snd-hda-intel` with `position_fix=1` fixes this issue. Therefore add a quirk for ASUS M2V-MX SE.
+
+The only downside is, when now exiting for example MPlayer when it is playing an audio file a high pitched sound is outputted by the speaker.
+
+$ lspci -vvnn | grep -A10 Audio
+20:01.0 Audio device [0403]: VIA Technologies, Inc. VT1708/A [Azalia HDAC] (VIA High Definition Audio Controller) [1106:3288] (rev 10)
+       Subsystem: ASUSTeK Computer Inc. Device [1043:8290]
+       Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
+       Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
+       Latency: 0, Cache Line Size: 64 bytes
+       Interrupt: pin A routed to IRQ 17
+       Region 0: Memory at fbffc000 (64-bit, non-prefetchable) [size=16K]
+       Capabilities: <access denied>
+       Kernel driver in use: HDA Intel
+
+[1] http://sourceforge.net/mailarchive/forum.php?thread_name=1265550675.4642.24.camel%40mattotaupa&forum_name=alsa-user
+
+Signed-off-by: Paul Menzel <paulepanter@users.sourceforge.net>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/pci/hda/hda_intel.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/sound/pci/hda/hda_intel.c
++++ b/sound/pci/hda/hda_intel.c
+@@ -2225,6 +2225,7 @@ static struct snd_pci_quirk position_fix
+       SND_PCI_QUIRK(0x1028, 0x01cc, "Dell D820", POS_FIX_LPIB),
+       SND_PCI_QUIRK(0x1028, 0x01de, "Dell Precision 390", POS_FIX_LPIB),
+       SND_PCI_QUIRK(0x103c, 0x306d, "HP dv3", POS_FIX_LPIB),
++      SND_PCI_QUIRK(0x1106, 0x3288, "ASUS M2V-MX SE", POS_FIX_LPIB),
+       SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB),
+       SND_PCI_QUIRK(0x1028, 0x01f6, "Dell Latitude 131L", POS_FIX_LPIB),
+       SND_PCI_QUIRK(0x1462, 0x1002, "MSI Wind U115", POS_FIX_LPIB),
diff --git a/queue-2.6.32/alsa-hda-use-3stack-quirk-for-toshiba-satellite-l40-10q.patch b/queue-2.6.32/alsa-hda-use-3stack-quirk-for-toshiba-satellite-l40-10q.patch
new file mode 100644 (file)
index 0000000..75042dc
--- /dev/null
@@ -0,0 +1,36 @@
+From ba579eb7b30791751f556ee01905636cda50c864 Mon Sep 17 00:00:00 2001
+From: Daniel T Chen <crimsun@ubuntu.com>
+Date: Sat, 20 Feb 2010 11:16:30 -0500
+Subject: ALSA: hda: Use 3stack quirk for Toshiba Satellite L40-10Q
+
+From: Daniel T Chen <crimsun@ubuntu.com>
+
+commit ba579eb7b30791751f556ee01905636cda50c864 upstream.
+
+BugLink: https://bugs.launchpad.net/bugs/524948
+
+The OR has verified that the existing model=laptop-eapd quirk does not
+function correctly but instead needs model=3stack.  Make this change
+so that manual corrections to module-init-tools file(s) are not
+required.
+
+Reported-by: Lasse Havelund <lasse@havelund.org>
+Signed-off-by: Daniel T Chen <crimsun@ubuntu.com>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/pci/hda/patch_analog.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/sound/pci/hda/patch_analog.c
++++ b/sound/pci/hda/patch_analog.c
+@@ -1003,7 +1003,7 @@ static struct snd_pci_quirk ad1986a_cfg_
+       SND_PCI_QUIRK(0x1043, 0x81cb, "ASUS M2N", AD1986A_3STACK),
+       SND_PCI_QUIRK(0x1043, 0x8234, "ASUS M2N", AD1986A_3STACK),
+       SND_PCI_QUIRK(0x10de, 0xcb84, "ASUS A8N-VM", AD1986A_3STACK),
+-      SND_PCI_QUIRK(0x1179, 0xff40, "Toshiba", AD1986A_LAPTOP_EAPD),
++      SND_PCI_QUIRK(0x1179, 0xff40, "Toshiba Satellite L40-10Q", AD1986A_3STACK),
+       SND_PCI_QUIRK(0x144d, 0xb03c, "Samsung R55", AD1986A_3STACK),
+       SND_PCI_QUIRK(0x144d, 0xc01e, "FSC V2060", AD1986A_LAPTOP),
+       SND_PCI_QUIRK(0x144d, 0xc024, "Samsung P50", AD1986A_SAMSUNG_P50),
diff --git a/queue-2.6.32/alsa-hda-use-lpib-for-a-biostar-microtech-board.patch b/queue-2.6.32/alsa-hda-use-lpib-for-a-biostar-microtech-board.patch
new file mode 100644 (file)
index 0000000..55c5edc
--- /dev/null
@@ -0,0 +1,33 @@
+From 0321b69569eadbc13242922925a4316754c5f744 Mon Sep 17 00:00:00 2001
+From: Daniel T Chen <crimsun@ubuntu.com>
+Date: Fri, 5 Mar 2010 09:04:49 -0500
+Subject: ALSA: hda: Use LPIB for a Biostar Microtech board
+
+From: Daniel T Chen <crimsun@ubuntu.com>
+
+commit 0321b69569eadbc13242922925a4316754c5f744 upstream.
+
+BugLink: https://launchpad.net/bugs/523953
+
+The OR has verified that position_fix=1 is necessary to work around
+errors on his machine.
+
+Reported-by: MMarking
+Signed-off-by: Daniel T Chen <crimsun@ubuntu.com>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/pci/hda/hda_intel.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/sound/pci/hda/hda_intel.c
++++ b/sound/pci/hda/hda_intel.c
+@@ -2226,6 +2226,7 @@ static struct snd_pci_quirk position_fix
+       SND_PCI_QUIRK(0x1028, 0x01de, "Dell Precision 390", POS_FIX_LPIB),
+       SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB),
+       SND_PCI_QUIRK(0x1028, 0x01f6, "Dell Latitude 131L", POS_FIX_LPIB),
++      SND_PCI_QUIRK(0x1565, 0x820f, "Biostar Microtech", POS_FIX_LPIB),
+       {}
+ };
diff --git a/queue-2.6.32/alsa-hda-use-lpib-for-dell-latitude-131l.patch b/queue-2.6.32/alsa-hda-use-lpib-for-dell-latitude-131l.patch
new file mode 100644 (file)
index 0000000..b8b6bb5
--- /dev/null
@@ -0,0 +1,33 @@
+From 9919c7619c52d01e89103bca405cc3d4a2b1ac31 Mon Sep 17 00:00:00 2001
+From: Daniel T Chen <crimsun@ubuntu.com>
+Date: Wed, 3 Mar 2010 18:24:26 -0500
+Subject: ALSA: hda: Use LPIB for Dell Latitude 131L
+
+From: Daniel T Chen <crimsun@ubuntu.com>
+
+commit 9919c7619c52d01e89103bca405cc3d4a2b1ac31 upstream.
+
+BugLink: https://launchpad.net/bugs/530346
+
+The OR has verified that position_fix=1 is necessary to work around
+errors on his machine.
+
+Reported-by: Tom Louwrier
+Signed-off-by: Daniel T Chen <crimsun@ubuntu.com>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/pci/hda/hda_intel.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/sound/pci/hda/hda_intel.c
++++ b/sound/pci/hda/hda_intel.c
+@@ -2225,6 +2225,7 @@ static struct snd_pci_quirk position_fix
+       SND_PCI_QUIRK(0x1028, 0x01cc, "Dell D820", POS_FIX_LPIB),
+       SND_PCI_QUIRK(0x1028, 0x01de, "Dell Precision 390", POS_FIX_LPIB),
+       SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB),
++      SND_PCI_QUIRK(0x1028, 0x01f6, "Dell Latitude 131L", POS_FIX_LPIB),
+       {}
+ };
diff --git a/queue-2.6.32/alsa-pcm-core-fix-fifo_size-channels-interval-check.patch b/queue-2.6.32/alsa-pcm-core-fix-fifo_size-channels-interval-check.patch
new file mode 100644 (file)
index 0000000..9aa11e0
--- /dev/null
@@ -0,0 +1,33 @@
+From 3be522a9514f58e0596db34898a514df206cadc5 Mon Sep 17 00:00:00 2001
+From: Jaroslav Kysela <perex@perex.cz>
+Date: Tue, 16 Feb 2010 11:55:43 +0100
+Subject: ALSA: pcm core - fix fifo_size channels interval check
+
+From: Jaroslav Kysela <perex@perex.cz>
+
+commit 3be522a9514f58e0596db34898a514df206cadc5 upstream.
+
+Signed-off-by: Jaroslav Kysela <perex@perex.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/core/pcm_native.c |    8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- a/sound/core/pcm_native.c
++++ b/sound/core/pcm_native.c
+@@ -314,10 +314,10 @@ int snd_pcm_hw_refine(struct snd_pcm_sub
+       if (!params->info)
+               params->info = hw->info & ~SNDRV_PCM_INFO_FIFO_IN_FRAMES;
+       if (!params->fifo_size) {
+-              if (snd_mask_min(&params->masks[SNDRV_PCM_HW_PARAM_FORMAT]) ==
+-                  snd_mask_max(&params->masks[SNDRV_PCM_HW_PARAM_FORMAT]) &&
+-                    snd_mask_min(&params->masks[SNDRV_PCM_HW_PARAM_CHANNELS]) ==
+-                    snd_mask_max(&params->masks[SNDRV_PCM_HW_PARAM_CHANNELS])) {
++              m = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
++              i = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
++              if (snd_mask_min(m) == snd_mask_max(m) &&
++                    snd_interval_min(i) == snd_interval_max(i)) {
+                       changed = substream->ops->ioctl(substream,
+                                       SNDRV_PCM_IOCTL1_FIFO_SIZE, params);
+                       if (changed < 0)
diff --git a/queue-2.6.32/alsa-usb-midi-support-for-access-music-virusti.patch b/queue-2.6.32/alsa-usb-midi-support-for-access-music-virusti.patch
new file mode 100644 (file)
index 0000000..4fa0f9c
--- /dev/null
@@ -0,0 +1,133 @@
+From d39e82db73eb876c60d00f00219d767b3be30307 Mon Sep 17 00:00:00 2001
+From: Sebastien Alaiwan <sebastien.alaiwan@gmail.com>
+Date: Tue, 16 Feb 2010 08:55:08 +0100
+Subject: ALSA: USB MIDI support for Access Music VirusTI
+
+From: Sebastien Alaiwan <sebastien.alaiwan@gmail.com>
+
+commit d39e82db73eb876c60d00f00219d767b3be30307 upstream.
+
+Here's a patch that adds MIDI support through USB for one of the Access
+Music synths, the VirusTI.
+
+The synth uses standard USBMIDI protocol on its USB interface 3, although
+it does signal "vendor specific" class. A magic string has to be sent on
+interface 3 to enable the sending of MIDI from the synth (this string was
+found by sniffing usb communication of the Windows driver). This is all
+my patch does, and it works on my computer.
+
+Please note that the synth can also do standard usb audio I/O on its
+interfaces 2&3, which already works with the current snd-usb-audio driver,
+except for the audio input from the synth. I'm going to work on it when I
+have some time.
+
+Signed-off-by: Sebastien Alaiwan <sebastien.alaiwan@gmail.com>
+Signed-off-by: Clemens Ladisch <clemens@ladisch.de> (cosmetics, list terminator)
+Signed-off-by: Jaroslav Kysela <perex@perex.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/usb/usbaudio.c  |   32 ++++++++++++++++++++++++++++++++
+ sound/usb/usbmidi.c   |    6 ++++++
+ sound/usb/usbquirks.h |   27 +++++++++++++++++++++++++++
+ 3 files changed, 65 insertions(+)
+
+--- a/sound/usb/usbaudio.c
++++ b/sound/usb/usbaudio.c
+@@ -3326,6 +3326,32 @@ static int snd_usb_cm6206_boot_quirk(str
+ }
+ /*
++ * This call will put the synth in "USB send" mode, i.e it will send MIDI
++ * messages through USB (this is disabled at startup). The synth will
++ * acknowledge by sending a sysex on endpoint 0x85 and by displaying a USB
++ * sign on its LCD. Values here are chosen based on sniffing USB traffic
++ * under Windows.
++ */
++static int snd_usb_accessmusic_boot_quirk(struct usb_device *dev)
++{
++      int err, actual_length;
++
++      /* "midi send" enable */
++      static const u8 seq[] = { 0x4e, 0x73, 0x52, 0x01 };
++
++      void *buf = kmemdup(seq, ARRAY_SIZE(seq), GFP_KERNEL);
++      if (!buf)
++              return -ENOMEM;
++      err = usb_interrupt_msg(dev, usb_sndintpipe(dev, 0x05), buf,
++                      ARRAY_SIZE(seq), &actual_length, 1000);
++      kfree(buf);
++      if (err < 0)
++              return err;
++
++      return 0;
++}
++
++/*
+  * Setup quirks
+  */
+ #define AUDIOPHILE_SET                        0x01 /* if set, parse device_setup */
+@@ -3616,6 +3642,12 @@ static void *snd_usb_audio_probe(struct
+                       goto __err_val;
+       }
++      /* Access Music VirusTI Desktop */
++      if (id == USB_ID(0x133e, 0x0815)) {
++              if (snd_usb_accessmusic_boot_quirk(dev) < 0)
++                      goto __err_val;
++      }
++
+       /*
+        * found a config.  now register to ALSA
+        */
+--- a/sound/usb/usbmidi.c
++++ b/sound/usb/usbmidi.c
+@@ -1360,6 +1360,12 @@ static struct port_info {
+       EXTERNAL_PORT(0x086a, 0x0001, 8, "%s Broadcast"),
+       EXTERNAL_PORT(0x086a, 0x0002, 8, "%s Broadcast"),
+       EXTERNAL_PORT(0x086a, 0x0003, 4, "%s Broadcast"),
++      /* Access Music Virus TI */
++      EXTERNAL_PORT(0x133e, 0x0815, 0, "%s MIDI"),
++      PORT_INFO(0x133e, 0x0815, 1, "%s Synth", 0,
++              SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC |
++              SNDRV_SEQ_PORT_TYPE_HARDWARE |
++              SNDRV_SEQ_PORT_TYPE_SYNTHESIZER),
+ };
+ static struct port_info *find_port_info(struct snd_usb_midi* umidi, int number)
+--- a/sound/usb/usbquirks.h
++++ b/sound/usb/usbquirks.h
+@@ -2050,6 +2050,33 @@ YAMAHA_DEVICE(0x7010, "UB99"),
+       }
+ },
++/* Access Music devices */
++{
++      /* VirusTI Desktop */
++      USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815),
++      .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
++              .ifnum = QUIRK_ANY_INTERFACE,
++              .type = QUIRK_COMPOSITE,
++              .data = &(const struct snd_usb_audio_quirk[]) {
++                      {
++                              .ifnum = 3,
++                              .type = QUIRK_MIDI_FIXED_ENDPOINT,
++                              .data = &(const struct snd_usb_midi_endpoint_info) {
++                                      .out_cables = 0x0003,
++                                      .in_cables  = 0x0003
++                              }
++                      },
++                      {
++                              .ifnum = 4,
++                              .type = QUIRK_IGNORE_INTERFACE
++                      },
++                      {
++                              .ifnum = -1
++                      }
++              }
++      }
++},
++
+ /* */
+ {
+       /* aka. Serato Scratch Live DJ Box */
diff --git a/queue-2.6.32/alsa-via82xx-add-quirk-for-d1289-motherboard.patch b/queue-2.6.32/alsa-via82xx-add-quirk-for-d1289-motherboard.patch
new file mode 100644 (file)
index 0000000..270e8a7
--- /dev/null
@@ -0,0 +1,35 @@
+From bf30a4309d4294d3eca248ea8a20c1c3570f5e74 Mon Sep 17 00:00:00 2001
+From: Clemens Ladisch <clemens@ladisch.de>
+Date: Mon, 22 Feb 2010 10:33:13 +0100
+Subject: ALSA: via82xx: add quirk for D1289 motherboard
+
+From: Clemens Ladisch <clemens@ladisch.de>
+
+commit bf30a4309d4294d3eca248ea8a20c1c3570f5e74 upstream.
+
+Add a headphones-only quirk for the Fujitsu Siemens D1289.
+
+Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
+Reported-and-tested-by: Marc Haber <mh+alsa201002@zugschlus.de>
+Signed-off-by: Jaroslav Kysela <perex@perex.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/pci/via82xx.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- a/sound/pci/via82xx.c
++++ b/sound/pci/via82xx.c
+@@ -1791,6 +1791,12 @@ static struct ac97_quirk ac97_quirks[] =
+               .type = AC97_TUNE_HP_ONLY
+       },
+       {
++              .subvendor = 0x110a,
++              .subdevice = 0x0079,
++              .name = "Fujitsu Siemens D1289",
++              .type = AC97_TUNE_HP_ONLY
++      },
++      {
+               .subvendor = 0x1019,
+               .subdevice = 0x0a81,
+               .name = "ECS K7VTA3",
diff --git a/queue-2.6.32/asoc-fix-ak4104-register-array-access.patch b/queue-2.6.32/asoc-fix-ak4104-register-array-access.patch
new file mode 100644 (file)
index 0000000..6e9dbd2
--- /dev/null
@@ -0,0 +1,40 @@
+From e555317c083fda01f516d2153589e82514e20e70 Mon Sep 17 00:00:00 2001
+From: Daniel Mack <daniel@caiaq.de>
+Date: Fri, 26 Feb 2010 14:36:54 +0800
+Subject: ASoC: fix ak4104 register array access
+
+From: Daniel Mack <daniel@caiaq.de>
+
+commit e555317c083fda01f516d2153589e82514e20e70 upstream.
+
+Don't touch the variable 'reg' to construct the value for the actual SPI
+transport. This variable is again used to access the driver's register
+cache, and so random memory is overwritten.
+Compute the value in-place instead.
+
+Signed-off-by: Daniel Mack <daniel@caiaq.de>
+Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
+Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/soc/codecs/ak4104.c |    6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+--- a/sound/soc/codecs/ak4104.c
++++ b/sound/soc/codecs/ak4104.c
+@@ -90,12 +90,10 @@ static int ak4104_spi_write(struct snd_s
+       if (reg >= codec->reg_cache_size)
+               return -EINVAL;
+-      reg &= AK4104_REG_MASK;
+-      reg |= AK4104_WRITE;
+-
+       /* only write to the hardware if value has changed */
+       if (cache[reg] != value) {
+-              u8 tmp[2] = { reg, value };
++              u8 tmp[2] = { (reg & AK4104_REG_MASK) | AK4104_WRITE, value };
++
+               if (spi_write(spi, tmp, sizeof(tmp))) {
+                       dev_err(&spi->dev, "SPI write failed\n");
+                       return -EIO;
diff --git a/queue-2.6.32/driver-core-devtmpfs-reset-inode-permissions-before-unlinking.patch b/queue-2.6.32/driver-core-devtmpfs-reset-inode-permissions-before-unlinking.patch
new file mode 100644 (file)
index 0000000..19d30ef
--- /dev/null
@@ -0,0 +1,43 @@
+From 5e31d76f2817bd50258a092a7c5b15b3006fd61c Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay.sievers@vrfy.org>
+Date: Wed, 13 Jan 2010 14:16:36 +0100
+Subject: Driver-Core: devtmpfs - reset inode permissions before unlinking
+
+From: Kay Sievers <kay.sievers@vrfy.org>
+
+commit 5e31d76f2817bd50258a092a7c5b15b3006fd61c upstream.
+
+Before unlinking the inode, reset the current permissions of possible
+references like hardlinks, so granted permissions can not be retained
+across the device lifetime by creating hardlinks, in the unusual case
+that there is a user-writable directory on the same filesystem.
+
+Signed-off-by: Kay Sievers <kay.sievers@vrfy.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/base/devtmpfs.c |   13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+--- a/drivers/base/devtmpfs.c
++++ b/drivers/base/devtmpfs.c
+@@ -295,6 +295,19 @@ int devtmpfs_delete_node(struct device *
+               if (dentry->d_inode) {
+                       err = vfs_getattr(nd.path.mnt, dentry, &stat);
+                       if (!err && dev_mynode(dev, dentry->d_inode, &stat)) {
++                              struct iattr newattrs;
++                              /*
++                               * before unlinking this node, reset permissions
++                               * of possible references like hardlinks
++                               */
++                              newattrs.ia_uid = 0;
++                              newattrs.ia_gid = 0;
++                              newattrs.ia_mode = stat.mode & ~0777;
++                              newattrs.ia_valid =
++                                      ATTR_UID|ATTR_GID|ATTR_MODE;
++                              mutex_lock(&dentry->d_inode->i_mutex);
++                              notify_change(dentry, &newattrs);
++                              mutex_unlock(&dentry->d_inode->i_mutex);
+                               err = vfs_unlink(nd.path.dentry->d_inode,
+                                                dentry);
+                               if (!err || err == -ENOENT)
diff --git a/queue-2.6.32/driver-core-fix-race-condition-in-get_device_parent.patch b/queue-2.6.32/driver-core-fix-race-condition-in-get_device_parent.patch
new file mode 100644 (file)
index 0000000..19ce5a0
--- /dev/null
@@ -0,0 +1,117 @@
+From 77d3d7c1d561f49f755d7390f0764dff90765974 Mon Sep 17 00:00:00 2001
+From: Tejun Heo <tj@kernel.org>
+Date: Fri, 5 Feb 2010 17:57:02 +0900
+Subject: driver-core: fix race condition in get_device_parent()
+
+From: Tejun Heo <tj@kernel.org>
+
+commit 77d3d7c1d561f49f755d7390f0764dff90765974 upstream.
+
+sysfs is creating several devices in cuse class concurrently and with
+CONFIG_SYSFS_DEPRECATED turned off, it triggers the following oops.
+
+ BUG: unable to handle kernel NULL pointer dereference at 0000000000000038
+ IP: [<ffffffff81158b0a>] sysfs_addrm_start+0x4a/0xf0
+ PGD 75bb067 PUD 75be067 PMD 0
+ Oops: 0000 [#1] PREEMPT SMP
+ last sysfs file: /sys/devices/system/cpu/cpu7/topology/core_siblings
+ CPU 1
+ Modules linked in: cuse fuse
+ Pid: 4737, comm: osspd Not tainted 2.6.31-work #77
+ RIP: 0010:[<ffffffff81158b0a>]  [<ffffffff81158b0a>] sysfs_addrm_start+0x4a/0xf0
+ RSP: 0018:ffff88000042f8f8  EFLAGS: 00010296
+ RAX: ffff88000042ffd8 RBX: 0000000000000000 RCX: 0000000000000000
+ RDX: 0000000000000000 RSI: ffff880007eef660 RDI: 0000000000000001
+ RBP: ffff88000042f918 R08: 0000000000000000 R09: 0000000000000000
+ R10: 0000000000000001 R11: ffffffff81158b0a R12: ffff88000042f928
+ R13: 00000000fffffff4 R14: 0000000000000000 R15: ffff88000042f9a0
+ FS:  00007fe93905a950(0000) GS:ffff880008600000(0000) knlGS:0000000000000000
+ CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
+ CR2: 0000000000000038 CR3: 00000000077c9000 CR4: 00000000000006e0
+ DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
+ DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
+ Process osspd (pid: 4737, threadinfo ffff88000042e000, task ffff880007eef040)
+ Stack:
+  ffff880005da10e8 0000000011cc8d6e ffff88000042f928 ffff880003d28a28
+ <0> ffff88000042f988 ffffffff811592d7 0000000000000000 0000000000000000
+ <0> 0000000000000000 0000000000000000 ffff88000042f958 0000000011cc8d6e
+ Call Trace:
+  [<ffffffff811592d7>] create_dir+0x67/0xe0
+  [<ffffffff811593a8>] sysfs_create_dir+0x58/0xb0
+  [<ffffffff8128ca7c>] ? kobject_add_internal+0xcc/0x220
+  [<ffffffff812942e1>] ? vsnprintf+0x3c1/0xb90
+  [<ffffffff8128cab7>] kobject_add_internal+0x107/0x220
+  [<ffffffff8128cd37>] kobject_add_varg+0x47/0x80
+  [<ffffffff8128ce53>] kobject_add+0x53/0x90
+  [<ffffffff81357d84>] device_add+0xd4/0x690
+  [<ffffffff81356c2b>] ? dev_set_name+0x4b/0x70
+  [<ffffffffa001a884>] cuse_process_init_reply+0x2b4/0x420 [cuse]
+  ...
+
+The problem is that kobject_add_internal() first adds a kobject to the
+kset and then try to create sysfs directory for it.  If the creation
+fails, it remove the kobject from the kset.  get_device_parent()
+accesses class_dirs kset while only holding class_dirs.list_lock to
+see whether the cuse class dir exists.  But when it exists, it may not
+have finished initialization yet or may fail and get removed soon.  In
+the above case, the former happened so the second one ends up trying
+to create subdirectory under NULL sysfs_dirent.
+
+Fix it by grabbing a mutex in get_device_parent().
+
+Signed-off-by: Tejun Heo <tj@kernel.org>
+Reported-by: Colin Guthrie <cguthrie@mandriva.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/base/core.c |   13 +++++++++++--
+ 1 file changed, 11 insertions(+), 2 deletions(-)
+
+--- a/drivers/base/core.c
++++ b/drivers/base/core.c
+@@ -603,6 +603,7 @@ static struct kobject *get_device_parent
+       int retval;
+       if (dev->class) {
++              static DEFINE_MUTEX(gdp_mutex);
+               struct kobject *kobj = NULL;
+               struct kobject *parent_kobj;
+               struct kobject *k;
+@@ -619,6 +620,8 @@ static struct kobject *get_device_parent
+               else
+                       parent_kobj = &parent->kobj;
++              mutex_lock(&gdp_mutex);
++
+               /* find our class-directory at the parent and reference it */
+               spin_lock(&dev->class->p->class_dirs.list_lock);
+               list_for_each_entry(k, &dev->class->p->class_dirs.list, entry)
+@@ -627,20 +630,26 @@ static struct kobject *get_device_parent
+                               break;
+                       }
+               spin_unlock(&dev->class->p->class_dirs.list_lock);
+-              if (kobj)
++              if (kobj) {
++                      mutex_unlock(&gdp_mutex);
+                       return kobj;
++              }
+               /* or create a new class-directory at the parent device */
+               k = kobject_create();
+-              if (!k)
++              if (!k) {
++                      mutex_unlock(&gdp_mutex);
+                       return NULL;
++              }
+               k->kset = &dev->class->p->class_dirs;
+               retval = kobject_add(k, parent_kobj, "%s", dev->class->name);
+               if (retval < 0) {
++                      mutex_unlock(&gdp_mutex);
+                       kobject_put(k);
+                       return NULL;
+               }
+               /* do not emit an uevent for this simple "glue" directory */
++              mutex_unlock(&gdp_mutex);
+               return k;
+       }
diff --git a/queue-2.6.32/p54pci-handle-dma-mapping-errors.patch b/queue-2.6.32/p54pci-handle-dma-mapping-errors.patch
new file mode 100644 (file)
index 0000000..b100252
--- /dev/null
@@ -0,0 +1,59 @@
+From 288c8ce8047695fd8872dd5db3ef21a9679c402f Mon Sep 17 00:00:00 2001
+From: Christian Lamparter <chunkeey@googlemail.com>
+Date: Sun, 17 Jan 2010 23:17:29 +0100
+Subject: p54pci: handle dma mapping errors
+
+From: Christian Lamparter <chunkeey@googlemail.com>
+
+commit 288c8ce8047695fd8872dd5db3ef21a9679c402f upstream.
+
+This patch adds error-paths to handle pci_dma_mapping errors.
+
+Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/p54/p54pci.c |   18 ++++++++++++++++--
+ 1 file changed, 16 insertions(+), 2 deletions(-)
+
+--- a/drivers/net/wireless/p54/p54pci.c
++++ b/drivers/net/wireless/p54/p54pci.c
+@@ -157,6 +157,14 @@ static void p54p_refill_rx_ring(struct i
+                                                skb_tail_pointer(skb),
+                                                priv->common.rx_mtu + 32,
+                                                PCI_DMA_FROMDEVICE);
++
++                      if (pci_dma_mapping_error(priv->pdev, mapping)) {
++                              dev_kfree_skb_any(skb);
++                              dev_err(&priv->pdev->dev,
++                                      "RX DMA Mapping error\n");
++                              break;
++                      }
++
+                       desc->host_addr = cpu_to_le32(mapping);
+                       desc->device_addr = 0;  // FIXME: necessary?
+                       desc->len = cpu_to_le16(priv->common.rx_mtu + 32);
+@@ -317,14 +325,20 @@ static void p54p_tx(struct ieee80211_hw
+       u32 device_idx, idx, i;
+       spin_lock_irqsave(&priv->lock, flags);
+-
+       device_idx = le32_to_cpu(ring_control->device_idx[1]);
+       idx = le32_to_cpu(ring_control->host_idx[1]);
+       i = idx % ARRAY_SIZE(ring_control->tx_data);
+-      priv->tx_buf_data[i] = skb;
+       mapping = pci_map_single(priv->pdev, skb->data, skb->len,
+                                PCI_DMA_TODEVICE);
++      if (pci_dma_mapping_error(priv->pdev, mapping)) {
++              spin_unlock_irqrestore(&priv->lock, flags);
++              p54_free_skb(dev, skb);
++              dev_err(&priv->pdev->dev, "TX DMA mapping error\n");
++              return ;
++      }
++      priv->tx_buf_data[i] = skb;
++
+       desc = &ring_control->tx_data[i];
+       desc->host_addr = cpu_to_le32(mapping);
+       desc->device_addr = ((struct p54_hdr *)skb->data)->req_id;
diff --git a/queue-2.6.32/p54usb-add-the-usb-id-for-belkin-accton-fd7050e-ver-1010ec.patch b/queue-2.6.32/p54usb-add-the-usb-id-for-belkin-accton-fd7050e-ver-1010ec.patch
new file mode 100644 (file)
index 0000000..5020150
--- /dev/null
@@ -0,0 +1,33 @@
+From 5b9a919a97ac8bdda8020c9b366491b5b91b196e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Moine?= <moinejf@free.fr>
+Date: Wed, 17 Feb 2010 10:59:31 -0600
+Subject: p54usb: Add the USB ID for Belkin (Accton) FD7050E ver 1010ec
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Moine?= <moinejf@free.fr>
+
+commit 5b9a919a97ac8bdda8020c9b366491b5b91b196e upstream.
+
+Yet another USB ID.
+
+Signed-off-by: Jean-François Moine <moinejf@free.fr>
+Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/p54/p54usb.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/net/wireless/p54/p54usb.c
++++ b/drivers/net/wireless/p54/p54usb.c
+@@ -60,6 +60,7 @@ static struct usb_device_id p54u_table[]
+       {USB_DEVICE(0x06b9, 0x0121)},   /* Thomson SpeedTouch 121g */
+       {USB_DEVICE(0x0707, 0xee13)},   /* SMC 2862W-G version 2 */
+       {USB_DEVICE(0x083a, 0x4521)},   /* Siemens Gigaset USB Adapter 54 version 2 */
++      {USB_DEVICE(0x083a, 0xf503)},   /* Accton FD7050E ver 1010ec  */
+       {USB_DEVICE(0x0846, 0x4240)},   /* Netgear WG111 (v2) */
+       {USB_DEVICE(0x0915, 0x2000)},   /* Cohiba Proto board */
+       {USB_DEVICE(0x0915, 0x2002)},   /* Cohiba Proto board */
diff --git a/queue-2.6.32/serial-imx-fix-null-dereference-oops-when-pdata-null.patch b/queue-2.6.32/serial-imx-fix-null-dereference-oops-when-pdata-null.patch
new file mode 100644 (file)
index 0000000..4f74e62
--- /dev/null
@@ -0,0 +1,63 @@
+From bbcd18d1b37413d25eaf4580682b1b8e4a09ff5e Mon Sep 17 00:00:00 2001
+From: Baruch Siach <baruch@tkos.co.il>
+Date: Mon, 21 Dec 2009 16:26:46 -0800
+Subject: serial: imx: fix NULL dereference Oops when pdata == NULL
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Baruch Siach <baruch@tkos.co.il>
+
+commit bbcd18d1b37413d25eaf4580682b1b8e4a09ff5e upstream.
+
+The platform code doesn't have to provide platform data to get sensible
+default behaviour from the imx serial driver.
+
+This patch does not handle NULL dereference in the IrDA case, which still
+requires a valid platform data pointer (in imx_startup()/imx_shutdown()),
+since I don't know whether there is a sensible default behaviour, or
+should the operation just fail cleanly.
+
+Signed-off-by: Baruch Siach <baruch@tkos.co.il>
+Cc: Baruch Siach <baruch@tkos.co.il>
+Cc: Alan Cox <alan@linux.intel.com>
+Cc: Sascha Hauer <s.hauer@pengutronix.de>
+Cc: Oskar Schirmer <os@emlix.com>
+Cc: Fabian Godehardt <fg@emlix.com>
+Cc: Daniel Glöckner <dg@emlix.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/serial/imx.c |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/drivers/serial/imx.c
++++ b/drivers/serial/imx.c
+@@ -1279,7 +1279,7 @@ static int serial_imx_probe(struct platf
+               sport->use_irda = 1;
+ #endif
+-      if (pdata->init) {
++      if (pdata && pdata->init) {
+               ret = pdata->init(pdev);
+               if (ret)
+                       goto clkput;
+@@ -1292,7 +1292,7 @@ static int serial_imx_probe(struct platf
+       return 0;
+ deinit:
+-      if (pdata->exit)
++      if (pdata && pdata->exit)
+               pdata->exit(pdev);
+ clkput:
+       clk_put(sport->clk);
+@@ -1321,7 +1321,7 @@ static int serial_imx_remove(struct plat
+       clk_disable(sport->clk);
+-      if (pdata->exit)
++      if (pdata && pdata->exit)
+               pdata->exit(pdev);
+       iounmap(sport->port.membase);
index 118f7f3637d45709064db7594263ddedfc5029af..9b23d2412ae8f8fb51bbe59bf29a7fc9eb1641d7 100644 (file)
@@ -71,3 +71,22 @@ oprofile-remove-tracing-build-dependency.patch
 oprofile-x86-remove-node-check-in-amd-ibs-initialization.patch
 oprofile-x86-use-kzalloc-instead-of-kmalloc.patch
 oprofile-x86-fix-msr-access-to-reserved-counters.patch
+alsa-hda-use-3stack-quirk-for-toshiba-satellite-l40-10q.patch
+alsa-via82xx-add-quirk-for-d1289-motherboard.patch
+alsa-pcm-core-fix-fifo_size-channels-interval-check.patch
+alsa-usb-midi-support-for-access-music-virusti.patch
+alsa-hda-use-lpib-for-dell-latitude-131l.patch
+alsa-hda-use-lpib-for-a-biostar-microtech-board.patch
+alsa-hda-add-a-position_fix-quirk-for-msi-wind-u115.patch
+alsa-hda-add-position_fix-quirk-for-hp-dv3.patch
+alsa-hda-intel-add-position_fix-quirk-for-asus-m2v-mx-se.patch
+asoc-fix-ak4104-register-array-access.patch
+driver-core-fix-race-condition-in-get_device_parent.patch
+driver-core-devtmpfs-reset-inode-permissions-before-unlinking.patch
+tty-fix-the-ldisc-hangup-race.patch
+serial-imx-fix-null-dereference-oops-when-pdata-null.patch
+usb-serial-sierra-driver-indat_callback-fix.patch
+usb-sis-usb2vga-driver-support-kairen-s-usb-vga-adaptor-usb20svga-mb-plus.patch
+usb-fix-i2c-api-usage-in-ohci-pnx4008.patch
+p54usb-add-the-usb-id-for-belkin-accton-fd7050e-ver-1010ec.patch
+p54pci-handle-dma-mapping-errors.patch
diff --git a/queue-2.6.32/tty-fix-the-ldisc-hangup-race.patch b/queue-2.6.32/tty-fix-the-ldisc-hangup-race.patch
new file mode 100644 (file)
index 0000000..e6aad21
--- /dev/null
@@ -0,0 +1,121 @@
+From 638b9648ab51c9c549ff5735d3de519ef6199df3 Mon Sep 17 00:00:00 2001
+From: Alan Cox <alan@linux.intel.com>
+Date: Mon, 8 Feb 2010 10:09:26 +0000
+Subject: tty: Fix the ldisc hangup race
+
+From: Alan Cox <alan@linux.intel.com>
+
+commit 638b9648ab51c9c549ff5735d3de519ef6199df3 upstream.
+
+This was noticed by Matthias Urlichs and he proposed a fix. This patch
+does the fixing a different way to avoid introducing several new race
+conditions into the code.
+
+The problem case is TTY_DRIVER_RESET_TERMIOS = 0. In that case while we
+abort the ldisc change, the hangup processing has not cleaned up and restarted
+the ldisc either.
+
+We can't restart the ldisc stuff in the set_ldisc as we don't know what
+the hangup did and may touch stuff we shouldn't as we are no longer
+supposed to influence the tty at that point in case it has been re-opened
+before we get rescheduled.
+
+Instead do it the simple way. Always re-init the ldisc on the hangup, but
+use TTY_DRIVER_RESET_TERMIOS to indicate that we should force N_TTY.
+
+Signed-off-by: Alan Cox <alan@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/char/tty_ldisc.c |   50 ++++++++++++++++++++++++++++-------------------
+ 1 file changed, 30 insertions(+), 20 deletions(-)
+
+--- a/drivers/char/tty_ldisc.c
++++ b/drivers/char/tty_ldisc.c
+@@ -687,12 +687,13 @@ static void tty_reset_termios(struct tty
+ /**
+  *    tty_ldisc_reinit        -       reinitialise the tty ldisc
+  *    @tty: tty to reinit
++ *    @ldisc: line discipline to reinitialize
+  *
+- *    Switch the tty back to N_TTY line discipline and leave the
+- *    ldisc state closed
++ *    Switch the tty to a line discipline and leave the ldisc
++ *    state closed
+  */
+-static void tty_ldisc_reinit(struct tty_struct *tty)
++static void tty_ldisc_reinit(struct tty_struct *tty, int ldisc)
+ {
+       struct tty_ldisc *ld;
+@@ -702,10 +703,10 @@ static void tty_ldisc_reinit(struct tty_
+       /*
+        *      Switch the line discipline back
+        */
+-      ld = tty_ldisc_get(N_TTY);
++      ld = tty_ldisc_get(ldisc);
+       BUG_ON(IS_ERR(ld));
+       tty_ldisc_assign(tty, ld);
+-      tty_set_termios_ldisc(tty, N_TTY);
++      tty_set_termios_ldisc(tty, ldisc);
+ }
+ /**
+@@ -726,6 +727,8 @@ static void tty_ldisc_reinit(struct tty_
+ void tty_ldisc_hangup(struct tty_struct *tty)
+ {
+       struct tty_ldisc *ld;
++      int reset = tty->driver->flags & TTY_DRIVER_RESET_TERMIOS;
++      int err = 0;
+       /*
+        * FIXME! What are the locking issues here? This may me overdoing
+@@ -753,25 +756,32 @@ void tty_ldisc_hangup(struct tty_struct
+       wake_up_interruptible_poll(&tty->read_wait, POLLIN);
+       /*
+        * Shutdown the current line discipline, and reset it to
+-       * N_TTY.
++       * N_TTY if need be.
++       *
++       * Avoid racing set_ldisc or tty_ldisc_release
+        */
+-      if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS) {
+-              /* Avoid racing set_ldisc or tty_ldisc_release */
+-              mutex_lock(&tty->ldisc_mutex);
+-              tty_ldisc_halt(tty);
+-              if (tty->ldisc) {       /* Not yet closed */
+-                      /* Switch back to N_TTY */
+-                      tty_ldisc_reinit(tty);
+-                      /* At this point we have a closed ldisc and we want to
+-                         reopen it. We could defer this to the next open but
+-                         it means auditing a lot of other paths so this is
+-                         a FIXME */
++      mutex_lock(&tty->ldisc_mutex);
++      tty_ldisc_halt(tty);
++      /* At this point we have a closed ldisc and we want to
++         reopen it. We could defer this to the next open but
++         it means auditing a lot of other paths so this is
++         a FIXME */
++      if (tty->ldisc) {       /* Not yet closed */
++              if (reset == 0) {
++                      tty_ldisc_reinit(tty, tty->termios->c_line);
++                      err = tty_ldisc_open(tty, tty->ldisc);
++              }
++              /* If the re-open fails or we reset then go to N_TTY. The
++                 N_TTY open cannot fail */
++              if (reset || err) {
++                      tty_ldisc_reinit(tty, N_TTY);
+                       WARN_ON(tty_ldisc_open(tty, tty->ldisc));
+-                      tty_ldisc_enable(tty);
+               }
+-              mutex_unlock(&tty->ldisc_mutex);
+-              tty_reset_termios(tty);
++              tty_ldisc_enable(tty);
+       }
++      mutex_unlock(&tty->ldisc_mutex);
++      if (reset)
++              tty_reset_termios(tty);
+ }
+ /**
diff --git a/queue-2.6.32/usb-fix-i2c-api-usage-in-ohci-pnx4008.patch b/queue-2.6.32/usb-fix-i2c-api-usage-in-ohci-pnx4008.patch
new file mode 100644 (file)
index 0000000..e1ea33a
--- /dev/null
@@ -0,0 +1,49 @@
+From 8740cc7d0c532e098cc428251c08befd14f087d8 Mon Sep 17 00:00:00 2001
+From: Luotao Fu <l.fu@pengutronix.de>
+Date: Fri, 19 Feb 2010 15:42:00 +0100
+Subject: USB: fix I2C API usage in ohci-pnx4008.
+
+From: Luotao Fu <l.fu@pengutronix.de>
+
+commit 8740cc7d0c532e098cc428251c08befd14f087d8 upstream.
+
+i2c_board_info doesn't contain a member called name. i2c_register_client
+call does not exist.
+
+Signed-off-by: Luotao Fu <l.fu@pengutronix.de>
+Acked-by: Jean Delvare <khali@linux-fr.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/host/ohci-pnx4008.c |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/drivers/usb/host/ohci-pnx4008.c
++++ b/drivers/usb/host/ohci-pnx4008.c
+@@ -327,7 +327,7 @@ static int __devinit usb_hcd_pnx4008_pro
+       }
+       i2c_adap = i2c_get_adapter(2);
+       memset(&i2c_info, 0, sizeof(struct i2c_board_info));
+-      strlcpy(i2c_info.name, "isp1301_pnx", I2C_NAME_SIZE);
++      strlcpy(i2c_info.type, "isp1301_pnx", I2C_NAME_SIZE);
+       isp1301_i2c_client = i2c_new_probed_device(i2c_adap, &i2c_info,
+                                                  normal_i2c);
+       i2c_put_adapter(i2c_adap);
+@@ -411,7 +411,7 @@ out3:
+ out2:
+       clk_put(usb_clk);
+ out1:
+-      i2c_unregister_client(isp1301_i2c_client);
++      i2c_unregister_device(isp1301_i2c_client);
+       isp1301_i2c_client = NULL;
+ out_i2c_driver:
+       i2c_del_driver(&isp1301_driver);
+@@ -430,7 +430,7 @@ static int usb_hcd_pnx4008_remove(struct
+       pnx4008_unset_usb_bits();
+       clk_disable(usb_clk);
+       clk_put(usb_clk);
+-      i2c_unregister_client(isp1301_i2c_client);
++      i2c_unregister_device(isp1301_i2c_client);
+       isp1301_i2c_client = NULL;
+       i2c_del_driver(&isp1301_driver);
diff --git a/queue-2.6.32/usb-serial-sierra-driver-indat_callback-fix.patch b/queue-2.6.32/usb-serial-sierra-driver-indat_callback-fix.patch
new file mode 100644 (file)
index 0000000..669a149
--- /dev/null
@@ -0,0 +1,55 @@
+From b87c6e86dac1bb5222279cc8ff7e09529e1c4ed9 Mon Sep 17 00:00:00 2001
+From: Elina Pasheva <epasheva@sierrawireless.com>
+Date: Mon, 15 Feb 2010 14:50:14 -0800
+Subject: USB: serial: sierra driver indat_callback fix
+
+From: Elina Pasheva <epasheva@sierrawireless.com>
+
+commit b87c6e86dac1bb5222279cc8ff7e09529e1c4ed9 upstream.
+
+A crash has been reported with sierra driver on disconnect with
+Ubuntu/Lucid distribution based on kernel-2.6.32.
+The cause of the crash was determined as "NULL tty pointer was being
+referenced" and the NULL pointer was passed by sierra_indat_callback().
+
+This patch modifies sierra_indat_callback() function to check for NULL
+tty structure pointer. This modification prevents a crash from happening
+when the device is disconnected.
+
+This patch fixes the bug reported in Launchpad:
+  https://bugs.launchpad.net/ubuntu/+source/linux/+bug/511157
+
+Signed-off-by: Elina Pasheva <epasheva@sierrawireless.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/sierra.c |   17 ++++++++++-------
+ 1 file changed, 10 insertions(+), 7 deletions(-)
+
+--- a/drivers/usb/serial/sierra.c
++++ b/drivers/usb/serial/sierra.c
+@@ -567,14 +567,17 @@ static void sierra_indat_callback(struct
+       } else {
+               if (urb->actual_length) {
+                       tty = tty_port_tty_get(&port->port);
++                      if (tty) {
++                              tty_buffer_request_room(tty,
++                                      urb->actual_length);
++                              tty_insert_flip_string(tty, data,
++                                      urb->actual_length);
++                              tty_flip_buffer_push(tty);
+-                      tty_buffer_request_room(tty, urb->actual_length);
+-                      tty_insert_flip_string(tty, data, urb->actual_length);
+-                      tty_flip_buffer_push(tty);
+-
+-                      tty_kref_put(tty);
+-                      usb_serial_debug_data(debug, &port->dev, __func__,
+-                              urb->actual_length, data);
++                              tty_kref_put(tty);
++                              usb_serial_debug_data(debug, &port->dev,
++                                      __func__, urb->actual_length, data);
++                      }
+               } else {
+                       dev_dbg(&port->dev, "%s: empty read urb"
+                               " received\n", __func__);
diff --git a/queue-2.6.32/usb-sis-usb2vga-driver-support-kairen-s-usb-vga-adaptor-usb20svga-mb-plus.patch b/queue-2.6.32/usb-sis-usb2vga-driver-support-kairen-s-usb-vga-adaptor-usb20svga-mb-plus.patch
new file mode 100644 (file)
index 0000000..64302f3
--- /dev/null
@@ -0,0 +1,29 @@
+From bbcb8bbad52b8795912e8f02c2b319092b96078e Mon Sep 17 00:00:00 2001
+From: Tanaka Akira <akr@fsij.org>
+Date: Thu, 21 Jan 2010 02:31:09 +0900
+Subject: USB: SIS USB2VGA DRIVER: support KAIREN's USB VGA adaptor USB20SVGA-MB-PLUS
+
+From: Tanaka Akira <akr@fsij.org>
+
+commit bbcb8bbad52b8795912e8f02c2b319092b96078e upstream.
+
+This patch adds the USB product ID of KAIREN's USB VGA Adaptor,
+USB20SVGA-MB-PLUS, to sisusbvga work with it.
+
+Signed-off-by: Tanaka Akira <akr@fsij.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/misc/sisusbvga/sisusb.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/usb/misc/sisusbvga/sisusb.c
++++ b/drivers/usb/misc/sisusbvga/sisusb.c
+@@ -3245,6 +3245,7 @@ static struct usb_device_id sisusb_table
+       { USB_DEVICE(0x0711, 0x0902) },
+       { USB_DEVICE(0x0711, 0x0903) },
+       { USB_DEVICE(0x0711, 0x0918) },
++      { USB_DEVICE(0x0711, 0x0920) },
+       { USB_DEVICE(0x182d, 0x021c) },
+       { USB_DEVICE(0x182d, 0x0269) },
+       { }