aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb/frontends/tda10086.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/dvb/frontends/tda10086.c')
-rw-r--r--drivers/media/dvb/frontends/tda10086.c62
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
269static int tda10086_set_inversion(struct tda10086_state *state, 269static 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
294static int tda10086_set_symbol_rate(struct tda10086_state *state, 294static 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
369static int tda10086_set_fec(struct tda10086_state *state, 369static 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
412static int tda10086_set_frontend(struct dvb_frontend* fe, 412static 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
460static int tda10086_get_frontend(struct dvb_frontend* fe, struct dvb_frontend_parameters *fe_params) 460static 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
665static int tda10086_get_tune_settings(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* fesettings) 666static 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
703static struct dvb_frontend_ops tda10086_ops = { 706static 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 */