diff options
author | Antti Palosaari <crope@iki.fi> | 2012-08-14 21:21:06 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2012-08-15 18:18:43 -0400 |
commit | 06bae1227aadf51d047f7a75834ed446e56ebae2 (patch) | |
tree | 0f8900b4515c07fbadab099c45fbe8342cab3fd2 /drivers/media/dvb-core | |
parent | 0898b95409489abd7219f5f7ca675c84656fb94f (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.c | 47 | ||||
-rw-r--r-- | drivers/media/dvb-core/dvb_frontend.h | 3 |
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 | } |
308 | EXPORT_SYMBOL(dvb_frontend_reinitialise); | 308 | EXPORT_SYMBOL(dvb_frontend_reinitialise); |
309 | 309 | ||
310 | void 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 | } | ||
317 | EXPORT_SYMBOL(dvb_frontend_retune); | ||
318 | |||
319 | static void dvb_frontend_swzigzag_update_delay(struct dvb_frontend_private *fepriv, int locked) | 310 | static 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 | ||
2442 | int 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 | } | ||
2457 | EXPORT_SYMBOL(dvb_frontend_suspend); | ||
2458 | |||
2459 | int 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 | } | ||
2478 | EXPORT_SYMBOL(dvb_frontend_resume); | ||
2479 | |||
2451 | int dvb_register_frontend(struct dvb_adapter* dvb, | 2480 | int 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); | |||
418 | extern void dvb_frontend_detach(struct dvb_frontend *fe); | 418 | extern void dvb_frontend_detach(struct dvb_frontend *fe); |
419 | 419 | ||
420 | extern void dvb_frontend_reinitialise(struct dvb_frontend *fe); | 420 | extern void dvb_frontend_reinitialise(struct dvb_frontend *fe); |
421 | extern void dvb_frontend_retune(struct dvb_frontend *fe); | 421 | extern int dvb_frontend_suspend(struct dvb_frontend *fe); |
422 | extern int dvb_frontend_resume(struct dvb_frontend *fe); | ||
422 | 423 | ||
423 | extern void dvb_frontend_sleep_until(struct timeval *waketime, u32 add_usec); | 424 | extern void dvb_frontend_sleep_until(struct timeval *waketime, u32 add_usec); |
424 | extern s32 timeval_usec_diff(struct timeval lasttime, struct timeval curtime); | 425 | extern s32 timeval_usec_diff(struct timeval lasttime, struct timeval curtime); |