aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb/frontends/zl10353.c
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@redhat.com>2011-12-22 19:12:28 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2011-12-31 06:17:11 -0500
commit4e4d2bcf484cd74b75196ea0f352aec1909923f7 (patch)
tree3c0480a958216c17158b78baf278fba7af493f46 /drivers/media/dvb/frontends/zl10353.c
parentf20b12ecb44d0f07f0cbc36016f089274b387969 (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.c113
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
45static int debug; 45static int debug;
@@ -122,30 +122,17 @@ static void zl10353_dump_regs(struct dvb_frontend *fe)
122} 122}
123 123
124static void zl10353_calc_nominal_rate(struct dvb_frontend *fe, 124static 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
195static int zl10353_set_parameters(struct dvb_frontend *fe, 182static 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 = &param->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
386static int zl10353_get_parameters(struct dvb_frontend *fe, 374static 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 = &param->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
653static struct dvb_frontend_ops zl10353_ops = { 640static 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,