Commit e48b2a68 authored by Antti Palosaari's avatar Antti Palosaari Committed by Mauro Carvalho Chehab

[media] dvb_usb_v2: frontend switching changes

Some error checking changes and refactoring.
Signed-off-by: default avatarAntti Palosaari <crope@iki.fi>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent e80e9af3
...@@ -68,12 +68,9 @@ static int dvb_usb_ctrl_feed(struct dvb_demux_feed *dvbdmxfeed, int onoff) ...@@ -68,12 +68,9 @@ static int dvb_usb_ctrl_feed(struct dvb_demux_feed *dvbdmxfeed, int onoff)
struct dvb_usb_adapter *adap = dvbdmxfeed->demux->priv; struct dvb_usb_adapter *adap = dvbdmxfeed->demux->priv;
int newfeedcount, ret; int newfeedcount, ret;
if (adap == NULL) if (adap == NULL || adap->active_fe < 0) {
return -ENODEV; ret = -ENODEV;
goto err;
if ((adap->active_fe < 0) ||
(adap->active_fe >= adap->num_frontends_initialized)) {
return -EINVAL;
} }
newfeedcount = adap->feedcount + (onoff ? 1 : -1); newfeedcount = adap->feedcount + (onoff ? 1 : -1);
...@@ -168,6 +165,9 @@ static int dvb_usb_ctrl_feed(struct dvb_demux_feed *dvbdmxfeed, int onoff) ...@@ -168,6 +165,9 @@ static int dvb_usb_ctrl_feed(struct dvb_demux_feed *dvbdmxfeed, int onoff)
} }
return 0; return 0;
err:
pr_debug("%s: failed=%d\n", __func__, ret);
return ret;
} }
static int dvb_usb_start_feed(struct dvb_demux_feed *dvbdmxfeed) static int dvb_usb_start_feed(struct dvb_demux_feed *dvbdmxfeed)
...@@ -264,47 +264,62 @@ int dvb_usb_adapter_dvb_exit(struct dvb_usb_adapter *adap) ...@@ -264,47 +264,62 @@ int dvb_usb_adapter_dvb_exit(struct dvb_usb_adapter *adap)
return 0; return 0;
} }
static int dvb_usb_set_active_fe(struct dvb_frontend *fe, int onoff) static int dvb_usb_fe_wakeup(struct dvb_frontend *fe)
{ {
int ret;
struct dvb_usb_adapter *adap = fe->dvb->priv; struct dvb_usb_adapter *adap = fe->dvb->priv;
int ret = (adap->props.frontend_ctrl) ? ret = dvb_usb_device_power_ctrl(adap->dev, 1);
adap->props.frontend_ctrl(fe, onoff) : 0; if (ret < 0)
goto err;
if (ret < 0) { if (adap->props.frontend_ctrl) {
err("frontend_ctrl request failed"); ret = adap->props.frontend_ctrl(fe, 1);
return ret; if (ret < 0)
goto err;
} }
if (onoff)
adap->active_fe = fe->id;
return 0;
}
static int dvb_usb_fe_wakeup(struct dvb_frontend *fe)
{
struct dvb_usb_adapter *adap = fe->dvb->priv;
dvb_usb_device_power_ctrl(adap->dev, 1);
dvb_usb_set_active_fe(fe, 1); if (adap->fe_init[fe->id]) {
ret = adap->fe_init[fe->id](fe);
if (ret < 0)
goto err;
}
if (adap->fe_init[fe->id]) adap->active_fe = fe->id;
adap->fe_init[fe->id](fe);
return 0; return 0;
err:
pr_debug("%s: failed=%d\n", __func__, ret);
return ret;
} }
static int dvb_usb_fe_sleep(struct dvb_frontend *fe) static int dvb_usb_fe_sleep(struct dvb_frontend *fe)
{ {
int ret;
struct dvb_usb_adapter *adap = fe->dvb->priv; struct dvb_usb_adapter *adap = fe->dvb->priv;
if (adap->fe_sleep[fe->id]) if (adap->fe_sleep[fe->id]) {
adap->fe_sleep[fe->id](fe); ret = adap->fe_sleep[fe->id](fe);
if (ret < 0)
goto err;
}
dvb_usb_set_active_fe(fe, 0); if (adap->props.frontend_ctrl) {
ret = adap->props.frontend_ctrl(fe, 0);
if (ret < 0)
goto err;
}
return dvb_usb_device_power_ctrl(adap->dev, 0); ret = dvb_usb_device_power_ctrl(adap->dev, 0);
if (ret < 0)
goto err;
adap->active_fe = -1;
return 0;
err:
pr_debug("%s: failed=%d\n", __func__, ret);
return ret;
} }
int dvb_usb_adapter_frontend_init(struct dvb_usb_adapter *adap) int dvb_usb_adapter_frontend_init(struct dvb_usb_adapter *adap)
...@@ -312,8 +327,7 @@ int dvb_usb_adapter_frontend_init(struct dvb_usb_adapter *adap) ...@@ -312,8 +327,7 @@ int dvb_usb_adapter_frontend_init(struct dvb_usb_adapter *adap)
int ret, i; int ret, i;
memset(adap->fe, 0, sizeof(adap->fe)); memset(adap->fe, 0, sizeof(adap->fe));
adap->active_fe = -1;
adap->active_fe = 0;
if (adap->props.frontend_attach == NULL) { if (adap->props.frontend_attach == NULL) {
err("strange: '%s' doesn't want to attach a frontend.", err("strange: '%s' doesn't want to attach a frontend.",
......
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