[media] rtl2830: prevent .read_status() when sleeping
Hardware is not accessible when device is sleeping. Preventing such IOCTLs when sleep should be job of DVB CORE... Signed-off-by: Antti Palosaari <crope@iki.fi> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
Родитель
9935eea5ac
Коммит
a8567cf22e
|
@ -608,11 +608,6 @@ static int rtl28xxu_power_ctrl(struct dvb_usb_device *d, int onoff)
|
|||
sys0 = sys0 & 0x0f;
|
||||
sys0 |= 0xe0;
|
||||
} else {
|
||||
/*
|
||||
* FIXME: Use .fe_ioctl_override() to prevent demod
|
||||
* IOCTLs in case of device is powered off. Or change
|
||||
* RTL2830 demod not perform requestesd IOCTL & IO when sleep.
|
||||
*/
|
||||
gpio &= (~0x01); /* GPIO0 = 0 */
|
||||
gpio |= 0x10; /* GPIO4 = 1 */
|
||||
sys0 = sys0 & (~0xc0);
|
||||
|
|
|
@ -273,12 +273,21 @@ static int rtl2830_init(struct dvb_frontend *fe)
|
|||
if (ret)
|
||||
goto err;
|
||||
|
||||
priv->sleeping = false;
|
||||
|
||||
return ret;
|
||||
err:
|
||||
dbg("%s: failed=%d", __func__, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int rtl2830_sleep(struct dvb_frontend *fe)
|
||||
{
|
||||
struct rtl2830_priv *priv = fe->demodulator_priv;
|
||||
priv->sleeping = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int rtl2830_get_tune_settings(struct dvb_frontend *fe,
|
||||
struct dvb_frontend_tune_settings *s)
|
||||
{
|
||||
|
@ -372,6 +381,9 @@ static int rtl2830_read_status(struct dvb_frontend *fe, fe_status_t *status)
|
|||
u8 tmp;
|
||||
*status = 0;
|
||||
|
||||
if (priv->sleeping)
|
||||
return 0;
|
||||
|
||||
ret = rtl2830_rd_reg_mask(priv, 0x351, &tmp, 0x78); /* [6:3] */
|
||||
if (ret)
|
||||
goto err;
|
||||
|
@ -498,6 +510,8 @@ struct dvb_frontend *rtl2830_attach(const struct rtl2830_config *cfg,
|
|||
goto err;
|
||||
}
|
||||
|
||||
priv->sleeping = true;
|
||||
|
||||
return &priv->fe;
|
||||
err:
|
||||
dbg("%s: failed=%d", __func__, ret);
|
||||
|
@ -530,6 +544,7 @@ static struct dvb_frontend_ops rtl2830_ops = {
|
|||
.release = rtl2830_release,
|
||||
|
||||
.init = rtl2830_init,
|
||||
.sleep = rtl2830_sleep,
|
||||
|
||||
.get_tune_settings = rtl2830_get_tune_settings,
|
||||
|
||||
|
|
|
@ -43,6 +43,8 @@ struct rtl2830_priv {
|
|||
struct rtl2830_config cfg;
|
||||
struct i2c_adapter tuner_i2c_adapter;
|
||||
|
||||
bool sleeping;
|
||||
|
||||
u8 page; /* active register page */
|
||||
};
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче