Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 875690c3 authored by Fabio Rossi's avatar Fabio Rossi Committed by John W. Linville
Browse files

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: default avatarFabio Rossi <rossi.f@inwind.it>
Acked-by: default avatarNick Kossifidis <mickflemm@gmail.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent fbc9f97b
Loading
Loading
Loading
Loading
+28 −21
Original line number Diff line number Diff line
@@ -1487,28 +1487,35 @@ ath5k_get_linear_pcdac_min(const u8 *stepL, const u8 *stepR,
{
	s8 tmp;
	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 {
			pwr_i--;
			tmp = (s8) ath5k_get_interpolated_value(pwr_i,
							pwrL[0], pwrL[1],
							stepL[0], stepL[1]);

		} while (tmp > 1);

		min_pwrL = pwr_i;
	}

	if (pwrR[0] == pwrR[1])
		min_pwrR = pwrR[0];
	else {
		pwr_i = pwrR[0];
		do {
			pwr_i--;
			tmp = (s8) ath5k_get_interpolated_value(pwr_i,
							pwrR[0], pwrR[1],
							stepR[0], stepR[1]);

		} while (tmp > 1);

		min_pwrR = pwr_i;
	}

	/* Keep the right boundary so that it works for both curves */
	return max(min_pwrL, min_pwrR);