aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/common/tuners/tda18218.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/common/tuners/tda18218.c')
-rw-r--r--drivers/media/common/tuners/tda18218.c34
1 files changed, 21 insertions, 13 deletions
diff --git a/drivers/media/common/tuners/tda18218.c b/drivers/media/common/tuners/tda18218.c
index 4fc29730a12c..dfb3a831df45 100644
--- a/drivers/media/common/tuners/tda18218.c
+++ b/drivers/media/common/tuners/tda18218.c
@@ -109,10 +109,11 @@ static int tda18218_rd_reg(struct tda18218_priv *priv, u8 reg, u8 *val)
109 return tda18218_rd_regs(priv, reg, val, 1); 109 return tda18218_rd_regs(priv, reg, val, 1);
110} 110}
111 111
112static int tda18218_set_params(struct dvb_frontend *fe, 112static int tda18218_set_params(struct dvb_frontend *fe)
113 struct dvb_frontend_parameters *params)
114{ 113{
115 struct tda18218_priv *priv = fe->tuner_priv; 114 struct tda18218_priv *priv = fe->tuner_priv;
115 struct dtv_frontend_properties *c = &fe->dtv_property_cache;
116 u32 bw = c->bandwidth_hz;
116 int ret; 117 int ret;
117 u8 buf[3], i, BP_Filter, LP_Fc; 118 u8 buf[3], i, BP_Filter, LP_Fc;
118 u32 LO_Frac; 119 u32 LO_Frac;
@@ -138,22 +139,19 @@ static int tda18218_set_params(struct dvb_frontend *fe,
138 fe->ops.i2c_gate_ctrl(fe, 1); /* open I2C-gate */ 139 fe->ops.i2c_gate_ctrl(fe, 1); /* open I2C-gate */
139 140
140 /* low-pass filter cut-off frequency */ 141 /* low-pass filter cut-off frequency */
141 switch (params->u.ofdm.bandwidth) { 142 if (bw <= 6000000) {
142 case BANDWIDTH_6_MHZ:
143 LP_Fc = 0; 143 LP_Fc = 0;
144 LO_Frac = params->frequency + 3000000; 144 priv->if_frequency = 3000000;
145 break; 145 } else if (bw <= 7000000) {
146 case BANDWIDTH_7_MHZ:
147 LP_Fc = 1; 146 LP_Fc = 1;
148 LO_Frac = params->frequency + 3500000; 147 priv->if_frequency = 3500000;
149 break; 148 } else {
150 case BANDWIDTH_8_MHZ:
151 default:
152 LP_Fc = 2; 149 LP_Fc = 2;
153 LO_Frac = params->frequency + 4000000; 150 priv->if_frequency = 4000000;
154 break;
155 } 151 }
156 152
153 LO_Frac = c->frequency + priv->if_frequency;
154
157 /* band-pass filter */ 155 /* band-pass filter */
158 if (LO_Frac < 188000000) 156 if (LO_Frac < 188000000)
159 BP_Filter = 3; 157 BP_Filter = 3;
@@ -206,6 +204,14 @@ error:
206 return ret; 204 return ret;
207} 205}
208 206
207static int tda18218_get_if_frequency(struct dvb_frontend *fe, u32 *frequency)
208{
209 struct tda18218_priv *priv = fe->tuner_priv;
210 *frequency = priv->if_frequency;
211 dbg("%s: if=%d", __func__, *frequency);
212 return 0;
213}
214
209static int tda18218_sleep(struct dvb_frontend *fe) 215static int tda18218_sleep(struct dvb_frontend *fe)
210{ 216{
211 struct tda18218_priv *priv = fe->tuner_priv; 217 struct tda18218_priv *priv = fe->tuner_priv;
@@ -268,6 +274,8 @@ static const struct dvb_tuner_ops tda18218_tuner_ops = {
268 .sleep = tda18218_sleep, 274 .sleep = tda18218_sleep,
269 275
270 .set_params = tda18218_set_params, 276 .set_params = tda18218_set_params,
277
278 .get_if_frequency = tda18218_get_if_frequency,
271}; 279};
272 280
273struct dvb_frontend *tda18218_attach(struct dvb_frontend *fe, 281struct dvb_frontend *tda18218_attach(struct dvb_frontend *fe,