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: Devin Heitmueller <dheitmueller@kernellabs.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
d7009cdc28
commit
496e9057ad
|
@ -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,
|
||||||
{
|
{
|
||||||
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,
|
||||||
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;
|
||||||
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.
|
||||||
|
|
Loading…
Reference in a new issue