aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb-core
diff options
context:
space:
mode:
authorAntti Palosaari <crope@iki.fi>2012-08-14 21:21:06 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2012-08-15 18:18:43 -0400
commit06bae1227aadf51d047f7a75834ed446e56ebae2 (patch)
tree0f8900b4515c07fbadab099c45fbe8342cab3fd2 /drivers/media/dvb-core
parent0898b95409489abd7219f5f7ca675c84656fb94f (diff)
[media] dvb_frontend: implement suspend / resume
Move initial suspend / resume support from dvb_usb_v2 to dvb_frontend as it is dvb general feature that could be used all dvb devices. Signed-off-by: Antti Palosaari <crope@iki.fi> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/dvb-core')
-rw-r--r--drivers/media/dvb-core/dvb_frontend.c47
-rw-r--r--drivers/media/dvb-core/dvb_frontend.h3
2 files changed, 40 insertions, 10 deletions
diff --git a/drivers/media/dvb-core/dvb_frontend.c b/drivers/media/dvb-core/dvb_frontend.c
index 5fb19eae5a82..aa4d4d85dc20 100644
--- a/drivers/media/dvb-core/dvb_frontend.c
+++ b/drivers/media/dvb-core/dvb_frontend.c
@@ -307,15 +307,6 @@ void dvb_frontend_reinitialise(struct dvb_frontend *fe)
307} 307}
308EXPORT_SYMBOL(dvb_frontend_reinitialise); 308EXPORT_SYMBOL(dvb_frontend_reinitialise);
309 309
310void dvb_frontend_retune(struct dvb_frontend *fe)
311{
312 struct dvb_frontend_private *fepriv = fe->frontend_priv;
313
314 fepriv->state = FESTATE_RETUNE;
315 dvb_frontend_wakeup(fe);
316}
317EXPORT_SYMBOL(dvb_frontend_retune);
318
319static void dvb_frontend_swzigzag_update_delay(struct dvb_frontend_private *fepriv, int locked) 310static void dvb_frontend_swzigzag_update_delay(struct dvb_frontend_private *fepriv, int locked)
320{ 311{
321 int q2; 312 int q2;
@@ -2448,6 +2439,44 @@ static const struct file_operations dvb_frontend_fops = {
2448 .llseek = noop_llseek, 2439 .llseek = noop_llseek,
2449}; 2440};
2450 2441
2442int dvb_frontend_suspend(struct dvb_frontend *fe)
2443{
2444 int ret = 0;
2445
2446 dev_dbg(fe->dvb->device, "%s: adap=%d fe=%d\n", __func__, fe->dvb->num,
2447 fe->id);
2448
2449 if (fe->ops.tuner_ops.sleep)
2450 ret = fe->ops.tuner_ops.sleep(fe);
2451
2452 if (fe->ops.sleep)
2453 ret = fe->ops.sleep(fe);
2454
2455 return ret;
2456}
2457EXPORT_SYMBOL(dvb_frontend_suspend);
2458
2459int dvb_frontend_resume(struct dvb_frontend *fe)
2460{
2461 struct dvb_frontend_private *fepriv = fe->frontend_priv;
2462 int ret = 0;
2463
2464 dev_dbg(fe->dvb->device, "%s: adap=%d fe=%d\n", __func__, fe->dvb->num,
2465 fe->id);
2466
2467 if (fe->ops.init)
2468 ret = fe->ops.init(fe);
2469
2470 if (fe->ops.tuner_ops.init)
2471 ret = fe->ops.tuner_ops.init(fe);
2472
2473 fepriv->state = FESTATE_RETUNE;
2474 dvb_frontend_wakeup(fe);
2475
2476 return ret;
2477}
2478EXPORT_SYMBOL(dvb_frontend_resume);
2479
2451int dvb_register_frontend(struct dvb_adapter* dvb, 2480int dvb_register_frontend(struct dvb_adapter* dvb,
2452 struct dvb_frontend* fe) 2481 struct dvb_frontend* fe)
2453{ 2482{
diff --git a/drivers/media/dvb-core/dvb_frontend.h b/drivers/media/dvb-core/dvb_frontend.h
index 58f6b4c16b40..db309db79bd6 100644
--- a/drivers/media/dvb-core/dvb_frontend.h
+++ b/drivers/media/dvb-core/dvb_frontend.h
@@ -418,7 +418,8 @@ extern int dvb_unregister_frontend(struct dvb_frontend *fe);
418extern void dvb_frontend_detach(struct dvb_frontend *fe); 418extern void dvb_frontend_detach(struct dvb_frontend *fe);
419 419
420extern void dvb_frontend_reinitialise(struct dvb_frontend *fe); 420extern void dvb_frontend_reinitialise(struct dvb_frontend *fe);
421extern void dvb_frontend_retune(struct dvb_frontend *fe); 421extern int dvb_frontend_suspend(struct dvb_frontend *fe);
422extern int dvb_frontend_resume(struct dvb_frontend *fe);
422 423
423extern void dvb_frontend_sleep_until(struct timeval *waketime, u32 add_usec); 424extern void dvb_frontend_sleep_until(struct timeval *waketime, u32 add_usec);
424extern s32 timeval_usec_diff(struct timeval lasttime, struct timeval curtime); 425extern s32 timeval_usec_diff(struct timeval lasttime, struct timeval curtime);