summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@suse.de>2011-11-02 12:04:23 -0700
committerGreg Kroah-Hartman <gregkh@suse.de>2011-11-02 12:04:23 -0700
commitf63c580d89ac6d9801c1e05a0b476c945566c3f7 (patch)
tree899d5371b1503589b803bb4b67c004ab28ecf951
parent3bbb6f7996cefe358965b7f22b3ea2c0a4c17cb8 (diff)
downloadlongterm-queue-2.6.32-f63c580d89ac6d9801c1e05a0b476c945566c3f7.tar.gz
.32 patches
-rw-r--r--queue-2.6.32/asoc-ak4535-fixup-cache-register-table.patch38
-rw-r--r--queue-2.6.32/asoc-ak4642-fixup-cache-register-table.patch51
-rw-r--r--queue-2.6.32/asoc-wm8940-properly-set-codec-dapm.bias_level.patch29
-rw-r--r--queue-2.6.32/carminefb-fix-module-parameters-permissions.patch61
-rw-r--r--queue-2.6.32/ccwgroup-move-attributes-to-attribute-group.patch125
-rw-r--r--queue-2.6.32/iommu-amd-fix-wrong-shift-direction.patch30
-rw-r--r--queue-2.6.32/kmod-prevent-kmod_loop_msg-overflow-in-__request_module.patch40
-rw-r--r--queue-2.6.32/kobj_uevent-ignore-if-some-listeners-cannot-handle-message.patch37
-rw-r--r--queue-2.6.32/kvm-s390-check-cpu_id-prior-to-using-it.patch53
-rw-r--r--queue-2.6.32/nfsd4-ignore-want-bits-in-open-downgrade.patch30
-rw-r--r--queue-2.6.32/nfsd4-remove-check-for-a-32-bit-cookie-in-nfsd4_readdir.patch34
-rw-r--r--queue-2.6.32/plat-mxc-iomux-v3.h-implicitly-enable-pull-up-down-when-that-s-desired.patch52
-rw-r--r--queue-2.6.32/qe-fhci-fixed-the-control-bug.patch64
-rw-r--r--queue-2.6.32/series17
-rw-r--r--queue-2.6.32/time-change-jiffies_to_clock_t-argument-type-to-unsigned-long.patch50
-rw-r--r--queue-2.6.32/tuner_xc2028-allow-selection-of-the-frequency-adjustment-code-for-xc3028.patch32
-rw-r--r--queue-2.6.32/update-email-address-for-stable-patch-submission.patch38
-rw-r--r--queue-2.6.32/uvcvideo-set-alternate-setting-0-on-resume-if-the-bus-has-been-reset.patch74
18 files changed, 855 insertions, 0 deletions
diff --git a/queue-2.6.32/asoc-ak4535-fixup-cache-register-table.patch b/queue-2.6.32/asoc-ak4535-fixup-cache-register-table.patch
new file mode 100644
index 0000000..e6e71c2
--- /dev/null
+++ b/queue-2.6.32/asoc-ak4535-fixup-cache-register-table.patch
@@ -0,0 +1,38 @@
+From 7c04241acbdaf97f1448dcccd27ea0fcd1a57684 Mon Sep 17 00:00:00 2001
+From: Axel Lin <axel.lin@gmail.com>
+Date: Thu, 13 Oct 2011 17:17:06 +0800
+Subject: ASoC: ak4535: fixup cache register table
+
+From: Axel Lin <axel.lin@gmail.com>
+
+commit 7c04241acbdaf97f1448dcccd27ea0fcd1a57684 upstream.
+
+ak4535_reg should be 8bit, but cache table is defined as 16bit.
+
+Signed-off-by: Axel Lin <axel.lin@gmail.com>
+Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/soc/codecs/ak4535.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+--- a/sound/soc/codecs/ak4535.c
++++ b/sound/soc/codecs/ak4535.c
+@@ -40,11 +40,11 @@ struct ak4535_priv {
+ /*
+ * ak4535 register cache
+ */
+-static const u16 ak4535_reg[AK4535_CACHEREGNUM] = {
+- 0x0000, 0x0080, 0x0000, 0x0003,
+- 0x0002, 0x0000, 0x0011, 0x0001,
+- 0x0000, 0x0040, 0x0036, 0x0010,
+- 0x0000, 0x0000, 0x0057, 0x0000,
++static const u8 ak4535_reg[AK4535_CACHEREGNUM] = {
++ 0x00, 0x80, 0x00, 0x03,
++ 0x02, 0x00, 0x11, 0x01,
++ 0x00, 0x40, 0x36, 0x10,
++ 0x00, 0x00, 0x57, 0x00,
+ };
+
+ /*
diff --git a/queue-2.6.32/asoc-ak4642-fixup-cache-register-table.patch b/queue-2.6.32/asoc-ak4642-fixup-cache-register-table.patch
new file mode 100644
index 0000000..a0037da
--- /dev/null
+++ b/queue-2.6.32/asoc-ak4642-fixup-cache-register-table.patch
@@ -0,0 +1,51 @@
+From 19b115e523208a926813751aac8934cf3fc6085e Mon Sep 17 00:00:00 2001
+From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
+Date: Thu, 13 Oct 2011 02:03:54 -0700
+Subject: ASoC: ak4642: fixup cache register table
+
+From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
+
+commit 19b115e523208a926813751aac8934cf3fc6085e upstream.
+
+ak4642 register was 8bit, but cache table was defined as 16bit.
+ak4642 doesn't work correctry without this patch.
+
+Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
+Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/soc/codecs/ak4642.c | 22 +++++++++++-----------
+ 1 file changed, 11 insertions(+), 11 deletions(-)
+
+--- a/sound/soc/codecs/ak4642.c
++++ b/sound/soc/codecs/ak4642.c
+@@ -93,17 +93,17 @@ static struct snd_soc_codec *ak4642_code
+ /*
+ * ak4642 register cache
+ */
+-static const u16 ak4642_reg[AK4642_CACHEREGNUM] = {
+- 0x0000, 0x0000, 0x0001, 0x0000,
+- 0x0002, 0x0000, 0x0000, 0x0000,
+- 0x00e1, 0x00e1, 0x0018, 0x0000,
+- 0x00e1, 0x0018, 0x0011, 0x0008,
+- 0x0000, 0x0000, 0x0000, 0x0000,
+- 0x0000, 0x0000, 0x0000, 0x0000,
+- 0x0000, 0x0000, 0x0000, 0x0000,
+- 0x0000, 0x0000, 0x0000, 0x0000,
+- 0x0000, 0x0000, 0x0000, 0x0000,
+- 0x0000,
++static const u8 ak4642_reg[AK4642_CACHEREGNUM] = {
++ 0x00, 0x00, 0x01, 0x00,
++ 0x02, 0x00, 0x00, 0x00,
++ 0xe1, 0xe1, 0x18, 0x00,
++ 0xe1, 0x18, 0x11, 0x08,
++ 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00,
++ 0x00,
+ };
+
+ /*
diff --git a/queue-2.6.32/asoc-wm8940-properly-set-codec-dapm.bias_level.patch b/queue-2.6.32/asoc-wm8940-properly-set-codec-dapm.bias_level.patch
new file mode 100644
index 0000000..a81ebb1
--- /dev/null
+++ b/queue-2.6.32/asoc-wm8940-properly-set-codec-dapm.bias_level.patch
@@ -0,0 +1,29 @@
+From 5927f94700e860ae27ff24e7f3bc9e4f7b9922eb Mon Sep 17 00:00:00 2001
+From: Axel Lin <axel.lin@gmail.com>
+Date: Wed, 26 Oct 2011 09:53:41 +0800
+Subject: ASoC: wm8940: Properly set codec->dapm.bias_level
+
+From: Axel Lin <axel.lin@gmail.com>
+
+commit 5927f94700e860ae27ff24e7f3bc9e4f7b9922eb upstream.
+
+Reported-by: Chris Paulson-Ellis <chris@edesix.com>
+Signed-off-by: Axel Lin <axel.lin@gmail.com>
+Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/soc/codecs/wm8940.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/sound/soc/codecs/wm8940.c
++++ b/sound/soc/codecs/wm8940.c
+@@ -473,6 +473,8 @@ static int wm8940_set_bias_level(struct
+ break;
+ }
+
++ codec->dapm.bias_level = level;
++
+ return ret;
+ }
+
diff --git a/queue-2.6.32/carminefb-fix-module-parameters-permissions.patch b/queue-2.6.32/carminefb-fix-module-parameters-permissions.patch
new file mode 100644
index 0000000..eddc20e
--- /dev/null
+++ b/queue-2.6.32/carminefb-fix-module-parameters-permissions.patch
@@ -0,0 +1,61 @@
+From c84c14224bbca6ec60d5851fcc87be0e34df2f44 Mon Sep 17 00:00:00 2001
+From: Jean Delvare <jdelvare@suse.de>
+Date: Fri, 8 Jul 2011 11:04:38 +0200
+Subject: carminefb: Fix module parameters permissions
+
+From: Jean Delvare <jdelvare@suse.de>
+
+commit c84c14224bbca6ec60d5851fcc87be0e34df2f44 upstream.
+
+The third parameter of module_param is supposed to be an octal value.
+The missing leading "0" causes the following:
+
+$ ls -l /sys/module/carminefb/parameters/
+total 0
+-rw-rwxr-- 1 root root 4096 Jul 8 08:55 fb_displays
+-rw-rwxr-- 1 root root 4096 Jul 8 08:55 fb_mode
+-rw-rwxr-- 1 root root 4096 Jul 8 08:55 fb_mode_str
+
+After fixing the perm parameter, we get the expected:
+
+$ ls -l /sys/module/carminefb/parameters/
+total 0
+-r--r--r-- 1 root root 4096 Jul 8 08:56 fb_displays
+-r--r--r-- 1 root root 4096 Jul 8 08:56 fb_mode
+-r--r--r-- 1 root root 4096 Jul 8 08:56 fb_mode_str
+
+Signed-off-by: Jean Delvare <jdelvare@suse.de>
+Cc: Paul Mundt <lethal@linux-sh.org>
+Cc: Sebastian Siewior <bigeasy@linutronix.de>
+Signed-off-by: Paul Mundt <lethal@linux-sh.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/video/carminefb.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/drivers/video/carminefb.c
++++ b/drivers/video/carminefb.c
+@@ -31,11 +31,11 @@
+ #define CARMINEFB_DEFAULT_VIDEO_MODE 1
+
+ static unsigned int fb_mode = CARMINEFB_DEFAULT_VIDEO_MODE;
+-module_param(fb_mode, uint, 444);
++module_param(fb_mode, uint, 0444);
+ MODULE_PARM_DESC(fb_mode, "Initial video mode as integer.");
+
+ static char *fb_mode_str;
+-module_param(fb_mode_str, charp, 444);
++module_param(fb_mode_str, charp, 0444);
+ MODULE_PARM_DESC(fb_mode_str, "Initial video mode in characters.");
+
+ /*
+@@ -45,7 +45,7 @@ MODULE_PARM_DESC(fb_mode_str, "Initial v
+ * 0b010 Display 1
+ */
+ static int fb_displays = CARMINE_USE_DISPLAY0 | CARMINE_USE_DISPLAY1;
+-module_param(fb_displays, int, 444);
++module_param(fb_displays, int, 0444);
+ MODULE_PARM_DESC(fb_displays, "Bit mode, which displays are used");
+
+ struct carmine_hw {
diff --git a/queue-2.6.32/ccwgroup-move-attributes-to-attribute-group.patch b/queue-2.6.32/ccwgroup-move-attributes-to-attribute-group.patch
new file mode 100644
index 0000000..7bbfbfb
--- /dev/null
+++ b/queue-2.6.32/ccwgroup-move-attributes-to-attribute-group.patch
@@ -0,0 +1,125 @@
+From dbdf1afcaaabe83dea15a3cb9b9013e73ae3b1ad Mon Sep 17 00:00:00 2001
+From: Sebastian Ott <sebott@linux.vnet.ibm.com>
+Date: Sun, 30 Oct 2011 15:16:52 +0100
+Subject: [S390] ccwgroup: move attributes to attribute group
+
+From: Sebastian Ott <sebott@linux.vnet.ibm.com>
+
+commit dbdf1afcaaabe83dea15a3cb9b9013e73ae3b1ad upstream.
+
+Put sysfs attributes of ccwgroup devices in an attribute group to
+ensure that these attributes are actually present when userspace
+is notified via uevents.
+
+Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
+Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/s390/cio/ccwgroup.c | 42 ++++++++++++++++++++++--------------------
+ 1 file changed, 22 insertions(+), 20 deletions(-)
+
+--- a/drivers/s390/cio/ccwgroup.c
++++ b/drivers/s390/cio/ccwgroup.c
+@@ -66,6 +66,12 @@ __ccwgroup_remove_symlinks(struct ccwgro
+
+ }
+
++static ssize_t ccwgroup_online_store(struct device *dev,
++ struct device_attribute *attr,
++ const char *buf, size_t count);
++static ssize_t ccwgroup_online_show(struct device *dev,
++ struct device_attribute *attr,
++ char *buf);
+ /*
+ * Provide an 'ungroup' attribute so the user can remove group devices no
+ * longer needed or accidentially created. Saves memory :)
+@@ -112,6 +118,20 @@ out:
+ }
+
+ static DEVICE_ATTR(ungroup, 0200, NULL, ccwgroup_ungroup_store);
++static DEVICE_ATTR(online, 0644, ccwgroup_online_show, ccwgroup_online_store);
++
++static struct attribute *ccwgroup_attrs[] = {
++ &dev_attr_online.attr,
++ &dev_attr_ungroup.attr,
++ NULL,
++};
++static struct attribute_group ccwgroup_attr_group = {
++ .attrs = ccwgroup_attrs,
++};
++static const struct attribute_group *ccwgroup_attr_groups[] = {
++ &ccwgroup_attr_group,
++ NULL,
++};
+
+ static void
+ ccwgroup_release (struct device *dev)
+@@ -280,25 +300,17 @@ int ccwgroup_create_from_string(struct d
+ }
+
+ dev_set_name(&gdev->dev, "%s", dev_name(&gdev->cdev[0]->dev));
+-
++ gdev->dev.groups = ccwgroup_attr_groups;
+ rc = device_add(&gdev->dev);
+ if (rc)
+ goto error;
+ get_device(&gdev->dev);
+- rc = device_create_file(&gdev->dev, &dev_attr_ungroup);
+-
+- if (rc) {
+- device_unregister(&gdev->dev);
+- goto error;
+- }
+-
+ rc = __ccwgroup_create_symlinks(gdev);
+ if (!rc) {
+ mutex_unlock(&gdev->reg_mutex);
+ put_device(&gdev->dev);
+ return 0;
+ }
+- device_remove_file(&gdev->dev, &dev_attr_ungroup);
+ device_unregister(&gdev->dev);
+ error:
+ for (i = 0; i < num_devices; i++)
+@@ -408,7 +420,7 @@ ccwgroup_online_store (struct device *de
+ int ret;
+
+ if (!dev->driver)
+- return -ENODEV;
++ return -EINVAL;
+
+ gdev = to_ccwgroupdev(dev);
+ gdrv = to_ccwgroupdrv(dev->driver);
+@@ -441,8 +453,6 @@ ccwgroup_online_show (struct device *dev
+ return sprintf(buf, online ? "1\n" : "0\n");
+ }
+
+-static DEVICE_ATTR(online, 0644, ccwgroup_online_show, ccwgroup_online_store);
+-
+ static int
+ ccwgroup_probe (struct device *dev)
+ {
+@@ -454,12 +464,7 @@ ccwgroup_probe (struct device *dev)
+ gdev = to_ccwgroupdev(dev);
+ gdrv = to_ccwgroupdrv(dev->driver);
+
+- if ((ret = device_create_file(dev, &dev_attr_online)))
+- return ret;
+-
+ ret = gdrv->probe ? gdrv->probe(gdev) : -ENODEV;
+- if (ret)
+- device_remove_file(dev, &dev_attr_online);
+
+ return ret;
+ }
+@@ -470,9 +475,6 @@ ccwgroup_remove (struct device *dev)
+ struct ccwgroup_device *gdev;
+ struct ccwgroup_driver *gdrv;
+
+- device_remove_file(dev, &dev_attr_online);
+- device_remove_file(dev, &dev_attr_ungroup);
+-
+ if (!dev->driver)
+ return 0;
+
diff --git a/queue-2.6.32/iommu-amd-fix-wrong-shift-direction.patch b/queue-2.6.32/iommu-amd-fix-wrong-shift-direction.patch
new file mode 100644
index 0000000..05435ec
--- /dev/null
+++ b/queue-2.6.32/iommu-amd-fix-wrong-shift-direction.patch
@@ -0,0 +1,30 @@
+From fcd0861db1cf4e6ed99f60a815b7b72c2ed36ea4 Mon Sep 17 00:00:00 2001
+From: Joerg Roedel <joerg.roedel@amd.com>
+Date: Tue, 11 Oct 2011 17:41:32 +0200
+Subject: iommu/amd: Fix wrong shift direction
+
+From: Joerg Roedel <joerg.roedel@amd.com>
+
+commit fcd0861db1cf4e6ed99f60a815b7b72c2ed36ea4 upstream.
+
+The shift direction was wrong because the function takes a
+page number and i is the address is the loop.
+
+Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kernel/amd_iommu.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/x86/kernel/amd_iommu.c
++++ b/arch/x86/kernel/amd_iommu.c
+@@ -842,7 +842,7 @@ static int alloc_new_range(struct amd_io
+ if (!pte || !IOMMU_PTE_PRESENT(*pte))
+ continue;
+
+- dma_ops_reserve_addresses(dma_dom, i << PAGE_SHIFT, 1);
++ dma_ops_reserve_addresses(dma_dom, i >> PAGE_SHIFT, 1);
+ }
+
+ update_domain(&dma_dom->domain);
diff --git a/queue-2.6.32/kmod-prevent-kmod_loop_msg-overflow-in-__request_module.patch b/queue-2.6.32/kmod-prevent-kmod_loop_msg-overflow-in-__request_module.patch
new file mode 100644
index 0000000..6019d89
--- /dev/null
+++ b/queue-2.6.32/kmod-prevent-kmod_loop_msg-overflow-in-__request_module.patch
@@ -0,0 +1,40 @@
+From 37252db6aa576c34fd794a5a54fb32d7a8b3a07a Mon Sep 17 00:00:00 2001
+From: Jiri Kosina <jkosina@suse.cz>
+Date: Wed, 26 Oct 2011 13:10:39 +1030
+Subject: kmod: prevent kmod_loop_msg overflow in __request_module()
+
+From: Jiri Kosina <jkosina@suse.cz>
+
+commit 37252db6aa576c34fd794a5a54fb32d7a8b3a07a upstream.
+
+Due to post-increment in condition of kmod_loop_msg in __request_module(),
+the system log can be spammed by much more than 5 instances of the 'runaway
+loop' message if the number of events triggering it makes the kmod_loop_msg
+to overflow.
+
+Fix that by making sure we never increment it past the threshold.
+
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ kernel/kmod.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+--- a/kernel/kmod.c
++++ b/kernel/kmod.c
+@@ -106,10 +106,12 @@ int __request_module(bool wait, const ch
+ atomic_inc(&kmod_concurrent);
+ if (atomic_read(&kmod_concurrent) > max_modprobes) {
+ /* We may be blaming an innocent here, but unlikely */
+- if (kmod_loop_msg++ < 5)
++ if (kmod_loop_msg < 5) {
+ printk(KERN_ERR
+ "request_module: runaway loop modprobe %s\n",
+ module_name);
++ kmod_loop_msg++;
++ }
+ atomic_dec(&kmod_concurrent);
+ return -ENOMEM;
+ }
diff --git a/queue-2.6.32/kobj_uevent-ignore-if-some-listeners-cannot-handle-message.patch b/queue-2.6.32/kobj_uevent-ignore-if-some-listeners-cannot-handle-message.patch
new file mode 100644
index 0000000..584f252
--- /dev/null
+++ b/queue-2.6.32/kobj_uevent-ignore-if-some-listeners-cannot-handle-message.patch
@@ -0,0 +1,37 @@
+From ebf4127cd677e9781b450e44dfaaa1cc595efcaa Mon Sep 17 00:00:00 2001
+From: Milan Broz <mbroz@redhat.com>
+Date: Mon, 22 Aug 2011 15:51:34 +0200
+Subject: kobj_uevent: Ignore if some listeners cannot handle message
+
+From: Milan Broz <mbroz@redhat.com>
+
+commit ebf4127cd677e9781b450e44dfaaa1cc595efcaa upstream.
+
+kobject_uevent() uses a multicast socket and should ignore
+if one of listeners cannot handle messages or nobody is
+listening at all.
+
+Easily reproducible when a process in system is cloned
+with CLONE_NEWNET flag.
+
+(See also http://article.gmane.org/gmane.linux.kernel.device-mapper.dm-crypt/5256)
+
+Signed-off-by: Milan Broz <mbroz@redhat.com>
+Acked-by: Kay Sievers <kay.sievers@vrfy.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ lib/kobject_uevent.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/lib/kobject_uevent.c
++++ b/lib/kobject_uevent.c
+@@ -235,7 +235,7 @@ int kobject_uevent_env(struct kobject *k
+ retval = netlink_broadcast(uevent_sock, skb, 0, 1,
+ GFP_KERNEL);
+ /* ENOBUFS should be handled in userspace */
+- if (retval == -ENOBUFS)
++ if (retval == -ENOBUFS || retval == -ESRCH)
+ retval = 0;
+ } else
+ retval = -ENOMEM;
diff --git a/queue-2.6.32/kvm-s390-check-cpu_id-prior-to-using-it.patch b/queue-2.6.32/kvm-s390-check-cpu_id-prior-to-using-it.patch
new file mode 100644
index 0000000..c941a7a
--- /dev/null
+++ b/queue-2.6.32/kvm-s390-check-cpu_id-prior-to-using-it.patch
@@ -0,0 +1,53 @@
+From 4d47555a80495657161a7e71ec3014ff2021e450 Mon Sep 17 00:00:00 2001
+From: Carsten Otte <cotte@de.ibm.com>
+Date: Tue, 18 Oct 2011 12:27:12 +0200
+Subject: KVM: s390: check cpu_id prior to using it
+
+From: Carsten Otte <cotte@de.ibm.com>
+
+commit 4d47555a80495657161a7e71ec3014ff2021e450 upstream.
+
+We use the cpu id provided by userspace as array index here. Thus we
+clearly need to check it first. Ooops.
+
+Signed-off-by: Carsten Otte <cotte@de.ibm.com>
+Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
+Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/s390/kvm/kvm-s390.c | 14 ++++++++++----
+ 1 file changed, 10 insertions(+), 4 deletions(-)
+
+--- a/arch/s390/kvm/kvm-s390.c
++++ b/arch/s390/kvm/kvm-s390.c
+@@ -308,11 +308,17 @@ int kvm_arch_vcpu_setup(struct kvm_vcpu
+ struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm,
+ unsigned int id)
+ {
+- struct kvm_vcpu *vcpu = kzalloc(sizeof(struct kvm_vcpu), GFP_KERNEL);
+- int rc = -ENOMEM;
++ struct kvm_vcpu *vcpu;
++ int rc = -EINVAL;
+
++ if (id >= KVM_MAX_VCPUS)
++ goto out;
++
++ rc = -ENOMEM;
++
++ vcpu = kzalloc(sizeof(struct kvm_vcpu), GFP_KERNEL);
+ if (!vcpu)
+- goto out_nomem;
++ goto out;
+
+ vcpu->arch.sie_block = (struct kvm_s390_sie_block *)
+ get_zeroed_page(GFP_KERNEL);
+@@ -347,7 +353,7 @@ out_free_sie_block:
+ free_page((unsigned long)(vcpu->arch.sie_block));
+ out_free_cpu:
+ kfree(vcpu);
+-out_nomem:
++out:
+ return ERR_PTR(rc);
+ }
+
diff --git a/queue-2.6.32/nfsd4-ignore-want-bits-in-open-downgrade.patch b/queue-2.6.32/nfsd4-ignore-want-bits-in-open-downgrade.patch
new file mode 100644
index 0000000..8fbad21
--- /dev/null
+++ b/queue-2.6.32/nfsd4-ignore-want-bits-in-open-downgrade.patch
@@ -0,0 +1,30 @@
+From c30e92df30d7d5fe65262fbce5d1b7de675fe34e Mon Sep 17 00:00:00 2001
+From: "J. Bruce Fields" <bfields@redhat.com>
+Date: Mon, 10 Oct 2011 17:34:31 -0400
+Subject: nfsd4: ignore WANT bits in open downgrade
+
+From: "J. Bruce Fields" <bfields@redhat.com>
+
+commit c30e92df30d7d5fe65262fbce5d1b7de675fe34e upstream.
+
+We don't use WANT bits yet--and sending them can probably trigger a
+BUG() further down.
+
+Signed-off-by: J. Bruce Fields <bfields@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/nfsd/nfs4state.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/fs/nfsd/nfs4state.c
++++ b/fs/nfsd/nfs4state.c
+@@ -3079,6 +3079,8 @@ nfsd4_open_downgrade(struct svc_rqst *rq
+ if (!access_valid(od->od_share_access, cstate->minorversion)
+ || !deny_valid(od->od_share_deny))
+ return nfserr_inval;
++ /* We don't yet support WANT bits: */
++ od->od_share_access &= NFS4_SHARE_ACCESS_MASK;
+
+ nfs4_lock_state();
+ if ((status = nfs4_preprocess_seqid_op(cstate,
diff --git a/queue-2.6.32/nfsd4-remove-check-for-a-32-bit-cookie-in-nfsd4_readdir.patch b/queue-2.6.32/nfsd4-remove-check-for-a-32-bit-cookie-in-nfsd4_readdir.patch
new file mode 100644
index 0000000..314c08f
--- /dev/null
+++ b/queue-2.6.32/nfsd4-remove-check-for-a-32-bit-cookie-in-nfsd4_readdir.patch
@@ -0,0 +1,34 @@
+From 832023bffb4b493f230be901f681020caf3ed1f8 Mon Sep 17 00:00:00 2001
+From: Bernd Schubert <bernd.schubert@itwm.fraunhofer.de>
+Date: Mon, 8 Aug 2011 17:38:08 +0200
+Subject: nfsd4: Remove check for a 32-bit cookie in nfsd4_readdir()
+
+From: Bernd Schubert <bernd.schubert@itwm.fraunhofer.de>
+
+commit 832023bffb4b493f230be901f681020caf3ed1f8 upstream.
+
+Fan Yong <yong.fan@whamcloud.com> noticed setting
+FMODE_32bithash wouldn't work with nfsd v4, as
+nfsd4_readdir() checks for 32 bit cookies. However, according to RFC 3530
+cookies have a 64 bit type and cookies are also defined as u64 in
+'struct nfsd4_readdir'. So remove the test for >32-bit values.
+
+Signed-off-by: Bernd Schubert <bernd.schubert@itwm.fraunhofer.de>
+Signed-off-by: J. Bruce Fields <bfields@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/nfsd/nfs4proc.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/fs/nfsd/nfs4proc.c
++++ b/fs/nfsd/nfs4proc.c
+@@ -688,7 +688,7 @@ nfsd4_readdir(struct svc_rqst *rqstp, st
+ readdir->rd_bmval[1] &= nfsd_suppattrs1(cstate->minorversion);
+ readdir->rd_bmval[2] &= nfsd_suppattrs2(cstate->minorversion);
+
+- if ((cookie > ~(u32)0) || (cookie == 1) || (cookie == 2) ||
++ if ((cookie == 1) || (cookie == 2) ||
+ (cookie == 0 && memcmp(readdir->rd_verf.data, zeroverf.data, NFS4_VERIFIER_SIZE)))
+ return nfserr_bad_cookie;
+
diff --git a/queue-2.6.32/plat-mxc-iomux-v3.h-implicitly-enable-pull-up-down-when-that-s-desired.patch b/queue-2.6.32/plat-mxc-iomux-v3.h-implicitly-enable-pull-up-down-when-that-s-desired.patch
new file mode 100644
index 0000000..1c025b6
--- /dev/null
+++ b/queue-2.6.32/plat-mxc-iomux-v3.h-implicitly-enable-pull-up-down-when-that-s-desired.patch
@@ -0,0 +1,52 @@
+From 6571534b600b8ca1936ff5630b9e0947f21faf16 Mon Sep 17 00:00:00 2001
+From: Paul Fertser <fercerpav@gmail.com>
+Date: Mon, 10 Oct 2011 11:19:23 +0400
+Subject: plat-mxc: iomux-v3.h: implicitly enable pull-up/down when that's desired
+
+From: Paul Fertser <fercerpav@gmail.com>
+
+commit 6571534b600b8ca1936ff5630b9e0947f21faf16 upstream.
+
+To configure pads during the initialisation a set of special constants
+is used, e.g.
+#define MX25_PAD_FEC_MDIO__FEC_MDIO IOMUX_PAD(0x3c4, 0x1cc, 0x10, 0, 0, PAD_CTL_HYS | PAD_CTL_PUS_22K_UP)
+
+The problem is that no pull-up/down is getting activated unless both
+PAD_CTL_PUE (pull-up enable) and PAD_CTL_PKE (pull/keeper module
+enable) set. This is clearly stated in the i.MX25 datasheet and is
+confirmed by the measurements on hardware. This leads to some rather
+hard to understand bugs such as misdetecting an absent ethernet PHY (a
+real bug i had), unstable data transfer etc. This might affect mx25,
+mx35, mx50, mx51 and mx53 SoCs.
+
+It's reasonable to expect that if the pullup value is specified, the
+intention was to have it actually active, so we implicitly add the
+needed bits.
+
+Signed-off-by: Paul Fertser <fercerpav@gmail.com>
+Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/arm/plat-mxc/include/mach/iomux-v3.h | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+--- a/arch/arm/plat-mxc/include/mach/iomux-v3.h
++++ b/arch/arm/plat-mxc/include/mach/iomux-v3.h
+@@ -73,11 +73,11 @@ struct pad_desc {
+ #define PAD_CTL_HYS (1 << 8)
+
+ #define PAD_CTL_PKE (1 << 7)
+-#define PAD_CTL_PUE (1 << 6)
+-#define PAD_CTL_PUS_100K_DOWN (0 << 4)
+-#define PAD_CTL_PUS_47K_UP (1 << 4)
+-#define PAD_CTL_PUS_100K_UP (2 << 4)
+-#define PAD_CTL_PUS_22K_UP (3 << 4)
++#define PAD_CTL_PUE (1 << 6 | PAD_CTL_PKE)
++#define PAD_CTL_PUS_100K_DOWN (0 << 4 | PAD_CTL_PUE)
++#define PAD_CTL_PUS_47K_UP (1 << 4 | PAD_CTL_PUE)
++#define PAD_CTL_PUS_100K_UP (2 << 4 | PAD_CTL_PUE)
++#define PAD_CTL_PUS_22K_UP (3 << 4 | PAD_CTL_PUE)
+
+ #define PAD_CTL_ODE (1 << 3)
+
diff --git a/queue-2.6.32/qe-fhci-fixed-the-control-bug.patch b/queue-2.6.32/qe-fhci-fixed-the-control-bug.patch
new file mode 100644
index 0000000..3d61dd2
--- /dev/null
+++ b/queue-2.6.32/qe-fhci-fixed-the-control-bug.patch
@@ -0,0 +1,64 @@
+From 273d23574f9dacd9c63c80e7d63639a669aad441 Mon Sep 17 00:00:00 2001
+From: Jerry Huang <r66093@freescale.com>
+Date: Tue, 18 Oct 2011 13:09:48 +0800
+Subject: QE/FHCI: fixed the CONTROL bug
+
+From: Jerry Huang <r66093@freescale.com>
+
+commit 273d23574f9dacd9c63c80e7d63639a669aad441 upstream.
+
+For USB CONTROL transaction, when the data length is zero,
+the IN package is needed to finish this transaction in status stage.
+
+Signed-off-by: Jerry Huang <r66093@freescale.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/host/fhci-sched.c | 19 +++++++++++++++----
+ 1 file changed, 15 insertions(+), 4 deletions(-)
+
+--- a/drivers/usb/host/fhci-sched.c
++++ b/drivers/usb/host/fhci-sched.c
+@@ -1,7 +1,7 @@
+ /*
+ * Freescale QUICC Engine USB Host Controller Driver
+ *
+- * Copyright (c) Freescale Semicondutor, Inc. 2006.
++ * Copyright (c) Freescale Semicondutor, Inc. 2006, 2011.
+ * Shlomi Gridish <gridish@freescale.com>
+ * Jerry Huang <Chang-Ming.Huang@freescale.com>
+ * Copyright (c) Logic Product Development, Inc. 2007
+@@ -810,9 +810,11 @@ void fhci_queue_urb(struct fhci_hcd *fhc
+ ed->dev_addr = usb_pipedevice(urb->pipe);
+ ed->max_pkt_size = usb_maxpacket(urb->dev, urb->pipe,
+ usb_pipeout(urb->pipe));
++ /* setup stage */
+ td = fhci_td_fill(fhci, urb, urb_priv, ed, cnt++, FHCI_TA_SETUP,
+ USB_TD_TOGGLE_DATA0, urb->setup_packet, 8, 0, 0, true);
+
++ /* data stage */
+ if (data_len > 0) {
+ td = fhci_td_fill(fhci, urb, urb_priv, ed, cnt++,
+ usb_pipeout(urb->pipe) ? FHCI_TA_OUT :
+@@ -820,9 +822,18 @@ void fhci_queue_urb(struct fhci_hcd *fhc
+ USB_TD_TOGGLE_DATA1, data, data_len, 0, 0,
+ true);
+ }
+- td = fhci_td_fill(fhci, urb, urb_priv, ed, cnt++,
+- usb_pipeout(urb->pipe) ? FHCI_TA_IN : FHCI_TA_OUT,
+- USB_TD_TOGGLE_DATA1, data, 0, 0, 0, true);
++
++ /* status stage */
++ if (data_len > 0)
++ td = fhci_td_fill(fhci, urb, urb_priv, ed, cnt++,
++ (usb_pipeout(urb->pipe) ? FHCI_TA_IN :
++ FHCI_TA_OUT),
++ USB_TD_TOGGLE_DATA1, data, 0, 0, 0, true);
++ else
++ td = fhci_td_fill(fhci, urb, urb_priv, ed, cnt++,
++ FHCI_TA_IN,
++ USB_TD_TOGGLE_DATA1, data, 0, 0, 0, true);
++
+ urb_state = US_CTRL_SETUP;
+ break;
+ case FHCI_TF_ISO:
diff --git a/queue-2.6.32/series b/queue-2.6.32/series
index 2df0a11..3d7f381 100644
--- a/queue-2.6.32/series
+++ b/queue-2.6.32/series
@@ -64,3 +64,20 @@ usb-add-reset_resume-for-webcams-shown-to-be-quirky.patch
usb-pl2303-add-id-for-smart-device.patch
usb-ftdi_sio-add-pid-for-sony-ericsson-urban.patch
usb-ftdi_sio-support-ti-luminary-micro-stellaris-bd-icdi.patch
+qe-fhci-fixed-the-control-bug.patch
+update-email-address-for-stable-patch-submission.patch
+kobj_uevent-ignore-if-some-listeners-cannot-handle-message.patch
+kmod-prevent-kmod_loop_msg-overflow-in-__request_module.patch
+time-change-jiffies_to_clock_t-argument-type-to-unsigned-long.patch
+nfsd4-remove-check-for-a-32-bit-cookie-in-nfsd4_readdir.patch
+nfsd4-ignore-want-bits-in-open-downgrade.patch
+asoc-wm8940-properly-set-codec-dapm.bias_level.patch
+asoc-ak4642-fixup-cache-register-table.patch
+asoc-ak4535-fixup-cache-register-table.patch
+kvm-s390-check-cpu_id-prior-to-using-it.patch
+ccwgroup-move-attributes-to-attribute-group.patch
+iommu-amd-fix-wrong-shift-direction.patch
+carminefb-fix-module-parameters-permissions.patch
+uvcvideo-set-alternate-setting-0-on-resume-if-the-bus-has-been-reset.patch
+tuner_xc2028-allow-selection-of-the-frequency-adjustment-code-for-xc3028.patch
+plat-mxc-iomux-v3.h-implicitly-enable-pull-up-down-when-that-s-desired.patch
diff --git a/queue-2.6.32/time-change-jiffies_to_clock_t-argument-type-to-unsigned-long.patch b/queue-2.6.32/time-change-jiffies_to_clock_t-argument-type-to-unsigned-long.patch
new file mode 100644
index 0000000..c68edb9
--- /dev/null
+++ b/queue-2.6.32/time-change-jiffies_to_clock_t-argument-type-to-unsigned-long.patch
@@ -0,0 +1,50 @@
+From cbbc719fccdb8cbd87350a05c0d33167c9b79365 Mon Sep 17 00:00:00 2001
+From: hank <pyu@redhat.com>
+Date: Tue, 20 Sep 2011 13:53:39 -0700
+Subject: time: Change jiffies_to_clock_t() argument type to unsigned long
+
+From: hank <pyu@redhat.com>
+
+commit cbbc719fccdb8cbd87350a05c0d33167c9b79365 upstream.
+
+The parameter's origin type is long. On an i386 architecture, it can
+easily be larger than 0x80000000, causing this function to convert it
+to a sign-extended u64 type.
+
+Change the type to unsigned long so we get the correct result.
+
+Signed-off-by: hank <pyu@redhat.com>
+Cc: John Stultz <john.stultz@linaro.org>
+[ build fix ]
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ include/linux/jiffies.h | 2 +-
+ kernel/time.c | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+--- a/include/linux/jiffies.h
++++ b/include/linux/jiffies.h
+@@ -303,7 +303,7 @@ extern void jiffies_to_timespec(const un
+ extern unsigned long timeval_to_jiffies(const struct timeval *value);
+ extern void jiffies_to_timeval(const unsigned long jiffies,
+ struct timeval *value);
+-extern clock_t jiffies_to_clock_t(long x);
++extern clock_t jiffies_to_clock_t(unsigned long x);
+ extern unsigned long clock_t_to_jiffies(unsigned long x);
+ extern u64 jiffies_64_to_clock_t(u64 x);
+ extern u64 nsec_to_clock_t(u64 x);
+--- a/kernel/time.c
++++ b/kernel/time.c
+@@ -593,7 +593,7 @@ EXPORT_SYMBOL(jiffies_to_timeval);
+ /*
+ * Convert jiffies/jiffies_64 to clock_t and back.
+ */
+-clock_t jiffies_to_clock_t(long x)
++clock_t jiffies_to_clock_t(unsigned long x)
+ {
+ #if (TICK_NSEC % (NSEC_PER_SEC / USER_HZ)) == 0
+ # if HZ < USER_HZ
diff --git a/queue-2.6.32/tuner_xc2028-allow-selection-of-the-frequency-adjustment-code-for-xc3028.patch b/queue-2.6.32/tuner_xc2028-allow-selection-of-the-frequency-adjustment-code-for-xc3028.patch
new file mode 100644
index 0000000..fe41e24
--- /dev/null
+++ b/queue-2.6.32/tuner_xc2028-allow-selection-of-the-frequency-adjustment-code-for-xc3028.patch
@@ -0,0 +1,32 @@
+From 9bed77ee2fb46b74782d0d9d14b92e9d07f3df6e Mon Sep 17 00:00:00 2001
+From: Mauro Carvalho Chehab <mchehab@redhat.com>
+Date: Thu, 28 Jul 2011 16:38:54 -0300
+Subject: [media] tuner_xc2028: Allow selection of the frequency adjustment code for XC3028
+
+From: Mauro Carvalho Chehab <mchehab@redhat.com>
+
+commit 9bed77ee2fb46b74782d0d9d14b92e9d07f3df6e upstream.
+
+This device is not using the proper demod IF. Instead of using the
+IF macro, it is specifying a IF frequency. This doesn't work, as xc3028
+needs to load an specific SCODE for the tuner. In this case, there's
+no IF table for 5 MHz.
+
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/cx23885/cx23885-dvb.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/media/video/cx23885/cx23885-dvb.c
++++ b/drivers/media/video/cx23885/cx23885-dvb.c
+@@ -693,7 +693,7 @@ static int dvb_register(struct cx23885_t
+ static struct xc2028_ctrl ctl = {
+ .fname = XC3028L_DEFAULT_FIRMWARE,
+ .max_len = 64,
+- .demod = 5000,
++ .demod = XC3028_FE_DIBCOM52,
+ /* This is true for all demods with
+ v36 firmware? */
+ .type = XC2028_D2633,
diff --git a/queue-2.6.32/update-email-address-for-stable-patch-submission.patch b/queue-2.6.32/update-email-address-for-stable-patch-submission.patch
new file mode 100644
index 0000000..2ae27cd
--- /dev/null
+++ b/queue-2.6.32/update-email-address-for-stable-patch-submission.patch
@@ -0,0 +1,38 @@
+From 5fa224295f0e0358c8bc0e5390702338df889def Mon Sep 17 00:00:00 2001
+From: Josh Boyer <jwboyer@redhat.com>
+Date: Mon, 17 Oct 2011 21:16:39 -0400
+Subject: Update email address for stable patch submission
+
+From: Josh Boyer <jwboyer@redhat.com>
+
+commit 5fa224295f0e0358c8bc0e5390702338df889def upstream.
+
+The stable@kernel.org email address has been replaced with the
+stable@vger.kernel.org mailing list. Change the stable kernel rules to
+reference the new list instead of the semi-defunct email alias.
+
+Signed-off-by: Josh Boyer <jwboyer@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ Documentation/stable_kernel_rules.txt | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/Documentation/stable_kernel_rules.txt
++++ b/Documentation/stable_kernel_rules.txt
+@@ -25,13 +25,13 @@ Rules on what kind of patches are accept
+ Procedure for submitting patches to the -stable tree:
+
+ - Send the patch, after verifying that it follows the above rules, to
+- stable@kernel.org.
++ stable@vger.kernel.org.
+ - The sender will receive an ACK when the patch has been accepted into the
+ queue, or a NAK if the patch is rejected. This response might take a few
+ days, according to the developer's schedules.
+ - If accepted, the patch will be added to the -stable queue, for review by
+ other developers and by the relevant subsystem maintainer.
+- - If the stable@kernel.org address is added to a patch, when it goes into
++ - If the stable@vger.kernel.org address is added to a patch, when it goes into
+ Linus's tree it will automatically be emailed to the stable team.
+ - Security patches should not be sent to this alias, but instead to the
+ documented security@kernel.org address.
diff --git a/queue-2.6.32/uvcvideo-set-alternate-setting-0-on-resume-if-the-bus-has-been-reset.patch b/queue-2.6.32/uvcvideo-set-alternate-setting-0-on-resume-if-the-bus-has-been-reset.patch
new file mode 100644
index 0000000..f9acc38
--- /dev/null
+++ b/queue-2.6.32/uvcvideo-set-alternate-setting-0-on-resume-if-the-bus-has-been-reset.patch
@@ -0,0 +1,74 @@
+From d59a7b1dbce8b972ec2dc9fcaaae0bfa23687423 Mon Sep 17 00:00:00 2001
+From: Ming Lei <tom.leiming@gmail.com>
+Date: Sat, 16 Jul 2011 00:51:00 -0300
+Subject: [media] uvcvideo: Set alternate setting 0 on resume if the bus has been reset
+
+From: Ming Lei <tom.leiming@gmail.com>
+
+commit d59a7b1dbce8b972ec2dc9fcaaae0bfa23687423 upstream.
+
+If the bus has been reset on resume, set the alternate setting to 0.
+This should be the default value, but some devices crash or otherwise
+misbehave if they don't receive a SET_INTERFACE request before any other
+video control request.
+
+Microdia's 0c45:6437 camera has been found to require this change or it
+will stop sending video data after resume.
+
+uvc_video.c]
+
+Signed-off-by: Ming Lei <ming.lei@canonical.com>
+Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/uvc/uvc_driver.c | 2 +-
+ drivers/media/video/uvc/uvc_video.c | 10 +++++++++-
+ drivers/media/video/uvc/uvcvideo.h | 2 +-
+ 3 files changed, 11 insertions(+), 3 deletions(-)
+
+--- a/drivers/media/video/uvc/uvc_driver.c
++++ b/drivers/media/video/uvc/uvc_driver.c
+@@ -1889,7 +1889,7 @@ static int __uvc_resume(struct usb_inter
+
+ list_for_each_entry(stream, &dev->streams, list) {
+ if (stream->intf == intf)
+- return uvc_video_resume(stream);
++ return uvc_video_resume(stream, reset);
+ }
+
+ uvc_trace(UVC_TRACE_SUSPEND, "Resume: video streaming USB interface "
+--- a/drivers/media/video/uvc/uvc_video.c
++++ b/drivers/media/video/uvc/uvc_video.c
+@@ -1024,10 +1024,18 @@ int uvc_video_suspend(struct uvc_streami
+ * buffers, making sure userspace applications are notified of the problem
+ * instead of waiting forever.
+ */
+-int uvc_video_resume(struct uvc_streaming *stream)
++int uvc_video_resume(struct uvc_streaming *stream, int reset)
+ {
+ int ret;
+
++ /* If the bus has been reset on resume, set the alternate setting to 0.
++ * This should be the default value, but some devices crash or otherwise
++ * misbehave if they don't receive a SET_INTERFACE request before any
++ * other video control request.
++ */
++ if (reset)
++ usb_set_interface(stream->dev->udev, stream->intfnum, 0);
++
+ stream->frozen = 0;
+
+ ret = uvc_commit_video(stream, &stream->ctrl);
+--- a/drivers/media/video/uvc/uvcvideo.h
++++ b/drivers/media/video/uvc/uvcvideo.h
+@@ -608,7 +608,7 @@ extern const struct v4l2_file_operations
+ /* Video */
+ extern int uvc_video_init(struct uvc_streaming *stream);
+ extern int uvc_video_suspend(struct uvc_streaming *stream);
+-extern int uvc_video_resume(struct uvc_streaming *stream);
++extern int uvc_video_resume(struct uvc_streaming *stream, int reset);
+ extern int uvc_video_enable(struct uvc_streaming *stream, int enable);
+ extern int uvc_probe_video(struct uvc_streaming *stream,
+ struct uvc_streaming_control *probe);