diff options
Diffstat (limited to 'drivers/media/dvb/frontends/tda10086.c')
-rw-r--r-- | drivers/media/dvb/frontends/tda10086.c | 62 |
1 files changed, 32 insertions, 30 deletions
diff --git a/drivers/media/dvb/frontends/tda10086.c b/drivers/media/dvb/frontends/tda10086.c index f2c8faac6f3..fcfe2e080cb 100644 --- a/drivers/media/dvb/frontends/tda10086.c +++ b/drivers/media/dvb/frontends/tda10086.c | |||
@@ -267,7 +267,7 @@ static int tda10086_send_burst (struct dvb_frontend* fe, fe_sec_mini_cmd_t minic | |||
267 | } | 267 | } |
268 | 268 | ||
269 | static int tda10086_set_inversion(struct tda10086_state *state, | 269 | static int tda10086_set_inversion(struct tda10086_state *state, |
270 | struct dvb_frontend_parameters *fe_params) | 270 | struct dtv_frontend_properties *fe_params) |
271 | { | 271 | { |
272 | u8 invval = 0x80; | 272 | u8 invval = 0x80; |
273 | 273 | ||
@@ -292,7 +292,7 @@ static int tda10086_set_inversion(struct tda10086_state *state, | |||
292 | } | 292 | } |
293 | 293 | ||
294 | static int tda10086_set_symbol_rate(struct tda10086_state *state, | 294 | static int tda10086_set_symbol_rate(struct tda10086_state *state, |
295 | struct dvb_frontend_parameters *fe_params) | 295 | struct dtv_frontend_properties *fe_params) |
296 | { | 296 | { |
297 | u8 dfn = 0; | 297 | u8 dfn = 0; |
298 | u8 afs = 0; | 298 | u8 afs = 0; |
@@ -303,7 +303,7 @@ static int tda10086_set_symbol_rate(struct tda10086_state *state, | |||
303 | u32 tmp; | 303 | u32 tmp; |
304 | u32 bdr; | 304 | u32 bdr; |
305 | u32 bdri; | 305 | u32 bdri; |
306 | u32 symbol_rate = fe_params->u.qpsk.symbol_rate; | 306 | u32 symbol_rate = fe_params->symbol_rate; |
307 | 307 | ||
308 | dprintk ("%s %i\n", __func__, symbol_rate); | 308 | dprintk ("%s %i\n", __func__, symbol_rate); |
309 | 309 | ||
@@ -367,13 +367,13 @@ static int tda10086_set_symbol_rate(struct tda10086_state *state, | |||
367 | } | 367 | } |
368 | 368 | ||
369 | static int tda10086_set_fec(struct tda10086_state *state, | 369 | static int tda10086_set_fec(struct tda10086_state *state, |
370 | struct dvb_frontend_parameters *fe_params) | 370 | struct dtv_frontend_properties *fe_params) |
371 | { | 371 | { |
372 | u8 fecval; | 372 | u8 fecval; |
373 | 373 | ||
374 | dprintk ("%s %i\n", __func__, fe_params->u.qpsk.fec_inner); | 374 | dprintk("%s %i\n", __func__, fe_params->fec_inner); |
375 | 375 | ||
376 | switch(fe_params->u.qpsk.fec_inner) { | 376 | switch (fe_params->fec_inner) { |
377 | case FEC_1_2: | 377 | case FEC_1_2: |
378 | fecval = 0x00; | 378 | fecval = 0x00; |
379 | break; | 379 | break; |
@@ -409,9 +409,9 @@ static int tda10086_set_fec(struct tda10086_state *state, | |||
409 | return 0; | 409 | return 0; |
410 | } | 410 | } |
411 | 411 | ||
412 | static int tda10086_set_frontend(struct dvb_frontend* fe, | 412 | static int tda10086_set_frontend(struct dvb_frontend *fe) |
413 | struct dvb_frontend_parameters *fe_params) | ||
414 | { | 413 | { |
414 | struct dtv_frontend_properties *fe_params = &fe->dtv_property_cache; | ||
415 | struct tda10086_state *state = fe->demodulator_priv; | 415 | struct tda10086_state *state = fe->demodulator_priv; |
416 | int ret; | 416 | int ret; |
417 | u32 freq = 0; | 417 | u32 freq = 0; |
@@ -425,7 +425,7 @@ static int tda10086_set_frontend(struct dvb_frontend* fe, | |||
425 | 425 | ||
426 | /* set params */ | 426 | /* set params */ |
427 | if (fe->ops.tuner_ops.set_params) { | 427 | if (fe->ops.tuner_ops.set_params) { |
428 | fe->ops.tuner_ops.set_params(fe, fe_params); | 428 | fe->ops.tuner_ops.set_params(fe); |
429 | if (fe->ops.i2c_gate_ctrl) | 429 | if (fe->ops.i2c_gate_ctrl) |
430 | fe->ops.i2c_gate_ctrl(fe, 0); | 430 | fe->ops.i2c_gate_ctrl(fe, 0); |
431 | 431 | ||
@@ -452,13 +452,14 @@ static int tda10086_set_frontend(struct dvb_frontend* fe, | |||
452 | tda10086_write_mask(state, 0x10, 0x40, 0x40); | 452 | tda10086_write_mask(state, 0x10, 0x40, 0x40); |
453 | tda10086_write_mask(state, 0x00, 0x01, 0x00); | 453 | tda10086_write_mask(state, 0x00, 0x01, 0x00); |
454 | 454 | ||
455 | state->symbol_rate = fe_params->u.qpsk.symbol_rate; | 455 | state->symbol_rate = fe_params->symbol_rate; |
456 | state->frequency = fe_params->frequency; | 456 | state->frequency = fe_params->frequency; |
457 | return 0; | 457 | return 0; |
458 | } | 458 | } |
459 | 459 | ||
460 | static int tda10086_get_frontend(struct dvb_frontend* fe, struct dvb_frontend_parameters *fe_params) | 460 | static int tda10086_get_frontend(struct dvb_frontend *fe) |
461 | { | 461 | { |
462 | struct dtv_frontend_properties *fe_params = &fe->dtv_property_cache; | ||
462 | struct tda10086_state* state = fe->demodulator_priv; | 463 | struct tda10086_state* state = fe->demodulator_priv; |
463 | u8 val; | 464 | u8 val; |
464 | int tmp; | 465 | int tmp; |
@@ -467,7 +468,7 @@ static int tda10086_get_frontend(struct dvb_frontend* fe, struct dvb_frontend_pa | |||
467 | dprintk ("%s\n", __func__); | 468 | dprintk ("%s\n", __func__); |
468 | 469 | ||
469 | /* check for invalid symbol rate */ | 470 | /* check for invalid symbol rate */ |
470 | if (fe_params->u.qpsk.symbol_rate < 500000) | 471 | if (fe_params->symbol_rate < 500000) |
471 | return -EINVAL; | 472 | return -EINVAL; |
472 | 473 | ||
473 | /* calculate the updated frequency (note: we convert from Hz->kHz) */ | 474 | /* calculate the updated frequency (note: we convert from Hz->kHz) */ |
@@ -516,34 +517,34 @@ static int tda10086_get_frontend(struct dvb_frontend* fe, struct dvb_frontend_pa | |||
516 | tmp |= 0xffffff00; | 517 | tmp |= 0xffffff00; |
517 | tmp = (tmp * 480 * (1<<1)) / 128; | 518 | tmp = (tmp * 480 * (1<<1)) / 128; |
518 | tmp = ((state->symbol_rate/1000) * tmp) / (1000000/1000); | 519 | tmp = ((state->symbol_rate/1000) * tmp) / (1000000/1000); |
519 | fe_params->u.qpsk.symbol_rate = state->symbol_rate + tmp; | 520 | fe_params->symbol_rate = state->symbol_rate + tmp; |
520 | 521 | ||
521 | /* the FEC */ | 522 | /* the FEC */ |
522 | val = (tda10086_read_byte(state, 0x0d) & 0x70) >> 4; | 523 | val = (tda10086_read_byte(state, 0x0d) & 0x70) >> 4; |
523 | switch(val) { | 524 | switch(val) { |
524 | case 0x00: | 525 | case 0x00: |
525 | fe_params->u.qpsk.fec_inner = FEC_1_2; | 526 | fe_params->fec_inner = FEC_1_2; |
526 | break; | 527 | break; |
527 | case 0x01: | 528 | case 0x01: |
528 | fe_params->u.qpsk.fec_inner = FEC_2_3; | 529 | fe_params->fec_inner = FEC_2_3; |
529 | break; | 530 | break; |
530 | case 0x02: | 531 | case 0x02: |
531 | fe_params->u.qpsk.fec_inner = FEC_3_4; | 532 | fe_params->fec_inner = FEC_3_4; |
532 | break; | 533 | break; |
533 | case 0x03: | 534 | case 0x03: |
534 | fe_params->u.qpsk.fec_inner = FEC_4_5; | 535 | fe_params->fec_inner = FEC_4_5; |
535 | break; | 536 | break; |
536 | case 0x04: | 537 | case 0x04: |
537 | fe_params->u.qpsk.fec_inner = FEC_5_6; | 538 | fe_params->fec_inner = FEC_5_6; |
538 | break; | 539 | break; |
539 | case 0x05: | 540 | case 0x05: |
540 | fe_params->u.qpsk.fec_inner = FEC_6_7; | 541 | fe_params->fec_inner = FEC_6_7; |
541 | break; | 542 | break; |
542 | case 0x06: | 543 | case 0x06: |
543 | fe_params->u.qpsk.fec_inner = FEC_7_8; | 544 | fe_params->fec_inner = FEC_7_8; |
544 | break; | 545 | break; |
545 | case 0x07: | 546 | case 0x07: |
546 | fe_params->u.qpsk.fec_inner = FEC_8_9; | 547 | fe_params->fec_inner = FEC_8_9; |
547 | break; | 548 | break; |
548 | } | 549 | } |
549 | 550 | ||
@@ -664,29 +665,31 @@ static int tda10086_i2c_gate_ctrl(struct dvb_frontend* fe, int enable) | |||
664 | 665 | ||
665 | static int tda10086_get_tune_settings(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* fesettings) | 666 | static int tda10086_get_tune_settings(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* fesettings) |
666 | { | 667 | { |
667 | if (fesettings->parameters.u.qpsk.symbol_rate > 20000000) { | 668 | struct dtv_frontend_properties *p = &fe->dtv_property_cache; |
669 | |||
670 | if (p->symbol_rate > 20000000) { | ||
668 | fesettings->min_delay_ms = 50; | 671 | fesettings->min_delay_ms = 50; |
669 | fesettings->step_size = 2000; | 672 | fesettings->step_size = 2000; |
670 | fesettings->max_drift = 8000; | 673 | fesettings->max_drift = 8000; |
671 | } else if (fesettings->parameters.u.qpsk.symbol_rate > 12000000) { | 674 | } else if (p->symbol_rate > 12000000) { |
672 | fesettings->min_delay_ms = 100; | 675 | fesettings->min_delay_ms = 100; |
673 | fesettings->step_size = 1500; | 676 | fesettings->step_size = 1500; |
674 | fesettings->max_drift = 9000; | 677 | fesettings->max_drift = 9000; |
675 | } else if (fesettings->parameters.u.qpsk.symbol_rate > 8000000) { | 678 | } else if (p->symbol_rate > 8000000) { |
676 | fesettings->min_delay_ms = 100; | 679 | fesettings->min_delay_ms = 100; |
677 | fesettings->step_size = 1000; | 680 | fesettings->step_size = 1000; |
678 | fesettings->max_drift = 8000; | 681 | fesettings->max_drift = 8000; |
679 | } else if (fesettings->parameters.u.qpsk.symbol_rate > 4000000) { | 682 | } else if (p->symbol_rate > 4000000) { |
680 | fesettings->min_delay_ms = 100; | 683 | fesettings->min_delay_ms = 100; |
681 | fesettings->step_size = 500; | 684 | fesettings->step_size = 500; |
682 | fesettings->max_drift = 7000; | 685 | fesettings->max_drift = 7000; |
683 | } else if (fesettings->parameters.u.qpsk.symbol_rate > 2000000) { | 686 | } else if (p->symbol_rate > 2000000) { |
684 | fesettings->min_delay_ms = 200; | 687 | fesettings->min_delay_ms = 200; |
685 | fesettings->step_size = (fesettings->parameters.u.qpsk.symbol_rate / 8000); | 688 | fesettings->step_size = p->symbol_rate / 8000; |
686 | fesettings->max_drift = 14 * fesettings->step_size; | 689 | fesettings->max_drift = 14 * fesettings->step_size; |
687 | } else { | 690 | } else { |
688 | fesettings->min_delay_ms = 200; | 691 | fesettings->min_delay_ms = 200; |
689 | fesettings->step_size = (fesettings->parameters.u.qpsk.symbol_rate / 8000); | 692 | fesettings->step_size = p->symbol_rate / 8000; |
690 | fesettings->max_drift = 18 * fesettings->step_size; | 693 | fesettings->max_drift = 18 * fesettings->step_size; |
691 | } | 694 | } |
692 | 695 | ||
@@ -701,10 +704,9 @@ static void tda10086_release(struct dvb_frontend* fe) | |||
701 | } | 704 | } |
702 | 705 | ||
703 | static struct dvb_frontend_ops tda10086_ops = { | 706 | static struct dvb_frontend_ops tda10086_ops = { |
704 | 707 | .delsys = { SYS_DVBS }, | |
705 | .info = { | 708 | .info = { |
706 | .name = "Philips TDA10086 DVB-S", | 709 | .name = "Philips TDA10086 DVB-S", |
707 | .type = FE_QPSK, | ||
708 | .frequency_min = 950000, | 710 | .frequency_min = 950000, |
709 | .frequency_max = 2150000, | 711 | .frequency_max = 2150000, |
710 | .frequency_stepsize = 125, /* kHz for QPSK frontends */ | 712 | .frequency_stepsize = 125, /* kHz for QPSK frontends */ |