aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/common/tuners/tuner-xc2028.c
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@redhat.com>2008-09-28 01:24:44 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2008-10-12 07:37:09 -0400
commit0975fc68719c75cbe14132c6f0dead57cd4d5210 (patch)
tree7dedb552fb9e2e8d874ca2b66cefe39406fd7737 /drivers/media/common/tuners/tuner-xc2028.c
parent767f3b3bf23244d52be0492df20b0eaf14f501c5 (diff)
V4L/DVB (9055): tuner-xc2028: Do a better job selecting firmware type
Firmware selection is very tricky on this device. This patch do a better selection of the proper firmware type, by using a code to hint if the firmware to be loaded should be D2620 or D2633. It also allows overriding the hint at the control structure. Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/common/tuners/tuner-xc2028.c')
-rw-r--r--drivers/media/common/tuners/tuner-xc2028.c33
1 files changed, 24 insertions, 9 deletions
diff --git a/drivers/media/common/tuners/tuner-xc2028.c b/drivers/media/common/tuners/tuner-xc2028.c
index fc82d154c8c2..b65e6803e6c6 100644
--- a/drivers/media/common/tuners/tuner-xc2028.c
+++ b/drivers/media/common/tuners/tuner-xc2028.c
@@ -1013,11 +1013,6 @@ static int xc2028_set_params(struct dvb_frontend *fe,
1013 1013
1014 tuner_dbg("%s called\n", __func__); 1014 tuner_dbg("%s called\n", __func__);
1015 1015
1016 if (priv->ctrl.d2633)
1017 type |= D2633;
1018 else
1019 type |= D2620;
1020
1021 switch(fe->ops.info.type) { 1016 switch(fe->ops.info.type) {
1022 case FE_OFDM: 1017 case FE_OFDM:
1023 bw = p->u.ofdm.bandwidth; 1018 bw = p->u.ofdm.bandwidth;
@@ -1032,10 +1027,8 @@ static int xc2028_set_params(struct dvb_frontend *fe,
1032 break; 1027 break;
1033 case FE_ATSC: 1028 case FE_ATSC:
1034 bw = BANDWIDTH_6_MHZ; 1029 bw = BANDWIDTH_6_MHZ;
1035 /* The only ATSC firmware (at least on v2.7) is D2633, 1030 /* The only ATSC firmware (at least on v2.7) is D2633 */
1036 so overrides ctrl->d2633 */ 1031 type |= ATSC | D2633;
1037 type |= ATSC| D2633;
1038 type &= ~D2620;
1039 break; 1032 break;
1040 /* DVB-S is not supported */ 1033 /* DVB-S is not supported */
1041 default: 1034 default:
@@ -1068,6 +1061,28 @@ static int xc2028_set_params(struct dvb_frontend *fe,
1068 tuner_err("error: bandwidth not supported.\n"); 1061 tuner_err("error: bandwidth not supported.\n");
1069 }; 1062 };
1070 1063
1064 /*
1065 Selects between D2633 or D2620 firmware.
1066 It doesn't make sense for ATSC, since it should be D2633 on all cases
1067 */
1068 if (fe->ops.info.type != FE_ATSC) {
1069 switch (priv->ctrl.type) {
1070 case XC2028_D2633:
1071 type |= D2633;
1072 break;
1073 case XC2028_D2620:
1074 type |= D2620;
1075 break;
1076 case XC2028_AUTO:
1077 default:
1078 /* Zarlink seems to need D2633 */
1079 if (priv->ctrl.demod == XC3028_FE_ZARLINK456)
1080 type |= D2633;
1081 else
1082 type |= D2620;
1083 }
1084 }
1085
1071 /* All S-code tables need a 200kHz shift */ 1086 /* All S-code tables need a 200kHz shift */
1072 if (priv->ctrl.demod) 1087 if (priv->ctrl.demod)
1073 demod = priv->ctrl.demod + 200; 1088 demod = priv->ctrl.demod + 200;