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

V4L/DVB (13076): xc5000: make the definition of the FM input part of the xc5000 config struct

Remove hard-coded definition of the xc5000 FM radio input, making it a
parameter passed in when doing the attach call.
Signed-off-by: default avatarDevin Heitmueller <dheitmueller@kernellabs.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent d7009cdc
...@@ -61,6 +61,7 @@ struct xc5000_priv { ...@@ -61,6 +61,7 @@ struct xc5000_priv {
u32 bandwidth; u32 bandwidth;
u8 video_standard; u8 video_standard;
u8 rf_mode; u8 rf_mode;
u8 radio_input;
}; };
/* Misc Defines */ /* Misc Defines */
...@@ -829,17 +830,32 @@ static int xc5000_set_radio_freq(struct dvb_frontend *fe, ...@@ -829,17 +830,32 @@ static int xc5000_set_radio_freq(struct dvb_frontend *fe,
{ {
struct xc5000_priv *priv = fe->tuner_priv; struct xc5000_priv *priv = fe->tuner_priv;
int ret = -EINVAL; int ret = -EINVAL;
u8 radio_input;
dprintk(1, "%s() frequency=%d (in units of khz)\n", dprintk(1, "%s() frequency=%d (in units of khz)\n",
__func__, params->frequency); __func__, params->frequency);
if (priv->radio_input == XC5000_RADIO_NOT_CONFIGURED) {
dprintk(1, "%s() radio input not configured\n", __func__);
return -EINVAL;
}
if (priv->radio_input == XC5000_RADIO_FM1)
radio_input = FM_Radio_INPUT1;
else if (priv->radio_input == XC5000_RADIO_FM2)
radio_input = FM_Radio_INPUT2;
else {
dprintk(1, "%s() unknown radio input %d\n", __func__,
priv->radio_input);
return -EINVAL;
}
priv->freq_hz = params->frequency * 125 / 2; priv->freq_hz = params->frequency * 125 / 2;
priv->rf_mode = XC_RF_MODE_AIR; priv->rf_mode = XC_RF_MODE_AIR;
ret = xc_SetTVStandard(priv, ret = xc_SetTVStandard(priv, XC5000_Standard[radio_input].VideoMode,
XC5000_Standard[FM_Radio_INPUT1].VideoMode, XC5000_Standard[radio_input].AudioMode);
XC5000_Standard[FM_Radio_INPUT1].AudioMode);
if (ret != XC_RESULT_SUCCESS) { if (ret != XC_RESULT_SUCCESS) {
printk(KERN_ERR "xc5000: xc_SetTVStandard failed\n"); printk(KERN_ERR "xc5000: xc_SetTVStandard failed\n");
...@@ -1058,6 +1074,9 @@ struct dvb_frontend *xc5000_attach(struct dvb_frontend *fe, ...@@ -1058,6 +1074,9 @@ struct dvb_frontend *xc5000_attach(struct dvb_frontend *fe,
priv->if_khz = cfg->if_khz; priv->if_khz = cfg->if_khz;
} }
if (priv->radio_input == 0)
priv->radio_input = cfg->radio_input;
/* Check if firmware has been loaded. It is possible that another /* Check if firmware has been loaded. It is possible that another
instance of the driver has loaded the firmware. instance of the driver has loaded the firmware.
*/ */
......
...@@ -30,11 +30,17 @@ struct i2c_adapter; ...@@ -30,11 +30,17 @@ struct i2c_adapter;
struct xc5000_config { struct xc5000_config {
u8 i2c_address; u8 i2c_address;
u32 if_khz; u32 if_khz;
u8 radio_input;
}; };
/* xc5000 callback command */ /* xc5000 callback command */
#define XC5000_TUNER_RESET 0 #define XC5000_TUNER_RESET 0
/* Possible Radio inputs */
#define XC5000_RADIO_NOT_CONFIGURED 0
#define XC5000_RADIO_FM1 1
#define XC5000_RADIO_FM2 2
/* For each bridge framework, when it attaches either analog or digital, /* For each bridge framework, when it attaches either analog or digital,
* it has to store a reference back to its _core equivalent structure, * it has to store a reference back to its _core equivalent structure,
* so that it can service the hardware by steering gpio's etc. * so that it can service the hardware by steering gpio's etc.
......
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