Commit ed23db32 authored by Devin Heitmueller's avatar Devin Heitmueller Committed by Mauro Carvalho Chehab

[media] xc4000: get rid of hard-coded 8MHz firmware config

Remove a hack I had put in to force the firmware to be 8MHz, now setting
the firmware properly based on the target standard.
Signed-off-by: default avatarDevin Heitmueller <dheitmueller@kernellabs.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent f1c78d34
...@@ -174,25 +174,29 @@ struct XC_TV_STANDARD { ...@@ -174,25 +174,29 @@ struct XC_TV_STANDARD {
}; };
/* Tuner standards */ /* Tuner standards */
#define MN_NTSC_PAL_BTSC 0 #define XC4000_MN_NTSC_PAL_BTSC 0
#define MN_NTSC_PAL_A2 1 #define XC4000_MN_NTSC_PAL_A2 1
#define MN_NTSC_PAL_EIAJ 2 #define XC4000_MN_NTSC_PAL_EIAJ 2
#define MN_NTSC_PAL_Mono 3 #define XC4000_MN_NTSC_PAL_Mono 3
#define BG_PAL_A2 4 #define XC4000_BG_PAL_A2 4
#define BG_PAL_NICAM 5 #define XC4000_BG_PAL_NICAM 5
#define BG_PAL_MONO 6 #define XC4000_BG_PAL_MONO 6
#define I_PAL_NICAM 7 #define XC4000_I_PAL_NICAM 7
#define I_PAL_NICAM_MONO 8 #define XC4000_I_PAL_NICAM_MONO 8
#define DK_PAL_A2 9 #define XC4000_DK_PAL_A2 9
#define DK_PAL_NICAM 10 #define XC4000_DK_PAL_NICAM 10
#define DK_PAL_MONO 11 #define XC4000_DK_PAL_MONO 11
#define DK_SECAM_A2DK1 12 #define XC4000_DK_SECAM_A2DK1 12
#define DK_SECAM_A2LDK3 13 #define XC4000_DK_SECAM_A2LDK3 13
#define DK_SECAM_A2MONO 14 #define XC4000_DK_SECAM_A2MONO 14
#define L_SECAM_NICAM 15 #define XC4000_L_SECAM_NICAM 15
#define LC_SECAM_NICAM 16 #define XC4000_LC_SECAM_NICAM 16
#define FM_Radio_INPUT2 21 #define XC4000_DTV6 17
#define FM_Radio_INPUT1 22 #define XC4000_DTV8 18
#define XC4000_DTV7_8 19
#define XC4000_DTV7 20
#define XC4000_FM_Radio_INPUT2 21
#define XC4000_FM_Radio_INPUT1 22
/* WAS : /* WAS :
static struct XC_TV_STANDARD XC4000_Standard[MAX_TV_STANDARD] = { static struct XC_TV_STANDARD XC4000_Standard[MAX_TV_STANDARD] = {
...@@ -1205,15 +1209,11 @@ static int xc4000_set_params(struct dvb_frontend *fe, ...@@ -1205,15 +1209,11 @@ static int xc4000_set_params(struct dvb_frontend *fe,
struct dvb_frontend_parameters *params) struct dvb_frontend_parameters *params)
{ {
struct xc4000_priv *priv = fe->tuner_priv; struct xc4000_priv *priv = fe->tuner_priv;
unsigned int type;
int ret; int ret;
dprintk(1, "%s() frequency=%d (Hz)\n", __func__, params->frequency); dprintk(1, "%s() frequency=%d (Hz)\n", __func__, params->frequency);
/* FIXME: setup proper parameters */
if (check_firmware(fe, DTV8, 0, priv->if_khz) != XC_RESULT_SUCCESS) {
return -EREMOTEIO;
}
if (fe->ops.info.type == FE_ATSC) { if (fe->ops.info.type == FE_ATSC) {
dprintk(1, "%s() ATSC\n", __func__); dprintk(1, "%s() ATSC\n", __func__);
switch (params->u.vsb.modulation) { switch (params->u.vsb.modulation) {
...@@ -1223,7 +1223,8 @@ static int xc4000_set_params(struct dvb_frontend *fe, ...@@ -1223,7 +1223,8 @@ static int xc4000_set_params(struct dvb_frontend *fe,
priv->rf_mode = XC_RF_MODE_AIR; priv->rf_mode = XC_RF_MODE_AIR;
priv->freq_hz = params->frequency - 1750000; priv->freq_hz = params->frequency - 1750000;
priv->bandwidth = BANDWIDTH_6_MHZ; priv->bandwidth = BANDWIDTH_6_MHZ;
priv->video_standard = DTV6; priv->video_standard = XC4000_DTV6;
type = DTV6;
break; break;
case QAM_64: case QAM_64:
case QAM_256: case QAM_256:
...@@ -1232,7 +1233,8 @@ static int xc4000_set_params(struct dvb_frontend *fe, ...@@ -1232,7 +1233,8 @@ static int xc4000_set_params(struct dvb_frontend *fe,
priv->rf_mode = XC_RF_MODE_CABLE; priv->rf_mode = XC_RF_MODE_CABLE;
priv->freq_hz = params->frequency - 1750000; priv->freq_hz = params->frequency - 1750000;
priv->bandwidth = BANDWIDTH_6_MHZ; priv->bandwidth = BANDWIDTH_6_MHZ;
priv->video_standard = DTV6; priv->video_standard = XC4000_DTV6;
type = DTV6;
break; break;
default: default:
return -EINVAL; return -EINVAL;
...@@ -1242,16 +1244,19 @@ static int xc4000_set_params(struct dvb_frontend *fe, ...@@ -1242,16 +1244,19 @@ static int xc4000_set_params(struct dvb_frontend *fe,
switch (params->u.ofdm.bandwidth) { switch (params->u.ofdm.bandwidth) {
case BANDWIDTH_6_MHZ: case BANDWIDTH_6_MHZ:
priv->bandwidth = BANDWIDTH_6_MHZ; priv->bandwidth = BANDWIDTH_6_MHZ;
priv->video_standard = DTV6; priv->video_standard = XC4000_DTV6;
priv->freq_hz = params->frequency - 1750000; priv->freq_hz = params->frequency - 1750000;
type = DTV6;
break; break;
case BANDWIDTH_7_MHZ: case BANDWIDTH_7_MHZ:
printk(KERN_ERR "xc4000 bandwidth 7MHz not supported\n"); printk(KERN_ERR "xc4000 bandwidth 7MHz not supported\n");
type = DTV7;
return -EINVAL; return -EINVAL;
case BANDWIDTH_8_MHZ: case BANDWIDTH_8_MHZ:
priv->bandwidth = BANDWIDTH_8_MHZ; priv->bandwidth = BANDWIDTH_8_MHZ;
priv->video_standard = DTV8; priv->video_standard = XC4000_DTV8;
priv->freq_hz = params->frequency - 2750000; priv->freq_hz = params->frequency - 2750000;
type = DTV8;
break; break;
default: default:
printk(KERN_ERR "xc4000 bandwidth not set!\n"); printk(KERN_ERR "xc4000 bandwidth not set!\n");
...@@ -1266,6 +1271,11 @@ static int xc4000_set_params(struct dvb_frontend *fe, ...@@ -1266,6 +1271,11 @@ static int xc4000_set_params(struct dvb_frontend *fe,
dprintk(1, "%s() frequency=%d (compensated)\n", dprintk(1, "%s() frequency=%d (compensated)\n",
__func__, priv->freq_hz); __func__, priv->freq_hz);
/* Make sure the correct firmware type is loaded */
if (check_firmware(fe, type, 0, priv->if_khz) != XC_RESULT_SUCCESS) {
return -EREMOTEIO;
}
ret = xc_SetSignalSource(priv, priv->rf_mode); ret = xc_SetSignalSource(priv, priv->rf_mode);
if (ret != XC_RESULT_SUCCESS) { if (ret != XC_RESULT_SUCCESS) {
printk(KERN_ERR printk(KERN_ERR
...@@ -1325,11 +1335,6 @@ static int xc4000_set_analog_params(struct dvb_frontend *fe, ...@@ -1325,11 +1335,6 @@ static int xc4000_set_analog_params(struct dvb_frontend *fe,
dprintk(1, "%s() frequency=%d (in units of 62.5khz)\n", dprintk(1, "%s() frequency=%d (in units of 62.5khz)\n",
__func__, params->frequency); __func__, params->frequency);
/* FIXME: setup proper parameters */
if (check_firmware(fe, DTV8, 0, priv->if_khz) != XC_RESULT_SUCCESS) {
return -EREMOTEIO;
}
/* Fix me: it could be air. */ /* Fix me: it could be air. */
priv->rf_mode = params->mode; priv->rf_mode = params->mode;
if (params->mode > XC_RF_MODE_CABLE) if (params->mode > XC_RF_MODE_CABLE)
...@@ -1343,45 +1348,51 @@ static int xc4000_set_analog_params(struct dvb_frontend *fe, ...@@ -1343,45 +1348,51 @@ static int xc4000_set_analog_params(struct dvb_frontend *fe,
*/ */
if (params->std & V4L2_STD_MN) { if (params->std & V4L2_STD_MN) {
/* default to BTSC audio standard */ /* default to BTSC audio standard */
priv->video_standard = MN_NTSC_PAL_BTSC; priv->video_standard = XC4000_MN_NTSC_PAL_BTSC;
goto tune_channel; goto tune_channel;
} }
if (params->std & V4L2_STD_PAL_BG) { if (params->std & V4L2_STD_PAL_BG) {
/* default to NICAM audio standard */ /* default to NICAM audio standard */
priv->video_standard = BG_PAL_NICAM; priv->video_standard = XC4000_BG_PAL_NICAM;
goto tune_channel; goto tune_channel;
} }
if (params->std & V4L2_STD_PAL_I) { if (params->std & V4L2_STD_PAL_I) {
/* default to NICAM audio standard */ /* default to NICAM audio standard */
priv->video_standard = I_PAL_NICAM; priv->video_standard = XC4000_I_PAL_NICAM;
goto tune_channel; goto tune_channel;
} }
if (params->std & V4L2_STD_PAL_DK) { if (params->std & V4L2_STD_PAL_DK) {
/* default to NICAM audio standard */ /* default to NICAM audio standard */
priv->video_standard = DK_PAL_NICAM; priv->video_standard = XC4000_DK_PAL_NICAM;
goto tune_channel; goto tune_channel;
} }
if (params->std & V4L2_STD_SECAM_DK) { if (params->std & V4L2_STD_SECAM_DK) {
/* default to A2 DK1 audio standard */ /* default to A2 DK1 audio standard */
priv->video_standard = DK_SECAM_A2DK1; priv->video_standard = XC4000_DK_SECAM_A2DK1;
goto tune_channel; goto tune_channel;
} }
if (params->std & V4L2_STD_SECAM_L) { if (params->std & V4L2_STD_SECAM_L) {
priv->video_standard = L_SECAM_NICAM; priv->video_standard = XC4000_L_SECAM_NICAM;
goto tune_channel; goto tune_channel;
} }
if (params->std & V4L2_STD_SECAM_LC) { if (params->std & V4L2_STD_SECAM_LC) {
priv->video_standard = LC_SECAM_NICAM; priv->video_standard = XC4000_LC_SECAM_NICAM;
goto tune_channel; goto tune_channel;
} }
tune_channel: tune_channel:
/* FIXME - firmware type not being set properly */
if (check_firmware(fe, DTV8, 0, priv->if_khz) != XC_RESULT_SUCCESS) {
return -EREMOTEIO;
}
ret = xc_SetSignalSource(priv, priv->rf_mode); ret = xc_SetSignalSource(priv, priv->rf_mode);
if (ret != XC_RESULT_SUCCESS) { if (ret != XC_RESULT_SUCCESS) {
printk(KERN_ERR printk(KERN_ERR
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment