diff options
Diffstat (limited to 'drivers/media/common/tuners/tda18218.c')
-rw-r--r-- | drivers/media/common/tuners/tda18218.c | 34 |
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 | ||
112 | static int tda18218_set_params(struct dvb_frontend *fe, | 112 | static 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 | ||
207 | static 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 | |||
209 | static int tda18218_sleep(struct dvb_frontend *fe) | 215 | static 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 | ||
273 | struct dvb_frontend *tda18218_attach(struct dvb_frontend *fe, | 281 | struct dvb_frontend *tda18218_attach(struct dvb_frontend *fe, |