--- /dev/null
+From edfe3bfc1b779ddda9bcff523eb022dda37b93c8 Mon Sep 17 00:00:00 2001
+From: David Henningsson <david.henningsson@canonical.com>
+Date: Tue, 12 Jun 2012 13:15:12 +0200
+Subject: ALSA: HDA: Pin fixup for Zotac Z68 motherboard
+
+From: David Henningsson <david.henningsson@canonical.com>
+
+commit edfe3bfc1b779ddda9bcff523eb022dda37b93c8 upstream.
+
+Pin 0x1b was connected to the front panel connector, which according to
+the HDA standard should contain a mic and a headphone. In this case,
+the headphone was listed as "line out" by BIOS.
+
+BugLink: https://bugs.launchpad.net/bugs/993162
+Signed-off-by: David Henningsson <david.henningsson@canonical.com>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ sound/pci/hda/patch_realtek.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -6606,6 +6606,7 @@ enum {
+ ALC662_FIXUP_ASUS_MODE7,
+ ALC662_FIXUP_ASUS_MODE8,
+ ALC662_FIXUP_NO_JACK_DETECT,
++ ALC662_FIXUP_ZOTAC_Z68,
+ };
+
+ static const struct alc_fixup alc662_fixups[] = {
+@@ -6755,6 +6756,13 @@ static const struct alc_fixup alc662_fix
+ .type = ALC_FIXUP_FUNC,
+ .v.func = alc_fixup_no_jack_detect,
+ },
++ [ALC662_FIXUP_ZOTAC_Z68] = {
++ .type = ALC_FIXUP_PINS,
++ .v.pins = (const struct alc_pincfg[]) {
++ { 0x1b, 0x02214020 }, /* Front HP */
++ { }
++ }
++ },
+ };
+
+ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
+@@ -6768,6 +6776,7 @@ static const struct snd_pci_quirk alc662
+ SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD),
+ SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo Ideapad Y550P", ALC662_FIXUP_IDEAPAD),
+ SND_PCI_QUIRK(0x17aa, 0x3a0d, "Lenovo Ideapad Y550", ALC662_FIXUP_IDEAPAD),
++ SND_PCI_QUIRK(0x19da, 0xa130, "Zotac Z68", ALC662_FIXUP_ZOTAC_Z68),
+ SND_PCI_QUIRK(0x1b35, 0x2206, "CZC P10T", ALC662_FIXUP_CZC_P10T),
+
+ #if 0
--- /dev/null
+From 69aaedd3cfd23b2c732e3cf1227370a35f5c89d4 Mon Sep 17 00:00:00 2001
+From: Seth Forshee <seth.forshee@canonical.com>
+Date: Fri, 1 Jun 2012 09:13:17 -0500
+Subject: bcma: add ext PA workaround for BCM4331 and BCM43431
+
+From: Seth Forshee <seth.forshee@canonical.com>
+
+commit 69aaedd3cfd23b2c732e3cf1227370a35f5c89d4 upstream.
+
+MacBook Pro models with BCM4331 wireless have been found to have the ext
+PA lines disabled after resuming from S3 without external power attach.
+This causes them to be unable to transmit. Add a workaround to ensure
+that the ext PA lines are enabled on BCM4331. Also extend all handling
+of ext PA line muxing to BCM43431 as is done in the Broadcom SDK.
+
+BugLink: http://bugs.launchpad.net/bugs/925577
+Cc: Arend van Spriel <arend@broadcom.com>
+Cc: Hauke Mehrtens <hauke@hauke-m.de>
+Signed-off-by: Seth Forshee <seth.forshee@canonical.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/bcma/driver_chipcommon_pmu.c | 4 +++-
+ drivers/bcma/sprom.c | 4 ++--
+ 2 files changed, 5 insertions(+), 3 deletions(-)
+
+--- a/drivers/bcma/driver_chipcommon_pmu.c
++++ b/drivers/bcma/driver_chipcommon_pmu.c
+@@ -139,7 +139,9 @@ void bcma_pmu_workarounds(struct bcma_dr
+ bcma_chipco_chipctl_maskset(cc, 0, ~0, 0x7);
+ break;
+ case 0x4331:
+- /* BCM4331 workaround is SPROM-related, we put it in sprom.c */
++ case 43431:
++ /* Ext PA lines must be enabled for tx on BCM4331 */
++ bcma_chipco_bcm4331_ext_pa_lines_ctl(cc, true);
+ break;
+ case 43224:
+ if (bus->chipinfo.rev == 0) {
+--- a/drivers/bcma/sprom.c
++++ b/drivers/bcma/sprom.c
+@@ -432,13 +432,13 @@ int bcma_sprom_get(struct bcma_bus *bus)
+ if (!sprom)
+ return -ENOMEM;
+
+- if (bus->chipinfo.id == 0x4331)
++ if (bus->chipinfo.id == 0x4331 || bus->chipinfo.id == 43431)
+ bcma_chipco_bcm4331_ext_pa_lines_ctl(&bus->drv_cc, false);
+
+ pr_debug("SPROM offset 0x%x\n", offset);
+ bcma_sprom_read(bus, offset, sprom);
+
+- if (bus->chipinfo.id == 0x4331)
++ if (bus->chipinfo.id == 0x4331 || bus->chipinfo.id == 43431)
+ bcma_chipco_bcm4331_ext_pa_lines_ctl(&bus->drv_cc, true);
+
+ err = bcma_sprom_valid(sprom);
--- /dev/null
+From 148c87c89e1a8863d3d965179f3ab1a06490569e Mon Sep 17 00:00:00 2001
+From: AnilKumar Ch <anilkumar@ti.com>
+Date: Wed, 23 May 2012 17:45:10 +0530
+Subject: can: c_can: fix an interrupt thrash issue with c_can driver
+
+From: AnilKumar Ch <anilkumar@ti.com>
+
+commit 148c87c89e1a8863d3d965179f3ab1a06490569e upstream.
+
+This patch fixes an interrupt thrash issue with c_can driver.
+
+In c_can_isr() function interrupts are disabled and enabled only in
+c_can_poll() function. c_can_isr() & c_can_poll() both read the
+irqstatus flag. However, irqstatus is always read as 0 in c_can_poll()
+because all C_CAN interrupts are disabled in c_can_isr(). This causes
+all interrupts to be re-enabled in c_can_poll() which in turn causes
+another interrupt since the event is not really handled. This keeps
+happening causing a flood of interrupts.
+
+To fix this, read the irqstatus register in isr and use the same cached
+value in the poll function.
+
+Signed-off-by: AnilKumar Ch <anilkumar@ti.com>
+Acked-by: Wolfgang Grandegger <wg@grandegger.com>
+Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/can/c_can/c_can.c | 7 +++----
+ drivers/net/can/c_can/c_can.h | 1 +
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+--- a/drivers/net/can/c_can/c_can.c
++++ b/drivers/net/can/c_can/c_can.c
+@@ -952,7 +952,7 @@ static int c_can_poll(struct napi_struct
+ struct net_device *dev = napi->dev;
+ struct c_can_priv *priv = netdev_priv(dev);
+
+- irqstatus = priv->read_reg(priv, &priv->regs->interrupt);
++ irqstatus = priv->irqstatus;
+ if (!irqstatus)
+ goto end;
+
+@@ -1030,12 +1030,11 @@ end:
+
+ static irqreturn_t c_can_isr(int irq, void *dev_id)
+ {
+- u16 irqstatus;
+ struct net_device *dev = (struct net_device *)dev_id;
+ struct c_can_priv *priv = netdev_priv(dev);
+
+- irqstatus = priv->read_reg(priv, &priv->regs->interrupt);
+- if (!irqstatus)
++ priv->irqstatus = priv->read_reg(priv, &priv->regs->interrupt);
++ if (!priv->irqstatus)
+ return IRQ_NONE;
+
+ /* disable all interrupts and schedule the NAPI */
+--- a/drivers/net/can/c_can/c_can.h
++++ b/drivers/net/can/c_can/c_can.h
+@@ -76,6 +76,7 @@ struct c_can_priv {
+ unsigned int tx_next;
+ unsigned int tx_echo;
+ void *priv; /* for board-specific data */
++ u16 irqstatus;
+ };
+
+ struct net_device *alloc_c_can_dev(void);
--- /dev/null
+From 617caccebe451716df21c069b079d5936ed7b0f3 Mon Sep 17 00:00:00 2001
+From: AnilKumar Ch <anilkumar@ti.com>
+Date: Wed, 23 May 2012 17:45:09 +0530
+Subject: can: c_can: fix "BUG! echo_skb is occupied!" during transmit
+
+From: AnilKumar Ch <anilkumar@ti.com>
+
+commit 617caccebe451716df21c069b079d5936ed7b0f3 upstream.
+
+This patch fixes an issue with transmit routine, which causes
+"can_put_echo_skb: BUG! echo_skb is occupied!" message when
+using "cansequence -p" on D_CAN controller.
+
+In c_can driver, while transmitting packets tx_echo flag holds
+the no of can frames put for transmission into the hardware.
+
+As the comment above c_can_do_tx() indicates, if we find any packet
+which is not transmitted then we should stop looking for more.
+In the current implementation this is not taken care of causing the
+said message.
+
+Also, fix the condition used to find if the packet is transmitted
+or not. Current code skips the first tx message object and ends up
+checking one extra invalid object.
+
+While at it, fix the comment on top of c_can_do_tx() to use the
+terminology "packet" instead of "package" since it is more
+standard.
+
+Signed-off-by: AnilKumar Ch <anilkumar@ti.com>
+Acked-by: Wolfgang Grandegger <wg@grandegger.com>
+Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/can/c_can/c_can.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+--- a/drivers/net/can/c_can/c_can.c
++++ b/drivers/net/can/c_can/c_can.c
+@@ -686,7 +686,7 @@ static int c_can_get_berr_counter(const
+ *
+ * We iterate from priv->tx_echo to priv->tx_next and check if the
+ * packet has been transmitted, echo it back to the CAN framework.
+- * If we discover a not yet transmitted package, stop looking for more.
++ * If we discover a not yet transmitted packet, stop looking for more.
+ */
+ static void c_can_do_tx(struct net_device *dev)
+ {
+@@ -698,7 +698,7 @@ static void c_can_do_tx(struct net_devic
+ for (/* nix */; (priv->tx_next - priv->tx_echo) > 0; priv->tx_echo++) {
+ msg_obj_no = get_tx_echo_msg_obj(priv);
+ val = c_can_read_reg32(priv, &priv->regs->txrqst1);
+- if (!(val & (1 << msg_obj_no))) {
++ if (!(val & (1 << (msg_obj_no - 1)))) {
+ can_get_echo_skb(dev,
+ msg_obj_no - C_CAN_MSG_OBJ_TX_FIRST);
+ stats->tx_bytes += priv->read_reg(priv,
+@@ -706,6 +706,8 @@ static void c_can_do_tx(struct net_devic
+ & IF_MCONT_DLC_MASK;
+ stats->tx_packets++;
+ c_can_inval_msg_object(dev, 0, msg_obj_no);
++ } else {
++ break;
+ }
+ }
+
--- /dev/null
+From f461f27a4436dbe691908fe08b867ef888848cc3 Mon Sep 17 00:00:00 2001
+From: AnilKumar Ch <anilkumar@ti.com>
+Date: Wed, 23 May 2012 17:45:11 +0530
+Subject: can: c_can: fix race condition in c_can_open()
+
+From: AnilKumar Ch <anilkumar@ti.com>
+
+commit f461f27a4436dbe691908fe08b867ef888848cc3 upstream.
+
+Fix the issue of C_CAN interrupts getting disabled forever when canconfig
+utility is used multiple times. According to NAPI usage we disable all
+the hardware interrupts in ISR and re-enable them in poll(). Current
+implementation calls napi_enable() after hardware interrupts are enabled.
+If we get any interrupts between these two steps then we do not process
+those interrupts because napi is not enabled. Mostly these interrupts
+come because of STATUS is not 0x7 or ERROR interrupts. If napi_enable()
+happens before HW interrupts enabled then c_can_poll() function will be
+called eventual re-enabling.
+
+This patch moves the napi_enable() call before interrupts enabled.
+
+Signed-off-by: AnilKumar Ch <anilkumar@ti.com>
+Acked-by: Wolfgang Grandegger <wg@grandegger.com>
+Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/can/c_can/c_can.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/drivers/net/can/c_can/c_can.c
++++ b/drivers/net/can/c_can/c_can.c
+@@ -1064,10 +1064,11 @@ static int c_can_open(struct net_device
+ goto exit_irq_fail;
+ }
+
++ napi_enable(&priv->napi);
++
+ /* start the c_can controller */
+ c_can_start(dev);
+
+- napi_enable(&priv->napi);
+ netif_start_queue(dev);
+
+ return 0;
--- /dev/null
+From 463454b5dbd8dbab6e2fc6c557329e5b811b9c32 Mon Sep 17 00:00:00 2001
+From: Johannes Berg <johannes.berg@intel.com>
+Date: Tue, 5 Jun 2012 12:16:50 +0200
+Subject: cfg80211: fix interface combinations check
+
+From: Johannes Berg <johannes.berg@intel.com>
+
+commit 463454b5dbd8dbab6e2fc6c557329e5b811b9c32 upstream.
+
+If a given interface combination doesn't contain
+a required interface type then we missed checking
+that and erroneously allowed it even though iface
+type wasn't there at all. Add a check that makes
+sure that all interface types are accounted for.
+
+Reported-by: Mohammed Shafi Shajakhan <mohammed@qca.qualcomm.com>
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ net/wireless/util.c | 19 ++++++++++++++++++-
+ 1 file changed, 18 insertions(+), 1 deletion(-)
+
+--- a/net/wireless/util.c
++++ b/net/wireless/util.c
+@@ -936,6 +936,7 @@ int cfg80211_can_change_interface(struct
+ enum nl80211_iftype iftype)
+ {
+ struct wireless_dev *wdev_iter;
++ u32 used_iftypes = BIT(iftype);
+ int num[NUM_NL80211_IFTYPES];
+ int total = 1;
+ int i, j;
+@@ -969,12 +970,14 @@ int cfg80211_can_change_interface(struct
+
+ num[wdev_iter->iftype]++;
+ total++;
++ used_iftypes |= BIT(wdev_iter->iftype);
+ }
+ mutex_unlock(&rdev->devlist_mtx);
+
+ for (i = 0; i < rdev->wiphy.n_iface_combinations; i++) {
+ const struct ieee80211_iface_combination *c;
+ struct ieee80211_iface_limit *limits;
++ u32 all_iftypes = 0;
+
+ c = &rdev->wiphy.iface_combinations[i];
+
+@@ -989,6 +992,7 @@ int cfg80211_can_change_interface(struct
+ if (rdev->wiphy.software_iftypes & BIT(iftype))
+ continue;
+ for (j = 0; j < c->n_limits; j++) {
++ all_iftypes |= limits[j].types;
+ if (!(limits[j].types & BIT(iftype)))
+ continue;
+ if (limits[j].max < num[iftype])
+@@ -996,7 +1000,20 @@ int cfg80211_can_change_interface(struct
+ limits[j].max -= num[iftype];
+ }
+ }
+- /* yay, it fits */
++
++ /*
++ * Finally check that all iftypes that we're currently
++ * using are actually part of this combination. If they
++ * aren't then we can't use this combination and have
++ * to continue to the next.
++ */
++ if ((all_iftypes & used_iftypes) != used_iftypes)
++ goto cont;
++
++ /*
++ * This combination covered all interface types and
++ * supported the requested numbers, so we're good.
++ */
+ kfree(limits);
+ return 0;
+ cont:
--- /dev/null
+From dd03cff23d694cfb0fdae80cb618e7ced05ea696 Mon Sep 17 00:00:00 2001
+From: Bjørn Mork <bjorn@mork.no>
+Date: Tue, 5 Jun 2012 21:18:10 +0000
+Subject: net: sierra_net: device IDs for Aircard 320U++
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Bjørn Mork <bjorn@mork.no>
+
+commit dd03cff23d694cfb0fdae80cb618e7ced05ea696 upstream.
+
+Adding device IDs for Aircard 320U and two other devices
+found in the out-of-tree version of this driver.
+
+Cc: linux@sierrawireless.com
+Cc: Autif Khan <autif.mlist@gmail.com>
+Cc: Tom Cassidy <tomas.cassidy@gmail.com>
+Signed-off-by: Bjørn Mork <bjorn@mork.no>
+Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/usb/sierra_net.c | 14 ++++++++++----
+ 1 file changed, 10 insertions(+), 4 deletions(-)
+
+--- a/drivers/net/usb/sierra_net.c
++++ b/drivers/net/usb/sierra_net.c
+@@ -946,7 +946,7 @@ struct sk_buff *sierra_net_tx_fixup(stru
+ }
+
+ static const u8 sierra_net_ifnum_list[] = { 7, 10, 11 };
+-static const struct sierra_net_info_data sierra_net_info_data_68A3 = {
++static const struct sierra_net_info_data sierra_net_info_data_direct_ip = {
+ .rx_urb_size = 8 * 1024,
+ .whitelist = {
+ .infolen = ARRAY_SIZE(sierra_net_ifnum_list),
+@@ -954,7 +954,7 @@ static const struct sierra_net_info_data
+ }
+ };
+
+-static const struct driver_info sierra_net_info_68A3 = {
++static const struct driver_info sierra_net_info_direct_ip = {
+ .description = "Sierra Wireless USB-to-WWAN Modem",
+ .flags = FLAG_WWAN | FLAG_SEND_ZLP,
+ .bind = sierra_net_bind,
+@@ -962,12 +962,18 @@ static const struct driver_info sierra_n
+ .status = sierra_net_status,
+ .rx_fixup = sierra_net_rx_fixup,
+ .tx_fixup = sierra_net_tx_fixup,
+- .data = (unsigned long)&sierra_net_info_data_68A3,
++ .data = (unsigned long)&sierra_net_info_data_direct_ip,
+ };
+
+ static const struct usb_device_id products[] = {
+ {USB_DEVICE(0x1199, 0x68A3), /* Sierra Wireless USB-to-WWAN modem */
+- .driver_info = (unsigned long) &sierra_net_info_68A3},
++ .driver_info = (unsigned long) &sierra_net_info_direct_ip},
++ {USB_DEVICE(0x0F3D, 0x68A3), /* AT&T Direct IP modem */
++ .driver_info = (unsigned long) &sierra_net_info_direct_ip},
++ {USB_DEVICE(0x1199, 0x68AA), /* Sierra Wireless Direct IP LTE modem */
++ .driver_info = (unsigned long) &sierra_net_info_direct_ip},
++ {USB_DEVICE(0x0F3D, 0x68AA), /* AT&T Direct IP LTE modem */
++ .driver_info = (unsigned long) &sierra_net_info_direct_ip},
+
+ {}, /* last item */
+ };
--- /dev/null
+From e5851dac2c95af7159716832300b9f50c62c648e Mon Sep 17 00:00:00 2001
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+Date: Fri, 1 Jun 2012 11:29:40 +0200
+Subject: rt2x00: use atomic variable for seqno
+
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+
+commit e5851dac2c95af7159716832300b9f50c62c648e upstream.
+
+Remove spinlock as atomic_t can be used instead. Note we use only 16
+lower bits, upper bits are changed but we impilcilty cast to u16.
+
+This fix possible deadlock on IBSS mode reproted by lockdep:
+
+=================================
+[ INFO: inconsistent lock state ]
+3.4.0-wl+ #4 Not tainted
+---------------------------------
+inconsistent {IN-SOFTIRQ-W} -> {SOFTIRQ-ON-W} usage.
+kworker/u:2/30374 [HC0[0]:SC0[0]:HE1:SE1] takes:
+ (&(&intf->seqlock)->rlock){+.?...}, at: [<f9979a20>] rt2x00queue_create_tx_descriptor+0x380/0x490 [rt2x00lib]
+{IN-SOFTIRQ-W} state was registered at:
+ [<c04978ab>] __lock_acquire+0x47b/0x1050
+ [<c0498504>] lock_acquire+0x84/0xf0
+ [<c0835733>] _raw_spin_lock+0x33/0x40
+ [<f9979a20>] rt2x00queue_create_tx_descriptor+0x380/0x490 [rt2x00lib]
+ [<f9979f2a>] rt2x00queue_write_tx_frame+0x1a/0x300 [rt2x00lib]
+ [<f997834f>] rt2x00mac_tx+0x7f/0x380 [rt2x00lib]
+ [<f98fe363>] __ieee80211_tx+0x1b3/0x300 [mac80211]
+ [<f98ffdf5>] ieee80211_tx+0x105/0x130 [mac80211]
+ [<f99000dd>] ieee80211_xmit+0xad/0x100 [mac80211]
+ [<f9900519>] ieee80211_subif_start_xmit+0x2d9/0x930 [mac80211]
+ [<c0782e87>] dev_hard_start_xmit+0x307/0x660
+ [<c079bb71>] sch_direct_xmit+0xa1/0x1e0
+ [<c0784bb3>] dev_queue_xmit+0x183/0x730
+ [<c078c27a>] neigh_resolve_output+0xfa/0x1e0
+ [<c07b436a>] ip_finish_output+0x24a/0x460
+ [<c07b4897>] ip_output+0xb7/0x100
+ [<c07b2d60>] ip_local_out+0x20/0x60
+ [<c07e01ff>] igmpv3_sendpack+0x4f/0x60
+ [<c07e108f>] igmp_ifc_timer_expire+0x29f/0x330
+ [<c04520fc>] run_timer_softirq+0x15c/0x2f0
+ [<c0449e3e>] __do_softirq+0xae/0x1e0
+irq event stamp: 18380437
+hardirqs last enabled at (18380437): [<c0526027>] __slab_alloc.clone.3+0x67/0x5f0
+hardirqs last disabled at (18380436): [<c0525ff3>] __slab_alloc.clone.3+0x33/0x5f0
+softirqs last enabled at (18377616): [<c0449eb3>] __do_softirq+0x123/0x1e0
+softirqs last disabled at (18377611): [<c041278d>] do_softirq+0x9d/0xe0
+
+other info that might help us debug this:
+ Possible unsafe locking scenario:
+
+ CPU0
+ ----
+ lock(&(&intf->seqlock)->rlock);
+ <Interrupt>
+ lock(&(&intf->seqlock)->rlock);
+
+ *** DEADLOCK ***
+
+4 locks held by kworker/u:2/30374:
+ #0: (wiphy_name(local->hw.wiphy)){++++.+}, at: [<c045cf99>] process_one_work+0x109/0x3f0
+ #1: ((&sdata->work)){+.+.+.}, at: [<c045cf99>] process_one_work+0x109/0x3f0
+ #2: (&ifibss->mtx){+.+.+.}, at: [<f98f005b>] ieee80211_ibss_work+0x1b/0x470 [mac80211]
+ #3: (&intf->beacon_skb_mutex){+.+...}, at: [<f997a644>] rt2x00queue_update_beacon+0x24/0x50 [rt2x00lib]
+
+stack backtrace:
+Pid: 30374, comm: kworker/u:2 Not tainted 3.4.0-wl+ #4
+Call Trace:
+ [<c04962a6>] print_usage_bug+0x1f6/0x220
+ [<c0496a12>] mark_lock+0x2c2/0x300
+ [<c0495ff0>] ? check_usage_forwards+0xc0/0xc0
+ [<c04978ec>] __lock_acquire+0x4bc/0x1050
+ [<c0527890>] ? __kmalloc_track_caller+0x1c0/0x1d0
+ [<c0777fb6>] ? copy_skb_header+0x26/0x90
+ [<c0498504>] lock_acquire+0x84/0xf0
+ [<f9979a20>] ? rt2x00queue_create_tx_descriptor+0x380/0x490 [rt2x00lib]
+ [<c0835733>] _raw_spin_lock+0x33/0x40
+ [<f9979a20>] ? rt2x00queue_create_tx_descriptor+0x380/0x490 [rt2x00lib]
+ [<f9979a20>] rt2x00queue_create_tx_descriptor+0x380/0x490 [rt2x00lib]
+ [<f997a5cf>] rt2x00queue_update_beacon_locked+0x5f/0xb0 [rt2x00lib]
+ [<f997a64d>] rt2x00queue_update_beacon+0x2d/0x50 [rt2x00lib]
+ [<f9977e3a>] rt2x00mac_bss_info_changed+0x1ca/0x200 [rt2x00lib]
+ [<f9977c70>] ? rt2x00mac_remove_interface+0x70/0x70 [rt2x00lib]
+ [<f98e4dd0>] ieee80211_bss_info_change_notify+0xe0/0x1d0 [mac80211]
+ [<f98ef7b8>] __ieee80211_sta_join_ibss+0x3b8/0x610 [mac80211]
+ [<c0496ab4>] ? mark_held_locks+0x64/0xc0
+ [<c0440012>] ? virt_efi_query_capsule_caps+0x12/0x50
+ [<f98efb09>] ieee80211_sta_join_ibss+0xf9/0x140 [mac80211]
+ [<f98f0456>] ieee80211_ibss_work+0x416/0x470 [mac80211]
+ [<c0496d8b>] ? trace_hardirqs_on+0xb/0x10
+ [<c077683b>] ? skb_dequeue+0x4b/0x70
+ [<f98f207f>] ieee80211_iface_work+0x13f/0x230 [mac80211]
+ [<c045cf99>] ? process_one_work+0x109/0x3f0
+ [<c045d015>] process_one_work+0x185/0x3f0
+ [<c045cf99>] ? process_one_work+0x109/0x3f0
+ [<f98f1f40>] ? ieee80211_teardown_sdata+0xa0/0xa0 [mac80211]
+ [<c045ed86>] worker_thread+0x116/0x270
+ [<c045ec70>] ? manage_workers+0x1e0/0x1e0
+ [<c0462f64>] kthread+0x84/0x90
+ [<c0462ee0>] ? __init_kthread_worker+0x60/0x60
+ [<c083d382>] kernel_thread_helper+0x6/0x10
+
+Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
+Acked-by: Helmut Schaa <helmut.schaa@googlemail.com>
+Acked-by: Gertjan van Wingerde <gwingerde@gmail.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/wireless/rt2x00/rt2x00.h | 3 +--
+ drivers/net/wireless/rt2x00/rt2x00mac.c | 1 -
+ drivers/net/wireless/rt2x00/rt2x00queue.c | 13 ++++++-------
+ 3 files changed, 7 insertions(+), 10 deletions(-)
+
+--- a/drivers/net/wireless/rt2x00/rt2x00.h
++++ b/drivers/net/wireless/rt2x00/rt2x00.h
+@@ -396,8 +396,7 @@ struct rt2x00_intf {
+ * for hardware which doesn't support hardware
+ * sequence counting.
+ */
+- spinlock_t seqlock;
+- u16 seqno;
++ atomic_t seqno;
+ };
+
+ static inline struct rt2x00_intf* vif_to_intf(struct ieee80211_vif *vif)
+--- a/drivers/net/wireless/rt2x00/rt2x00mac.c
++++ b/drivers/net/wireless/rt2x00/rt2x00mac.c
+@@ -277,7 +277,6 @@ int rt2x00mac_add_interface(struct ieee8
+ else
+ rt2x00dev->intf_sta_count++;
+
+- spin_lock_init(&intf->seqlock);
+ mutex_init(&intf->beacon_skb_mutex);
+ intf->beacon = entry;
+
+--- a/drivers/net/wireless/rt2x00/rt2x00queue.c
++++ b/drivers/net/wireless/rt2x00/rt2x00queue.c
+@@ -207,6 +207,7 @@ static void rt2x00queue_create_tx_descri
+ struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb);
+ struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
+ struct rt2x00_intf *intf = vif_to_intf(tx_info->control.vif);
++ u16 seqno;
+
+ if (!(tx_info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ))
+ return;
+@@ -227,15 +228,13 @@ static void rt2x00queue_create_tx_descri
+ * sequence counting per-frame, since those will override the
+ * sequence counter given by mac80211.
+ */
+- spin_lock(&intf->seqlock);
+-
+ if (test_bit(ENTRY_TXD_FIRST_FRAGMENT, &txdesc->flags))
+- intf->seqno += 0x10;
+- hdr->seq_ctrl &= cpu_to_le16(IEEE80211_SCTL_FRAG);
+- hdr->seq_ctrl |= cpu_to_le16(intf->seqno);
+-
+- spin_unlock(&intf->seqlock);
++ seqno = atomic_add_return(0x10, &intf->seqno);
++ else
++ seqno = atomic_read(&intf->seqno);
+
++ hdr->seq_ctrl &= cpu_to_le16(IEEE80211_SCTL_FRAG);
++ hdr->seq_ctrl |= cpu_to_le16(seqno);
+ }
+
+ static void rt2x00queue_create_tx_descriptor_plcp(struct rt2x00_dev *rt2x00dev,
mac80211-fix-non-rcu-safe-sta_list-manipulation.patch
asoc-wm8994-ensure-all-aifnclk-events-are-run-from-the-_late-variants.patch
asoc-wm8994-apply-volume-updates-with-clocks-enabled.patch
+bcma-add-ext-pa-workaround-for-bcm4331-and-bcm43431.patch
+alsa-hda-pin-fixup-for-zotac-z68-motherboard.patch
+cfg80211-fix-interface-combinations-check.patch
+rt2x00-use-atomic-variable-for-seqno.patch
+wireless-rt2x00-rt2800usb-add-more-devices-ids.patch
+wireless-rt2x00-rt2800usb-more-devices-were-identified.patch
+net-sierra_net-device-ids-for-aircard-320u.patch
+can-c_can-fix-bug-echo_skb-is-occupied-during-transmit.patch
+can-c_can-fix-an-interrupt-thrash-issue-with-c_can-driver.patch
+can-c_can-fix-race-condition-in-c_can_open.patch
--- /dev/null
+From 63b376411173c343bbcb450f95539da91f079e0c Mon Sep 17 00:00:00 2001
+From: Xose Vazquez Perez <xose.vazquez@gmail.com>
+Date: Tue, 17 Apr 2012 01:50:32 +0200
+Subject: wireless: rt2x00: rt2800usb add more devices ids
+
+From: Xose Vazquez Perez <xose.vazquez@gmail.com>
+
+commit 63b376411173c343bbcb450f95539da91f079e0c upstream.
+
+They were taken from ralink drivers:
+2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO
+2012_03_22_RT5572_Linux_STA_v2.6.0.0_DPO
+
+0x1eda,0x2210 RT3070 Airties
+
+0x083a,0xb511 RT3370 Panasonic
+0x0471,0x20dd RT3370 Philips
+
+0x1690,0x0764 RT35xx Askey
+0x0df6,0x0065 RT35xx Sitecom
+0x0df6,0x0066 RT35xx Sitecom
+0x0df6,0x0068 RT35xx Sitecom
+
+0x2001,0x3c1c RT5370 DLink
+0x2001,0x3c1d RT5370 DLink
+
+2001 is D-Link not Alpha
+
+Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com>
+Acked-by: Gertjan van Wingerde <gwingerde@gmail.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/wireless/rt2x00/rt2800usb.c | 17 ++++++++++++++---
+ 1 file changed, 14 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/wireless/rt2x00/rt2800usb.c
++++ b/drivers/net/wireless/rt2x00/rt2800usb.c
+@@ -922,6 +922,7 @@ static struct usb_device_id rt2800usb_de
+ { USB_DEVICE(0x1482, 0x3c09) },
+ /* AirTies */
+ { USB_DEVICE(0x1eda, 0x2012) },
++ { USB_DEVICE(0x1eda, 0x2210) },
+ { USB_DEVICE(0x1eda, 0x2310) },
+ /* Allwin */
+ { USB_DEVICE(0x8516, 0x2070) },
+@@ -1134,6 +1135,10 @@ static struct usb_device_id rt2800usb_de
+ #ifdef CONFIG_RT2800USB_RT33XX
+ /* Belkin */
+ { USB_DEVICE(0x050d, 0x945b) },
++ /* Panasonic */
++ { USB_DEVICE(0x083a, 0xb511) },
++ /* Philips */
++ { USB_DEVICE(0x0471, 0x20dd) },
+ /* Ralink */
+ { USB_DEVICE(0x148f, 0x3370) },
+ { USB_DEVICE(0x148f, 0x8070) },
+@@ -1145,6 +1150,7 @@ static struct usb_device_id rt2800usb_de
+ { USB_DEVICE(0x8516, 0x3572) },
+ /* Askey */
+ { USB_DEVICE(0x1690, 0x0744) },
++ { USB_DEVICE(0x1690, 0x0764) },
+ /* Cisco */
+ { USB_DEVICE(0x167b, 0x4001) },
+ /* EnGenius */
+@@ -1159,20 +1165,25 @@ static struct usb_device_id rt2800usb_de
+ /* Sitecom */
+ { USB_DEVICE(0x0df6, 0x0041) },
+ { USB_DEVICE(0x0df6, 0x0062) },
++ { USB_DEVICE(0x0df6, 0x0065) },
++ { USB_DEVICE(0x0df6, 0x0066) },
++ { USB_DEVICE(0x0df6, 0x0068) },
+ /* Toshiba */
+ { USB_DEVICE(0x0930, 0x0a07) },
+ /* Zinwell */
+ { USB_DEVICE(0x5a57, 0x0284) },
+ #endif
+ #ifdef CONFIG_RT2800USB_RT53XX
+- /* Alpha */
+- { USB_DEVICE(0x2001, 0x3c15) },
+- { USB_DEVICE(0x2001, 0x3c19) },
+ /* Arcadyan */
+ { USB_DEVICE(0x043e, 0x7a12) },
+ /* Azurewave */
+ { USB_DEVICE(0x13d3, 0x3329) },
+ { USB_DEVICE(0x13d3, 0x3365) },
++ /* D-Link */
++ { USB_DEVICE(0x2001, 0x3c15) },
++ { USB_DEVICE(0x2001, 0x3c19) },
++ { USB_DEVICE(0x2001, 0x3c1c) },
++ { USB_DEVICE(0x2001, 0x3c1d) },
+ /* LG innotek */
+ { USB_DEVICE(0x043e, 0x7a22) },
+ /* Panasonic */
--- /dev/null
+From e828b9fb4f6c3513950759d5fb902db5bd054048 Mon Sep 17 00:00:00 2001
+From: Xose Vazquez Perez <xose.vazquez@gmail.com>
+Date: Tue, 17 Apr 2012 16:28:05 +0200
+Subject: wireless: rt2x00: rt2800usb more devices were identified
+
+From: Xose Vazquez Perez <xose.vazquez@gmail.com>
+
+commit e828b9fb4f6c3513950759d5fb902db5bd054048 upstream.
+
+found in 2012_03_22_RT5572_Linux_STA_v2.6.0.0_DPO
+
+RT3070:
+(0x2019,0x5201) Planex Communications, Inc. RT8070
+(0x7392,0x4085) 2L Central Europe BV 8070
+7392 is Edimax
+
+RT35xx:
+(0x1690,0x0761) Askey
+was Fujitsu Stylistic 550, but 1690 is Askey
+
+Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com>
+Acked-by: Gertjan van Wingerde <gwingerde@gmail.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/wireless/rt2x00/rt2800usb.c | 8 +++-----
+ 1 file changed, 3 insertions(+), 5 deletions(-)
+
+--- a/drivers/net/wireless/rt2x00/rt2800usb.c
++++ b/drivers/net/wireless/rt2x00/rt2800usb.c
+@@ -992,6 +992,7 @@ static struct usb_device_id rt2800usb_de
+ /* DVICO */
+ { USB_DEVICE(0x0fe9, 0xb307) },
+ /* Edimax */
++ { USB_DEVICE(0x7392, 0x4085) },
+ { USB_DEVICE(0x7392, 0x7711) },
+ { USB_DEVICE(0x7392, 0x7717) },
+ { USB_DEVICE(0x7392, 0x7718) },
+@@ -1067,6 +1068,7 @@ static struct usb_device_id rt2800usb_de
+ /* Philips */
+ { USB_DEVICE(0x0471, 0x200f) },
+ /* Planex */
++ { USB_DEVICE(0x2019, 0x5201) },
+ { USB_DEVICE(0x2019, 0xab25) },
+ { USB_DEVICE(0x2019, 0xed06) },
+ /* Quanta */
+@@ -1150,6 +1152,7 @@ static struct usb_device_id rt2800usb_de
+ { USB_DEVICE(0x8516, 0x3572) },
+ /* Askey */
+ { USB_DEVICE(0x1690, 0x0744) },
++ { USB_DEVICE(0x1690, 0x0761) },
+ { USB_DEVICE(0x1690, 0x0764) },
+ /* Cisco */
+ { USB_DEVICE(0x167b, 0x4001) },
+@@ -1235,12 +1238,8 @@ static struct usb_device_id rt2800usb_de
+ { USB_DEVICE(0x07d1, 0x3c0b) },
+ { USB_DEVICE(0x07d1, 0x3c17) },
+ { USB_DEVICE(0x2001, 0x3c17) },
+- /* Edimax */
+- { USB_DEVICE(0x7392, 0x4085) },
+ /* Encore */
+ { USB_DEVICE(0x203d, 0x14a1) },
+- /* Fujitsu Stylistic 550 */
+- { USB_DEVICE(0x1690, 0x0761) },
+ /* Gemtek */
+ { USB_DEVICE(0x15a9, 0x0010) },
+ /* Gigabyte */
+@@ -1261,7 +1260,6 @@ static struct usb_device_id rt2800usb_de
+ { USB_DEVICE(0x05a6, 0x0101) },
+ { USB_DEVICE(0x1d4d, 0x0010) },
+ /* Planex */
+- { USB_DEVICE(0x2019, 0x5201) },
+ { USB_DEVICE(0x2019, 0xab24) },
+ /* Qcom */
+ { USB_DEVICE(0x18e8, 0x6259) },