aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/ath9k/calib.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/calib.c')
-rw-r--r--drivers/net/wireless/ath/ath9k/calib.c44
1 files changed, 30 insertions, 14 deletions
diff --git a/drivers/net/wireless/ath/ath9k/calib.c b/drivers/net/wireless/ath/ath9k/calib.c
index 26d87527acbd..20f74b5b5703 100644
--- a/drivers/net/wireless/ath/ath9k/calib.c
+++ b/drivers/net/wireless/ath/ath9k/calib.c
@@ -729,26 +729,42 @@ s16 ath9k_hw_getchan_noise(struct ath_hw *ah, struct ath9k_channel *chan)
729static void ath9k_olc_temp_compensation(struct ath_hw *ah) 729static void ath9k_olc_temp_compensation(struct ath_hw *ah)
730{ 730{
731 u32 rddata, i; 731 u32 rddata, i;
732 int delta, currPDADC, regval; 732 int delta, currPDADC, regval, slope;
733 733
734 rddata = REG_READ(ah, AR_PHY_TX_PWRCTRL4); 734 rddata = REG_READ(ah, AR_PHY_TX_PWRCTRL4);
735
736 currPDADC = MS(rddata, AR_PHY_TX_PWRCTRL_PD_AVG_OUT); 735 currPDADC = MS(rddata, AR_PHY_TX_PWRCTRL_PD_AVG_OUT);
737 736
738 if (ah->eep_ops->get_eeprom(ah, EEP_DAC_HPWR_5G))
739 delta = (currPDADC - ah->initPDADC + 4) / 8;
740 else
741 delta = (currPDADC - ah->initPDADC + 5) / 10;
742 737
743 if (delta != ah->PDADCdelta) { 738 if (OLC_FOR_AR9287_10_LATER) {
744 ah->PDADCdelta = delta; 739 if (ah->initPDADC == 0 || currPDADC == 0) {
745 for (i = 1; i < AR9280_TX_GAIN_TABLE_SIZE; i++) { 740 return;
746 regval = ah->originalGain[i] - delta; 741 } else {
747 if (regval < 0) 742 slope = ah->eep_ops->get_eeprom(ah, EEP_TEMPSENSE_SLOPE);
748 regval = 0; 743 if (slope == 0)
744 delta = 0;
745 else
746 delta = ((currPDADC - ah->initPDADC)*4) / slope;
747 REG_RMW_FIELD(ah, AR_PHY_CH0_TX_PWRCTRL11,
748 AR_PHY_TX_PWRCTRL_OLPC_TEMP_COMP, delta);
749 REG_RMW_FIELD(ah, AR_PHY_CH1_TX_PWRCTRL11,
750 AR_PHY_TX_PWRCTRL_OLPC_TEMP_COMP, delta);
751 }
752 } else {
753 if (ah->eep_ops->get_eeprom(ah, EEP_DAC_HPWR_5G))
754 delta = (currPDADC - ah->initPDADC + 4) / 8;
755 else
756 delta = (currPDADC - ah->initPDADC + 5) / 10;
757
758 if (delta != ah->PDADCdelta) {
759 ah->PDADCdelta = delta;
760 for (i = 1; i < AR9280_TX_GAIN_TABLE_SIZE; i++) {
761 regval = ah->originalGain[i] - delta;
762 if (regval < 0)
763 regval = 0;
749 764
750 REG_RMW_FIELD(ah, AR_PHY_TX_GAIN_TBL1 + i * 4, 765 REG_RMW_FIELD(ah, AR_PHY_TX_GAIN_TBL1 + i * 4,
751 AR_PHY_TX_GAIN, regval); 766 AR_PHY_TX_GAIN, regval);
767 }
752 } 768 }
753 } 769 }
754} 770}