tuner_e4k: Fix closest_arr_idx

The previous method tried to do clever stuff assuming the sequence is
sorted. Unfortunately:

1) this didn't really find the 'closest' match
2) this didn't work for the first or last interval
3) this didn't work for freq slightly above or below the last/first freq

All in all, it's easier to try them all.

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
This commit is contained in:
Sylvain Munaut 2012-03-29 23:35:36 +02:00
parent a95b61f397
commit 60d88b6ed2
1 changed files with 8 additions and 7 deletions

View File

@ -152,19 +152,20 @@ static const uint32_t rf_filt_center_l[] = {
static int closest_arr_idx(const uint32_t *arr, unsigned int arr_size, uint32_t freq) static int closest_arr_idx(const uint32_t *arr, unsigned int arr_size, uint32_t freq)
{ {
unsigned int i; unsigned int i, bi;
uint32_t last_delta = 0xffffffff; uint32_t best_delta = 0xffffffff;
/* iterate over the array containing an ordered list of the center /* iterate over the array containing a list of the center
* frequencies, selecting the closest one */ * frequencies, selecting the closest one */
for (i = 0; i < arr_size; i++) { for (i = 0; i < arr_size; i++) {
uint32_t delta = unsigned_delta(freq, arr[i]); uint32_t delta = unsigned_delta(freq, arr[i]);
if (last_delta < delta) if (delta < best_delta) {
return i-1; best_delta = delta;
last_delta = delta; bi = i;
}
} }
return -ERANGE; return bi;
} }
/* return 4-bit index as to which RF filter to select */ /* return 4-bit index as to which RF filter to select */