diff options
author | Mauro Carvalho Chehab <mchehab@infradead.org> | 2007-11-24 09:07:12 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@infradead.org> | 2008-01-25 16:02:57 -0500 |
commit | b542dfdc9f6e6eaf3cc2ede27dbaf50425f8b4b5 (patch) | |
tree | a9f9c9c335c501af72f4d2a333cefb5160df8617 | |
parent | d04aa54a27f7bc6f051e55c47abbc0a1db1718bc (diff) |
V4L/DVB (6675): Allow selecting the proper SCode table for DTV
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
-rw-r--r-- | drivers/media/video/tuner-xc2028.c | 18 | ||||
-rw-r--r-- | drivers/media/video/tuner-xc2028.h | 15 |
2 files changed, 33 insertions, 0 deletions
diff --git a/drivers/media/video/tuner-xc2028.c b/drivers/media/video/tuner-xc2028.c index 42fb141fc386..9743331c895c 100644 --- a/drivers/media/video/tuner-xc2028.c +++ b/drivers/media/video/tuner-xc2028.c | |||
@@ -914,6 +914,19 @@ static int xc2028_set_analog_freq(struct dvb_frontend *fe, | |||
914 | T_ANALOG_TV, type, p->std); | 914 | T_ANALOG_TV, type, p->std); |
915 | } | 915 | } |
916 | 916 | ||
917 | static unsigned int demod_type [] = { | ||
918 | [XC3028_FE_DEFAULT] = 0, | ||
919 | [XC3028_FE_LG60] = LG60, | ||
920 | [XC3028_FE_ATI638] = ATI638, | ||
921 | [XC3028_FE_OREN538] = OREN538, | ||
922 | [XC3028_FE_OREN36] = OREN36, | ||
923 | [XC3028_FE_TOYOTA388] = TOYOTA388, | ||
924 | [XC3028_FE_TOYOTA794] = TOYOTA794, | ||
925 | [XC3028_FE_DIBCOM52] = DIBCOM52, | ||
926 | [XC3028_FE_ZARLINK456] = ZARLINK456, | ||
927 | [XC3028_FE_CHINA] = CHINA, | ||
928 | }; | ||
929 | |||
917 | static int xc2028_set_params(struct dvb_frontend *fe, | 930 | static int xc2028_set_params(struct dvb_frontend *fe, |
918 | struct dvb_frontend_parameters *p) | 931 | struct dvb_frontend_parameters *p) |
919 | { | 932 | { |
@@ -965,6 +978,11 @@ static int xc2028_set_params(struct dvb_frontend *fe, | |||
965 | tuner_err("error: bandwidth not supported.\n"); | 978 | tuner_err("error: bandwidth not supported.\n"); |
966 | }; | 979 | }; |
967 | 980 | ||
981 | if (priv->ctrl.demod < 0 || priv->ctrl.demod > ARRAY_SIZE(demod_type)) | ||
982 | tuner_err("error: demod type invalid. Assuming default.\n"); | ||
983 | else | ||
984 | type |= demod_type[priv->ctrl.demod]; | ||
985 | |||
968 | return generic_set_freq(fe, p->frequency, | 986 | return generic_set_freq(fe, p->frequency, |
969 | T_DIGITAL_TV, type, 0); | 987 | T_DIGITAL_TV, type, 0); |
970 | } | 988 | } |
diff --git a/drivers/media/video/tuner-xc2028.h b/drivers/media/video/tuner-xc2028.h index 02e116b54592..9b4224e2fe53 100644 --- a/drivers/media/video/tuner-xc2028.h +++ b/drivers/media/video/tuner-xc2028.h | |||
@@ -11,6 +11,20 @@ | |||
11 | 11 | ||
12 | #define XC2028_DEFAULT_FIRMWARE "xc3028-v27.fw" | 12 | #define XC2028_DEFAULT_FIRMWARE "xc3028-v27.fw" |
13 | 13 | ||
14 | enum xc2028_demod_types | ||
15 | { | ||
16 | XC3028_FE_DEFAULT = 0, | ||
17 | XC3028_FE_LG60, /* IF = 6.00 MHz */ | ||
18 | XC3028_FE_ATI638, /* IF = 6.38 MHz */ | ||
19 | XC3028_FE_OREN538, /* IF = 5.38 MHz */ | ||
20 | XC3028_FE_OREN36, /* IF = 3.60 MHz */ | ||
21 | XC3028_FE_TOYOTA388, /* IF = 3.88 MHz */ | ||
22 | XC3028_FE_TOYOTA794, /* IF = 7.94 MHz */ | ||
23 | XC3028_FE_DIBCOM52, /* IF = 5.20 MHz */ | ||
24 | XC3028_FE_ZARLINK456, /* IF = 4.56 MHz */ | ||
25 | XC3028_FE_CHINA, /* IF = 5.20 MHz */ | ||
26 | }; | ||
27 | |||
14 | struct xc2028_ctrl { | 28 | struct xc2028_ctrl { |
15 | char *fname; | 29 | char *fname; |
16 | int max_len; | 30 | int max_len; |
@@ -18,6 +32,7 @@ struct xc2028_ctrl { | |||
18 | unsigned int mts :1; | 32 | unsigned int mts :1; |
19 | unsigned int d2633 :1; | 33 | unsigned int d2633 :1; |
20 | unsigned int input1:1; | 34 | unsigned int input1:1; |
35 | enum xc2028_demod_types demod; | ||
21 | }; | 36 | }; |
22 | 37 | ||
23 | struct xc2028_config { | 38 | struct xc2028_config { |