1 --- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
2 +++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
3 @@ -1497,50 +1497,25 @@ static bool ar5008_hw_ani_control_new(st
4 static void ar5008_hw_do_getnf(struct ath_hw *ah,
5 int16_t nfarray[NUM_NF_READINGS])
7 - struct ath_common *common = ath9k_hw_common(ah);
10 nf = MS(REG_READ(ah, AR_PHY_CCA), AR_PHY_MINCCA_PWR);
12 - nf = 0 - ((nf ^ 0x1ff) + 1);
13 - ath_print(common, ATH_DBG_CALIBRATE,
14 - "NF calibrated [ctl] [chain 0] is %d\n", nf);
16 + nfarray[0] = sign_extend(nf, 9);
18 nf = MS(REG_READ(ah, AR_PHY_CH1_CCA), AR_PHY_CH1_MINCCA_PWR);
20 - nf = 0 - ((nf ^ 0x1ff) + 1);
21 - ath_print(common, ATH_DBG_CALIBRATE,
22 - "NF calibrated [ctl] [chain 1] is %d\n", nf);
24 + nfarray[1] = sign_extend(nf, 9);
26 nf = MS(REG_READ(ah, AR_PHY_CH2_CCA), AR_PHY_CH2_MINCCA_PWR);
28 - nf = 0 - ((nf ^ 0x1ff) + 1);
29 - ath_print(common, ATH_DBG_CALIBRATE,
30 - "NF calibrated [ctl] [chain 2] is %d\n", nf);
32 + nfarray[2] = sign_extend(nf, 9);
34 nf = MS(REG_READ(ah, AR_PHY_EXT_CCA), AR_PHY_EXT_MINCCA_PWR);
36 - nf = 0 - ((nf ^ 0x1ff) + 1);
37 - ath_print(common, ATH_DBG_CALIBRATE,
38 - "NF calibrated [ext] [chain 0] is %d\n", nf);
40 + nfarray[3] = sign_extend(nf, 9);
42 nf = MS(REG_READ(ah, AR_PHY_CH1_EXT_CCA), AR_PHY_CH1_EXT_MINCCA_PWR);
44 - nf = 0 - ((nf ^ 0x1ff) + 1);
45 - ath_print(common, ATH_DBG_CALIBRATE,
46 - "NF calibrated [ext] [chain 1] is %d\n", nf);
48 + nfarray[4] = sign_extend(nf, 9);
50 nf = MS(REG_READ(ah, AR_PHY_CH2_EXT_CCA), AR_PHY_CH2_EXT_MINCCA_PWR);
52 - nf = 0 - ((nf ^ 0x1ff) + 1);
53 - ath_print(common, ATH_DBG_CALIBRATE,
54 - "NF calibrated [ext] [chain 2] is %d\n", nf);
56 + nfarray[5] = sign_extend(nf, 9);
59 static void ar5008_hw_loadnf(struct ath_hw *ah, struct ath9k_channel *chan)
60 --- a/drivers/net/wireless/ath/ath9k/ar9002_phy.c
61 +++ b/drivers/net/wireless/ath/ath9k/ar9002_phy.c
62 @@ -471,47 +471,22 @@ static u32 ar9002_hw_compute_pll_control
63 static void ar9002_hw_do_getnf(struct ath_hw *ah,
64 int16_t nfarray[NUM_NF_READINGS])
66 - struct ath_common *common = ath9k_hw_common(ah);
69 nf = MS(REG_READ(ah, AR_PHY_CCA), AR9280_PHY_MINCCA_PWR);
72 - nf = 0 - ((nf ^ 0x1ff) + 1);
73 - ath_print(common, ATH_DBG_CALIBRATE,
74 - "NF calibrated [ctl] [chain 0] is %d\n", nf);
78 - if (!AR_SREV_9285(ah) && !AR_SREV_9271(ah)) {
79 - nf = MS(REG_READ(ah, AR_PHY_CH1_CCA),
80 - AR9280_PHY_CH1_MINCCA_PWR);
83 - nf = 0 - ((nf ^ 0x1ff) + 1);
84 - ath_print(common, ATH_DBG_CALIBRATE,
85 - "NF calibrated [ctl] [chain 1] is %d\n", nf);
88 + nfarray[0] = sign_extend(nf, 9);
90 nf = MS(REG_READ(ah, AR_PHY_EXT_CCA), AR9280_PHY_EXT_MINCCA_PWR);
92 - nf = 0 - ((nf ^ 0x1ff) + 1);
93 - ath_print(common, ATH_DBG_CALIBRATE,
94 - "NF calibrated [ext] [chain 0] is %d\n", nf);
98 - if (!AR_SREV_9285(ah) && !AR_SREV_9271(ah)) {
99 - nf = MS(REG_READ(ah, AR_PHY_CH1_EXT_CCA),
100 - AR9280_PHY_CH1_EXT_MINCCA_PWR);
103 - nf = 0 - ((nf ^ 0x1ff) + 1);
104 - ath_print(common, ATH_DBG_CALIBRATE,
105 - "NF calibrated [ext] [chain 1] is %d\n", nf);
108 + nfarray[3] = sign_extend(nf, 9);
110 + if (AR_SREV_9285(ah) || AR_SREV_9271(ah))
113 + nf = MS(REG_READ(ah, AR_PHY_CH1_CCA), AR9280_PHY_CH1_MINCCA_PWR);
114 + nfarray[1] = sign_extend(nf, 9);
116 + nf = MS(REG_READ(ah, AR_PHY_CH1_EXT_CCA), AR9280_PHY_CH1_EXT_MINCCA_PWR);
117 + nfarray[4] = sign_extend(nf, 9);
120 static void ar9002_hw_set_nf_limits(struct ath_hw *ah)
121 --- a/drivers/net/wireless/ath/ath9k/calib.c
122 +++ b/drivers/net/wireless/ath/ath9k/calib.c
123 @@ -182,6 +182,10 @@ static void ath9k_hw_nf_sanitize(struct
127 + ath_print(common, ATH_DBG_CALIBRATE,
128 + "NF calibrated [%s] [chain %d] is %d\n",
129 + (i > 3 ? "ext" : "ctl"), i % 3, nf[i]);
131 if (nf[i] > limit->max) {
132 ath_print(common, ATH_DBG_CALIBRATE,
133 "NF[%d] (%d) > MAX (%d), correcting to MAX",
134 --- a/drivers/net/wireless/ath/ath9k/hw.h
135 +++ b/drivers/net/wireless/ath/ath9k/hw.h
136 @@ -853,6 +853,12 @@ static inline struct ath_hw_ops *ath9k_h
140 +static inline int sign_extend(int val, const int nbits)
142 + int order = BIT(nbits-1);
143 + return (val ^ order) - order;
146 /* Initialization, Detach, Reset */
147 const char *ath9k_hw_probe(u16 vendorid, u16 devid);
148 void ath9k_hw_deinit(struct ath_hw *ah);
149 --- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
150 +++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
151 @@ -1018,50 +1018,25 @@ static bool ar9003_hw_ani_control(struct
152 static void ar9003_hw_do_getnf(struct ath_hw *ah,
153 int16_t nfarray[NUM_NF_READINGS])
155 - struct ath_common *common = ath9k_hw_common(ah);
158 nf = MS(REG_READ(ah, AR_PHY_CCA_0), AR_PHY_MINCCA_PWR);
160 - nf = 0 - ((nf ^ 0x1ff) + 1);
161 - ath_print(common, ATH_DBG_CALIBRATE,
162 - "NF calibrated [ctl] [chain 0] is %d\n", nf);
164 + nfarray[0] = sign_extend(nf, 9);
166 nf = MS(REG_READ(ah, AR_PHY_CCA_1), AR_PHY_CH1_MINCCA_PWR);
168 - nf = 0 - ((nf ^ 0x1ff) + 1);
169 - ath_print(common, ATH_DBG_CALIBRATE,
170 - "NF calibrated [ctl] [chain 1] is %d\n", nf);
172 + nfarray[1] = sign_extend(nf, 9);
174 nf = MS(REG_READ(ah, AR_PHY_CCA_2), AR_PHY_CH2_MINCCA_PWR);
176 - nf = 0 - ((nf ^ 0x1ff) + 1);
177 - ath_print(common, ATH_DBG_CALIBRATE,
178 - "NF calibrated [ctl] [chain 2] is %d\n", nf);
180 + nfarray[2] = sign_extend(nf, 9);
182 nf = MS(REG_READ(ah, AR_PHY_EXT_CCA), AR_PHY_EXT_MINCCA_PWR);
184 - nf = 0 - ((nf ^ 0x1ff) + 1);
185 - ath_print(common, ATH_DBG_CALIBRATE,
186 - "NF calibrated [ext] [chain 0] is %d\n", nf);
188 + nfarray[3] = sign_extend(nf, 9);
190 nf = MS(REG_READ(ah, AR_PHY_EXT_CCA_1), AR_PHY_CH1_EXT_MINCCA_PWR);
192 - nf = 0 - ((nf ^ 0x1ff) + 1);
193 - ath_print(common, ATH_DBG_CALIBRATE,
194 - "NF calibrated [ext] [chain 1] is %d\n", nf);
196 + nfarray[4] = sign_extend(nf, 9);
198 nf = MS(REG_READ(ah, AR_PHY_EXT_CCA_2), AR_PHY_CH2_EXT_MINCCA_PWR);
200 - nf = 0 - ((nf ^ 0x1ff) + 1);
201 - ath_print(common, ATH_DBG_CALIBRATE,
202 - "NF calibrated [ext] [chain 2] is %d\n", nf);
204 + nfarray[5] = sign_extend(nf, 9);
207 static void ar9003_hw_set_nf_limits(struct ath_hw *ah)