aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb-core
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <m.chehab@samsung.com>2014-08-09 20:47:19 -0400
committerMauro Carvalho Chehab <m.chehab@samsung.com>2014-08-21 16:25:09 -0400
commit59d7889ae49f6e3e9d9cff8c0de7ad95d9ca068b (patch)
treeba67f1e8e6825e9f7108c5a8a55e380602fa97af /drivers/media/dvb-core
parent811872404bb021b73ecb4b78de88bd2d7f26548e (diff)
[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>
Diffstat (limited to 'drivers/media/dvb-core')
-rw-r--r--drivers/media/dvb-core/dvb_frontend.c8
-rw-r--r--drivers/media/dvb-core/dvb_frontend.h2
2 files changed, 8 insertions, 2 deletions
diff --git a/drivers/media/dvb-core/dvb_frontend.c b/drivers/media/dvb-core/dvb_frontend.c
index c2a6a0a85813..a5810391af61 100644
--- a/drivers/media/dvb-core/dvb_frontend.c
+++ b/drivers/media/dvb-core/dvb_frontend.c
@@ -2550,7 +2550,9 @@ int dvb_frontend_suspend(struct dvb_frontend *fe)
2550 dev_dbg(fe->dvb->device, "%s: adap=%d fe=%d\n", __func__, fe->dvb->num, 2550 dev_dbg(fe->dvb->device, "%s: adap=%d fe=%d\n", __func__, fe->dvb->num,
2551 fe->id); 2551 fe->id);
2552 2552
2553 if (fe->ops.tuner_ops.sleep) 2553 if (fe->ops.tuner_ops.suspend)
2554 ret = fe->ops.tuner_ops.suspend(fe);
2555 else if (fe->ops.tuner_ops.sleep)
2554 ret = fe->ops.tuner_ops.sleep(fe); 2556 ret = fe->ops.tuner_ops.sleep(fe);
2555 2557
2556 if (fe->ops.sleep) 2558 if (fe->ops.sleep)
@@ -2572,7 +2574,9 @@ int dvb_frontend_resume(struct dvb_frontend *fe)
2572 if (fe->ops.init) 2574 if (fe->ops.init)
2573 ret = fe->ops.init(fe); 2575 ret = fe->ops.init(fe);
2574 2576
2575 if (fe->ops.tuner_ops.init) 2577 if (fe->ops.tuner_ops.resume)
2578 ret = fe->ops.tuner_ops.resume(fe);
2579 else if (fe->ops.tuner_ops.init)
2576 ret = fe->ops.tuner_ops.init(fe); 2580 ret = fe->ops.tuner_ops.init(fe);
2577 2581
2578 fe->exit = DVB_FE_NO_EXIT; 2582 fe->exit = DVB_FE_NO_EXIT;
diff --git a/drivers/media/dvb-core/dvb_frontend.h b/drivers/media/dvb-core/dvb_frontend.h
index d398de4b6ef4..816269e5f706 100644
--- a/drivers/media/dvb-core/dvb_frontend.h
+++ b/drivers/media/dvb-core/dvb_frontend.h
@@ -201,6 +201,8 @@ struct dvb_tuner_ops {
201 int (*release)(struct dvb_frontend *fe); 201 int (*release)(struct dvb_frontend *fe);
202 int (*init)(struct dvb_frontend *fe); 202 int (*init)(struct dvb_frontend *fe);
203 int (*sleep)(struct dvb_frontend *fe); 203 int (*sleep)(struct dvb_frontend *fe);
204 int (*suspend)(struct dvb_frontend *fe);
205 int (*resume)(struct dvb_frontend *fe);
204 206
205 /** This is for simple PLLs - set all parameters in one go. */ 207 /** This is for simple PLLs - set all parameters in one go. */
206 int (*set_params)(struct dvb_frontend *fe); 208 int (*set_params)(struct dvb_frontend *fe);