--- /dev/null
+From e9ff5eb2ae018fe2298c68746c873bf828c6b10e Mon Sep 17 00:00:00 2001
+From: Anuj Aggarwal <anuj.aggarwal@ti.com>
+Date: Fri, 27 Nov 2009 17:40:58 +0530
+Subject: ASoC: AIC23: Fixing infinite loop in resume path
+
+From: Anuj Aggarwal <anuj.aggarwal@ti.com>
+
+commit e9ff5eb2ae018fe2298c68746c873bf828c6b10e upstream.
+
+This patch fixes two issues:
+a) Infinite loop in resume function
+b) Writes to non-existing registers in resume function
+
+Signed-off-by: Anuj Aggarwal <anuj.aggarwal@ti.com>
+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/tlv320aic23.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+--- a/sound/soc/codecs/tlv320aic23.c
++++ b/sound/soc/codecs/tlv320aic23.c
+@@ -625,11 +625,10 @@ static int tlv320aic23_resume(struct pla
+ {
+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
+ struct snd_soc_codec *codec = socdev->card->codec;
+- int i;
+ u16 reg;
+
+ /* Sync reg_cache with the hardware */
+- for (reg = 0; reg < ARRAY_SIZE(tlv320aic23_reg); i++) {
++ for (reg = 0; reg < TLV320AIC23_RESET; reg++) {
+ u16 val = tlv320aic23_read_reg_cache(codec, reg);
+ tlv320aic23_write(codec, reg, val);
+ }
--- /dev/null
+From 50b6bce59d154b5db137907a5c0ed45a4e7a3829 Mon Sep 17 00:00:00 2001
+From: Mark Brown <broonie@opensource.wolfsonmicro.com>
+Date: Mon, 23 Nov 2009 13:11:53 +0000
+Subject: ASoC: Fix suspend with active audio streams
+
+From: Mark Brown <broonie@opensource.wolfsonmicro.com>
+
+commit 50b6bce59d154b5db137907a5c0ed45a4e7a3829 upstream.
+
+When we get a stream suspend event force the power down since otherwise
+the stream would remain marked as active. In future we'll probably want
+to make this stream-specific and add an interface to make the power down
+of other widgets optional in order to support leaving bypass paths
+active while suspending the processor.
+
+Reported-by: Joonyoung Shim <jy0922.shim@samsung.com>
+Tested-by: Joonyoung Shim <jy0922.shim@samsung.com>
+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/soc-dapm.c | 16 +++++++++++++---
+ 1 file changed, 13 insertions(+), 3 deletions(-)
+
+--- a/sound/soc/soc-dapm.c
++++ b/sound/soc/soc-dapm.c
+@@ -774,9 +774,19 @@ static int dapm_power_widgets(struct snd
+ if (!w->power_check)
+ continue;
+
+- power = w->power_check(w);
+- if (power)
+- sys_power = 1;
++ /* If we're suspending then pull down all the
++ * power. */
++ switch (event) {
++ case SND_SOC_DAPM_STREAM_SUSPEND:
++ power = 0;
++ break;
++
++ default:
++ power = w->power_check(w);
++ if (power)
++ sys_power = 1;
++ break;
++ }
+
+ if (w->power == power)
+ continue;
--- /dev/null
+From 18c6951091eca7645005a71b556106cc99a6f4b1 Mon Sep 17 00:00:00 2001
+From: Larry Finger <Larry.Finger@lwfinger.net>
+Date: Wed, 29 Jul 2009 10:54:06 -0500
+Subject: b43: Work around mac80211 race condition
+
+From: Larry Finger <Larry.Finger@lwfinger.net>
+
+commit 18c6951091eca7645005a71b556106cc99a6f4b1 upstream.
+
+As shown in http://thread.gmane.org/gmane.linux.kernel.wireless.general/36497,
+mac80211 has a bug that allows a call to the TX routine after the queues have
+been stopped. This situation will only occur under extreme stress. Although
+b43 does not crash when this condition occurs, it does generate a WARN_ON and
+also logs a queue overrun message. This patch recognizes b43 is not at fault
+and logs a message only when the most verbose debugging mode is enabled. In
+the unlikely event that the queue is not stopped when the DMA queue becomes
+full, then a warning is issued.
+
+During testing of this patch with one output stream running repeated tcpperf
+writes and a second running a flood ping, this routine was entered with
+the DMA ring stopped about once per hour. The condition where the DMA queue is
+full but the ring has not been stopped has never been seen by me.
+
+Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Cc: Michael Buesch <mb@bu3sch.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/b43/dma.c | 21 +++++++++++++++------
+ 1 file changed, 15 insertions(+), 6 deletions(-)
+
+--- a/drivers/net/wireless/b43/dma.c
++++ b/drivers/net/wireless/b43/dma.c
+@@ -1334,13 +1334,22 @@ int b43_dma_tx(struct b43_wldev *dev, st
+ spin_lock_irqsave(&ring->lock, flags);
+
+ B43_WARN_ON(!ring->tx);
+- /* Check if the queue was stopped in mac80211,
+- * but we got called nevertheless.
+- * That would be a mac80211 bug. */
+- B43_WARN_ON(ring->stopped);
+
+- if (unlikely(free_slots(ring) < TX_SLOTS_PER_FRAME)) {
+- b43warn(dev->wl, "DMA queue overflow\n");
++ if (unlikely(ring->stopped)) {
++ /* We get here only because of a bug in mac80211.
++ * Because of a race, one packet may be queued after
++ * the queue is stopped, thus we got called when we shouldn't.
++ * For now, just refuse the transmit. */
++ if (b43_debug(dev, B43_DBG_DMAVERBOSE))
++ b43err(dev->wl, "Packet after queue stopped\n");
++ err = -ENOSPC;
++ goto out_unlock;
++ }
++
++ if (unlikely(WARN_ON(free_slots(ring) < TX_SLOTS_PER_FRAME))) {
++ /* If we get here, we have a real error with the queue
++ * full, but queues not stopped. */
++ b43err(dev->wl, "DMA queue overflow\n");
+ err = -ENOSPC;
+ goto out_unlock;
+ }
--- /dev/null
+From 2d109a845dd3074885db726892c629ab73dd0ed8 Mon Sep 17 00:00:00 2001
+From: Zou, Nanhai <nanhai.zou@intel.com>
+Date: Fri, 6 Nov 2009 02:13:01 +0000
+Subject: drm/i915: Fix IRQ stall issue on Ironlake
+
+From: Zou, Nanhai <nanhai.zou@intel.com>
+
+commit 2d109a845dd3074885db726892c629ab73dd0ed8 upstream.
+
+The master irq control in DE must be disabled before irq handling,
+and enable after the process. This fixes the irq stall issue on
+Ironlake.
+
+Signed-off-by: Zou, Nanhai <nanhai.zou@intel.com>
+Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
+Signed-off-by: Eric Anholt <eric@anholt.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/gpu/drm/i915/i915_irq.c | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/i915/i915_irq.c
++++ b/drivers/gpu/drm/i915/i915_irq.c
+@@ -253,10 +253,15 @@ irqreturn_t igdng_irq_handler(struct drm
+ {
+ drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
+ int ret = IRQ_NONE;
+- u32 de_iir, gt_iir;
++ u32 de_iir, gt_iir, de_ier;
+ u32 new_de_iir, new_gt_iir;
+ struct drm_i915_master_private *master_priv;
+
++ /* disable master interrupt before clearing iir */
++ de_ier = I915_READ(DEIER);
++ I915_WRITE(DEIER, de_ier & ~DE_MASTER_IRQ_CONTROL);
++ (void)I915_READ(DEIER);
++
+ de_iir = I915_READ(DEIIR);
+ gt_iir = I915_READ(GTIIR);
+
+@@ -287,6 +292,9 @@ irqreturn_t igdng_irq_handler(struct drm
+ gt_iir = new_gt_iir;
+ }
+
++ I915_WRITE(DEIER, de_ier);
++ (void)I915_READ(DEIER);
++
+ return ret;
+ }
+
--- /dev/null
+From ca9ab10033d190c1ede85fdf456307bdfdabf079 Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Sun, 22 Nov 2009 15:40:31 +0000
+Subject: drm/i915: Select CONFIG_SHMEM
+
+From: Chris Wilson <chris@chris-wilson.co.uk>
+
+commit ca9ab10033d190c1ede85fdf456307bdfdabf079 upstream.
+
+The driver requires shmfs as the backing filesystem to handle the buffer
+objects, so ensure it is selected if the user chooses to build our
+driver.
+
+Fixes: Bug 14662 - Dell E5500 kernel panic with KMS
+http://bugzilla.kernel.org/show_bug.cgi?id=14662
+
+The revealing nature of the panic is the NULL function pointer
+dereference in read_cache_page_async().
+
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+Reported-and-tested-by: Mateusz Kaduk <mateusz.kaduk@gmail.com>
+Signed-off-by: Eric Anholt <eric@anholt.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/gpu/drm/Kconfig | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/gpu/drm/Kconfig
++++ b/drivers/gpu/drm/Kconfig
+@@ -82,6 +82,7 @@ config DRM_I830
+ config DRM_I915
+ tristate "i915 driver"
+ depends on AGP_INTEL
++ select SHMEM
+ select FB_CFB_FILLRECT
+ select FB_CFB_COPYAREA
+ select FB_CFB_IMAGEBLIT
--- /dev/null
+From 7064fef56369c9e2c6e35ff6d6b4b63d42a859ce Mon Sep 17 00:00:00 2001
+From: Jesse Barnes <jbarnes@virtuousgeek.org>
+Date: Thu, 5 Nov 2009 10:12:54 -0800
+Subject: drm: work around EDIDs with bad htotal/vtotal values
+
+From: Jesse Barnes <jbarnes@virtuousgeek.org>
+
+commit 7064fef56369c9e2c6e35ff6d6b4b63d42a859ce upstream.
+
+We did this on the userspace side, but we need a similar fix for the
+kernel.
+
+Fixes LP #460664.
+
+Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/gpu/drm/drm_edid.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- a/drivers/gpu/drm/drm_edid.c
++++ b/drivers/gpu/drm/drm_edid.c
+@@ -333,6 +333,12 @@ static struct drm_display_mode *drm_mode
+ mode->vsync_end = mode->vsync_start + vsync_pulse_width;
+ mode->vtotal = mode->vdisplay + vblank;
+
++ /* Some EDIDs have bogus h/vtotal values */
++ if (mode->hsync_end > mode->htotal)
++ mode->htotal = mode->hsync_end + 1;
++ if (mode->vsync_end > mode->vtotal)
++ mode->vtotal = mode->vsync_end + 1;
++
+ drm_mode_set_name(mode);
+
+ if (pt->misc & DRM_EDID_PT_INTERLACED)
--- /dev/null
+From d77b81974521c82fa6fda38dfff1b491dcc62a32 Mon Sep 17 00:00:00 2001
+From: Harald Welte <HaraldWelte@viatech.com>
+Date: Tue, 24 Nov 2009 16:53:00 +0100
+Subject: [CPUFREQ] Enable ACPI PDC handshake for VIA/Centaur CPUs
+
+From: Harald Welte <HaraldWelte@viatech.com>
+
+commit d77b81974521c82fa6fda38dfff1b491dcc62a32 upstream.
+
+In commit 0de51088e6a82bc8413d3ca9e28bbca2788b5b53, we introduced the
+use of acpi-cpufreq on VIA/Centaur CPU's by removing a vendor check for
+VENDOR_INTEL. However, as it turns out, at least the Nano CPU's also
+need the PDC (processor driver capabilities) handshake in order to
+activate the methods required for acpi-cpufreq.
+
+Since arch_acpi_processor_init_pdc() contains another vendor check for
+Intel, the PDC is not initialized on VIA CPU's. The resulting behavior
+of a current mainline kernel on such systems is: acpi-cpufreq
+loads and it indicates CPU frequency changes. However, the CPU stays at
+a single frequency
+
+This trivial patch ensures that init_intel_pdc() is called on Intel and
+VIA/Centaur CPU's alike.
+
+Signed-off-by: Harald Welte <HaraldWelte@viatech.com>
+Signed-off-by: Dave Jones <davej@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kernel/acpi/processor.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/arch/x86/kernel/acpi/processor.c
++++ b/arch/x86/kernel/acpi/processor.c
+@@ -79,7 +79,8 @@ void arch_acpi_processor_init_pdc(struct
+ struct cpuinfo_x86 *c = &cpu_data(pr->id);
+
+ pr->pdc = NULL;
+- if (c->x86_vendor == X86_VENDOR_INTEL)
++ if (c->x86_vendor == X86_VENDOR_INTEL ||
++ c->x86_vendor == X86_VENDOR_CENTAUR)
+ init_intel_pdc(pr, c);
+
+ return;
--- /dev/null
+From 1b7323965a8c6eee9dc4e345a7ae4bff1dc93149 Mon Sep 17 00:00:00 2001
+From: Csaba Henk <csaba@gluster.com>
+Date: Fri, 27 Nov 2009 19:30:14 +0530
+Subject: fuse: reject O_DIRECT flag also in fuse_create
+
+From: Csaba Henk <csaba@gluster.com>
+
+commit 1b7323965a8c6eee9dc4e345a7ae4bff1dc93149 upstream.
+
+The comment in fuse_open about O_DIRECT:
+
+ "VFS checks this, but only _after_ ->open()"
+
+also holds for fuse_create, however, the same kind of check was missing there.
+
+As an impact of this bug, open(newfile, O_RDWR|O_CREAT|O_DIRECT) fails, but a
+stub newfile will remain if the fuse server handled the implied FUSE_CREATE
+request appropriately.
+
+Other impact: in the above situation ima_file_free() will complain to open/free
+imbalance if CONFIG_IMA is set.
+
+Signed-off-by: Csaba Henk <csaba@gluster.com>
+Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
+Cc: Harshavardhana <harsha@gluster.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/fuse/dir.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/fs/fuse/dir.c
++++ b/fs/fuse/dir.c
+@@ -385,6 +385,9 @@ static int fuse_create_open(struct inode
+ if (fc->no_create)
+ return -ENOSYS;
+
++ if (flags & O_DIRECT)
++ return -EINVAL;
++
+ forget_req = fuse_get_req(fc);
+ if (IS_ERR(forget_req))
+ return PTR_ERR(forget_req);
--- /dev/null
+From c09c59e6a070d6af05f238f255aea268185273ef Mon Sep 17 00:00:00 2001
+From: Mimi Zohar <zohar@linux.vnet.ibm.com>
+Date: Wed, 18 Nov 2009 16:16:06 -0500
+Subject: ima: replace GFP_KERNEL with GFP_NOFS
+
+From: Mimi Zohar <zohar@linux.vnet.ibm.com>
+
+commit c09c59e6a070d6af05f238f255aea268185273ef upstream.
+
+While running fsstress tests on the NFSv4 mounted ext3 and ext4
+filesystem, the following call trace was generated on the nfs
+server machine.
+
+Replace GFP_KERNEL with GFP_NOFS in ima_iint_insert() to avoid a
+potential deadlock.
+
+ =================================
+ [ INFO: inconsistent lock state ]
+ 2.6.31-31.el6.x86_64 #1
+ ---------------------------------
+ inconsistent {RECLAIM_FS-ON-W} -> {IN-RECLAIM_FS-W} usage.
+ kswapd2/75 [HC0[0]:SC0[0]:HE1:SE1] takes:
+ (jbd2_handle){+.+.?.}, at: [<ffffffff811edd5e>] jbd2_journal_start+0xfe/0x13f
+ {RECLAIM_FS-ON-W} state was registered at:
+ [<ffffffff81091e40>] mark_held_locks+0x65/0x99
+ [<ffffffff81091f31>] lockdep_trace_alloc+0xbd/0xf5
+ [<ffffffff81126fdd>] kmem_cache_alloc+0x40/0x185
+ [<ffffffff812344d7>] ima_iint_insert+0x3d/0xf1
+ [<ffffffff812345b0>] ima_inode_alloc+0x25/0x44
+ [<ffffffff811484ac>] inode_init_always+0xec/0x271
+ [<ffffffff81148682>] alloc_inode+0x51/0xa1
+ [<ffffffff81148700>] new_inode+0x2e/0x94
+ [<ffffffff811b2f08>] ext4_new_inode+0xb8/0xdc9
+ [<ffffffff811be611>] ext4_create+0xcf/0x175
+ [<ffffffff8113e2cd>] vfs_create+0x82/0xb8
+ [<ffffffff8113f337>] do_filp_open+0x32c/0x9ee
+ [<ffffffff811309b9>] do_sys_open+0x6c/0x12c
+ [<ffffffff81130adc>] sys_open+0x2e/0x44
+ [<ffffffff81011e42>] system_call_fastpath+0x16/0x1b
+ [<ffffffffffffffff>] 0xffffffffffffffff
+ irq event stamp: 90371
+ hardirqs last enabled at (90371): [<ffffffff8112708d>]
+ kmem_cache_alloc+0xf0/0x185
+ hardirqs last disabled at (90370): [<ffffffff81127026>]
+ kmem_cache_alloc+0x89/0x185
+ softirqs last enabled at (89492): [<ffffffff81068ecf>]
+ __do_softirq+0x1bf/0x1eb
+ softirqs last disabled at (89477): [<ffffffff8101312c>] call_softirq+0x1c/0x30
+
+ other info that might help us debug this:
+ 2 locks held by kswapd2/75:
+ #0: (shrinker_rwsem){++++..}, at: [<ffffffff810f98ba>] shrink_slab+0x44/0x177
+ #1: (&type->s_umount_key#25){++++..}, at: [<ffffffff811450ba>]
+
+Reported-by: Muni P. Beerakam <mbeeraka@in.ibm.com>
+Reported-by: Amit K. Arora <amitarora@in.ibm.com>
+Signed-off-by: Mimi Zohar <zohar@us.ibm.com>
+Signed-off-by: James Morris <jmorris@namei.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ security/integrity/ima/ima_iint.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/security/integrity/ima/ima_iint.c
++++ b/security/integrity/ima/ima_iint.c
+@@ -58,11 +58,11 @@ struct ima_iint_cache *ima_iint_insert(s
+
+ if (!ima_initialized)
+ return iint;
+- iint = kmem_cache_alloc(iint_cache, GFP_KERNEL);
++ iint = kmem_cache_alloc(iint_cache, GFP_NOFS);
+ if (!iint)
+ return iint;
+
+- rc = radix_tree_preload(GFP_KERNEL);
++ rc = radix_tree_preload(GFP_NOFS);
+ if (rc < 0)
+ goto out;
+
--- /dev/null
+From reinette.chatre@intel.com Tue Dec 1 16:35:13 2009
+From: Reinette Chatre <reinette.chatre@intel.com>
+Date: Wed, 25 Nov 2009 11:03:48 -0800
+Subject: iwlwifi: Fix issue on file transfer stalled in HT mode
+To: stable@kernel.org
+Cc: Reinette Chatre <reinette.chatre@intel.com>, wey-yi.w.guy@intel.com, linville@tuxdriver.com
+Message-ID: <1259175828-14489-3-git-send-email-reinette.chatre@intel.com>
+
+
+From: Wey-Yi Guy <wey-yi.w.guy@intel.com>
+
+commit d01032e4fd33110f9f3a085a36cb819c1dfc5827 upstream
+
+Turn on RTS/CTS for HT to prevent uCode TX fifo underrun
+
+This is fix for
+http://bugzilla.intellinuxwireless.org/show_bug.cgi?id=2103
+
+Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
+Tested-by: Jiajia Zheng <jiajia.zheng@intel.com>
+Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/iwlwifi/iwl-1000.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/net/wireless/iwlwifi/iwl-1000.c
++++ b/drivers/net/wireless/iwlwifi/iwl-1000.c
+@@ -71,5 +71,6 @@ struct iwl_cfg iwl1000_bgn_cfg = {
+ .need_pll_cfg = true,
+ .max_ll_items = OTP_MAX_LL_ITEMS_1000,
+ .shadow_ram_support = false,
++ .use_rts_for_ht = true, /* use rts/cts protection */
+ };
+
--- /dev/null
+From reinette.chatre@intel.com Tue Dec 1 16:34:01 2009
+From: Reinette Chatre <reinette.chatre@intel.com>
+Date: Wed, 25 Nov 2009 11:03:47 -0800
+Subject: iwlwifi: Use RTS/CTS as the preferred protection mechanism for 6000 series
+To: stable@kernel.org
+Cc: Reinette Chatre <reinette.chatre@intel.com>, wey-yi.w.guy@intel.com, linville@tuxdriver.com
+Message-ID: <1259175828-14489-2-git-send-email-reinette.chatre@intel.com>
+
+
+From: Wey-Yi Guy <wey-yi.w.guy@intel.com>
+
+commit 73871f7181a1406c67e93c8c83f5edb26057a2a6 upstream
+
+When 802.11g was introduced, we had RTS/CTS and CTS-to-Self protection
+mechanisms. In an HT Beacon, HT stations use the "Operating Mode" field
+in the HT Information Element to determine whether or not to use
+protection.
+
+The Operating Mode field has 4 possible settings: 0-3:
+Mode 0: If all stations in the BSS are 20/40 MHz HT capable, or if the
+BSS is 20/40 MHz capable, or if all stations in the BSS are 20 MHz HT
+stations in a 20 MHz BSS
+Mode 1: used if there are non-HT stations or APs using the primary or
+secondary channels
+Mode 2: if only HT stations are associated in the BSS and at least one
+20 MHz HT station is associated.
+Mode 3: used if one or more non-HT stations are associated in the BSS.
+
+When in operating modes 1 or 3, and the Use_Protection field is 1 in the
+Beacon's ERP IE, all HT transmissions must be protected using RTS/CTS or
+CTS-to-Self.
+
+By default, CTS-to-self is the preferred protection mechanism for less
+overhead and higher throughput; but using the full RTS/CTS will better
+protect the inner exchange from interference, especially in
+highly-congested environment.
+
+For 6000 series WIFI NIC, RTS/CTS protection mechanism is the
+recommended choice for HT traffic based on the HW design.
+
+Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
+Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/iwlwifi/iwl-6000.c | 4 ++++
+ drivers/net/wireless/iwlwifi/iwl-agn-rs.c | 9 +++++++++
+ drivers/net/wireless/iwlwifi/iwl-agn.c | 10 +++++++---
+ drivers/net/wireless/iwlwifi/iwl-core.h | 2 ++
+ 4 files changed, 22 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/wireless/iwlwifi/iwl-6000.c
++++ b/drivers/net/wireless/iwlwifi/iwl-6000.c
+@@ -109,6 +109,7 @@ struct iwl_cfg iwl6000_2agn_cfg = {
+ .need_pll_cfg = false,
+ .max_ll_items = OTP_MAX_LL_ITEMS_6x00,
+ .shadow_ram_support = true,
++ .use_rts_for_ht = true, /* use rts/cts protection */
+ };
+
+ struct iwl_cfg iwl6050_2agn_cfg = {
+@@ -127,6 +128,7 @@ struct iwl_cfg iwl6050_2agn_cfg = {
+ .need_pll_cfg = false,
+ .max_ll_items = OTP_MAX_LL_ITEMS_6x00,
+ .shadow_ram_support = true,
++ .use_rts_for_ht = true, /* use rts/cts protection */
+ };
+
+ struct iwl_cfg iwl6000_3agn_cfg = {
+@@ -145,6 +147,7 @@ struct iwl_cfg iwl6000_3agn_cfg = {
+ .need_pll_cfg = false,
+ .max_ll_items = OTP_MAX_LL_ITEMS_6x00,
+ .shadow_ram_support = true,
++ .use_rts_for_ht = true, /* use rts/cts protection */
+ };
+
+ struct iwl_cfg iwl6050_3agn_cfg = {
+@@ -163,6 +166,7 @@ struct iwl_cfg iwl6050_3agn_cfg = {
+ .need_pll_cfg = false,
+ .max_ll_items = OTP_MAX_LL_ITEMS_6x00,
+ .shadow_ram_support = true,
++ .use_rts_for_ht = true, /* use rts/cts protection */
+ };
+
+ MODULE_FIRMWARE(IWL6000_MODULE_FIRMWARE(IWL6000_UCODE_API_MAX));
+--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
++++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
+@@ -115,9 +115,6 @@ int iwl_commit_rxon(struct iwl_priv *pri
+
+ /* always get timestamp with Rx frame */
+ priv->staging_rxon.flags |= RXON_FLG_TSF2HOST_MSK;
+- /* allow CTS-to-self if possible. this is relevant only for
+- * 5000, but will not damage 4965 */
+- priv->staging_rxon.flags |= RXON_FLG_SELF_CTS_EN;
+
+ ret = iwl_check_rxon_cmd(priv);
+ if (ret) {
+@@ -217,6 +214,13 @@ int iwl_commit_rxon(struct iwl_priv *pri
+ "Could not send WEP static key.\n");
+ }
+
++ /*
++ * allow CTS-to-self if possible for new association.
++ * this is relevant only for 5000 series and up,
++ * but will not damage 4965
++ */
++ priv->staging_rxon.flags |= RXON_FLG_SELF_CTS_EN;
++
+ /* Apply the new configuration
+ * RXON assoc doesn't clear the station table in uCode,
+ */
+--- a/drivers/net/wireless/iwlwifi/iwl-agn-rs.c
++++ b/drivers/net/wireless/iwlwifi/iwl-agn-rs.c
+@@ -415,6 +415,15 @@ static void rs_tl_turn_on_agg(struct iwl
+ else if (tid == IWL_AGG_ALL_TID)
+ for (tid = 0; tid < TID_MAX_LOAD_COUNT; tid++)
+ rs_tl_turn_on_agg_for_tid(priv, lq_data, tid, sta);
++ if (priv->cfg->use_rts_for_ht) {
++ /*
++ * switch to RTS/CTS if it is the prefer protection method
++ * for HT traffic
++ */
++ IWL_DEBUG_HT(priv, "use RTS/CTS protection for HT\n");
++ priv->staging_rxon.flags &= ~RXON_FLG_SELF_CTS_EN;
++ iwlcore_commit_rxon(priv);
++ }
+ }
+
+ static inline int get_num_of_ant_from_rate(u32 rate_n_flags)
+--- a/drivers/net/wireless/iwlwifi/iwl-core.h
++++ b/drivers/net/wireless/iwlwifi/iwl-core.h
+@@ -209,6 +209,7 @@ struct iwl_mod_params {
+ * @ucode_api_min: Lowest version of uCode API supported by driver.
+ * @max_ll_items: max number of OTP blocks
+ * @shadow_ram_support: shadow support for OTP memory
++ * @use_rts_for_ht: use rts/cts protection for HT traffic
+ *
+ * We enable the driver to be backward compatible wrt API version. The
+ * driver specifies which APIs it supports (with @ucode_api_max being the
+@@ -247,6 +248,7 @@ struct iwl_cfg {
+ bool use_isr_legacy;
+ const u16 max_ll_items;
+ const bool shadow_ram_support;
++ bool use_rts_for_ht;
+ };
+
+ /***************************
--- /dev/null
+From 827d42c9ac91ddd728e4f4a31fefb906ef2ceff7 Mon Sep 17 00:00:00 2001
+From: Johannes Berg <johannes@sipsolutions.net>
+Date: Sun, 22 Nov 2009 12:28:41 +0100
+Subject: mac80211: fix spurious delBA handling
+
+From: Johannes Berg <johannes@sipsolutions.net>
+
+commit 827d42c9ac91ddd728e4f4a31fefb906ef2ceff7 upstream.
+
+Lennert Buytenhek noticed that delBA handling in mac80211
+was broken and has remotely triggerable problems, some of
+which are due to some code shuffling I did that ended up
+changing the order in which things were done -- this was
+
+ commit d75636ef9c1af224f1097941879d5a8db7cd04e5
+ Author: Johannes Berg <johannes@sipsolutions.net>
+ Date: Tue Feb 10 21:25:53 2009 +0100
+
+ mac80211: RX aggregation: clean up stop session
+
+and other parts were already present in the original
+
+ commit d92684e66091c0f0101819619b315b4bb8b5bcc5
+ Author: Ron Rindjunsky <ron.rindjunsky@intel.com>
+ Date: Mon Jan 28 14:07:22 2008 +0200
+
+ mac80211: A-MPDU Tx add delBA from recipient support
+
+The first problem is that I moved a BUG_ON before various
+checks -- thereby making it possible to hit. As the comment
+indicates, the BUG_ON can be removed since the ampdu_action
+callback must already exist when the state is != IDLE.
+
+The second problem isn't easily exploitable but there's a
+race condition due to unconditionally setting the state to
+OPERATIONAL when a delBA frame is received, even when no
+aggregation session was ever initiated. All the drivers
+accept stopping the session even then, but that opens a
+race window where crashes could happen before the driver
+accepts it. Right now, a WARN_ON may happen with non-HT
+drivers, while the race opens only for HT drivers.
+
+For this case, there are two things necessary to fix it:
+ 1) don't process spurious delBA frames, and be more careful
+ about the session state; don't drop the lock
+
+ 2) HT drivers need to be prepared to handle a session stop
+ even before the session was really started -- this is
+ true for all drivers (that support aggregation) but
+ iwlwifi which can be fixed easily. The other HT drivers
+ (ath9k and ar9170) are behaving properly already.
+
+Reported-by: Lennert Buytenhek <buytenh@marvell.com>
+Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/iwlwifi/iwl-tx.c | 10 +++++++++-
+ include/net/mac80211.h | 6 ++++++
+ net/mac80211/agg-tx.c | 15 +++++++--------
+ net/mac80211/ht.c | 8 +++-----
+ net/mac80211/ieee80211_i.h | 2 ++
+ 5 files changed, 27 insertions(+), 14 deletions(-)
+
+--- a/drivers/net/wireless/iwlwifi/iwl-tx.c
++++ b/drivers/net/wireless/iwlwifi/iwl-tx.c
+@@ -1233,8 +1233,16 @@ int iwl_tx_agg_stop(struct iwl_priv *pri
+ return -ENXIO;
+ }
+
++ if (priv->stations[sta_id].tid[tid].agg.state ==
++ IWL_EMPTYING_HW_QUEUE_ADDBA) {
++ IWL_DEBUG_HT(priv, "AGG stop before setup done\n");
++ ieee80211_stop_tx_ba_cb_irqsafe(priv->hw, ra, tid);
++ priv->stations[sta_id].tid[tid].agg.state = IWL_AGG_OFF;
++ return 0;
++ }
++
+ if (priv->stations[sta_id].tid[tid].agg.state != IWL_AGG_ON)
+- IWL_WARN(priv, "Stopping AGG while state not IWL_AGG_ON\n");
++ IWL_WARN(priv, "Stopping AGG while state not ON or starting\n");
+
+ tid_data = &priv->stations[sta_id].tid[tid];
+ ssn = (tid_data->seq_number & IEEE80211_SCTL_SEQ) >> 4;
+--- a/include/net/mac80211.h
++++ b/include/net/mac80211.h
+@@ -1244,6 +1244,12 @@ enum ieee80211_filter_flags {
+ *
+ * These flags are used with the ampdu_action() callback in
+ * &struct ieee80211_ops to indicate which action is needed.
++ *
++ * Note that drivers MUST be able to deal with a TX aggregation
++ * session being stopped even before they OK'ed starting it by
++ * calling ieee80211_start_tx_ba_cb(_irqsafe), because the peer
++ * might receive the addBA frame and send a delBA right away!
++ *
+ * @IEEE80211_AMPDU_RX_START: start Rx aggregation
+ * @IEEE80211_AMPDU_RX_STOP: stop Rx aggregation
+ * @IEEE80211_AMPDU_TX_START: start Tx aggregation
+--- a/net/mac80211/agg-tx.c
++++ b/net/mac80211/agg-tx.c
+@@ -123,13 +123,18 @@ void ieee80211_send_bar(struct ieee80211
+ ieee80211_tx_skb(sdata, skb, 0);
+ }
+
+-static int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid,
+- enum ieee80211_back_parties initiator)
++int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid,
++ enum ieee80211_back_parties initiator)
+ {
+ struct ieee80211_local *local = sta->local;
+ int ret;
+ u8 *state;
+
++#ifdef CONFIG_MAC80211_HT_DEBUG
++ printk(KERN_DEBUG "Tx BA session stop requested for %pM tid %u\n",
++ sta->sta.addr, tid);
++#endif /* CONFIG_MAC80211_HT_DEBUG */
++
+ state = &sta->ampdu_mlme.tid_state_tx[tid];
+
+ if (*state == HT_AGG_STATE_OPERATIONAL)
+@@ -143,7 +148,6 @@ static int ___ieee80211_stop_tx_ba_sessi
+
+ /* HW shall not deny going back to legacy */
+ if (WARN_ON(ret)) {
+- *state = HT_AGG_STATE_OPERATIONAL;
+ /*
+ * We may have pending packets get stuck in this case...
+ * Not bothering with a workaround for now.
+@@ -526,11 +530,6 @@ int __ieee80211_stop_tx_ba_session(struc
+ goto unlock;
+ }
+
+-#ifdef CONFIG_MAC80211_HT_DEBUG
+- printk(KERN_DEBUG "Tx BA session stop requested for %pM tid %u\n",
+- sta->sta.addr, tid);
+-#endif /* CONFIG_MAC80211_HT_DEBUG */
+-
+ ret = ___ieee80211_stop_tx_ba_session(sta, tid, initiator);
+
+ unlock:
+--- a/net/mac80211/ht.c
++++ b/net/mac80211/ht.c
+@@ -141,7 +141,6 @@ void ieee80211_process_delba(struct ieee
+ struct sta_info *sta,
+ struct ieee80211_mgmt *mgmt, size_t len)
+ {
+- struct ieee80211_local *local = sdata->local;
+ u16 tid, params;
+ u16 initiator;
+
+@@ -161,10 +160,9 @@ void ieee80211_process_delba(struct ieee
+ WLAN_BACK_INITIATOR, 0);
+ else { /* WLAN_BACK_RECIPIENT */
+ spin_lock_bh(&sta->lock);
+- sta->ampdu_mlme.tid_state_tx[tid] =
+- HT_AGG_STATE_OPERATIONAL;
++ if (sta->ampdu_mlme.tid_state_tx[tid] & HT_ADDBA_REQUESTED_MSK)
++ ___ieee80211_stop_tx_ba_session(sta, tid,
++ WLAN_BACK_RECIPIENT);
+ spin_unlock_bh(&sta->lock);
+- ieee80211_stop_tx_ba_session(&local->hw, sta->sta.addr, tid,
+- WLAN_BACK_RECIPIENT);
+ }
+ }
+--- a/net/mac80211/ieee80211_i.h
++++ b/net/mac80211/ieee80211_i.h
+@@ -1057,6 +1057,8 @@ void ieee80211_process_addba_request(str
+
+ int __ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid,
+ enum ieee80211_back_parties initiator);
++int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid,
++ enum ieee80211_back_parties initiator);
+
+ /* Spectrum management */
+ void ieee80211_process_measurement_req(struct ieee80211_sub_if_data *sdata,
--- /dev/null
+From 4253119acf412fd686ef4bd8749b5a4d70ea3a51 Mon Sep 17 00:00:00 2001
+From: Johannes Berg <johannes@sipsolutions.net>
+Date: Fri, 20 Nov 2009 09:15:51 +0100
+Subject: mac80211: fix two remote exploits
+
+From: Johannes Berg <johannes@sipsolutions.net>
+
+commit 4253119acf412fd686ef4bd8749b5a4d70ea3a51 upstream.
+
+Lennert Buytenhek noticed a remotely triggerable problem
+in mac80211, which is due to some code shuffling I did
+that ended up changing the order in which things were
+done -- this was in
+
+ commit d75636ef9c1af224f1097941879d5a8db7cd04e5
+ Author: Johannes Berg <johannes@sipsolutions.net>
+ Date: Tue Feb 10 21:25:53 2009 +0100
+
+ mac80211: RX aggregation: clean up stop session
+
+The problem is that the BUG_ON moved before the various
+checks, and as such can be triggered.
+
+As the comment indicates, the BUG_ON can be removed since
+the ampdu_action callback must already exist when the
+state is OPERATIONAL.
+
+A similar code path leads to a WARN_ON in
+ieee80211_stop_tx_ba_session, which can also be removed.
+
+Cc: Lennert Buytenhek <buytenh@marvell.com>
+Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/mac80211/agg-rx.c | 4 ----
+ net/mac80211/agg-tx.c | 2 +-
+ 2 files changed, 1 insertion(+), 5 deletions(-)
+
+--- a/net/mac80211/agg-rx.c
++++ b/net/mac80211/agg-rx.c
+@@ -85,10 +85,6 @@ void ieee80211_sta_stop_rx_ba_session(st
+ struct ieee80211_local *local = sdata->local;
+ struct sta_info *sta;
+
+- /* stop HW Rx aggregation. ampdu_action existence
+- * already verified in session init so we add the BUG_ON */
+- BUG_ON(!local->ops->ampdu_action);
+-
+ rcu_read_lock();
+
+ sta = sta_info_get(local, ra);
+--- a/net/mac80211/agg-tx.c
++++ b/net/mac80211/agg-tx.c
+@@ -546,7 +546,7 @@ int ieee80211_stop_tx_ba_session(struct
+ struct sta_info *sta;
+ int ret = 0;
+
+- if (WARN_ON(!local->ops->ampdu_action))
++ if (!local->ops->ampdu_action)
+ return -EINVAL;
+
+ if (tid >= STA_TID_NUM)
--- /dev/null
+From 96d25e532234bec1a1989e6e1baf702d43a78b0d Mon Sep 17 00:00:00 2001
+From: Trond Myklebust <Trond.Myklebust@netapp.com>
+Date: Wed, 11 Nov 2009 16:15:42 +0900
+Subject: NFSv4: Fix a cache validation bug which causes getcwd() to return ENOENT
+
+From: Trond Myklebust <Trond.Myklebust@netapp.com>
+
+commit 96d25e532234bec1a1989e6e1baf702d43a78b0d upstream.
+
+Changeset a65318bf3afc93ce49227e849d213799b072c5fd (NFSv4: Simplify some
+cache consistency post-op GETATTRs) incorrectly changed the getattr
+bitmap for readdir().
+This causes the readdir() function to fail to return a
+fileid/inode number, which again exposed a bug in the NFS readdir code that
+causes spurious ENOENT errors to appear in applications (see
+http://bugzilla.kernel.org/show_bug.cgi?id=14541).
+
+The immediate band aid is to revert the incorrect bitmap change, but more
+long term, we should change the NFS readdir code to cope with the
+fact that NFSv4 servers are not required to support fileids/inode numbers.
+
+Reported-by: Daniel J Blueman <daniel.blueman@gmail.com>
+Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/nfs/nfs4proc.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/fs/nfs/nfs4proc.c
++++ b/fs/nfs/nfs4proc.c
+@@ -2740,7 +2740,7 @@ static int _nfs4_proc_readdir(struct den
+ .pages = &page,
+ .pgbase = 0,
+ .count = count,
+- .bitmask = NFS_SERVER(dentry->d_inode)->cache_consistency_bitmask,
++ .bitmask = NFS_SERVER(dentry->d_inode)->attr_bitmask,
+ };
+ struct nfs4_readdir_res res;
+ struct rpc_message msg = {
--- /dev/null
+From 45ba564d765d6165330e9bb14a197bdd348c114d Mon Sep 17 00:00:00 2001
+From: Johannes Berg <johannes@sipsolutions.net>
+Date: Mon, 23 Nov 2009 11:27:30 +0100
+Subject: rfkill: fix miscdev ops
+
+From: Johannes Berg <johannes@sipsolutions.net>
+
+commit 45ba564d765d6165330e9bb14a197bdd348c114d upstream.
+
+The /dev/rfkill ops don't refer to the module,
+so it is possible to unload the module while
+file descriptors are open. Fix this oversight.
+
+Reported-by: Maxim Levitsky <maximlevitsky@gmail.com>
+Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/rfkill/core.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/net/rfkill/core.c
++++ b/net/rfkill/core.c
+@@ -1180,6 +1180,7 @@ static long rfkill_fop_ioctl(struct file
+ #endif
+
+ static const struct file_operations rfkill_fops = {
++ .owner = THIS_MODULE,
+ .open = rfkill_fop_open,
+ .read = rfkill_fop_read,
+ .write = rfkill_fop_write,
usb-xhci-fix-bug-memory-free-after-failed-initialization.patch
usb-xhci-fix-trb-physical-to-virtual-address-translation.patch
usb-xhci-fix-scratchpad-deallocation.patch
+iwlwifi-use-rts-cts-as-the-preferred-protection-mechanism-for-6000-series.patch
+iwlwifi-fix-issue-on-file-transfer-stalled-in-ht-mode.patch
+ima-replace-gfp_kernel-with-gfp_nofs.patch
+nfsv4-fix-a-cache-validation-bug-which-causes-getcwd-to-return-enoent.patch
+fuse-reject-o_direct-flag-also-in-fuse_create.patch
+asoc-fix-suspend-with-active-audio-streams.patch
+asoc-aic23-fixing-infinite-loop-in-resume-path.patch
+mac80211-fix-two-remote-exploits.patch
+mac80211-fix-spurious-delba-handling.patch
+b43-work-around-mac80211-race-condition.patch
+rfkill-fix-miscdev-ops.patch
+thinkpad-acpi-fix-sign-of-erestartsys-return.patch
+enable-acpi-pdc-handshake-for-via-centaur-cpus.patch
+v4l-dvb-13436-cxusb-fix-hang-on-dvico-fusionhdtv-dvb-t-dual-digital-4-rev-1.patch
+v4l-dvb-13321-radio-gemtek-pci-fix-double-mutex_lock.patch
+v4l-dvb-12948-v4l1-compat-fix-vidioc_g_std-handling.patch
+v4l-dvb-12280-gspca-sonixj-remove-auto-gain-wb-expo-for-the-ov7660-sensor.patch
+v4l-dvb-12356-gspca-sonixj-webcam-0c45-6148-added.patch
+v4l-dvb-12501-gspca-sonixj-do-the-ov7660-sensor-work-again.patch
+v4l-dvb-12691-gspca-sonixj-don-t-use-mdelay.patch
+v4l-dvb-12696-gspca-sonixj-sn9c102-two-drivers-for-0c45-60fc-and-0c45-613e.patch
+drm-i915-select-config_shmem.patch
+drm-work-around-edids-with-bad-htotal-vtotal-values.patch
+drm-i915-fix-irq-stall-issue-on-ironlake.patch
--- /dev/null
+From 80a8d1228e90349b4514e8c925c061fa5cbcea75 Mon Sep 17 00:00:00 2001
+From: Roel Kluin <roel.kluin@gmail.com>
+Date: Fri, 20 Nov 2009 19:48:23 +0100
+Subject: thinkpad-acpi: fix sign of ERESTARTSYS return
+
+From: Roel Kluin <roel.kluin@gmail.com>
+
+commit 80a8d1228e90349b4514e8c925c061fa5cbcea75 upstream.
+
+The returned error should be negative
+
+Signed-off-by: Roel Kluin <roel.kluin@gmail.com>
+Acked-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Len Brown <len.brown@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/platform/x86/thinkpad_acpi.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/platform/x86/thinkpad_acpi.c
++++ b/drivers/platform/x86/thinkpad_acpi.c
+@@ -5863,7 +5863,7 @@ static int brightness_write(char *buf)
+ * Doing it this way makes the syscall restartable in case of EINTR
+ */
+ rc = brightness_set(level);
+- return (rc == -EINTR)? ERESTARTSYS : rc;
++ return (rc == -EINTR)? -ERESTARTSYS : rc;
+ }
+
+ static struct ibm_struct brightness_driver_data = {
--- /dev/null
+From d8f400efc1ef7b344e07590fb6b77431bc358ba0 Mon Sep 17 00:00:00 2001
+From: Jean-Francois Moine <moinejf@free.fr>
+Date: Wed, 8 Jul 2009 06:33:44 -0300
+Subject: V4L/DVB (12280): gspca - sonixj: Remove auto gain/wb/expo for the ov7660 sensor.
+
+From: Jean-Francois Moine <moinejf@free.fr>
+
+commit d8f400efc1ef7b344e07590fb6b77431bc358ba0 upstream.
+
+Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/gspca/sonixj.c | 13 ++++++++-----
+ 1 file changed, 8 insertions(+), 5 deletions(-)
+
+--- a/drivers/media/video/gspca/sonixj.c
++++ b/drivers/media/video/gspca/sonixj.c
+@@ -727,13 +727,13 @@ static const u8 ov7660_sensor_init[][8]
+ {0xa1, 0x21, 0x12, 0x05, 0x00, 0x00, 0x00, 0x10},
+ /* Outformat = rawRGB */
+ {0xa1, 0x21, 0x13, 0xb8, 0x00, 0x00, 0x00, 0x10}, /* init COM8 */
+- {0xd1, 0x21, 0x00, 0x01, 0x74, 0x74, 0x00, 0x10},
++ {0xd1, 0x21, 0x00, 0x01, 0x74, 0x92, 0x00, 0x10},
+ /* GAIN BLUE RED VREF */
+ {0xd1, 0x21, 0x04, 0x00, 0x7d, 0x62, 0x00, 0x10},
+ /* COM 1 BAVE GEAVE AECHH */
+ {0xb1, 0x21, 0x08, 0x83, 0x01, 0x00, 0x00, 0x10}, /* RAVE COM2 */
+ {0xd1, 0x21, 0x0c, 0x00, 0x08, 0x04, 0x4f, 0x10}, /* COM 3 4 5 6 */
+- {0xd1, 0x21, 0x10, 0x7f, 0x40, 0x05, 0xff, 0x10},
++ {0xd1, 0x21, 0x10, 0x7f, 0x40, 0x05, 0xf8, 0x10},
+ /* AECH CLKRC COM7 COM8 */
+ {0xc1, 0x21, 0x14, 0x2c, 0x00, 0x02, 0x00, 0x10}, /* COM9 COM10 */
+ {0xd1, 0x21, 0x17, 0x10, 0x60, 0x02, 0x7b, 0x10},
+@@ -1637,16 +1637,19 @@ static void setfreq(struct gspca_dev *gs
+ if (gspca_dev->ctrl_dis & (1 << FREQ_IDX))
+ return;
+ if (sd->sensor == SENSOR_OV7660) {
++ u8 com8;
++
++ com8 = 0xf8; /* no auto gain/wb/expo */
+ switch (sd->freq) {
+ case 0: /* Banding filter disabled */
+- i2c_w1(gspca_dev, 0x13, 0xdf);
++ i2c_w1(gspca_dev, 0x13, com8 & 0xdf);
+ break;
+ case 1: /* 50 hz */
+- i2c_w1(gspca_dev, 0x13, 0xff);
++ i2c_w1(gspca_dev, 0x13, com8);
+ i2c_w1(gspca_dev, 0x3b, 0x0a);
+ break;
+ case 2: /* 60 hz */
+- i2c_w1(gspca_dev, 0x13, 0xff);
++ i2c_w1(gspca_dev, 0x13, com8);
+ i2c_w1(gspca_dev, 0x3b, 0x02);
+ break;
+ }
--- /dev/null
+From 6baefab531b22288be3b4ddef5671ea6469b09f8 Mon Sep 17 00:00:00 2001
+From: Denis Loginov <dinvlad@gmail.com>
+Date: Tue, 28 Jul 2009 03:39:10 -0300
+Subject: V4L/DVB (12356): gspca - sonixj: Webcam 0c45:6148 added
+
+From: Denis Loginov <dinvlad@gmail.com>
+
+commit 6baefab531b22288be3b4ddef5671ea6469b09f8 upstream.
+
+Signed-off-by: Denis Loginov <dinvlad@gmail.com>
+Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ Documentation/video4linux/gspca.txt | 1 +
+ drivers/media/video/gspca/sonixj.c | 8 ++++++--
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+--- a/Documentation/video4linux/gspca.txt
++++ b/Documentation/video4linux/gspca.txt
+@@ -284,6 +284,7 @@ sonixj 0c45:613a Microdia Sonix PC Came
+ sonixj 0c45:613b Surfer SN-206
+ sonixj 0c45:613c Sonix Pccam168
+ sonixj 0c45:6143 Sonix Pccam168
++sonixj 0c45:6148 Digitus DA-70811/ZSMC USB PC Camera ZS211/Microdia
+ sn9c20x 0c45:6240 PC Camera (SN9C201 + MT9M001)
+ sn9c20x 0c45:6242 PC Camera (SN9C201 + MT9M111)
+ sn9c20x 0c45:6248 PC Camera (SN9C201 + OV9655)
+--- a/drivers/media/video/gspca/sonixj.c
++++ b/drivers/media/video/gspca/sonixj.c
+@@ -2339,7 +2339,8 @@ static const __devinitdata struct usb_de
+ {USB_DEVICE(0x0c45, 0x60fe), BSI(SN9C105, OV7630, 0x21)},
+ #endif
+ {USB_DEVICE(0x0c45, 0x6100), BSI(SN9C120, MI0360, 0x5d)}, /*sn9c128*/
+-/* {USB_DEVICE(0x0c45, 0x6108), BSI(SN9C120, OM6801, 0x??)}, */
++/* {USB_DEVICE(0x0c45, 0x6102), BSI(SN9C120, PO2030N, ??)}, */
++/* {USB_DEVICE(0x0c45, 0x6108), BSI(SN9C120, OM6802, 0x21)}, */
+ {USB_DEVICE(0x0c45, 0x610a), BSI(SN9C120, OV7648, 0x21)}, /*sn9c128*/
+ {USB_DEVICE(0x0c45, 0x610b), BSI(SN9C120, OV7660, 0x21)}, /*sn9c128*/
+ {USB_DEVICE(0x0c45, 0x610c), BSI(SN9C120, HV7131R, 0x11)}, /*sn9c128*/
+@@ -2355,6 +2356,7 @@ static const __devinitdata struct usb_de
+ #if !defined CONFIG_USB_SN9C102 && !defined CONFIG_USB_SN9C102_MODULE
+ {USB_DEVICE(0x0c45, 0x6130), BSI(SN9C120, MI0360, 0x5d)},
+ #endif
++/* {USB_DEVICE(0x0c45, 0x6132), BSI(SN9C120, OV7670, 0x21)}, */
+ {USB_DEVICE(0x0c45, 0x6138), BSI(SN9C120, MO4000, 0x21)},
+ {USB_DEVICE(0x0c45, 0x613a), BSI(SN9C120, OV7648, 0x21)},
+ #if !defined CONFIG_USB_SN9C102 && !defined CONFIG_USB_SN9C102_MODULE
+@@ -2362,7 +2364,9 @@ static const __devinitdata struct usb_de
+ #endif
+ {USB_DEVICE(0x0c45, 0x613c), BSI(SN9C120, HV7131R, 0x11)},
+ {USB_DEVICE(0x0c45, 0x613e), BSI(SN9C120, OV7630, 0x21)},
+- {USB_DEVICE(0x0c45, 0x6143), BSI(SN9C120, SP80708, 0x18)},
++/* {USB_DEVICE(0x0c45, 0x6142), BSI(SN9C120, PO2030N, ??)}, *sn9c120b*/
++ {USB_DEVICE(0x0c45, 0x6143), BSI(SN9C120, SP80708, 0x18)}, /*sn9c120b*/
++ {USB_DEVICE(0x0c45, 0x6148), BSI(SN9C120, OM6802, 0x21)}, /*sn9c120b*/
+ {}
+ };
+ MODULE_DEVICE_TABLE(usb, device_table);
--- /dev/null
+From 47f7f6fb7949b6546baf4b6f26bf0ca075d12759 Mon Sep 17 00:00:00 2001
+From: Jean-Francois Moine <moinejf@free.fr>
+Date: Tue, 25 Aug 2009 06:14:54 -0300
+Subject: V4L/DVB (12501): gspca - sonixj: Do the ov7660 sensor work again.
+
+From: Jean-Francois Moine <moinejf@free.fr>
+
+commit 47f7f6fb7949b6546baf4b6f26bf0ca075d12759 upstream.
+
+- bad sensor power
+- bad edge gain/threshold
+- set back the auto gain
+- light frequency filter inverted
+
+Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/gspca/sonixj.c | 23 +++++++----------------
+ 1 file changed, 7 insertions(+), 16 deletions(-)
+
+--- a/drivers/media/video/gspca/sonixj.c
++++ b/drivers/media/video/gspca/sonixj.c
+@@ -733,7 +733,7 @@ static const u8 ov7660_sensor_init[][8]
+ /* COM 1 BAVE GEAVE AECHH */
+ {0xb1, 0x21, 0x08, 0x83, 0x01, 0x00, 0x00, 0x10}, /* RAVE COM2 */
+ {0xd1, 0x21, 0x0c, 0x00, 0x08, 0x04, 0x4f, 0x10}, /* COM 3 4 5 6 */
+- {0xd1, 0x21, 0x10, 0x7f, 0x40, 0x05, 0xf8, 0x10},
++ {0xd1, 0x21, 0x10, 0x7f, 0x40, 0x05, 0xff, 0x10},
+ /* AECH CLKRC COM7 COM8 */
+ {0xc1, 0x21, 0x14, 0x2c, 0x00, 0x02, 0x00, 0x10}, /* COM9 COM10 */
+ {0xd1, 0x21, 0x17, 0x10, 0x60, 0x02, 0x7b, 0x10},
+@@ -783,7 +783,7 @@ static const u8 ov7660_sensor_init[][8]
+ {0xc1, 0x21, 0x88, 0xaf, 0xc7, 0xdf, 0x00, 0x10}, /* gamma curve */
+ {0xc1, 0x21, 0x8b, 0x99, 0x99, 0xcf, 0x00, 0x10}, /* reserved */
+ {0xb1, 0x21, 0x92, 0x00, 0x00, 0x00, 0x00, 0x10}, /* DM_LNL/H */
+- {0xb1, 0x21, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x10},
++ {0xa1, 0x21, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x10},
+ /****** (some exchanges in the win trace) ******/
+ {0xa1, 0x21, 0x1e, 0x01, 0x00, 0x00, 0x00, 0x10}, /* MVFP */
+ /* bits[3..0]reserved */
+@@ -1145,11 +1145,6 @@ static int configure_gpio(struct gspca_d
+ reg_w1(gspca_dev, 0x01, 0x42);
+ break;
+ case SENSOR_OV7660:
+- reg_w1(gspca_dev, 0x01, 0x61);
+- reg_w1(gspca_dev, 0x17, 0x20);
+- reg_w1(gspca_dev, 0x01, 0x60);
+- reg_w1(gspca_dev, 0x01, 0x40);
+- break;
+ case SENSOR_SP80708:
+ reg_w1(gspca_dev, 0x01, 0x63);
+ reg_w1(gspca_dev, 0x17, 0x20);
+@@ -1624,6 +1619,8 @@ static void setvflip(struct sd *sd)
+
+ static void setinfrared(struct sd *sd)
+ {
++ if (sd->gspca_dev.ctrl_dis & (1 << INFRARED_IDX))
++ return;
+ /*fixme: different sequence for StarCam Clip and StarCam 370i */
+ /* Clip */
+ i2c_w1(&sd->gspca_dev, 0x02, /* gpio */
+@@ -1639,10 +1636,10 @@ static void setfreq(struct gspca_dev *gs
+ if (sd->sensor == SENSOR_OV7660) {
+ u8 com8;
+
+- com8 = 0xf8; /* no auto gain/wb/expo */
++ com8 = 0xdf; /* auto gain/wb/expo */
+ switch (sd->freq) {
+ case 0: /* Banding filter disabled */
+- i2c_w1(gspca_dev, 0x13, com8 & 0xdf);
++ i2c_w1(gspca_dev, 0x13, com8 | 0x20);
+ break;
+ case 1: /* 50 hz */
+ i2c_w1(gspca_dev, 0x13, com8);
+@@ -1799,12 +1796,6 @@ static int sd_start(struct gspca_dev *gs
+ reg_w1(gspca_dev, 0x99, 0x60);
+ break;
+ case SENSOR_OV7660:
+- reg_w1(gspca_dev, 0x9a, 0x05);
+- if (sd->bridge == BRIDGE_SN9C105)
+- reg_w1(gspca_dev, 0x99, 0xff);
+- else
+- reg_w1(gspca_dev, 0x99, 0x5b);
+- break;
+ case SENSOR_SP80708:
+ reg_w1(gspca_dev, 0x9a, 0x05);
+ reg_w1(gspca_dev, 0x99, 0x59);
+@@ -2328,7 +2319,7 @@ static const __devinitdata struct usb_de
+ {USB_DEVICE(0x0c45, 0x607c), BSI(SN9C102P, HV7131R, 0x11)},
+ /* {USB_DEVICE(0x0c45, 0x607e), BSI(SN9C102P, OV7630, 0x??)}, */
+ {USB_DEVICE(0x0c45, 0x60c0), BSI(SN9C105, MI0360, 0x5d)},
+-/* {USB_DEVICE(0x0c45, 0x60c8), BSI(SN9C105, OM6801, 0x??)}, */
++/* {USB_DEVICE(0x0c45, 0x60c8), BSI(SN9C105, OM6802, 0x??)}, */
+ /* {USB_DEVICE(0x0c45, 0x60cc), BSI(SN9C105, HV7131GP, 0x??)}, */
+ {USB_DEVICE(0x0c45, 0x60ec), BSI(SN9C105, MO4000, 0x21)},
+ /* {USB_DEVICE(0x0c45, 0x60ef), BSI(SN9C105, ICM105C, 0x??)}, */
--- /dev/null
+From 1f78a976ce18bc98e8b509cee04c5b3756098614 Mon Sep 17 00:00:00 2001
+From: Jean-Francois Moine <moinejf@free.fr>
+Date: Sat, 29 Aug 2009 07:11:58 -0300
+Subject: V4L/DVB (12691): gspca - sonixj: Don't use mdelay().
+
+From: Jean-Francois Moine <moinejf@free.fr>
+
+commit 1f78a976ce18bc98e8b509cee04c5b3756098614 upstream.
+
+Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/gspca/sonixj.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/media/video/gspca/sonixj.c
++++ b/drivers/media/video/gspca/sonixj.c
+@@ -1150,7 +1150,7 @@ static int configure_gpio(struct gspca_d
+ reg_w1(gspca_dev, 0x17, 0x20);
+ reg_w1(gspca_dev, 0x01, 0x62);
+ reg_w1(gspca_dev, 0x01, 0x42);
+- mdelay(100);
++ msleep(100);
+ reg_w1(gspca_dev, 0x02, 0x62);
+ break;
+ /* case SENSOR_HV7131R: */
--- /dev/null
+From f077b0a64856c5b3bf346ae9fba8631c1fb210cf Mon Sep 17 00:00:00 2001
+From: Jean-Francois Moine <moinejf@free.fr>
+Date: Tue, 1 Sep 2009 14:52:04 -0300
+Subject: V4L/DVB (12696): gspca - sonixj / sn9c102: Two drivers for 0c45:60fc and 0c45:613e.
+
+From: Jean-Francois Moine <moinejf@free.fr>
+
+commit f077b0a64856c5b3bf346ae9fba8631c1fb210cf upstream.
+
+Let 0c45:60fc in sn9c102 and 0c45:613e in gspca-sonixj (sensor not supported).
+
+Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/gspca/sonixj.c | 2 +-
+ drivers/media/video/sn9c102/sn9c102_devtable.h | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/media/video/gspca/sonixj.c
++++ b/drivers/media/video/gspca/sonixj.c
+@@ -2325,8 +2325,8 @@ static const __devinitdata struct usb_de
+ /* {USB_DEVICE(0x0c45, 0x60ef), BSI(SN9C105, ICM105C, 0x??)}, */
+ /* {USB_DEVICE(0x0c45, 0x60fa), BSI(SN9C105, OV7648, 0x??)}, */
+ {USB_DEVICE(0x0c45, 0x60fb), BSI(SN9C105, OV7660, 0x21)},
+- {USB_DEVICE(0x0c45, 0x60fc), BSI(SN9C105, HV7131R, 0x11)},
+ #if !defined CONFIG_USB_SN9C102 && !defined CONFIG_USB_SN9C102_MODULE
++ {USB_DEVICE(0x0c45, 0x60fc), BSI(SN9C105, HV7131R, 0x11)},
+ {USB_DEVICE(0x0c45, 0x60fe), BSI(SN9C105, OV7630, 0x21)},
+ #endif
+ {USB_DEVICE(0x0c45, 0x6100), BSI(SN9C120, MI0360, 0x5d)}, /*sn9c128*/
+--- a/drivers/media/video/sn9c102/sn9c102_devtable.h
++++ b/drivers/media/video/sn9c102/sn9c102_devtable.h
+@@ -123,8 +123,8 @@ static const struct usb_device_id sn9c10
+ { SN9C102_USB_DEVICE(0x0c45, 0x613b, BRIDGE_SN9C120), },
+ #if !defined CONFIG_USB_GSPCA && !defined CONFIG_USB_GSPCA_MODULE
+ { SN9C102_USB_DEVICE(0x0c45, 0x613c, BRIDGE_SN9C120), },
+-#endif
+ { SN9C102_USB_DEVICE(0x0c45, 0x613e, BRIDGE_SN9C120), },
++#endif
+ { }
+ };
+
--- /dev/null
+From 707ca1e30f087f9a6d144693dafc4b67880678c2 Mon Sep 17 00:00:00 2001
+From: Hans Verkuil <hverkuil@xs4all.nl>
+Date: Tue, 15 Sep 2009 08:08:20 -0300
+Subject: V4L/DVB (12948): v4l1-compat: fix VIDIOC_G_STD handling
+
+From: Hans Verkuil <hverkuil@xs4all.nl>
+
+commit 707ca1e30f087f9a6d144693dafc4b67880678c2 upstream.
+
+The VIDIOC_G_STD ioctl may not be present in the case of radio receivers.
+In that case G_STD will return an error. The v4l1-compat layer should not
+attempt to propagate that error to the caller, instead it should be
+ignored.
+
+Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/v4l1-compat.c | 14 ++++++--------
+ 1 file changed, 6 insertions(+), 8 deletions(-)
+
+--- a/drivers/media/video/v4l1-compat.c
++++ b/drivers/media/video/v4l1-compat.c
+@@ -565,10 +565,9 @@ static noinline long v4l1_compat_get_inp
+ break;
+ }
+ chan->norm = 0;
+- err = drv(file, VIDIOC_G_STD, &sid);
+- if (err < 0)
+- dprintk("VIDIOCGCHAN / VIDIOC_G_STD: %ld\n", err);
+- if (err == 0) {
++ /* Note: G_STD might not be present for radio receivers,
++ * so we should ignore any errors. */
++ if (drv(file, VIDIOC_G_STD, &sid) == 0) {
+ if (sid & V4L2_STD_PAL)
+ chan->norm = VIDEO_MODE_PAL;
+ if (sid & V4L2_STD_NTSC)
+@@ -777,10 +776,9 @@ static noinline long v4l1_compat_get_tun
+ tun->flags |= VIDEO_TUNER_SECAM;
+ }
+
+- err = drv(file, VIDIOC_G_STD, &sid);
+- if (err < 0)
+- dprintk("VIDIOCGTUNER / VIDIOC_G_STD: %ld\n", err);
+- if (err == 0) {
++ /* Note: G_STD might not be present for radio receivers,
++ * so we should ignore any errors. */
++ if (drv(file, VIDIOC_G_STD, &sid) == 0) {
+ if (sid & V4L2_STD_PAL)
+ tun->mode = VIDEO_MODE_PAL;
+ if (sid & V4L2_STD_NTSC)
--- /dev/null
+From 3addbb8075c00e2a2408c192bd1002dead26b2aa Mon Sep 17 00:00:00 2001
+From: Hans Verkuil <hverkuil@xs4all.nl>
+Date: Thu, 5 Nov 2009 13:26:32 -0300
+Subject: V4L/DVB (13321): radio-gemtek-pci: fix double mutex_lock
+
+From: Hans Verkuil <hverkuil@xs4all.nl>
+
+commit 3addbb8075c00e2a2408c192bd1002dead26b2aa upstream.
+
+Double mutexlock found by the Linux Driver Verification project and
+reported by Alexander Strakh.
+
+Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/radio/radio-gemtek-pci.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+--- a/drivers/media/radio/radio-gemtek-pci.c
++++ b/drivers/media/radio/radio-gemtek-pci.c
+@@ -181,12 +181,10 @@ static void gemtek_pci_mute(struct gemte
+
+ static void gemtek_pci_unmute(struct gemtek_pci *card)
+ {
+- mutex_lock(&card->lock);
+ if (card->mute) {
+ gemtek_pci_setfrequency(card, card->current_frequency);
+ card->mute = false;
+ }
+- mutex_unlock(&card->lock);
+ }
+
+ static int gemtek_pci_getsignal(struct gemtek_pci *card)
--- /dev/null
+From 0bc3518019f917a370935055f07698a4e9b3ea20 Mon Sep 17 00:00:00 2001
+From: Robert Lowery <rglowery@exemail.com.au>
+Date: Sun, 8 Nov 2009 00:00:11 -0300
+Subject: V4L/DVB (13436): cxusb: Fix hang on DViCO FusionHDTV DVB-T Dual Digital 4 (rev 1)
+
+From: Robert Lowery <rglowery@exemail.com.au>
+
+commit 0bc3518019f917a370935055f07698a4e9b3ea20 upstream.
+
+Address yet another regression introduced by the introduction of the zl10353
+disable_i2c_gate field.
+
+djh - I unmangled the patch which apparently got screwed up in the user's
+email client.
+
+Signed-off-by: Robert Lowery <rglowery@exemail.com.au>
+Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/dvb/dvb-usb/cxusb.c | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+--- a/drivers/media/dvb/dvb-usb/cxusb.c
++++ b/drivers/media/dvb/dvb-usb/cxusb.c
+@@ -663,6 +663,14 @@ static struct zl10353_config cxusb_zl103
+ .parallel_ts = 1,
+ };
+
++static struct zl10353_config cxusb_zl10353_xc3028_config_no_i2c_gate = {
++ .demod_address = 0x0f,
++ .if2 = 45600,
++ .no_tuner = 1,
++ .parallel_ts = 1,
++ .disable_i2c_gate_ctrl = 1,
++};
++
+ static struct mt352_config cxusb_mt352_xc3028_config = {
+ .demod_address = 0x0f,
+ .if2 = 4560,
+@@ -894,7 +902,7 @@ static int cxusb_dualdig4_frontend_attac
+ cxusb_bluebird_gpio_pulse(adap->dev, 0x02, 1);
+
+ if ((adap->fe = dvb_attach(zl10353_attach,
+- &cxusb_zl10353_xc3028_config,
++ &cxusb_zl10353_xc3028_config_no_i2c_gate,
+ &adap->dev->i2c_adap)) == NULL)
+ return -EIO;
+