All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/5] ath9k_hw: start noisefloor calibration after MCI reset
@ 2012-06-29  6:40 Rajkumar Manoharan
  2012-06-29  6:40 ` [PATCH 2/5] ath9k_hw: do not load noise floor readings when it is running Rajkumar Manoharan
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Rajkumar Manoharan @ 2012-06-29  6:40 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, Rajkumar Manoharan

noisefloor calibration has to be loaded and started after
chip reset completion and restoring chainmask. Right now it is
being started before MCI reset completion on full reset. Fix that.

Signed-off-by: Rajkumar Manoharan <rmanohar@qca.qualcomm.com>
---
 drivers/net/wireless/ath/ath9k/hw.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
index ebfb2a3..10a55bc 100644
--- a/drivers/net/wireless/ath/ath9k/hw.c
+++ b/drivers/net/wireless/ath/ath9k/hw.c
@@ -1949,9 +1949,6 @@ int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
 	if (!ath9k_hw_init_cal(ah, chan))
 		return -EIO;
 
-	ath9k_hw_loadnf(ah, chan);
-	ath9k_hw_start_nfcal(ah, true);
-
 	if (ath9k_hw_mci_is_enabled(ah) && ar9003_mci_end_reset(ah, chan, caldata))
 		return -EIO;
 
@@ -2000,6 +1997,9 @@ int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
 	if (ath9k_hw_mci_is_enabled(ah))
 		ar9003_mci_check_bt(ah);
 
+	ath9k_hw_loadnf(ah, chan);
+	ath9k_hw_start_nfcal(ah, true);
+
 	if (AR_SREV_9300_20_OR_LATER(ah)) {
 		ar9003_hw_bb_watchdog_config(ah);
 
-- 
1.7.11.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/5] ath9k_hw: do not load noise floor readings when it is running
  2012-06-29  6:40 [PATCH 1/5] ath9k_hw: start noisefloor calibration after MCI reset Rajkumar Manoharan
@ 2012-06-29  6:40 ` Rajkumar Manoharan
  2012-06-29  6:40 ` [PATCH 3/5] ath9k: fix fullsleep power consumption when BTCOEX is enabled Rajkumar Manoharan
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Rajkumar Manoharan @ 2012-06-29  6:40 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, Rajkumar Manoharan

Noise floor calibration is performed on longcal interval and
the reading will be updated in history buffer. On rare occasions,
the previous noisefloor calibration might not be completed within
the period and trying to load nf reading will be failed. In such
situation, postpone the nf cabliration to next cycle to give
enough time to complete the calibration. This was already taken
care for ar9002 chips.

Signed-off-by: Rajkumar Manoharan <rmanohar@qca.qualcomm.com>
---
 drivers/net/wireless/ath/ath9k/ar9003_calib.c | 13 +++++--------
 1 file changed, 5 insertions(+), 8 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/ar9003_calib.c b/drivers/net/wireless/ath/ath9k/ar9003_calib.c
index d7deb8c..84b558d 100644
--- a/drivers/net/wireless/ath/ath9k/ar9003_calib.c
+++ b/drivers/net/wireless/ath/ath9k/ar9003_calib.c
@@ -159,14 +159,11 @@ static bool ar9003_hw_calibrate(struct ath_hw *ah,
 		}
 	}
 
-	/* Do NF cal only at longer intervals */
-	if (longcal) {
-		/*
-		 * Get the value from the previous NF cal and update
-		 * history buffer.
-		 */
-		ath9k_hw_getnf(ah, chan);
-
+	/*
+	 * Do NF cal only at longer intervals. Get the value from
+	 * the previous NF cal and update history buffer.
+	 */
+	if (longcal && ath9k_hw_getnf(ah, chan)) {
 		/*
 		 * Load the NF from history buffer of the current channel.
 		 * NF is slow time-variant, so it is OK to use a historical
-- 
1.7.11.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 3/5] ath9k: fix fullsleep power consumption when BTCOEX is enabled
  2012-06-29  6:40 [PATCH 1/5] ath9k_hw: start noisefloor calibration after MCI reset Rajkumar Manoharan
  2012-06-29  6:40 ` [PATCH 2/5] ath9k_hw: do not load noise floor readings when it is running Rajkumar Manoharan
@ 2012-06-29  6:40 ` Rajkumar Manoharan
  2012-06-29  6:40 ` [PATCH 4/5] ath9k: fix power consumption on network sleep " Rajkumar Manoharan
  2012-06-29  6:40 ` [PATCH 5/5] ath9k_hw: fix AR9462 2g5g switch on full reset Rajkumar Manoharan
  3 siblings, 0 replies; 5+ messages in thread
From: Rajkumar Manoharan @ 2012-06-29  6:40 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, Rajkumar Manoharan

As soon as the interface brought up, btcoex timer starts running
eventhough the interface is in idle state and WLAN chip is moved
to full sleep mode. There is no point in running btcoex timer when
the wlan interface is in sleep mode and also it might consumes
more power on WLAN idle unassociated state. So lets stop the
btcoex when wlan is idle state.

Signed-off-by: Rajkumar Manoharan <rmanohar@qca.qualcomm.com>
---
 drivers/net/wireless/ath/ath9k/main.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
index e4e73f0..6ce0128 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
@@ -666,8 +666,6 @@ static int ath9k_start(struct ieee80211_hw *hw)
 
 	spin_unlock_bh(&sc->sc_pcu_lock);
 
-	ath9k_start_btcoex(sc);
-
 	if (ah->caps.pcie_lcr_extsync_en && common->bus_ops->extn_synch_en)
 		common->bus_ops->extn_synch_en(common);
 
@@ -774,8 +772,6 @@ static void ath9k_stop(struct ieee80211_hw *hw)
 	/* Ensure HW is awake when we try to shut it down. */
 	ath9k_ps_wakeup(sc);
 
-	ath9k_stop_btcoex(sc);
-
 	spin_lock_bh(&sc->sc_pcu_lock);
 
 	/* prevent tasklets to enable interrupts once we disable them */
@@ -1139,14 +1135,17 @@ static int ath9k_config(struct ieee80211_hw *hw, u32 changed)
 
 	if (changed & IEEE80211_CONF_CHANGE_IDLE) {
 		sc->ps_idle = !!(conf->flags & IEEE80211_CONF_IDLE);
-		if (sc->ps_idle)
+		if (sc->ps_idle) {
 			ath_cancel_work(sc);
-		else
+			ath9k_stop_btcoex(sc);
+		} else {
+			ath9k_start_btcoex(sc);
 			/*
 			 * The chip needs a reset to properly wake up from
 			 * full sleep
 			 */
 			reset_channel = ah->chip_fullsleep;
+		}
 	}
 
 	/*
-- 
1.7.11.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 4/5] ath9k: fix power consumption on network sleep when BTCOEX is enabled
  2012-06-29  6:40 [PATCH 1/5] ath9k_hw: start noisefloor calibration after MCI reset Rajkumar Manoharan
  2012-06-29  6:40 ` [PATCH 2/5] ath9k_hw: do not load noise floor readings when it is running Rajkumar Manoharan
  2012-06-29  6:40 ` [PATCH 3/5] ath9k: fix fullsleep power consumption when BTCOEX is enabled Rajkumar Manoharan
@ 2012-06-29  6:40 ` Rajkumar Manoharan
  2012-06-29  6:40 ` [PATCH 5/5] ath9k_hw: fix AR9462 2g5g switch on full reset Rajkumar Manoharan
  3 siblings, 0 replies; 5+ messages in thread
From: Rajkumar Manoharan @ 2012-06-29  6:40 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, Rajkumar Manoharan

The chip is waken up for every 45ms in btcoex timer cycle to
for sharing the radio between BT and WLAN. Whenever the wlan
interface is in network sleep mode, do not schedule hw timers.
This could reduce power consumption on idle associated state.

Signed-off-by: Rajkumar Manoharan <rmanohar@qca.qualcomm.com>
---
 drivers/net/wireless/ath/ath9k/gpio.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/drivers/net/wireless/ath/ath9k/gpio.c b/drivers/net/wireless/ath/ath9k/gpio.c
index 9ae6a4d..c17168e 100644
--- a/drivers/net/wireless/ath/ath9k/gpio.c
+++ b/drivers/net/wireless/ath/ath9k/gpio.c
@@ -194,6 +194,16 @@ static void ath_btcoex_period_timer(unsigned long data)
 	struct ath_mci_profile *mci = &btcoex->mci;
 	u32 timer_period;
 	bool is_btscan;
+	unsigned long flags;
+
+	spin_lock_irqsave(&sc->sc_pm_lock, flags);
+	if (sc->sc_ah->power_mode == ATH9K_PM_NETWORK_SLEEP) {
+		spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
+		if (btcoex->hw_timer_enabled)
+			ath9k_gen_timer_stop(ah, btcoex->no_stomp_timer);
+		goto skip_hw_wakeup;
+	}
+	spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
 
 	ath9k_ps_wakeup(sc);
 	if (!(ah->caps.hw_caps & ATH9K_HW_CAP_MCI))
@@ -232,6 +242,7 @@ static void ath_btcoex_period_timer(unsigned long data)
 	}
 
 	ath9k_ps_restore(sc);
+skip_hw_wakeup:
 	timer_period = btcoex->btcoex_period;
 	mod_timer(&btcoex->period_timer, jiffies + msecs_to_jiffies(timer_period));
 }
-- 
1.7.11.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 5/5] ath9k_hw: fix AR9462 2g5g switch on full reset
  2012-06-29  6:40 [PATCH 1/5] ath9k_hw: start noisefloor calibration after MCI reset Rajkumar Manoharan
                   ` (2 preceding siblings ...)
  2012-06-29  6:40 ` [PATCH 4/5] ath9k: fix power consumption on network sleep " Rajkumar Manoharan
@ 2012-06-29  6:40 ` Rajkumar Manoharan
  3 siblings, 0 replies; 5+ messages in thread
From: Rajkumar Manoharan @ 2012-06-29  6:40 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, Rajkumar Manoharan

On full reset, mci reset will put LNA update on 2G mode. And
Whenever 2g5g_switch is forced at the end of full reset, lna
update should not be skipped. Whenever 2g5g switch is enforced,
WLAN need not to wait for the completion of MCI messages. Not
doing so, is affecting WLAN rx and causing beacon loss when
BTCOEX is enabled on AR9462.

Signed-off-by: Rajkumar Manoharan <rmanohar@qca.qualcomm.com>
---
 drivers/net/wireless/ath/ath9k/ar9003_mci.c | 19 +++++++------------
 1 file changed, 7 insertions(+), 12 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/ar9003_mci.c b/drivers/net/wireless/ath/ath9k/ar9003_mci.c
index 6155837..2daa4c1 100644
--- a/drivers/net/wireless/ath/ath9k/ar9003_mci.c
+++ b/drivers/net/wireless/ath/ath9k/ar9003_mci.c
@@ -1010,17 +1010,15 @@ static void ar9003_mci_queue_unsent_gpm(struct ath_hw *ah, u8 header,
 void ar9003_mci_2g5g_switch(struct ath_hw *ah, bool force)
 {
 	struct ath9k_hw_mci *mci = &ah->btcoex_hw.mci;
+	bool wait_done = (mci->update_2g5g || !force);
 
 	if (!mci->update_2g5g && !force)
 		return;
 
 	if (mci->is_2g) {
-		if (!force) {
-			ar9003_mci_send_2g5g_status(ah, true);
-
-			ar9003_mci_send_lna_transfer(ah, true);
-			udelay(5);
-		}
+		ar9003_mci_send_2g5g_status(ah, wait_done);
+		ar9003_mci_send_lna_transfer(ah, wait_done);
+		udelay(5);
 
 		REG_CLR_BIT(ah, AR_MCI_TX_CTRL,
 			    AR_MCI_TX_CTRL_DISABLE_LNA_UPDATE);
@@ -1030,10 +1028,8 @@ void ar9003_mci_2g5g_switch(struct ath_hw *ah, bool force)
 		if (!(mci->config & ATH_MCI_CONFIG_DISABLE_OSLA))
 			ar9003_mci_osla_setup(ah, true);
 	} else {
-		if (!force) {
-			ar9003_mci_send_lna_take(ah, true);
-			udelay(5);
-		}
+		ar9003_mci_send_lna_take(ah, wait_done);
+		udelay(5);
 
 		REG_SET_BIT(ah, AR_MCI_TX_CTRL,
 			    AR_MCI_TX_CTRL_DISABLE_LNA_UPDATE);
@@ -1041,8 +1037,7 @@ void ar9003_mci_2g5g_switch(struct ath_hw *ah, bool force)
 			    AR_BTCOEX_CTRL_BT_OWN_SPDT_CTRL);
 
 		ar9003_mci_osla_setup(ah, false);
-		if (!force)
-			ar9003_mci_send_2g5g_status(ah, true);
+		ar9003_mci_send_2g5g_status(ah, wait_done);
 	}
 }
 
-- 
1.7.11.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2012-06-29  6:39 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-06-29  6:40 [PATCH 1/5] ath9k_hw: start noisefloor calibration after MCI reset Rajkumar Manoharan
2012-06-29  6:40 ` [PATCH 2/5] ath9k_hw: do not load noise floor readings when it is running Rajkumar Manoharan
2012-06-29  6:40 ` [PATCH 3/5] ath9k: fix fullsleep power consumption when BTCOEX is enabled Rajkumar Manoharan
2012-06-29  6:40 ` [PATCH 4/5] ath9k: fix power consumption on network sleep " Rajkumar Manoharan
2012-06-29  6:40 ` [PATCH 5/5] ath9k_hw: fix AR9462 2g5g switch on full reset Rajkumar Manoharan

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.