ath5k: fix interpolation with equal power levels

When the EEPROM contains weird values for the power levels we have to
fix the interpolation process.

Signed-off-by: Fabio Rossi <rossi.f@inwind.it>
Acked-by: Nick Kossifidis <mickflemm@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
Fabio Rossi 2009-04-01 20:37:50 +02:00 committed by John W. Linville
parent fbc9f97bbf
commit 875690c378

View file

@ -1487,28 +1487,35 @@ ath5k_get_linear_pcdac_min(const u8 *stepL, const u8 *stepR,
{ {
s8 tmp; s8 tmp;
s16 min_pwrL, min_pwrR; s16 min_pwrL, min_pwrR;
s16 pwr_i = pwrL[0]; s16 pwr_i;
if (pwrL[0] == pwrL[1])
min_pwrL = pwrL[0];
else {
pwr_i = pwrL[0];
do { do {
pwr_i--; pwr_i--;
tmp = (s8) ath5k_get_interpolated_value(pwr_i, tmp = (s8) ath5k_get_interpolated_value(pwr_i,
pwrL[0], pwrL[1], pwrL[0], pwrL[1],
stepL[0], stepL[1]); stepL[0], stepL[1]);
} while (tmp > 1); } while (tmp > 1);
min_pwrL = pwr_i; min_pwrL = pwr_i;
}
if (pwrR[0] == pwrR[1])
min_pwrR = pwrR[0];
else {
pwr_i = pwrR[0]; pwr_i = pwrR[0];
do { do {
pwr_i--; pwr_i--;
tmp = (s8) ath5k_get_interpolated_value(pwr_i, tmp = (s8) ath5k_get_interpolated_value(pwr_i,
pwrR[0], pwrR[1], pwrR[0], pwrR[1],
stepR[0], stepR[1]); stepR[0], stepR[1]);
} while (tmp > 1); } while (tmp > 1);
min_pwrR = pwr_i; min_pwrR = pwr_i;
}
/* Keep the right boundary so that it works for both curves */ /* Keep the right boundary so that it works for both curves */
return max(min_pwrL, min_pwrR); return max(min_pwrL, min_pwrR);