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

The registers for temperature compensation need to
be programmed only for active chains. Use the TX chainmask
to make sure that this is done properly for QCA953x.

Signed-off-by: Sujith Manoharan <c_man...@qca.qualcomm.com>
---
 drivers/net/wireless/ath/ath9k/ar9003_eeprom.c | 59 +++++++++++++++-----------
 1 file changed, 35 insertions(+), 24 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c 
b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
index d7625ec..235053b 100644
--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
@@ -4792,43 +4792,54 @@ static void ar9003_hw_power_control_override(struct 
ath_hw *ah,
 
 tempslope:
        if (AR_SREV_9550(ah) || AR_SREV_9531(ah)) {
+               u8 txmask = (eep->baseEepHeader.txrxMask & 0xf0) >> 4;
+
                /*
                 * AR955x has tempSlope register for each chain.
                 * Check whether temp_compensation feature is enabled or not.
                 */
                if (eep->baseEepHeader.featureEnable & 0x1) {
                        if (frequency < 4000) {
-                               REG_RMW_FIELD(ah, AR_PHY_TPC_19,
-                                             AR_PHY_TPC_19_ALPHA_THERM,
-                                             eep->base_ext2.tempSlopeLow);
-                               REG_RMW_FIELD(ah, AR_PHY_TPC_19_B1,
-                                             AR_PHY_TPC_19_ALPHA_THERM,
-                                             temp_slope);
-                               REG_RMW_FIELD(ah, AR_PHY_TPC_19_B2,
-                                             AR_PHY_TPC_19_ALPHA_THERM,
-                                             eep->base_ext2.tempSlopeHigh);
+                               if (txmask & BIT(0))
+                                       REG_RMW_FIELD(ah, AR_PHY_TPC_19,
+                                                     AR_PHY_TPC_19_ALPHA_THERM,
+                                                     
eep->base_ext2.tempSlopeLow);
+                               if (txmask & BIT(1))
+                                       REG_RMW_FIELD(ah, AR_PHY_TPC_19_B1,
+                                                     AR_PHY_TPC_19_ALPHA_THERM,
+                                                     temp_slope);
+                               if (txmask & BIT(2))
+                                       REG_RMW_FIELD(ah, AR_PHY_TPC_19_B2,
+                                                     AR_PHY_TPC_19_ALPHA_THERM,
+                                                     
eep->base_ext2.tempSlopeHigh);
                        } else {
-                               REG_RMW_FIELD(ah, AR_PHY_TPC_19,
-                                             AR_PHY_TPC_19_ALPHA_THERM,
-                                             temp_slope);
-                               REG_RMW_FIELD(ah, AR_PHY_TPC_19_B1,
-                                             AR_PHY_TPC_19_ALPHA_THERM,
-                                             temp_slope1);
-                               REG_RMW_FIELD(ah, AR_PHY_TPC_19_B2,
-                                             AR_PHY_TPC_19_ALPHA_THERM,
-                                             temp_slope2);
+                               if (txmask & BIT(0))
+                                       REG_RMW_FIELD(ah, AR_PHY_TPC_19,
+                                                     AR_PHY_TPC_19_ALPHA_THERM,
+                                                     temp_slope);
+                               if (txmask & BIT(1))
+                                       REG_RMW_FIELD(ah, AR_PHY_TPC_19_B1,
+                                                     AR_PHY_TPC_19_ALPHA_THERM,
+                                                     temp_slope1);
+                               if (txmask & BIT(2))
+                                       REG_RMW_FIELD(ah, AR_PHY_TPC_19_B2,
+                                                     AR_PHY_TPC_19_ALPHA_THERM,
+                                                     temp_slope2);
                        }
                } else {
                        /*
                         * If temp compensation is not enabled,
                         * set all registers to 0.
                         */
-                       REG_RMW_FIELD(ah, AR_PHY_TPC_19,
-                                     AR_PHY_TPC_19_ALPHA_THERM, 0);
-                       REG_RMW_FIELD(ah, AR_PHY_TPC_19_B1,
-                                     AR_PHY_TPC_19_ALPHA_THERM, 0);
-                       REG_RMW_FIELD(ah, AR_PHY_TPC_19_B2,
-                                     AR_PHY_TPC_19_ALPHA_THERM, 0);
+                       if (txmask & BIT(0))
+                               REG_RMW_FIELD(ah, AR_PHY_TPC_19,
+                                             AR_PHY_TPC_19_ALPHA_THERM, 0);
+                       if (txmask & BIT(1))
+                               REG_RMW_FIELD(ah, AR_PHY_TPC_19_B1,
+                                             AR_PHY_TPC_19_ALPHA_THERM, 0);
+                       if (txmask & BIT(2))
+                               REG_RMW_FIELD(ah, AR_PHY_TPC_19_B2,
+                                             AR_PHY_TPC_19_ALPHA_THERM, 0);
                }
        } else {
                REG_RMW_FIELD(ah, AR_PHY_TPC_19,
-- 
1.9.0

_______________________________________________
ath9k-devel mailing list
ath9k-devel@lists.ath9k.org
https://lists.ath9k.org/mailman/listinfo/ath9k-devel

Reply via email to