From: Michael Krufky Date: Sun, 30 Dec 2007 00:46:01 +0000 (-0300) Subject: V4L/DVB (6957): tda18271: fail table lookups if frequency is out of range X-Git-Tag: v2.6.25-rc1~1235^2~90 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=33f25b42753f464c5927e8b828352333780c14bd;p=karo-tx-linux.git V4L/DVB (6957): tda18271: fail table lookups if frequency is out of range Signed-off-by: Michael Krufky Signed-off-by: Mauro Carvalho Chehab --- diff --git a/drivers/media/dvb/frontends/tda18271-fe.c b/drivers/media/dvb/frontends/tda18271-fe.c index d5807c98afc1..739ecfe04381 100644 --- a/drivers/media/dvb/frontends/tda18271-fe.c +++ b/drivers/media/dvb/frontends/tda18271-fe.c @@ -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; diff --git a/drivers/media/dvb/frontends/tda18271-tables.c b/drivers/media/dvb/frontends/tda18271-tables.c index e10a93bf12c1..f8202c40b046 100644 --- a/drivers/media/dvb/frontends/tda18271-tables.c +++ b/drivers/media/dvb/frontends/tda18271-tables.c @@ -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: @@ -291,12 +292,17 @@ 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; @@ -304,8 +310,8 @@ int tda18271_lookup_pll_map(enum tda18271_map_type map_type, 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) @@ -313,6 +319,7 @@ 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: @@ -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; } /*