aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorNick Kossifidis <mick@madwifi-project.org>2009-08-09 20:27:59 -0400
committerJohn W. Linville <linville@tuxdriver.com>2009-08-14 09:13:56 -0400
commitd1cb0bdac180a4afdd3c001acb2618d2a62d9abe (patch)
treec27715544627c038bbf5f032a46a864342ab8394 /drivers
parentc38e7a9348f725be0ea2493454db9e6d44fb7e0c (diff)
ath5k: Linear PCDAC code fixes
* Set correct xpd curve indices for high/low gain curves during rfbuffer setup on RF5112B with both calibration curves available. * Don't return zero min power when we have the same pcdac value twice because it breaks interpolation. Instead return the right x barrier as we do when we have equal power levels for 2 different pcdac values. Signed-off-by: Nick Kossifidis <mickflemm@gmail.com> Acked-by: Bob Copeland <me@bobcopeland.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/wireless/ath/ath5k/phy.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/drivers/net/wireless/ath/ath5k/phy.c b/drivers/net/wireless/ath/ath5k/phy.c
index 2075ba993966..6afba98f6adb 100644
--- a/drivers/net/wireless/ath/ath5k/phy.c
+++ b/drivers/net/wireless/ath/ath5k/phy.c
@@ -740,13 +740,22 @@ int ath5k_hw_rfregs_init(struct ath5k_hw *ah, struct ieee80211_channel *channel,
740 AR5K_RF_XPD_GAIN, true); 740 AR5K_RF_XPD_GAIN, true);
741 741
742 } else { 742 } else {
743 /* TODO: Set high and low gain bits */ 743 u8 *pdg_curve_to_idx = ee->ee_pdc_to_idx[ee_mode];
744 ath5k_hw_rfb_op(ah, rf_regs, 744 if (ee->ee_pd_gains[ee_mode] > 1) {
745 ee->ee_x_gain[ee_mode], 745 ath5k_hw_rfb_op(ah, rf_regs,
746 pdg_curve_to_idx[0],
746 AR5K_RF_PD_GAIN_LO, true); 747 AR5K_RF_PD_GAIN_LO, true);
747 ath5k_hw_rfb_op(ah, rf_regs, 748 ath5k_hw_rfb_op(ah, rf_regs,
748 ee->ee_x_gain[ee_mode], 749 pdg_curve_to_idx[1],
749 AR5K_RF_PD_GAIN_HI, true); 750 AR5K_RF_PD_GAIN_HI, true);
751 } else {
752 ath5k_hw_rfb_op(ah, rf_regs,
753 pdg_curve_to_idx[0],
754 AR5K_RF_PD_GAIN_LO, true);
755 ath5k_hw_rfb_op(ah, rf_regs,
756 pdg_curve_to_idx[0],
757 AR5K_RF_PD_GAIN_HI, true);
758 }
750 759
751 /* Lower synth voltage on Rev 2 */ 760 /* Lower synth voltage on Rev 2 */
752 ath5k_hw_rfb_op(ah, rf_regs, 2, 761 ath5k_hw_rfb_op(ah, rf_regs, 2,
@@ -1896,8 +1905,9 @@ ath5k_get_linear_pcdac_min(const u8 *stepL, const u8 *stepR,
1896 s16 min_pwrL, min_pwrR; 1905 s16 min_pwrL, min_pwrR;
1897 s16 pwr_i; 1906 s16 pwr_i;
1898 1907
1899 if (WARN_ON(stepL[0] == stepL[1] || stepR[0] == stepR[1])) 1908 /* Some vendors write the same pcdac value twice !!! */
1900 return 0; 1909 if (stepL[0] == stepL[1] || stepR[0] == stepR[1])
1910 return max(pwrL[0], pwrR[0]);
1901 1911
1902 if (pwrL[0] == pwrL[1]) 1912 if (pwrL[0] == pwrL[1])
1903 min_pwrL = pwrL[0]; 1913 min_pwrL = pwrL[0];