From b542dfdc9f6e6eaf3cc2ede27dbaf50425f8b4b5 Mon Sep 17 00:00:00 2001 From: Mauro Carvalho Chehab Date: Sat, 24 Nov 2007 11:07:12 -0300 Subject: V4L/DVB (6675): Allow selecting the proper SCode table for DTV Signed-off-by: Mauro Carvalho Chehab --- drivers/media/video/tuner-xc2028.c | 18 ++++++++++++++++++ drivers/media/video/tuner-xc2028.h | 15 +++++++++++++++ 2 files changed, 33 insertions(+) (limited to 'drivers') 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, T_ANALOG_TV, type, p->std); } +static unsigned int demod_type [] = { + [XC3028_FE_DEFAULT] = 0, + [XC3028_FE_LG60] = LG60, + [XC3028_FE_ATI638] = ATI638, + [XC3028_FE_OREN538] = OREN538, + [XC3028_FE_OREN36] = OREN36, + [XC3028_FE_TOYOTA388] = TOYOTA388, + [XC3028_FE_TOYOTA794] = TOYOTA794, + [XC3028_FE_DIBCOM52] = DIBCOM52, + [XC3028_FE_ZARLINK456] = ZARLINK456, + [XC3028_FE_CHINA] = CHINA, +}; + static int xc2028_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *p) { @@ -965,6 +978,11 @@ static int xc2028_set_params(struct dvb_frontend *fe, tuner_err("error: bandwidth not supported.\n"); }; + if (priv->ctrl.demod < 0 || priv->ctrl.demod > ARRAY_SIZE(demod_type)) + tuner_err("error: demod type invalid. Assuming default.\n"); + else + type |= demod_type[priv->ctrl.demod]; + return generic_set_freq(fe, p->frequency, T_DIGITAL_TV, type, 0); } 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 @@ #define XC2028_DEFAULT_FIRMWARE "xc3028-v27.fw" +enum xc2028_demod_types +{ + XC3028_FE_DEFAULT = 0, + XC3028_FE_LG60, /* IF = 6.00 MHz */ + XC3028_FE_ATI638, /* IF = 6.38 MHz */ + XC3028_FE_OREN538, /* IF = 5.38 MHz */ + XC3028_FE_OREN36, /* IF = 3.60 MHz */ + XC3028_FE_TOYOTA388, /* IF = 3.88 MHz */ + XC3028_FE_TOYOTA794, /* IF = 7.94 MHz */ + XC3028_FE_DIBCOM52, /* IF = 5.20 MHz */ + XC3028_FE_ZARLINK456, /* IF = 4.56 MHz */ + XC3028_FE_CHINA, /* IF = 5.20 MHz */ +}; + struct xc2028_ctrl { char *fname; int max_len; @@ -18,6 +32,7 @@ struct xc2028_ctrl { unsigned int mts :1; unsigned int d2633 :1; unsigned int input1:1; + enum xc2028_demod_types demod; }; struct xc2028_config { -- cgit v1.2.2