Commit b799de75 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab

[media] au0828: Add suspend code for DVB

The scheduled work should be cancelled during suspend.

At resume time, we need to set the frontend again. So,
add such logic to the driver.
Signed-off-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
parent fa500461
...@@ -290,6 +290,7 @@ static int au0828_suspend(struct usb_interface *interface, ...@@ -290,6 +290,7 @@ static int au0828_suspend(struct usb_interface *interface,
return 0; return 0;
au0828_rc_suspend(dev); au0828_rc_suspend(dev);
au0828_dvb_suspend(dev);
/* FIXME: should suspend also ATV/DTV */ /* FIXME: should suspend also ATV/DTV */
...@@ -309,6 +310,7 @@ static int au0828_resume(struct usb_interface *interface) ...@@ -309,6 +310,7 @@ static int au0828_resume(struct usb_interface *interface)
au0828_gpio_setup(dev); au0828_gpio_setup(dev);
au0828_rc_resume(dev); au0828_rc_resume(dev);
au0828_dvb_resume(dev);
/* FIXME: should resume also ATV/DTV */ /* FIXME: should resume also ATV/DTV */
......
...@@ -23,7 +23,6 @@ ...@@ -23,7 +23,6 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/device.h> #include <linux/device.h>
#include <linux/suspend.h>
#include <media/v4l2-common.h> #include <media/v4l2-common.h>
#include <media/tuner.h> #include <media/tuner.h>
...@@ -618,3 +617,33 @@ int au0828_dvb_register(struct au0828_dev *dev) ...@@ -618,3 +617,33 @@ int au0828_dvb_register(struct au0828_dev *dev)
return 0; return 0;
} }
void au0828_dvb_suspend(struct au0828_dev *dev)
{
struct au0828_dvb *dvb = &dev->dvb;
if (dvb && dev->urb_streaming) {
cancel_work_sync(&dev->restart_streaming);
/* Stop transport */
mutex_lock(&dvb->lock);
stop_urb_transfer(dev);
au0828_stop_transport(dev, 1);
mutex_unlock(&dvb->lock);
}
}
void au0828_dvb_resume(struct au0828_dev *dev)
{
struct au0828_dvb *dvb = &dev->dvb;
if (dvb && dev->urb_streaming) {
au0828_set_frontend(dvb->frontend);
/* Start transport */
mutex_lock(&dvb->lock);
au0828_start_transport(dev);
start_urb_transfer(dev);
mutex_unlock(&dvb->lock);
}
}
...@@ -316,6 +316,8 @@ void au0828_analog_unregister(struct au0828_dev *dev); ...@@ -316,6 +316,8 @@ void au0828_analog_unregister(struct au0828_dev *dev);
/* au0828-dvb.c */ /* au0828-dvb.c */
extern int au0828_dvb_register(struct au0828_dev *dev); extern int au0828_dvb_register(struct au0828_dev *dev);
extern void au0828_dvb_unregister(struct au0828_dev *dev); extern void au0828_dvb_unregister(struct au0828_dev *dev);
void au0828_dvb_suspend(struct au0828_dev *dev);
void au0828_dvb_resume(struct au0828_dev *dev);
/* au0828-vbi.c */ /* au0828-vbi.c */
extern struct videobuf_queue_ops au0828_vbi_qops; extern struct videobuf_queue_ops au0828_vbi_qops;
......
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