diff options
author | Mauro Carvalho Chehab <mchehab@redhat.com> | 2011-12-22 19:12:28 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2011-12-31 06:17:11 -0500 |
commit | 4e4d2bcf484cd74b75196ea0f352aec1909923f7 (patch) | |
tree | 3c0480a958216c17158b78baf278fba7af493f46 /drivers/media/dvb/frontends/zl10353.c | |
parent | f20b12ecb44d0f07f0cbc36016f089274b387969 (diff) |
[media] zl10353: convert set_fontend to use DVBv5 parameters
Instead of using dvb_frontend_parameters struct, that were
designed for a subset of the supported standards, use the DVBv5
cache information.
Also, fill the supported delivery systems at dvb_frontend_ops
struct.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/dvb/frontends/zl10353.c')
-rw-r--r-- | drivers/media/dvb/frontends/zl10353.c | 113 |
1 files changed, 50 insertions, 63 deletions
diff --git a/drivers/media/dvb/frontends/zl10353.c b/drivers/media/dvb/frontends/zl10353.c index 35334da39016..39c1bdbc1ce3 100644 --- a/drivers/media/dvb/frontends/zl10353.c +++ b/drivers/media/dvb/frontends/zl10353.c | |||
@@ -37,9 +37,9 @@ struct zl10353_state { | |||
37 | 37 | ||
38 | struct zl10353_config config; | 38 | struct zl10353_config config; |
39 | 39 | ||
40 | enum fe_bandwidth bandwidth; | 40 | u32 bandwidth; |
41 | u32 ucblocks; | 41 | u32 ucblocks; |
42 | u32 frequency; | 42 | u32 frequency; |
43 | }; | 43 | }; |
44 | 44 | ||
45 | static int debug; | 45 | static int debug; |
@@ -122,30 +122,17 @@ static void zl10353_dump_regs(struct dvb_frontend *fe) | |||
122 | } | 122 | } |
123 | 123 | ||
124 | static void zl10353_calc_nominal_rate(struct dvb_frontend *fe, | 124 | static void zl10353_calc_nominal_rate(struct dvb_frontend *fe, |
125 | enum fe_bandwidth bandwidth, | 125 | u32 bandwidth, |
126 | u16 *nominal_rate) | 126 | u16 *nominal_rate) |
127 | { | 127 | { |
128 | struct zl10353_state *state = fe->demodulator_priv; | 128 | struct zl10353_state *state = fe->demodulator_priv; |
129 | u32 adc_clock = 450560; /* 45.056 MHz */ | 129 | u32 adc_clock = 450560; /* 45.056 MHz */ |
130 | u64 value; | 130 | u64 value; |
131 | u8 bw; | 131 | u8 bw = bandwidth / 1000000; |
132 | 132 | ||
133 | if (state->config.adc_clock) | 133 | if (state->config.adc_clock) |
134 | adc_clock = state->config.adc_clock; | 134 | adc_clock = state->config.adc_clock; |
135 | 135 | ||
136 | switch (bandwidth) { | ||
137 | case BANDWIDTH_6_MHZ: | ||
138 | bw = 6; | ||
139 | break; | ||
140 | case BANDWIDTH_7_MHZ: | ||
141 | bw = 7; | ||
142 | break; | ||
143 | case BANDWIDTH_8_MHZ: | ||
144 | default: | ||
145 | bw = 8; | ||
146 | break; | ||
147 | } | ||
148 | |||
149 | value = (u64)10 * (1 << 23) / 7 * 125; | 136 | value = (u64)10 * (1 << 23) / 7 * 125; |
150 | value = (bw * value) + adc_clock / 2; | 137 | value = (bw * value) + adc_clock / 2; |
151 | do_div(value, adc_clock); | 138 | do_div(value, adc_clock); |
@@ -192,16 +179,15 @@ static int zl10353_sleep(struct dvb_frontend *fe) | |||
192 | return 0; | 179 | return 0; |
193 | } | 180 | } |
194 | 181 | ||
195 | static int zl10353_set_parameters(struct dvb_frontend *fe, | 182 | static int zl10353_set_parameters(struct dvb_frontend *fe) |
196 | struct dvb_frontend_parameters *param) | ||
197 | { | 183 | { |
184 | struct dtv_frontend_properties *c = &fe->dtv_property_cache; | ||
198 | struct zl10353_state *state = fe->demodulator_priv; | 185 | struct zl10353_state *state = fe->demodulator_priv; |
199 | u16 nominal_rate, input_freq; | 186 | u16 nominal_rate, input_freq; |
200 | u8 pllbuf[6] = { 0x67 }, acq_ctl = 0; | 187 | u8 pllbuf[6] = { 0x67 }, acq_ctl = 0; |
201 | u16 tps = 0; | 188 | u16 tps = 0; |
202 | struct dvb_ofdm_parameters *op = ¶m->u.ofdm; | ||
203 | 189 | ||
204 | state->frequency = param->frequency; | 190 | state->frequency = c->frequency; |
205 | 191 | ||
206 | zl10353_single_write(fe, RESET, 0x80); | 192 | zl10353_single_write(fe, RESET, 0x80); |
207 | udelay(200); | 193 | udelay(200); |
@@ -211,42 +197,44 @@ static int zl10353_set_parameters(struct dvb_frontend *fe, | |||
211 | 197 | ||
212 | zl10353_single_write(fe, AGC_TARGET, 0x28); | 198 | zl10353_single_write(fe, AGC_TARGET, 0x28); |
213 | 199 | ||
214 | if (op->transmission_mode != TRANSMISSION_MODE_AUTO) | 200 | if (c->transmission_mode != TRANSMISSION_MODE_AUTO) |
215 | acq_ctl |= (1 << 0); | 201 | acq_ctl |= (1 << 0); |
216 | if (op->guard_interval != GUARD_INTERVAL_AUTO) | 202 | if (c->guard_interval != GUARD_INTERVAL_AUTO) |
217 | acq_ctl |= (1 << 1); | 203 | acq_ctl |= (1 << 1); |
218 | zl10353_single_write(fe, ACQ_CTL, acq_ctl); | 204 | zl10353_single_write(fe, ACQ_CTL, acq_ctl); |
219 | 205 | ||
220 | switch (op->bandwidth) { | 206 | switch (c->bandwidth_hz) { |
221 | case BANDWIDTH_6_MHZ: | 207 | case 6000000: |
222 | /* These are extrapolated from the 7 and 8MHz values */ | 208 | /* These are extrapolated from the 7 and 8MHz values */ |
223 | zl10353_single_write(fe, MCLK_RATIO, 0x97); | 209 | zl10353_single_write(fe, MCLK_RATIO, 0x97); |
224 | zl10353_single_write(fe, 0x64, 0x34); | 210 | zl10353_single_write(fe, 0x64, 0x34); |
225 | zl10353_single_write(fe, 0xcc, 0xdd); | 211 | zl10353_single_write(fe, 0xcc, 0xdd); |
226 | break; | 212 | break; |
227 | case BANDWIDTH_7_MHZ: | 213 | case 7000000: |
228 | zl10353_single_write(fe, MCLK_RATIO, 0x86); | 214 | zl10353_single_write(fe, MCLK_RATIO, 0x86); |
229 | zl10353_single_write(fe, 0x64, 0x35); | 215 | zl10353_single_write(fe, 0x64, 0x35); |
230 | zl10353_single_write(fe, 0xcc, 0x73); | 216 | zl10353_single_write(fe, 0xcc, 0x73); |
231 | break; | 217 | break; |
232 | case BANDWIDTH_8_MHZ: | ||
233 | default: | 218 | default: |
219 | c->bandwidth_hz = 8000000; | ||
220 | /* fall though */ | ||
221 | case 8000000: | ||
234 | zl10353_single_write(fe, MCLK_RATIO, 0x75); | 222 | zl10353_single_write(fe, MCLK_RATIO, 0x75); |
235 | zl10353_single_write(fe, 0x64, 0x36); | 223 | zl10353_single_write(fe, 0x64, 0x36); |
236 | zl10353_single_write(fe, 0xcc, 0x73); | 224 | zl10353_single_write(fe, 0xcc, 0x73); |
237 | } | 225 | } |
238 | 226 | ||
239 | zl10353_calc_nominal_rate(fe, op->bandwidth, &nominal_rate); | 227 | zl10353_calc_nominal_rate(fe, c->bandwidth_hz, &nominal_rate); |
240 | zl10353_single_write(fe, TRL_NOMINAL_RATE_1, msb(nominal_rate)); | 228 | zl10353_single_write(fe, TRL_NOMINAL_RATE_1, msb(nominal_rate)); |
241 | zl10353_single_write(fe, TRL_NOMINAL_RATE_0, lsb(nominal_rate)); | 229 | zl10353_single_write(fe, TRL_NOMINAL_RATE_0, lsb(nominal_rate)); |
242 | state->bandwidth = op->bandwidth; | 230 | state->bandwidth = c->bandwidth_hz; |
243 | 231 | ||
244 | zl10353_calc_input_freq(fe, &input_freq); | 232 | zl10353_calc_input_freq(fe, &input_freq); |
245 | zl10353_single_write(fe, INPUT_FREQ_1, msb(input_freq)); | 233 | zl10353_single_write(fe, INPUT_FREQ_1, msb(input_freq)); |
246 | zl10353_single_write(fe, INPUT_FREQ_0, lsb(input_freq)); | 234 | zl10353_single_write(fe, INPUT_FREQ_0, lsb(input_freq)); |
247 | 235 | ||
248 | /* Hint at TPS settings */ | 236 | /* Hint at TPS settings */ |
249 | switch (op->code_rate_HP) { | 237 | switch (c->code_rate_HP) { |
250 | case FEC_2_3: | 238 | case FEC_2_3: |
251 | tps |= (1 << 7); | 239 | tps |= (1 << 7); |
252 | break; | 240 | break; |
@@ -266,7 +254,7 @@ static int zl10353_set_parameters(struct dvb_frontend *fe, | |||
266 | return -EINVAL; | 254 | return -EINVAL; |
267 | } | 255 | } |
268 | 256 | ||
269 | switch (op->code_rate_LP) { | 257 | switch (c->code_rate_LP) { |
270 | case FEC_2_3: | 258 | case FEC_2_3: |
271 | tps |= (1 << 4); | 259 | tps |= (1 << 4); |
272 | break; | 260 | break; |
@@ -283,14 +271,14 @@ static int zl10353_set_parameters(struct dvb_frontend *fe, | |||
283 | case FEC_AUTO: | 271 | case FEC_AUTO: |
284 | break; | 272 | break; |
285 | case FEC_NONE: | 273 | case FEC_NONE: |
286 | if (op->hierarchy_information == HIERARCHY_AUTO || | 274 | if (c->hierarchy == HIERARCHY_AUTO || |
287 | op->hierarchy_information == HIERARCHY_NONE) | 275 | c->hierarchy == HIERARCHY_NONE) |
288 | break; | 276 | break; |
289 | default: | 277 | default: |
290 | return -EINVAL; | 278 | return -EINVAL; |
291 | } | 279 | } |
292 | 280 | ||
293 | switch (op->constellation) { | 281 | switch (c->modulation) { |
294 | case QPSK: | 282 | case QPSK: |
295 | break; | 283 | break; |
296 | case QAM_AUTO: | 284 | case QAM_AUTO: |
@@ -304,7 +292,7 @@ static int zl10353_set_parameters(struct dvb_frontend *fe, | |||
304 | return -EINVAL; | 292 | return -EINVAL; |
305 | } | 293 | } |
306 | 294 | ||
307 | switch (op->transmission_mode) { | 295 | switch (c->transmission_mode) { |
308 | case TRANSMISSION_MODE_2K: | 296 | case TRANSMISSION_MODE_2K: |
309 | case TRANSMISSION_MODE_AUTO: | 297 | case TRANSMISSION_MODE_AUTO: |
310 | break; | 298 | break; |
@@ -315,7 +303,7 @@ static int zl10353_set_parameters(struct dvb_frontend *fe, | |||
315 | return -EINVAL; | 303 | return -EINVAL; |
316 | } | 304 | } |
317 | 305 | ||
318 | switch (op->guard_interval) { | 306 | switch (c->guard_interval) { |
319 | case GUARD_INTERVAL_1_32: | 307 | case GUARD_INTERVAL_1_32: |
320 | case GUARD_INTERVAL_AUTO: | 308 | case GUARD_INTERVAL_AUTO: |
321 | break; | 309 | break; |
@@ -332,7 +320,7 @@ static int zl10353_set_parameters(struct dvb_frontend *fe, | |||
332 | return -EINVAL; | 320 | return -EINVAL; |
333 | } | 321 | } |
334 | 322 | ||
335 | switch (op->hierarchy_information) { | 323 | switch (c->hierarchy) { |
336 | case HIERARCHY_AUTO: | 324 | case HIERARCHY_AUTO: |
337 | case HIERARCHY_NONE: | 325 | case HIERARCHY_NONE: |
338 | break; | 326 | break; |
@@ -384,10 +372,9 @@ static int zl10353_set_parameters(struct dvb_frontend *fe, | |||
384 | } | 372 | } |
385 | 373 | ||
386 | static int zl10353_get_parameters(struct dvb_frontend *fe, | 374 | static int zl10353_get_parameters(struct dvb_frontend *fe, |
387 | struct dvb_frontend_parameters *param) | 375 | struct dtv_frontend_properties *c) |
388 | { | 376 | { |
389 | struct zl10353_state *state = fe->demodulator_priv; | 377 | struct zl10353_state *state = fe->demodulator_priv; |
390 | struct dvb_ofdm_parameters *op = ¶m->u.ofdm; | ||
391 | int s6, s9; | 378 | int s6, s9; |
392 | u16 tps; | 379 | u16 tps; |
393 | static const u8 tps_fec_to_api[8] = { | 380 | static const u8 tps_fec_to_api[8] = { |
@@ -411,66 +398,66 @@ static int zl10353_get_parameters(struct dvb_frontend *fe, | |||
411 | tps = zl10353_read_register(state, TPS_RECEIVED_1) << 8 | | 398 | tps = zl10353_read_register(state, TPS_RECEIVED_1) << 8 | |
412 | zl10353_read_register(state, TPS_RECEIVED_0); | 399 | zl10353_read_register(state, TPS_RECEIVED_0); |
413 | 400 | ||
414 | op->code_rate_HP = tps_fec_to_api[(tps >> 7) & 7]; | 401 | c->code_rate_HP = tps_fec_to_api[(tps >> 7) & 7]; |
415 | op->code_rate_LP = tps_fec_to_api[(tps >> 4) & 7]; | 402 | c->code_rate_LP = tps_fec_to_api[(tps >> 4) & 7]; |
416 | 403 | ||
417 | switch ((tps >> 13) & 3) { | 404 | switch ((tps >> 13) & 3) { |
418 | case 0: | 405 | case 0: |
419 | op->constellation = QPSK; | 406 | c->modulation = QPSK; |
420 | break; | 407 | break; |
421 | case 1: | 408 | case 1: |
422 | op->constellation = QAM_16; | 409 | c->modulation = QAM_16; |
423 | break; | 410 | break; |
424 | case 2: | 411 | case 2: |
425 | op->constellation = QAM_64; | 412 | c->modulation = QAM_64; |
426 | break; | 413 | break; |
427 | default: | 414 | default: |
428 | op->constellation = QAM_AUTO; | 415 | c->modulation = QAM_AUTO; |
429 | break; | 416 | break; |
430 | } | 417 | } |
431 | 418 | ||
432 | op->transmission_mode = (tps & 0x01) ? TRANSMISSION_MODE_8K : | 419 | c->transmission_mode = (tps & 0x01) ? TRANSMISSION_MODE_8K : |
433 | TRANSMISSION_MODE_2K; | 420 | TRANSMISSION_MODE_2K; |
434 | 421 | ||
435 | switch ((tps >> 2) & 3) { | 422 | switch ((tps >> 2) & 3) { |
436 | case 0: | 423 | case 0: |
437 | op->guard_interval = GUARD_INTERVAL_1_32; | 424 | c->guard_interval = GUARD_INTERVAL_1_32; |
438 | break; | 425 | break; |
439 | case 1: | 426 | case 1: |
440 | op->guard_interval = GUARD_INTERVAL_1_16; | 427 | c->guard_interval = GUARD_INTERVAL_1_16; |
441 | break; | 428 | break; |
442 | case 2: | 429 | case 2: |
443 | op->guard_interval = GUARD_INTERVAL_1_8; | 430 | c->guard_interval = GUARD_INTERVAL_1_8; |
444 | break; | 431 | break; |
445 | case 3: | 432 | case 3: |
446 | op->guard_interval = GUARD_INTERVAL_1_4; | 433 | c->guard_interval = GUARD_INTERVAL_1_4; |
447 | break; | 434 | break; |
448 | default: | 435 | default: |
449 | op->guard_interval = GUARD_INTERVAL_AUTO; | 436 | c->guard_interval = GUARD_INTERVAL_AUTO; |
450 | break; | 437 | break; |
451 | } | 438 | } |
452 | 439 | ||
453 | switch ((tps >> 10) & 7) { | 440 | switch ((tps >> 10) & 7) { |
454 | case 0: | 441 | case 0: |
455 | op->hierarchy_information = HIERARCHY_NONE; | 442 | c->hierarchy = HIERARCHY_NONE; |
456 | break; | 443 | break; |
457 | case 1: | 444 | case 1: |
458 | op->hierarchy_information = HIERARCHY_1; | 445 | c->hierarchy = HIERARCHY_1; |
459 | break; | 446 | break; |
460 | case 2: | 447 | case 2: |
461 | op->hierarchy_information = HIERARCHY_2; | 448 | c->hierarchy = HIERARCHY_2; |
462 | break; | 449 | break; |
463 | case 3: | 450 | case 3: |
464 | op->hierarchy_information = HIERARCHY_4; | 451 | c->hierarchy = HIERARCHY_4; |
465 | break; | 452 | break; |
466 | default: | 453 | default: |
467 | op->hierarchy_information = HIERARCHY_AUTO; | 454 | c->hierarchy = HIERARCHY_AUTO; |
468 | break; | 455 | break; |
469 | } | 456 | } |
470 | 457 | ||
471 | param->frequency = state->frequency; | 458 | c->frequency = state->frequency; |
472 | op->bandwidth = state->bandwidth; | 459 | c->bandwidth_hz = state->bandwidth; |
473 | param->inversion = INVERSION_AUTO; | 460 | c->inversion = INVERSION_AUTO; |
474 | 461 | ||
475 | return 0; | 462 | return 0; |
476 | } | 463 | } |
@@ -651,7 +638,7 @@ error: | |||
651 | } | 638 | } |
652 | 639 | ||
653 | static struct dvb_frontend_ops zl10353_ops = { | 640 | static struct dvb_frontend_ops zl10353_ops = { |
654 | 641 | .delsys = { SYS_DVBT }, | |
655 | .info = { | 642 | .info = { |
656 | .name = "Zarlink ZL10353 DVB-T", | 643 | .name = "Zarlink ZL10353 DVB-T", |
657 | .type = FE_OFDM, | 644 | .type = FE_OFDM, |
@@ -675,8 +662,8 @@ static struct dvb_frontend_ops zl10353_ops = { | |||
675 | .i2c_gate_ctrl = zl10353_i2c_gate_ctrl, | 662 | .i2c_gate_ctrl = zl10353_i2c_gate_ctrl, |
676 | .write = zl10353_write, | 663 | .write = zl10353_write, |
677 | 664 | ||
678 | .set_frontend_legacy = zl10353_set_parameters, | 665 | .set_frontend = zl10353_set_parameters, |
679 | .get_frontend_legacy = zl10353_get_parameters, | 666 | .get_frontend = zl10353_get_parameters, |
680 | .get_tune_settings = zl10353_get_tune_settings, | 667 | .get_tune_settings = zl10353_get_tune_settings, |
681 | 668 | ||
682 | .read_status = zl10353_read_status, | 669 | .read_status = zl10353_read_status, |