V4L/DVB (11059): xc5000: fix bug for hybrid xc5000 devices with IF other than 5380
The xc5000 driver has a bug where the IF is always set to whatever the first caller to dvb_attach() provides. This fails when the device requires an IF other than 5380 and the analog driver is loaded first through tuner-core (which always supplies the hard-coded value of 5380). Thanks to Michael Krufky <mkrufky@linuxtv.org> and Steven Toth <stoth@linuxtv.org> for providing sample hardware, engineering level support, and testing. Signed-off-by: Devin Heitmueller <dheitmueller@linuxtv.org> Signed-off-by: Michael Krufky <mkrufky@linuxtv.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
e9d4a6d5ef
commit
ea2278633a
|
@ -973,8 +973,6 @@ struct dvb_frontend *xc5000_attach(struct dvb_frontend *fe,
|
|||
case 1:
|
||||
/* new tuner instance */
|
||||
priv->bandwidth = BANDWIDTH_6_MHZ;
|
||||
priv->if_khz = cfg->if_khz;
|
||||
|
||||
fe->tuner_priv = priv;
|
||||
break;
|
||||
default:
|
||||
|
@ -983,6 +981,13 @@ struct dvb_frontend *xc5000_attach(struct dvb_frontend *fe,
|
|||
break;
|
||||
}
|
||||
|
||||
if (priv->if_khz == 0) {
|
||||
/* If the IF hasn't been set yet, use the value provided by
|
||||
the caller (occurs in hybrid devices where the analog
|
||||
call to xc5000_attach occurs before the digital side) */
|
||||
priv->if_khz = cfg->if_khz;
|
||||
}
|
||||
|
||||
/* Check if firmware has been loaded. It is possible that another
|
||||
instance of the driver has loaded the firmware.
|
||||
*/
|
||||
|
|
|
@ -452,7 +452,8 @@ static void set_type(struct i2c_client *c, unsigned int type,
|
|||
struct dvb_tuner_ops *xc_tuner_ops;
|
||||
|
||||
xc5000_cfg.i2c_address = t->i2c->addr;
|
||||
xc5000_cfg.if_khz = 5380;
|
||||
/* if_khz will be set when the digital dvb_attach() occurs */
|
||||
xc5000_cfg.if_khz = 0;
|
||||
if (!dvb_attach(xc5000_attach,
|
||||
&t->fe, t->i2c->adapter, &xc5000_cfg))
|
||||
goto attach_failed;
|
||||
|
|
Loading…
Reference in New Issue