From 31b2ce4af2e3cbb9913d9bd2db4362cc16387c4f Mon Sep 17 00:00:00 2001 From: Antti Palosaari Date: Mon, 11 Jun 2012 17:47:04 -0300 Subject: [PATCH] --- yaml --- r: 330608 b: refs/heads/master c: ef81e9ebbe57236683e6950d0ec82a20f2d350eb h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/media/dvb/dvb-usb/dvb_usb.h | 2 + .../drivers/media/dvb/dvb-usb/dvb_usb_init.c | 43 +++++++++++++++++++ 3 files changed, 46 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index b7cc5b016e93..5b5940c44d78 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 5b6a63cc2f11a9b00862d13104d1304e082acfe5 +refs/heads/master: ef81e9ebbe57236683e6950d0ec82a20f2d350eb diff --git a/trunk/drivers/media/dvb/dvb-usb/dvb_usb.h b/trunk/drivers/media/dvb/dvb-usb/dvb_usb.h index d0c628782f76..7e4832664f5d 100644 --- a/trunk/drivers/media/dvb/dvb-usb/dvb_usb.h +++ b/trunk/drivers/media/dvb/dvb-usb/dvb_usb.h @@ -356,6 +356,8 @@ struct dvb_usb_device { extern int dvb_usbv2_probe(struct usb_interface *, const struct usb_device_id *); extern void dvb_usbv2_disconnect(struct usb_interface *); +extern int dvb_usbv2_suspend(struct usb_interface *, pm_message_t); +extern int dvb_usbv2_resume(struct usb_interface *); /* the generic read/write method for device control */ extern int dvb_usbv2_generic_rw(struct dvb_usb_device *, u8 *, u16, u8 *, u16, diff --git a/trunk/drivers/media/dvb/dvb-usb/dvb_usb_init.c b/trunk/drivers/media/dvb/dvb-usb/dvb_usb_init.c index 976a706b4cc7..60011f56cc90 100644 --- a/trunk/drivers/media/dvb/dvb-usb/dvb_usb_init.c +++ b/trunk/drivers/media/dvb/dvb-usb/dvb_usb_init.c @@ -439,6 +439,49 @@ void dvb_usbv2_disconnect(struct usb_interface *intf) } EXPORT_SYMBOL(dvb_usbv2_disconnect); +int dvb_usbv2_suspend(struct usb_interface *intf, pm_message_t msg) +{ + struct dvb_usb_device *d = usb_get_intfdata(intf); + int i; + + pr_debug("%s:\n", __func__); + + /* stop remote controller poll */ + if (d->rc.query && !d->rc.bulk_mode) + cancel_delayed_work_sync(&d->rc_query_work); + + /* stop streaming */ + for (i = d->num_adapters_initialized - 1; i >= 0; i--) { + if (d->adapter[i].active_fe != -1) + usb_urb_killv2(&d->adapter[i].stream); + } + + return 0; +} +EXPORT_SYMBOL(dvb_usbv2_suspend); + +int dvb_usbv2_resume(struct usb_interface *intf) +{ + struct dvb_usb_device *d = usb_get_intfdata(intf); + int i; + + pr_debug("%s:\n", __func__); + + /* start streaming */ + for (i = 0; i < d->num_adapters_initialized; i++) { + if (d->adapter[i].active_fe != -1) + usb_urb_submitv2(&d->adapter[i].stream, NULL); + } + + /* start remote controller poll */ + if (d->rc.query && !d->rc.bulk_mode) + schedule_delayed_work(&d->rc_query_work, + msecs_to_jiffies(d->rc.interval)); + + return 0; +} +EXPORT_SYMBOL(dvb_usbv2_resume); + MODULE_VERSION("1.0"); MODULE_AUTHOR("Patrick Boettcher "); MODULE_DESCRIPTION("A library module containing commonly used USB and DVB function USB DVB devices");