--- /dev/null
+From 950200e2ff11daae1c5d9426703bdd494603f38b Mon Sep 17 00:00:00 2001
+From: Daniel T Chen <crimsun@ubuntu.com>
+Date: Sun, 13 Dec 2009 14:11:02 -0500
+Subject: ALSA: hda: Use ALC260_WILL quirk for another Acer model (0x1025007f)
+
+From: Daniel T Chen <crimsun@ubuntu.com>
+
+commit 950200e2ff11daae1c5d9426703bdd494603f38b upstream.
+
+BugLink: https://bugs.launchpad.net/bugs/418627
+
+The original reporter states that this quirk is necessary to obtain
+reasonable gain for playback. Without it, sound is inaudible. Tested
+with playback (spkr and hp) and capture.
+
+Signed-off-by: Daniel T Chen <crimsun@ubuntu.com>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/pci/hda/patch_realtek.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -6252,6 +6252,7 @@ static const char *alc260_models[ALC260_
+
+ static struct snd_pci_quirk alc260_cfg_tbl[] = {
+ SND_PCI_QUIRK(0x1025, 0x007b, "Acer C20x", ALC260_ACER),
++ SND_PCI_QUIRK(0x1025, 0x007f, "Acer", ALC260_WILL),
+ SND_PCI_QUIRK(0x1025, 0x008f, "Acer", ALC260_ACER),
+ SND_PCI_QUIRK(0x1509, 0x4540, "Favorit 100XS", ALC260_FAVORIT100),
+ SND_PCI_QUIRK(0x103c, 0x2808, "HP d5700", ALC260_HP_3013),
--- /dev/null
+From ec3a9974892956aec86a4065bf6e48bc2cd92d04 Mon Sep 17 00:00:00 2001
+From: Senthil Balasubramanian <senthilkumar@atheros.com>
+Date: Wed, 3 Feb 2010 22:50:18 +0530
+Subject: ath9k: configure the beacon only if the STA is associated
+
+From: Senthil Balasubramanian <senthilkumar@atheros.com>
+
+commit 1a20034a73a40b8056731f9db0c535cec2961eb7 upstream.
+
+beacons configuration SHOULD be done only if the STA is associated.
+
+Signed-off-by: Senthil Balasubramanian <senthilkumar@atheros.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/ath/ath9k/beacon.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/drivers/net/wireless/ath/ath9k/beacon.c
++++ b/drivers/net/wireless/ath/ath9k/beacon.c
+@@ -559,6 +559,13 @@ static void ath_beacon_config_sta(struct
+ u64 tsf;
+ int num_beacons, offset, dtim_dec_count, cfp_dec_count;
+
++ /* No need to configure beacon if we are not associated */
++ if (!common->curaid) {
++ ath_print(common, ATH_DBG_BEACON,
++ "STA is not yet associated..skipping beacon config\n");
++ return;
++ }
++
+ memset(&bs, 0, sizeof(bs));
+ intval = conf->beacon_interval & ATH9K_BEACON_PERIOD;
+
--- /dev/null
+From e74a0bf39351c2c21c2d80e5af86e5b358c00d1d Mon Sep 17 00:00:00 2001
+From: Senthil Balasubramanian <senthilkumar@atheros.com>
+Date: Thu, 11 Mar 2010 11:50:54 -0800
+Subject: ath9k: Enable TIM timer interrupt only when needed.
+
+From: Senthil Balasubramanian <senthilkumar@atheros.com>
+
+commit 3f7c5c10e9dc6bf90179eb9f7c06151d508fb324 upstream.
+
+The TIM timer interrupt is enabled even before the ACK of nullqos
+is received which is unnecessary.
+
+Also clean up the CONF_PS part of config callback properly for
+better readability.
+
+Signed-off-by: Senthil Balasubramanian <senthilkumar@atheros.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/ath/ath9k/ath9k.h | 1 +
+ drivers/net/wireless/ath/ath9k/main.c | 25 ++++++++++++++-----------
+ drivers/net/wireless/ath/ath9k/xmit.c | 7 +++----
+ 3 files changed, 18 insertions(+), 15 deletions(-)
+
+--- a/drivers/net/wireless/ath/ath9k/ath9k.h
++++ b/drivers/net/wireless/ath/ath9k/ath9k.h
+@@ -368,6 +368,7 @@ void ath_tx_aggr_start(struct ath_softc
+ u16 tid, u16 *ssn);
+ void ath_tx_aggr_stop(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid);
+ void ath_tx_aggr_resume(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid);
++void ath9k_enable_ps(struct ath_softc *sc);
+
+ /********/
+ /* VIFs */
+--- a/drivers/net/wireless/ath/ath9k/main.c
++++ b/drivers/net/wireless/ath/ath9k/main.c
+@@ -2305,6 +2305,19 @@ static void ath9k_remove_interface(struc
+ mutex_unlock(&sc->mutex);
+ }
+
++void ath9k_enable_ps(struct ath_softc *sc)
++{
++ sc->ps_enabled = true;
++ if (!(sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_AUTOSLEEP)) {
++ if ((sc->imask & ATH9K_INT_TIM_TIMER) == 0) {
++ sc->imask |= ATH9K_INT_TIM_TIMER;
++ ath9k_hw_set_interrupts(sc->sc_ah,
++ sc->imask);
++ }
++ }
++ ath9k_hw_setrxabort(sc->sc_ah, 1);
++}
++
+ static int ath9k_config(struct ieee80211_hw *hw, u32 changed)
+ {
+ struct ath_wiphy *aphy = hw->priv;
+@@ -2336,19 +2349,9 @@ static int ath9k_config(struct ieee80211
+ if (changed & IEEE80211_CONF_CHANGE_PS) {
+ if (conf->flags & IEEE80211_CONF_PS) {
+ sc->sc_flags |= SC_OP_PS_ENABLED;
+- if (!(ah->caps.hw_caps &
+- ATH9K_HW_CAP_AUTOSLEEP)) {
+- if ((sc->imask & ATH9K_INT_TIM_TIMER) == 0) {
+- sc->imask |= ATH9K_INT_TIM_TIMER;
+- ath9k_hw_set_interrupts(sc->sc_ah,
+- sc->imask);
+- }
+- }
+- sc->ps_enabled = true;
+ if ((sc->sc_flags & SC_OP_NULLFUNC_COMPLETED)) {
+ sc->sc_flags &= ~SC_OP_NULLFUNC_COMPLETED;
+- sc->ps_enabled = true;
+- ath9k_hw_setrxabort(sc->sc_ah, 1);
++ ath9k_enable_ps(sc);
+ }
+ } else {
+ sc->ps_enabled = false;
+--- a/drivers/net/wireless/ath/ath9k/xmit.c
++++ b/drivers/net/wireless/ath/ath9k/xmit.c
+@@ -1979,10 +1979,9 @@ static void ath_tx_processq(struct ath_s
+
+ if (bf->bf_isnullfunc &&
+ (ds->ds_txstat.ts_status & ATH9K_TX_ACKED)) {
+- if ((sc->sc_flags & SC_OP_PS_ENABLED)) {
+- sc->ps_enabled = true;
+- ath9k_hw_setrxabort(sc->sc_ah, 1);
+- } else
++ if ((sc->sc_flags & SC_OP_PS_ENABLED))
++ ath9k_enable_ps(sc);
++ else
+ sc->sc_flags |= SC_OP_NULLFUNC_COMPLETED;
+ }
+