Linux wireless drivers development
 help / color / mirror / Atom feed
* [PATCH 0/2] Antenna diversity fixes
@ 2013-08-07  6:59 Sujith Manoharan
  2013-08-07  6:59 ` [PATCH 1/2] ath9k: Fix BTCOEX usage for RX diversity Sujith Manoharan
  2013-08-07  6:59 ` [PATCH 2/2] ath9k: Run the LNA combining algorithm properly Sujith Manoharan
  0 siblings, 2 replies; 6+ messages in thread
From: Sujith Manoharan @ 2013-08-07  6:59 UTC (permalink / raw)
  To: John Linville; +Cc: linux-wireless, ath9k-devel

From: Sujith Manoharan <c_manoha@qca.qualcomm.com>

Hi,

Antenna diversity support for WLAN/BT combo cards WB195 and WB225
is fairly complete. WB335, which is based on AR9565 requires more
fixes.

More information is here:
http://wireless.kernel.org/en/users/Drivers/ath9k/antennadiversity

Sujith

Sujith Manoharan (2):
  ath9k: Fix BTCOEX usage for RX diversity
  ath9k: Run the LNA combining algorithm properly

 drivers/net/wireless/ath/ath9k/init.c |  4 +--
 drivers/net/wireless/ath/ath9k/recv.c | 46 ++++++++++++++++++++++-------------
 2 files changed, 31 insertions(+), 19 deletions(-)

-- 
1.8.3.4


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

* [PATCH 1/2] ath9k: Fix BTCOEX usage for RX diversity
  2013-08-07  6:59 [PATCH 0/2] Antenna diversity fixes Sujith Manoharan
@ 2013-08-07  6:59 ` Sujith Manoharan
  2013-08-07  6:59 ` [PATCH 2/2] ath9k: Run the LNA combining algorithm properly Sujith Manoharan
  1 sibling, 0 replies; 6+ messages in thread
From: Sujith Manoharan @ 2013-08-07  6:59 UTC (permalink / raw)
  To: John Linville; +Cc: linux-wireless, ath9k-devel

From: Sujith Manoharan <c_manoha@qca.qualcomm.com>

BTCOEX has to be *disabled* for WLAN RX diversity to
work on combo cards.

Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com>
---
 drivers/net/wireless/ath/ath9k/init.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c
index 4afe30e..3b56c2e 100644
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
@@ -645,11 +645,11 @@ static int ath9k_init_softc(u16 devid, struct ath_softc *sc,
 	/*
 	 * Enable WLAN/BT RX Antenna diversity only when:
 	 *
-	 * - BTCOEX is enabled
+	 * - BTCOEX is disabled.
 	 * - the user manually requests the feature.
 	 * - the HW cap is set using the platform data.
 	 */
-	if (common->btcoex_enabled && ath9k_bt_ant_diversity &&
+	if (!common->btcoex_enabled && ath9k_bt_ant_diversity &&
 	    (pCap->hw_caps & ATH9K_HW_CAP_BT_ANT_DIV))
 		common->bt_ant_diversity = 1;
 
-- 
1.8.3.4


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

* [PATCH 2/2] ath9k: Run the LNA combining algorithm properly
  2013-08-07  6:59 [PATCH 0/2] Antenna diversity fixes Sujith Manoharan
  2013-08-07  6:59 ` [PATCH 1/2] ath9k: Fix BTCOEX usage for RX diversity Sujith Manoharan
@ 2013-08-07  6:59 ` Sujith Manoharan
  2013-08-07  7:18   ` Felix Fietkau
  2013-08-07  7:24   ` [PATCH v2 " Sujith Manoharan
  1 sibling, 2 replies; 6+ messages in thread
From: Sujith Manoharan @ 2013-08-07  6:59 UTC (permalink / raw)
  To: John Linville; +Cc: linux-wireless, ath9k-devel

From: Sujith Manoharan <c_manoha@qca.qualcomm.com>

The LNA combining algorithm has to be run for cards
that support the required diversity features, make
sure that that correct conditions are met before
enabing this algorithm.

Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com>
---
 drivers/net/wireless/ath/ath9k/recv.c | 46 ++++++++++++++++++++++-------------
 1 file changed, 29 insertions(+), 17 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c
index 865e043..e359557 100644
--- a/drivers/net/wireless/ath/ath9k/recv.c
+++ b/drivers/net/wireless/ath/ath9k/recv.c
@@ -1156,7 +1156,8 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
 	struct ath_buf *bf;
 	struct sk_buff *skb = NULL, *requeue_skb, *hdr_skb;
 	struct ieee80211_rx_status *rxs;
-	struct ath_hw *ah = sc->sc_ah;
+	struct ath_hw *ah = sc->sc_ah
+;	struct ath9k_hw_capabilities *pCap = &ah->caps;
 	struct ath_common *common = ath9k_hw_common(ah);
 	struct ieee80211_hw *hw = sc->hw;
 	struct ieee80211_hdr *hdr;
@@ -1328,11 +1329,30 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
 			skb = hdr_skb;
 		}
 
+		if (rxs->flag & RX_FLAG_MMIC_STRIPPED)
+			skb_trim(skb, skb->len - 8);
 
-		if (ah->caps.hw_caps & ATH9K_HW_CAP_ANT_DIV_COMB) {
+		spin_lock_irqsave(&sc->sc_pm_lock, flags);
+		if ((sc->ps_flags & (PS_WAIT_FOR_BEACON |
+				     PS_WAIT_FOR_CAB |
+				     PS_WAIT_FOR_PSPOLL_DATA)) ||
+		    ath9k_check_auto_sleep(sc))
+			ath_rx_ps(sc, skb, rs.is_mybeacon);
+		spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
 
+		/*
+		 * Run the LNA combining algorithm only in these cases:
+		 *
+		 * Standalone WLAN cards with both LNA/Antenna diversity
+		 * enabled in the EEPROM.
+		 *
+		 * WLAN+BT cards which are in the supported card list
+		 * in ath_pci_id_table and the user has loaded the
+		 * driver with "bt_ant_diversity" set to true.
+		 */
+		if (ah->caps.hw_caps & ATH9K_HW_CAP_ANT_DIV_COMB) {
 			/*
-			 * change the default rx antenna if rx diversity
+			 * Change the default rx antenna if rx diversity
 			 * chooses the other antenna 3 times in a row.
 			 */
 			if (sc->rx.defant != rs.rs_antenna) {
@@ -1342,22 +1362,14 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
 				sc->rx.rxotherant = 0;
 			}
 
+			if (pCap->hw_caps & ATH9K_HW_CAP_BT_ANT_DIV) {
+				if (common->bt_ant_diversity)
+					ath_ant_comb_scan(sc, &rs);
+			} else {
+				ath_ant_comb_scan(sc, &rs);
+			}
 		}
 
-		if (rxs->flag & RX_FLAG_MMIC_STRIPPED)
-			skb_trim(skb, skb->len - 8);
-
-		spin_lock_irqsave(&sc->sc_pm_lock, flags);
-		if ((sc->ps_flags & (PS_WAIT_FOR_BEACON |
-				     PS_WAIT_FOR_CAB |
-				     PS_WAIT_FOR_PSPOLL_DATA)) ||
-		    ath9k_check_auto_sleep(sc))
-			ath_rx_ps(sc, skb, rs.is_mybeacon);
-		spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
-
-		if ((ah->caps.hw_caps & ATH9K_HW_CAP_ANT_DIV_COMB) && sc->ant_rx == 3)
-			ath_ant_comb_scan(sc, &rs);
-
 		ath9k_apply_ampdu_details(sc, &rs, rxs);
 
 		ieee80211_rx(hw, skb);
-- 
1.8.3.4


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

* Re: [PATCH 2/2] ath9k: Run the LNA combining algorithm properly
  2013-08-07  6:59 ` [PATCH 2/2] ath9k: Run the LNA combining algorithm properly Sujith Manoharan
@ 2013-08-07  7:18   ` Felix Fietkau
  2013-08-07  7:18     ` Sujith Manoharan
  2013-08-07  7:24   ` [PATCH v2 " Sujith Manoharan
  1 sibling, 1 reply; 6+ messages in thread
From: Felix Fietkau @ 2013-08-07  7:18 UTC (permalink / raw)
  To: Sujith Manoharan; +Cc: John Linville, linux-wireless, ath9k-devel

On 2013-08-07 8:59 AM, Sujith Manoharan wrote:
> From: Sujith Manoharan <c_manoha@qca.qualcomm.com>
> 
> The LNA combining algorithm has to be run for cards
> that support the required diversity features, make
> sure that that correct conditions are met before
> enabing this algorithm.
> 
> Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com>
> ---
>  drivers/net/wireless/ath/ath9k/recv.c | 46 ++++++++++++++++++++++-------------
>  1 file changed, 29 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c
> index 865e043..e359557 100644
> --- a/drivers/net/wireless/ath/ath9k/recv.c
> +++ b/drivers/net/wireless/ath/ath9k/recv.c
> @@ -1156,7 +1156,8 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
>  	struct ath_buf *bf;
>  	struct sk_buff *skb = NULL, *requeue_skb, *hdr_skb;
>  	struct ieee80211_rx_status *rxs;
> -	struct ath_hw *ah = sc->sc_ah;
> +	struct ath_hw *ah = sc->sc_ah
> +;	struct ath9k_hw_capabilities *pCap = &ah->caps;
>  	struct ath_common *common = ath9k_hw_common(ah);
>  	struct ieee80211_hw *hw = sc->hw;
>  	struct ieee80211_hdr *hdr;
Misplaced semicolon

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

* Re: [PATCH 2/2] ath9k: Run the LNA combining algorithm properly
  2013-08-07  7:18   ` Felix Fietkau
@ 2013-08-07  7:18     ` Sujith Manoharan
  0 siblings, 0 replies; 6+ messages in thread
From: Sujith Manoharan @ 2013-08-07  7:18 UTC (permalink / raw)
  To: Felix Fietkau; +Cc: John Linville, linux-wireless, ath9k-devel

Felix Fietkau wrote:
> > -	struct ath_hw *ah = sc->sc_ah;
> > +	struct ath_hw *ah = sc->sc_ah
> > +;	struct ath9k_hw_capabilities *pCap = &ah->caps;
> >  	struct ath_common *common = ath9k_hw_common(ah);
> >  	struct ieee80211_hw *hw = sc->hw;
> >  	struct ieee80211_hdr *hdr;
> Misplaced semicolon

Thanks, I'll send v2.

Sujith

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

* [PATCH v2 2/2] ath9k: Run the LNA combining algorithm properly
  2013-08-07  6:59 ` [PATCH 2/2] ath9k: Run the LNA combining algorithm properly Sujith Manoharan
  2013-08-07  7:18   ` Felix Fietkau
@ 2013-08-07  7:24   ` Sujith Manoharan
  1 sibling, 0 replies; 6+ messages in thread
From: Sujith Manoharan @ 2013-08-07  7:24 UTC (permalink / raw)
  To: John Linville; +Cc: linux-wireless, ath9k-devel

From: Sujith Manoharan <c_manoha@qca.qualcomm.com>

The LNA combining algorithm has to be run for cards
that support the required diversity features, make
sure that that correct conditions are met before
enabing this algorithm.

Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com>
---
v2 : Fix a misplaced semicolon

 drivers/net/wireless/ath/ath9k/recv.c | 44 ++++++++++++++++++++++-------------
 1 file changed, 28 insertions(+), 16 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c
index 865e043..62dff97 100644
--- a/drivers/net/wireless/ath/ath9k/recv.c
+++ b/drivers/net/wireless/ath/ath9k/recv.c
@@ -1157,6 +1157,7 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
 	struct sk_buff *skb = NULL, *requeue_skb, *hdr_skb;
 	struct ieee80211_rx_status *rxs;
 	struct ath_hw *ah = sc->sc_ah;
+	struct ath9k_hw_capabilities *pCap = &ah->caps;
 	struct ath_common *common = ath9k_hw_common(ah);
 	struct ieee80211_hw *hw = sc->hw;
 	struct ieee80211_hdr *hdr;
@@ -1328,11 +1329,30 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
 			skb = hdr_skb;
 		}
 
+		if (rxs->flag & RX_FLAG_MMIC_STRIPPED)
+			skb_trim(skb, skb->len - 8);
 
-		if (ah->caps.hw_caps & ATH9K_HW_CAP_ANT_DIV_COMB) {
+		spin_lock_irqsave(&sc->sc_pm_lock, flags);
+		if ((sc->ps_flags & (PS_WAIT_FOR_BEACON |
+				     PS_WAIT_FOR_CAB |
+				     PS_WAIT_FOR_PSPOLL_DATA)) ||
+		    ath9k_check_auto_sleep(sc))
+			ath_rx_ps(sc, skb, rs.is_mybeacon);
+		spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
 
+		/*
+		 * Run the LNA combining algorithm only in these cases:
+		 *
+		 * Standalone WLAN cards with both LNA/Antenna diversity
+		 * enabled in the EEPROM.
+		 *
+		 * WLAN+BT cards which are in the supported card list
+		 * in ath_pci_id_table and the user has loaded the
+		 * driver with "bt_ant_diversity" set to true.
+		 */
+		if (ah->caps.hw_caps & ATH9K_HW_CAP_ANT_DIV_COMB) {
 			/*
-			 * change the default rx antenna if rx diversity
+			 * Change the default rx antenna if rx diversity
 			 * chooses the other antenna 3 times in a row.
 			 */
 			if (sc->rx.defant != rs.rs_antenna) {
@@ -1342,22 +1362,14 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
 				sc->rx.rxotherant = 0;
 			}
 
+			if (pCap->hw_caps & ATH9K_HW_CAP_BT_ANT_DIV) {
+				if (common->bt_ant_diversity)
+					ath_ant_comb_scan(sc, &rs);
+			} else {
+				ath_ant_comb_scan(sc, &rs);
+			}
 		}
 
-		if (rxs->flag & RX_FLAG_MMIC_STRIPPED)
-			skb_trim(skb, skb->len - 8);
-
-		spin_lock_irqsave(&sc->sc_pm_lock, flags);
-		if ((sc->ps_flags & (PS_WAIT_FOR_BEACON |
-				     PS_WAIT_FOR_CAB |
-				     PS_WAIT_FOR_PSPOLL_DATA)) ||
-		    ath9k_check_auto_sleep(sc))
-			ath_rx_ps(sc, skb, rs.is_mybeacon);
-		spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
-
-		if ((ah->caps.hw_caps & ATH9K_HW_CAP_ANT_DIV_COMB) && sc->ant_rx == 3)
-			ath_ant_comb_scan(sc, &rs);
-
 		ath9k_apply_ampdu_details(sc, &rs, rxs);
 
 		ieee80211_rx(hw, skb);
-- 
1.8.3.4


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

end of thread, other threads:[~2013-08-07  7:28 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-08-07  6:59 [PATCH 0/2] Antenna diversity fixes Sujith Manoharan
2013-08-07  6:59 ` [PATCH 1/2] ath9k: Fix BTCOEX usage for RX diversity Sujith Manoharan
2013-08-07  6:59 ` [PATCH 2/2] ath9k: Run the LNA combining algorithm properly Sujith Manoharan
2013-08-07  7:18   ` Felix Fietkau
2013-08-07  7:18     ` Sujith Manoharan
2013-08-07  7:24   ` [PATCH v2 " Sujith Manoharan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox