diff options
author | Mauro Carvalho Chehab <mchehab@redhat.com> | 2011-12-26 12:07:00 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2011-12-31 06:36:48 -0500 |
commit | 9f69afbe31f94e84b79cc085ffc727c724dcbeeb (patch) | |
tree | 7f9fbb2e46edbe9e54dba6c343d0d1deb37544dc /drivers/media/dvb/frontends/s5h1420.c | |
parent | 827b5f3e30296f5ddeedc0c0359b1db77fd499a6 (diff) |
[media] s5h1420: 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/s5h1420.c')
-rw-r--r-- | drivers/media/dvb/frontends/s5h1420.c | 54 |
1 files changed, 27 insertions, 27 deletions
diff --git a/drivers/media/dvb/frontends/s5h1420.c b/drivers/media/dvb/frontends/s5h1420.c index 44ec27d27dd2..639e13fab046 100644 --- a/drivers/media/dvb/frontends/s5h1420.c +++ b/drivers/media/dvb/frontends/s5h1420.c | |||
@@ -472,15 +472,15 @@ static void s5h1420_reset(struct s5h1420_state* state) | |||
472 | } | 472 | } |
473 | 473 | ||
474 | static void s5h1420_setsymbolrate(struct s5h1420_state* state, | 474 | static void s5h1420_setsymbolrate(struct s5h1420_state* state, |
475 | struct dvb_frontend_parameters *p) | 475 | struct dtv_frontend_properties *p) |
476 | { | 476 | { |
477 | u8 v; | 477 | u8 v; |
478 | u64 val; | 478 | u64 val; |
479 | 479 | ||
480 | dprintk("enter %s\n", __func__); | 480 | dprintk("enter %s\n", __func__); |
481 | 481 | ||
482 | val = ((u64) p->u.qpsk.symbol_rate / 1000ULL) * (1ULL<<24); | 482 | val = ((u64) p->symbol_rate / 1000ULL) * (1ULL<<24); |
483 | if (p->u.qpsk.symbol_rate < 29000000) | 483 | if (p->symbol_rate < 29000000) |
484 | val *= 2; | 484 | val *= 2; |
485 | do_div(val, (state->fclk / 1000)); | 485 | do_div(val, (state->fclk / 1000)); |
486 | 486 | ||
@@ -543,7 +543,7 @@ static int s5h1420_getfreqoffset(struct s5h1420_state* state) | |||
543 | } | 543 | } |
544 | 544 | ||
545 | static void s5h1420_setfec_inversion(struct s5h1420_state* state, | 545 | static void s5h1420_setfec_inversion(struct s5h1420_state* state, |
546 | struct dvb_frontend_parameters *p) | 546 | struct dtv_frontend_properties *p) |
547 | { | 547 | { |
548 | u8 inversion = 0; | 548 | u8 inversion = 0; |
549 | u8 vit08, vit09; | 549 | u8 vit08, vit09; |
@@ -555,11 +555,11 @@ static void s5h1420_setfec_inversion(struct s5h1420_state* state, | |||
555 | else if (p->inversion == INVERSION_ON) | 555 | else if (p->inversion == INVERSION_ON) |
556 | inversion = state->config->invert ? 0 : 0x08; | 556 | inversion = state->config->invert ? 0 : 0x08; |
557 | 557 | ||
558 | if ((p->u.qpsk.fec_inner == FEC_AUTO) || (p->inversion == INVERSION_AUTO)) { | 558 | if ((p->fec_inner == FEC_AUTO) || (p->inversion == INVERSION_AUTO)) { |
559 | vit08 = 0x3f; | 559 | vit08 = 0x3f; |
560 | vit09 = 0; | 560 | vit09 = 0; |
561 | } else { | 561 | } else { |
562 | switch(p->u.qpsk.fec_inner) { | 562 | switch (p->fec_inner) { |
563 | case FEC_1_2: | 563 | case FEC_1_2: |
564 | vit08 = 0x01; vit09 = 0x10; | 564 | vit08 = 0x01; vit09 = 0x10; |
565 | break; | 565 | break; |
@@ -628,9 +628,9 @@ static fe_spectral_inversion_t s5h1420_getinversion(struct s5h1420_state* state) | |||
628 | return INVERSION_OFF; | 628 | return INVERSION_OFF; |
629 | } | 629 | } |
630 | 630 | ||
631 | static int s5h1420_set_frontend(struct dvb_frontend* fe, | 631 | static int s5h1420_set_frontend(struct dvb_frontend *fe) |
632 | struct dvb_frontend_parameters *p) | ||
633 | { | 632 | { |
633 | struct dtv_frontend_properties *p = &fe->dtv_property_cache; | ||
634 | struct s5h1420_state* state = fe->demodulator_priv; | 634 | struct s5h1420_state* state = fe->demodulator_priv; |
635 | int frequency_delta; | 635 | int frequency_delta; |
636 | struct dvb_frontend_tune_settings fesettings; | 636 | struct dvb_frontend_tune_settings fesettings; |
@@ -639,14 +639,14 @@ static int s5h1420_set_frontend(struct dvb_frontend* fe, | |||
639 | dprintk("enter %s\n", __func__); | 639 | dprintk("enter %s\n", __func__); |
640 | 640 | ||
641 | /* check if we should do a fast-tune */ | 641 | /* check if we should do a fast-tune */ |
642 | memcpy(&fesettings.parameters, p, sizeof(struct dvb_frontend_parameters)); | 642 | memcpy(&fesettings.parameters, p, sizeof(struct dtv_frontend_properties)); |
643 | s5h1420_get_tune_settings(fe, &fesettings); | 643 | s5h1420_get_tune_settings(fe, &fesettings); |
644 | frequency_delta = p->frequency - state->tunedfreq; | 644 | frequency_delta = p->frequency - state->tunedfreq; |
645 | if ((frequency_delta > -fesettings.max_drift) && | 645 | if ((frequency_delta > -fesettings.max_drift) && |
646 | (frequency_delta < fesettings.max_drift) && | 646 | (frequency_delta < fesettings.max_drift) && |
647 | (frequency_delta != 0) && | 647 | (frequency_delta != 0) && |
648 | (state->fec_inner == p->u.qpsk.fec_inner) && | 648 | (state->fec_inner == p->fec_inner) && |
649 | (state->symbol_rate == p->u.qpsk.symbol_rate)) { | 649 | (state->symbol_rate == p->symbol_rate)) { |
650 | 650 | ||
651 | if (fe->ops.tuner_ops.set_params) { | 651 | if (fe->ops.tuner_ops.set_params) { |
652 | fe->ops.tuner_ops.set_params(fe); | 652 | fe->ops.tuner_ops.set_params(fe); |
@@ -669,13 +669,13 @@ static int s5h1420_set_frontend(struct dvb_frontend* fe, | |||
669 | s5h1420_reset(state); | 669 | s5h1420_reset(state); |
670 | 670 | ||
671 | /* set s5h1420 fclk PLL according to desired symbol rate */ | 671 | /* set s5h1420 fclk PLL according to desired symbol rate */ |
672 | if (p->u.qpsk.symbol_rate > 33000000) | 672 | if (p->symbol_rate > 33000000) |
673 | state->fclk = 80000000; | 673 | state->fclk = 80000000; |
674 | else if (p->u.qpsk.symbol_rate > 28500000) | 674 | else if (p->symbol_rate > 28500000) |
675 | state->fclk = 59000000; | 675 | state->fclk = 59000000; |
676 | else if (p->u.qpsk.symbol_rate > 25000000) | 676 | else if (p->symbol_rate > 25000000) |
677 | state->fclk = 86000000; | 677 | state->fclk = 86000000; |
678 | else if (p->u.qpsk.symbol_rate > 1900000) | 678 | else if (p->symbol_rate > 1900000) |
679 | state->fclk = 88000000; | 679 | state->fclk = 88000000; |
680 | else | 680 | else |
681 | state->fclk = 44000000; | 681 | state->fclk = 44000000; |
@@ -705,7 +705,7 @@ static int s5h1420_set_frontend(struct dvb_frontend* fe, | |||
705 | s5h1420_writereg(state, DiS01, (state->fclk + (TONE_FREQ * 32) - 1) / (TONE_FREQ * 32)); | 705 | s5h1420_writereg(state, DiS01, (state->fclk + (TONE_FREQ * 32) - 1) / (TONE_FREQ * 32)); |
706 | 706 | ||
707 | /* TODO DC offset removal, config parameter ? */ | 707 | /* TODO DC offset removal, config parameter ? */ |
708 | if (p->u.qpsk.symbol_rate > 29000000) | 708 | if (p->symbol_rate > 29000000) |
709 | s5h1420_writereg(state, QPSK01, 0xae | 0x10); | 709 | s5h1420_writereg(state, QPSK01, 0xae | 0x10); |
710 | else | 710 | else |
711 | s5h1420_writereg(state, QPSK01, 0xac | 0x10); | 711 | s5h1420_writereg(state, QPSK01, 0xac | 0x10); |
@@ -718,15 +718,15 @@ static int s5h1420_set_frontend(struct dvb_frontend* fe, | |||
718 | s5h1420_writereg(state, Loop01, 0xF0); | 718 | s5h1420_writereg(state, Loop01, 0xF0); |
719 | s5h1420_writereg(state, Loop02, 0x2a); /* e7 for s5h1420 */ | 719 | s5h1420_writereg(state, Loop02, 0x2a); /* e7 for s5h1420 */ |
720 | s5h1420_writereg(state, Loop03, 0x79); /* 78 for s5h1420 */ | 720 | s5h1420_writereg(state, Loop03, 0x79); /* 78 for s5h1420 */ |
721 | if (p->u.qpsk.symbol_rate > 20000000) | 721 | if (p->symbol_rate > 20000000) |
722 | s5h1420_writereg(state, Loop04, 0x79); | 722 | s5h1420_writereg(state, Loop04, 0x79); |
723 | else | 723 | else |
724 | s5h1420_writereg(state, Loop04, 0x58); | 724 | s5h1420_writereg(state, Loop04, 0x58); |
725 | s5h1420_writereg(state, Loop05, 0x6b); | 725 | s5h1420_writereg(state, Loop05, 0x6b); |
726 | 726 | ||
727 | if (p->u.qpsk.symbol_rate >= 8000000) | 727 | if (p->symbol_rate >= 8000000) |
728 | s5h1420_writereg(state, Post01, (0 << 6) | 0x10); | 728 | s5h1420_writereg(state, Post01, (0 << 6) | 0x10); |
729 | else if (p->u.qpsk.symbol_rate >= 4000000) | 729 | else if (p->symbol_rate >= 4000000) |
730 | s5h1420_writereg(state, Post01, (1 << 6) | 0x10); | 730 | s5h1420_writereg(state, Post01, (1 << 6) | 0x10); |
731 | else | 731 | else |
732 | s5h1420_writereg(state, Post01, (3 << 6) | 0x10); | 732 | s5h1420_writereg(state, Post01, (3 << 6) | 0x10); |
@@ -757,8 +757,8 @@ static int s5h1420_set_frontend(struct dvb_frontend* fe, | |||
757 | /* start QPSK */ | 757 | /* start QPSK */ |
758 | s5h1420_writereg(state, QPSK01, s5h1420_readreg(state, QPSK01) | 1); | 758 | s5h1420_writereg(state, QPSK01, s5h1420_readreg(state, QPSK01) | 1); |
759 | 759 | ||
760 | state->fec_inner = p->u.qpsk.fec_inner; | 760 | state->fec_inner = p->fec_inner; |
761 | state->symbol_rate = p->u.qpsk.symbol_rate; | 761 | state->symbol_rate = p->symbol_rate; |
762 | state->postlocked = 0; | 762 | state->postlocked = 0; |
763 | state->tunedfreq = p->frequency; | 763 | state->tunedfreq = p->frequency; |
764 | 764 | ||
@@ -767,14 +767,14 @@ static int s5h1420_set_frontend(struct dvb_frontend* fe, | |||
767 | } | 767 | } |
768 | 768 | ||
769 | static int s5h1420_get_frontend(struct dvb_frontend* fe, | 769 | static int s5h1420_get_frontend(struct dvb_frontend* fe, |
770 | struct dvb_frontend_parameters *p) | 770 | struct dtv_frontend_properties *p) |
771 | { | 771 | { |
772 | struct s5h1420_state* state = fe->demodulator_priv; | 772 | struct s5h1420_state* state = fe->demodulator_priv; |
773 | 773 | ||
774 | p->frequency = state->tunedfreq + s5h1420_getfreqoffset(state); | 774 | p->frequency = state->tunedfreq + s5h1420_getfreqoffset(state); |
775 | p->inversion = s5h1420_getinversion(state); | 775 | p->inversion = s5h1420_getinversion(state); |
776 | p->u.qpsk.symbol_rate = s5h1420_getsymbolrate(state); | 776 | p->symbol_rate = s5h1420_getsymbolrate(state); |
777 | p->u.qpsk.fec_inner = s5h1420_getfec(state); | 777 | p->fec_inner = s5h1420_getfec(state); |
778 | 778 | ||
779 | return 0; | 779 | return 0; |
780 | } | 780 | } |
@@ -937,7 +937,7 @@ error: | |||
937 | EXPORT_SYMBOL(s5h1420_attach); | 937 | EXPORT_SYMBOL(s5h1420_attach); |
938 | 938 | ||
939 | static struct dvb_frontend_ops s5h1420_ops = { | 939 | static struct dvb_frontend_ops s5h1420_ops = { |
940 | 940 | .delsys = { SYS_DVBS }, | |
941 | .info = { | 941 | .info = { |
942 | .name = "Samsung S5H1420/PnpNetwork PN1010 DVB-S", | 942 | .name = "Samsung S5H1420/PnpNetwork PN1010 DVB-S", |
943 | .type = FE_QPSK, | 943 | .type = FE_QPSK, |
@@ -960,8 +960,8 @@ static struct dvb_frontend_ops s5h1420_ops = { | |||
960 | .sleep = s5h1420_sleep, | 960 | .sleep = s5h1420_sleep, |
961 | .i2c_gate_ctrl = s5h1420_i2c_gate_ctrl, | 961 | .i2c_gate_ctrl = s5h1420_i2c_gate_ctrl, |
962 | 962 | ||
963 | .set_frontend_legacy = s5h1420_set_frontend, | 963 | .set_frontend = s5h1420_set_frontend, |
964 | .get_frontend_legacy = s5h1420_get_frontend, | 964 | .get_frontend = s5h1420_get_frontend, |
965 | .get_tune_settings = s5h1420_get_tune_settings, | 965 | .get_tune_settings = s5h1420_get_tune_settings, |
966 | 966 | ||
967 | .read_status = s5h1420_read_status, | 967 | .read_status = s5h1420_read_status, |