Skip to content

Commit

Permalink
V4L/DVB (6957): tda18271: fail table lookups if frequency is out of r…
Browse files Browse the repository at this point in the history
…ange

Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
  • Loading branch information
Michael Krufky authored and Mauro Carvalho Chehab committed Jan 25, 2008
1 parent 0be4375 commit 33f25b4
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 13 deletions.
5 changes: 0 additions & 5 deletions drivers/media/dvb/frontends/tda18271-fe.c
Original file line number Diff line number Diff line change
Expand Up @@ -502,11 +502,6 @@ static int tda18271_calc_rf_cal(struct dvb_frontend *fe, u32 *freq)
if (ret < 0)
goto fail;

/* VHF_Low band only */
if (0 == val) {
ret = -ERANGE;
goto fail;
}
regs[R_EB14] = val;
fail:
return ret;
Expand Down
28 changes: 20 additions & 8 deletions drivers/media/dvb/frontends/tda18271-tables.c
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,7 @@ int tda18271_lookup_pll_map(enum tda18271_map_type map_type,
struct tda18271_pll_map *map = NULL;
unsigned int i = 0;
char *map_name;
int ret = 0;

switch (map_type) {
case MAIN_PLL:
Expand All @@ -291,28 +292,34 @@ int tda18271_lookup_pll_map(enum tda18271_map_type map_type,

if (!map) {
tda_warn("%s map is not set!\n", map_name);
return -EINVAL;
ret = -EINVAL;
goto fail;
}

while ((map[i].lomax * 1000) < *freq) {
if (map[i + 1].lomax == 0)
if (map[i].lomax == 0) {
tda_map("%s: frequency (%d) out of range\n",
map_name, *freq);
ret = -ERANGE;
break;
}
i++;
}
*post_div = map[i].pd;
*div = map[i].d;

tda_map("%s: post div = 0x%02x, div = 0x%02x\n",
map_name, *post_div, *div);

return 0;
fail:
return ret;
}

int tda18271_lookup_map(enum tda18271_map_type map_type, u32 *freq, u8 *val)
{
struct tda18271_map *map = NULL;
unsigned int i = 0;
char *map_name;
int ret = 0;

switch (map_type) {
case BP_FILTER:
Expand Down Expand Up @@ -347,19 +354,24 @@ int tda18271_lookup_map(enum tda18271_map_type map_type, u32 *freq, u8 *val)

if (!map) {
tda_warn("%s map is not set!\n", map_name);
return -EINVAL;
ret = -EINVAL;
goto fail;
}

while ((map[i].rfmax * 1000) < *freq) {
if (map[i + 1].rfmax == 0)
if (map[i].rfmax == 0) {
tda_map("%s: frequency (%d) out of range\n",
map_name, *freq);
ret = -ERANGE;
break;
}
i++;
}
*val = map[i].val;

tda_map("%s: 0x%02x\n", map_name, *val);

return 0;
fail:
return ret;
}

/*
Expand Down

0 comments on commit 33f25b4

Please sign in to comment.