diff options
author | Mauro Carvalho Chehab <mchehab@infradead.org> | 2008-04-21 11:58:48 +0200 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@infradead.org> | 2008-04-24 19:09:44 +0200 |
commit | 33e5316113b1a472f54579f014739e4a4a53d704 (patch) | |
tree | 3126994d51273f09b3da41b25a3bfa83ac187970 /drivers/media/video/tuner-xc2028.c | |
parent | V4L/DVB (7650): git-dvb: Kconfig fix (diff) | |
download | linux-33e5316113b1a472f54579f014739e4a4a53d704.tar.xz linux-33e5316113b1a472f54579f014739e4a4a53d704.zip |
V4L/DVB (7651): tuner-xc2028: Several fixes to SCODE
This patch fixes several issues on SCODE:
1) The extracting tool weren't generating the proper tags for SCODE. This
has almost no effect, since those tags shouldn't be used;
2) DIBCOM52 were using a wrong IF. It should be 5200, instead of 5700;
3) seek_firmware were wanting an exact match for firmware type. This is
wrong. As result, no SCODE firmware were loaded;
4) A few files were including the wrong file for seeking demod firmwares;
5) XC3028_FE_DEFAULT can be used, if user doesn't want to load a firmware.
However, this weren't documentated. This feature require more testing.
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/video/tuner-xc2028.c')
-rw-r--r-- | drivers/media/video/tuner-xc2028.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/drivers/media/video/tuner-xc2028.c b/drivers/media/video/tuner-xc2028.c index 9dd688ec3cff..0e580bcd0e09 100644 --- a/drivers/media/video/tuner-xc2028.c +++ b/drivers/media/video/tuner-xc2028.c @@ -1,6 +1,6 @@ /* tuner-xc2028 * - * Copyright (c) 2007 Mauro Carvalho Chehab (mchehab@infradead.org) + * Copyright (c) 2007-2008 Mauro Carvalho Chehab (mchehab@infradead.org) * * Copyright (c) 2007 Michel Ludwig (michel.ludwig@gmail.com) * - frontend interface @@ -404,7 +404,7 @@ static int seek_firmware(struct dvb_frontend *fe, unsigned int type, { struct xc2028_data *priv = fe->tuner_priv; int i, best_i = -1, best_nr_matches = 0; - unsigned int ign_firm_type_mask = 0; + unsigned int type_mask = 0; tuner_dbg("%s called, want type=", __func__); if (debug) { @@ -421,18 +421,23 @@ static int seek_firmware(struct dvb_frontend *fe, unsigned int type, *id = V4L2_STD_PAL; if (type & BASE) - type &= BASE_TYPES; + type_mask = BASE_TYPES; else if (type & SCODE) { type &= SCODE_TYPES; - ign_firm_type_mask = HAS_IF; + type_mask = SCODE_TYPES & ~HAS_IF; } else if (type & DTV_TYPES) - type &= DTV_TYPES; + type_mask = DTV_TYPES; else if (type & STD_SPECIFIC_TYPES) - type &= STD_SPECIFIC_TYPES; + type_mask = STD_SPECIFIC_TYPES; + + type &= type_mask; + + if (!type & SCODE) + type_mask = ~0; /* Seek for exact match */ for (i = 0; i < priv->firm_size; i++) { - if ((type == (priv->firm[i].type & ~ign_firm_type_mask)) && + if ((type == (priv->firm[i].type & type_mask)) && (*id == priv->firm[i].id)) goto found; } @@ -442,7 +447,7 @@ static int seek_firmware(struct dvb_frontend *fe, unsigned int type, v4l2_std_id match_mask; int nr_matches; - if (type != (priv->firm[i].type & ~ign_firm_type_mask)) + if (type != (priv->firm[i].type & type_mask)) continue; match_mask = *id & priv->firm[i].id; |