mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 22:51:42 +00:00
[media] dvb-frontend: add core support for tuner suspend/resume
While several tuners have some sort of suspend/resume implementation, this is currently mangled with an optional .sleep callback that it is also used to put the device on low power mode. Not all drivers implement it, as returning the driver from low power may require to re-load the firmware, with takes some time. Also, some drivers may delay it. So, the more coherent is to add two new optional callbacks that will let the tuners to directy implement suspend and resume callbacks if they need. Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
This commit is contained in:
parent
811872404b
commit
59d7889ae4
@ -2550,7 +2550,9 @@ int dvb_frontend_suspend(struct dvb_frontend *fe)
|
||||
dev_dbg(fe->dvb->device, "%s: adap=%d fe=%d\n", __func__, fe->dvb->num,
|
||||
fe->id);
|
||||
|
||||
if (fe->ops.tuner_ops.sleep)
|
||||
if (fe->ops.tuner_ops.suspend)
|
||||
ret = fe->ops.tuner_ops.suspend(fe);
|
||||
else if (fe->ops.tuner_ops.sleep)
|
||||
ret = fe->ops.tuner_ops.sleep(fe);
|
||||
|
||||
if (fe->ops.sleep)
|
||||
@ -2572,7 +2574,9 @@ int dvb_frontend_resume(struct dvb_frontend *fe)
|
||||
if (fe->ops.init)
|
||||
ret = fe->ops.init(fe);
|
||||
|
||||
if (fe->ops.tuner_ops.init)
|
||||
if (fe->ops.tuner_ops.resume)
|
||||
ret = fe->ops.tuner_ops.resume(fe);
|
||||
else if (fe->ops.tuner_ops.init)
|
||||
ret = fe->ops.tuner_ops.init(fe);
|
||||
|
||||
fe->exit = DVB_FE_NO_EXIT;
|
||||
|
@ -201,6 +201,8 @@ struct dvb_tuner_ops {
|
||||
int (*release)(struct dvb_frontend *fe);
|
||||
int (*init)(struct dvb_frontend *fe);
|
||||
int (*sleep)(struct dvb_frontend *fe);
|
||||
int (*suspend)(struct dvb_frontend *fe);
|
||||
int (*resume)(struct dvb_frontend *fe);
|
||||
|
||||
/** This is for simple PLLs - set all parameters in one go. */
|
||||
int (*set_params)(struct dvb_frontend *fe);
|
||||
|
@ -1260,7 +1260,9 @@ static int tuner_suspend(struct device *dev)
|
||||
|
||||
tuner_dbg("suspend\n");
|
||||
|
||||
if (!t->standby && analog_ops->standby)
|
||||
if (t->fe.ops.tuner_ops.suspend)
|
||||
t->fe.ops.tuner_ops.suspend(&t->fe);
|
||||
else if (!t->standby && analog_ops->standby)
|
||||
analog_ops->standby(&t->fe);
|
||||
|
||||
return 0;
|
||||
@ -1273,7 +1275,9 @@ static int tuner_resume(struct device *dev)
|
||||
|
||||
tuner_dbg("resume\n");
|
||||
|
||||
if (!t->standby)
|
||||
if (t->fe.ops.tuner_ops.resume)
|
||||
t->fe.ops.tuner_ops.resume(&t->fe);
|
||||
else if (!t->standby)
|
||||
if (set_mode(t, t->mode) == 0)
|
||||
set_freq(t, 0);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user