aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew de Quincey <adq_dvb@lidskialf.net>2006-04-18 16:47:11 -0400
committerMauro Carvalho Chehab <mchehab@infradead.org>2006-06-25 00:59:05 -0400
commite87d41c4952ceef7a9f760f38f9343d015279662 (patch)
treef3c5623d83d3351361f01fed526fa2cf6f26f9cd
parent0f591d409b63999ee8053df9cfbedd77bfbf3b22 (diff)
V4L/DVB (3877): Convert ttpci/budget-av to refactored tuner code
Rename pll calls to appropriate tuner calls. Remove pll functions from demod structures. Hook tuner call into tuner_ops. Add pll gate control calls where appropriate. Signed-off-by: Andrew de Quincey <adq_dvb@lidskialf.net> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
-rw-r--r--drivers/media/dvb/ttpci/budget-av.c85
1 files changed, 58 insertions, 27 deletions
diff --git a/drivers/media/dvb/ttpci/budget-av.c b/drivers/media/dvb/ttpci/budget-av.c
index dc78aadf002a..9bd069e4e11a 100644
--- a/drivers/media/dvb/ttpci/budget-av.c
+++ b/drivers/media/dvb/ttpci/budget-av.c
@@ -472,12 +472,12 @@ static int philips_su1278_ty_ci_set_symbol_rate(struct dvb_frontend *fe, u32 sra
472 return 0; 472 return 0;
473} 473}
474 474
475static int philips_su1278_ty_ci_pll_set(struct dvb_frontend *fe, 475static int philips_su1278_ty_ci_tuner_set_params(struct dvb_frontend *fe,
476 struct i2c_adapter *i2c, 476 struct dvb_frontend_parameters *params)
477 struct dvb_frontend_parameters *params)
478{ 477{
479 u32 div; 478 u32 div;
480 u8 buf[4]; 479 u8 buf[4];
480 struct budget *budget = (struct budget *) fe->dvb->priv;
481 struct i2c_msg msg = {.addr = 0x61,.flags = 0,.buf = buf,.len = sizeof(buf) }; 481 struct i2c_msg msg = {.addr = 0x61,.flags = 0,.buf = buf,.len = sizeof(buf) };
482 482
483 if ((params->frequency < 950000) || (params->frequency > 2150000)) 483 if ((params->frequency < 950000) || (params->frequency > 2150000))
@@ -501,7 +501,9 @@ static int philips_su1278_ty_ci_pll_set(struct dvb_frontend *fe,
501 else if (params->frequency < 2150000) 501 else if (params->frequency < 2150000)
502 buf[3] |= 0xC0; 502 buf[3] |= 0xC0;
503 503
504 if (i2c_transfer(i2c, &msg, 1) != 1) 504 if (fe->ops->i2c_gate_ctrl)
505 fe->ops->i2c_gate_ctrl(fe, 1);
506 if (i2c_transfer(&budget->i2c_adap, &msg, 1) != 1)
505 return -EIO; 507 return -EIO;
506 return 0; 508 return 0;
507} 509}
@@ -509,9 +511,8 @@ static int philips_su1278_ty_ci_pll_set(struct dvb_frontend *fe,
509#define MIN2(a,b) ((a) < (b) ? (a) : (b)) 511#define MIN2(a,b) ((a) < (b) ? (a) : (b))
510#define MIN3(a,b,c) MIN2(MIN2(a,b),c) 512#define MIN3(a,b,c) MIN2(MIN2(a,b),c)
511 513
512static int philips_su1278sh2_tua6100_pll_set(struct dvb_frontend *fe, 514static int philips_su1278sh2_tua6100_tuner_set_params(struct dvb_frontend *fe,
513 struct i2c_adapter *i2c, 515 struct dvb_frontend_parameters *params)
514 struct dvb_frontend_parameters *params)
515{ 516{
516 u8 reg0 [2] = { 0x00, 0x00 }; 517 u8 reg0 [2] = { 0x00, 0x00 };
517 u8 reg1 [4] = { 0x01, 0x00, 0x00, 0x00 }; 518 u8 reg1 [4] = { 0x01, 0x00, 0x00, 0x00 };
@@ -521,6 +522,7 @@ static int philips_su1278sh2_tua6100_pll_set(struct dvb_frontend *fe,
521 int R, A, N, P, M; 522 int R, A, N, P, M;
522 struct i2c_msg msg = {.addr = 0x60,.flags = 0,.buf = NULL,.len = 0 }; 523 struct i2c_msg msg = {.addr = 0x60,.flags = 0,.buf = NULL,.len = 0 };
523 int freq = params->frequency; 524 int freq = params->frequency;
525 struct budget *budget = (struct budget *) fe->dvb->priv;
524 526
525 first_ZF = (freq) / 1000; 527 first_ZF = (freq) / 1000;
526 528
@@ -620,21 +622,25 @@ static int philips_su1278sh2_tua6100_pll_set(struct dvb_frontend *fe,
620 reg0[1] |= 0x03; 622 reg0[1] |= 0x03;
621 623
622 /* already enabled - do not reenable i2c repeater or TX fails */ 624 /* already enabled - do not reenable i2c repeater or TX fails */
625 if (fe->ops->i2c_gate_ctrl)
626 fe->ops->i2c_gate_ctrl(fe, 1);
623 msg.buf = reg0; 627 msg.buf = reg0;
624 msg.len = sizeof(reg0); 628 msg.len = sizeof(reg0);
625 if (i2c_transfer(i2c, &msg, 1) != 1) 629 if (i2c_transfer(&budget->i2c_adap, &msg, 1) != 1)
626 return -EIO; 630 return -EIO;
627 631
628 stv0299_enable_plli2c(fe); 632 if (fe->ops->i2c_gate_ctrl)
633 fe->ops->i2c_gate_ctrl(fe, 1);
629 msg.buf = reg1; 634 msg.buf = reg1;
630 msg.len = sizeof(reg1); 635 msg.len = sizeof(reg1);
631 if (i2c_transfer(i2c, &msg, 1) != 1) 636 if (i2c_transfer(&budget->i2c_adap, &msg, 1) != 1)
632 return -EIO; 637 return -EIO;
633 638
634 stv0299_enable_plli2c(fe); 639 if (fe->ops->i2c_gate_ctrl)
640 fe->ops->i2c_gate_ctrl(fe, 1);
635 msg.buf = reg2; 641 msg.buf = reg2;
636 msg.len = sizeof(reg2); 642 msg.len = sizeof(reg2);
637 if (i2c_transfer(i2c, &msg, 1) != 1) 643 if (i2c_transfer(&budget->i2c_adap, &msg, 1) != 1)
638 return -EIO; 644 return -EIO;
639 645
640 return 0; 646 return 0;
@@ -692,7 +698,6 @@ static struct stv0299_config typhoon_config = {
692 .volt13_op0_op1 = STV0299_VOLT13_OP0, 698 .volt13_op0_op1 = STV0299_VOLT13_OP0,
693 .min_delay_ms = 100, 699 .min_delay_ms = 100,
694 .set_symbol_rate = philips_su1278_ty_ci_set_symbol_rate, 700 .set_symbol_rate = philips_su1278_ty_ci_set_symbol_rate,
695 .pll_set = philips_su1278_ty_ci_pll_set,
696}; 701};
697 702
698 703
@@ -706,7 +711,6 @@ static struct stv0299_config cinergy_1200s_config = {
706 .volt13_op0_op1 = STV0299_VOLT13_OP0, 711 .volt13_op0_op1 = STV0299_VOLT13_OP0,
707 .min_delay_ms = 100, 712 .min_delay_ms = 100,
708 .set_symbol_rate = philips_su1278_ty_ci_set_symbol_rate, 713 .set_symbol_rate = philips_su1278_ty_ci_set_symbol_rate,
709 .pll_set = philips_su1278_ty_ci_pll_set,
710}; 714};
711 715
712static struct stv0299_config cinergy_1200s_1894_0010_config = { 716static struct stv0299_config cinergy_1200s_1894_0010_config = {
@@ -719,10 +723,9 @@ static struct stv0299_config cinergy_1200s_1894_0010_config = {
719 .volt13_op0_op1 = STV0299_VOLT13_OP0, 723 .volt13_op0_op1 = STV0299_VOLT13_OP0,
720 .min_delay_ms = 100, 724 .min_delay_ms = 100,
721 .set_symbol_rate = philips_su1278_ty_ci_set_symbol_rate, 725 .set_symbol_rate = philips_su1278_ty_ci_set_symbol_rate,
722 .pll_set = philips_su1278sh2_tua6100_pll_set,
723}; 726};
724 727
725static int philips_cu1216_pll_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params) 728static int philips_cu1216_tuner_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
726{ 729{
727 struct budget *budget = (struct budget *) fe->dvb->priv; 730 struct budget *budget = (struct budget *) fe->dvb->priv;
728 u8 buf[4]; 731 u8 buf[4];
@@ -738,6 +741,8 @@ static int philips_cu1216_pll_set(struct dvb_frontend *fe, struct dvb_frontend_p
738 buf[3] = (params->frequency < 150000000 ? 0x01 : 741 buf[3] = (params->frequency < 150000000 ? 0x01 :
739 params->frequency < 445000000 ? 0x02 : 0x04); 742 params->frequency < 445000000 ? 0x02 : 0x04);
740 743
744 if (fe->ops->i2c_gate_ctrl)
745 fe->ops->i2c_gate_ctrl(fe, 1);
741 if (i2c_transfer(&budget->i2c_adap, &msg, 1) != 1) 746 if (i2c_transfer(&budget->i2c_adap, &msg, 1) != 1)
742 return -EIO; 747 return -EIO;
743 return 0; 748 return 0;
@@ -745,19 +750,20 @@ static int philips_cu1216_pll_set(struct dvb_frontend *fe, struct dvb_frontend_p
745 750
746static struct tda10021_config philips_cu1216_config = { 751static struct tda10021_config philips_cu1216_config = {
747 .demod_address = 0x0c, 752 .demod_address = 0x0c,
748 .pll_set = philips_cu1216_pll_set,
749}; 753};
750 754
751 755
752 756
753 757
754static int philips_tu1216_pll_init(struct dvb_frontend *fe) 758static int philips_tu1216_tuner_init(struct dvb_frontend *fe)
755{ 759{
756 struct budget *budget = (struct budget *) fe->dvb->priv; 760 struct budget *budget = (struct budget *) fe->dvb->priv;
757 static u8 tu1216_init[] = { 0x0b, 0xf5, 0x85, 0xab }; 761 static u8 tu1216_init[] = { 0x0b, 0xf5, 0x85, 0xab };
758 struct i2c_msg tuner_msg = {.addr = 0x60,.flags = 0,.buf = tu1216_init,.len = sizeof(tu1216_init) }; 762 struct i2c_msg tuner_msg = {.addr = 0x60,.flags = 0,.buf = tu1216_init,.len = sizeof(tu1216_init) };
759 763
760 // setup PLL configuration 764 // setup PLL configuration
765 if (fe->ops->i2c_gate_ctrl)
766 fe->ops->i2c_gate_ctrl(fe, 1);
761 if (i2c_transfer(&budget->i2c_adap, &tuner_msg, 1) != 1) 767 if (i2c_transfer(&budget->i2c_adap, &tuner_msg, 1) != 1)
762 return -EIO; 768 return -EIO;
763 msleep(1); 769 msleep(1);
@@ -765,7 +771,7 @@ static int philips_tu1216_pll_init(struct dvb_frontend *fe)
765 return 0; 771 return 0;
766} 772}
767 773
768static int philips_tu1216_pll_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params) 774static int philips_tu1216_tuner_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
769{ 775{
770 struct budget *budget = (struct budget *) fe->dvb->priv; 776 struct budget *budget = (struct budget *) fe->dvb->priv;
771 u8 tuner_buf[4]; 777 u8 tuner_buf[4];
@@ -839,6 +845,8 @@ static int philips_tu1216_pll_set(struct dvb_frontend *fe, struct dvb_frontend_p
839 tuner_buf[2] = 0xca; 845 tuner_buf[2] = 0xca;
840 tuner_buf[3] = (cp << 5) | (filter << 3) | band; 846 tuner_buf[3] = (cp << 5) | (filter << 3) | band;
841 847
848 if (fe->ops->i2c_gate_ctrl)
849 fe->ops->i2c_gate_ctrl(fe, 1);
842 if (i2c_transfer(&budget->i2c_adap, &tuner_msg, 1) != 1) 850 if (i2c_transfer(&budget->i2c_adap, &tuner_msg, 1) != 1)
843 return -EIO; 851 return -EIO;
844 852
@@ -862,9 +870,6 @@ static struct tda1004x_config philips_tu1216_config = {
862 .xtal_freq = TDA10046_XTAL_4M, 870 .xtal_freq = TDA10046_XTAL_4M,
863 .agc_config = TDA10046_AGC_DEFAULT, 871 .agc_config = TDA10046_AGC_DEFAULT,
864 .if_freq = TDA10046_FREQ_3617, 872 .if_freq = TDA10046_FREQ_3617,
865 .pll_init = philips_tu1216_pll_init,
866 .pll_set = philips_tu1216_pll_set,
867 .pll_sleep = NULL,
868 .request_firmware = philips_tu1216_request_firmware, 873 .request_firmware = philips_tu1216_request_firmware,
869}; 874};
870 875
@@ -911,13 +916,13 @@ static u8 philips_sd1878_inittab[] = {
911 0xff, 0xff 916 0xff, 0xff
912}; 917};
913 918
914static int philips_sd1878_tda8261_pll_set(struct dvb_frontend *fe, 919static int philips_sd1878_tda8261_tuner_set_params(struct dvb_frontend *fe,
915 struct i2c_adapter *i2c, 920 struct dvb_frontend_parameters *params)
916 struct dvb_frontend_parameters *params)
917{ 921{
918 u8 buf[4]; 922 u8 buf[4];
919 int rc; 923 int rc;
920 struct i2c_msg tuner_msg = {.addr=0x60,.flags=0,.buf=buf,.len=sizeof(buf)}; 924 struct i2c_msg tuner_msg = {.addr=0x60,.flags=0,.buf=buf,.len=sizeof(buf)};
925 struct budget *budget = (struct budget *) fe->dvb->priv;
921 926
922 if((params->frequency < 950000) || (params->frequency > 2150000)) 927 if((params->frequency < 950000) || (params->frequency > 2150000))
923 return -EINVAL; 928 return -EINVAL;
@@ -926,7 +931,9 @@ static int philips_sd1878_tda8261_pll_set(struct dvb_frontend *fe,
926 params->frequency, 0); 931 params->frequency, 0);
927 if(rc < 0) return rc; 932 if(rc < 0) return rc;
928 933
929 if(i2c_transfer(i2c, &tuner_msg, 1) != 1) 934 if (fe->ops->i2c_gate_ctrl)
935 fe->ops->i2c_gate_ctrl(fe, 1);
936 if(i2c_transfer(&budget->i2c_adap, &tuner_msg, 1) != 1)
930 return -EIO; 937 return -EIO;
931 938
932 return 0; 939 return 0;
@@ -977,7 +984,6 @@ static struct stv0299_config philips_sd1878_config = {
977 .volt13_op0_op1 = STV0299_VOLT13_OP0, 984 .volt13_op0_op1 = STV0299_VOLT13_OP0,
978 .min_delay_ms = 100, 985 .min_delay_ms = 100,
979 .set_symbol_rate = philips_sd1878_ci_set_symbol_rate, 986 .set_symbol_rate = philips_sd1878_ci_set_symbol_rate,
980 .pll_set = philips_sd1878_tda8261_pll_set,
981}; 987};
982 988
983static u8 read_pwm(struct budget_av *budget_av) 989static u8 read_pwm(struct budget_av *budget_av)
@@ -1035,9 +1041,15 @@ static void frontend_init(struct budget_av *budget_av)
1035 if (saa->pci->subsystem_vendor == 0x1894) { 1041 if (saa->pci->subsystem_vendor == 0x1894) {
1036 fe = stv0299_attach(&cinergy_1200s_1894_0010_config, 1042 fe = stv0299_attach(&cinergy_1200s_1894_0010_config,
1037 &budget_av->budget.i2c_adap); 1043 &budget_av->budget.i2c_adap);
1044 if (fe) {
1045 fe->ops->tuner_ops.set_params = philips_su1278sh2_tua6100_tuner_set_params;
1046 }
1038 } else { 1047 } else {
1039 fe = stv0299_attach(&typhoon_config, 1048 fe = stv0299_attach(&typhoon_config,
1040 &budget_av->budget.i2c_adap); 1049 &budget_av->budget.i2c_adap);
1050 if (fe) {
1051 fe->ops->tuner_ops.set_params = philips_su1278_ty_ci_tuner_set_params;
1052 }
1041 } 1053 }
1042 break; 1054 break;
1043 1055
@@ -1047,17 +1059,26 @@ static void frontend_init(struct budget_av *budget_av)
1047 case SUBID_DVBS_EASYWATCH: 1059 case SUBID_DVBS_EASYWATCH:
1048 fe = stv0299_attach(&philips_sd1878_config, 1060 fe = stv0299_attach(&philips_sd1878_config,
1049 &budget_av->budget.i2c_adap); 1061 &budget_av->budget.i2c_adap);
1062 if (fe) {
1063 fe->ops->tuner_ops.set_params = philips_sd1878_tda8261_tuner_set_params;
1064 }
1050 break; 1065 break;
1051 1066
1052 case SUBID_DVBS_KNC1_PLUS: 1067 case SUBID_DVBS_KNC1_PLUS:
1053 case SUBID_DVBS_TYPHOON: 1068 case SUBID_DVBS_TYPHOON:
1054 fe = stv0299_attach(&typhoon_config, 1069 fe = stv0299_attach(&typhoon_config,
1055 &budget_av->budget.i2c_adap); 1070 &budget_av->budget.i2c_adap);
1071 if (fe) {
1072 fe->ops->tuner_ops.set_params = philips_su1278_ty_ci_tuner_set_params;
1073 }
1056 break; 1074 break;
1057 1075
1058 case SUBID_DVBS_CINERGY1200: 1076 case SUBID_DVBS_CINERGY1200:
1059 fe = stv0299_attach(&cinergy_1200s_config, 1077 fe = stv0299_attach(&cinergy_1200s_config,
1060 &budget_av->budget.i2c_adap); 1078 &budget_av->budget.i2c_adap);
1079 if (fe) {
1080 fe->ops->tuner_ops.set_params = philips_su1278_ty_ci_tuner_set_params;
1081 }
1061 break; 1082 break;
1062 1083
1063 case SUBID_DVBC_KNC1: 1084 case SUBID_DVBC_KNC1:
@@ -1065,18 +1086,28 @@ static void frontend_init(struct budget_av *budget_av)
1065 fe = tda10021_attach(&philips_cu1216_config, 1086 fe = tda10021_attach(&philips_cu1216_config,
1066 &budget_av->budget.i2c_adap, 1087 &budget_av->budget.i2c_adap,
1067 read_pwm(budget_av)); 1088 read_pwm(budget_av));
1089 if (fe) {
1090 fe->ops->tuner_ops.set_params = philips_cu1216_tuner_set_params;
1091 }
1068 break; 1092 break;
1069 1093
1070 case SUBID_DVBT_KNC1: 1094 case SUBID_DVBT_KNC1:
1071 case SUBID_DVBT_KNC1_PLUS: 1095 case SUBID_DVBT_KNC1_PLUS:
1072 fe = tda10046_attach(&philips_tu1216_config, 1096 fe = tda10046_attach(&philips_tu1216_config,
1073 &budget_av->budget.i2c_adap); 1097 &budget_av->budget.i2c_adap);
1098 if (fe) {
1099 fe->ops->tuner_ops.init = philips_tu1216_tuner_init;
1100 fe->ops->tuner_ops.set_params = philips_tu1216_tuner_set_params;
1101 }
1074 break; 1102 break;
1075 1103
1076 case SUBID_DVBC_CINERGY1200: 1104 case SUBID_DVBC_CINERGY1200:
1077 fe = tda10021_attach(&philips_cu1216_config, 1105 fe = tda10021_attach(&philips_cu1216_config,
1078 &budget_av->budget.i2c_adap, 1106 &budget_av->budget.i2c_adap,
1079 read_pwm(budget_av)); 1107 read_pwm(budget_av));
1108 if (fe) {
1109 fe->ops->tuner_ops.set_params = philips_cu1216_tuner_set_params;
1110 }
1080 break; 1111 break;
1081 1112
1082 case SUBID_DVBT_CINERGY1200: 1113 case SUBID_DVBT_CINERGY1200: