This patch adds the implementation of the PM functions resume and suspend.

Signed-off-by: Christian Gromm <christian.gr...@microchip.com>
---
 drivers/staging/most/usb/usb.c | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/drivers/staging/most/usb/usb.c b/drivers/staging/most/usb/usb.c
index b31a49c..daa5e4b 100644
--- a/drivers/staging/most/usb/usb.c
+++ b/drivers/staging/most/usb/usb.c
@@ -1221,11 +1221,39 @@ static void hdm_disconnect(struct usb_interface 
*interface)
        put_device(&mdev->dev);
 }
 
+static int hdm_suspend(struct usb_interface *interface, pm_message_t message)
+{
+       struct most_dev *mdev = usb_get_intfdata(interface);
+       int i;
+
+       mutex_lock(&mdev->io_mutex);
+       for (i = 0; i < mdev->iface.num_channels; i++) {
+               most_stop_enqueue(&mdev->iface, i);
+               usb_kill_anchored_urbs(&mdev->busy_urbs[i]);
+       }
+       mutex_unlock(&mdev->io_mutex);
+       return 0;
+}
+
+static int hdm_resume(struct usb_interface *interface)
+{
+       struct most_dev *mdev = usb_get_intfdata(interface);
+       int i;
+
+       mutex_lock(&mdev->io_mutex);
+       for (i = 0; i < mdev->iface.num_channels; i++)
+               most_resume_enqueue(&mdev->iface, i);
+       mutex_unlock(&mdev->io_mutex);
+       return 0;
+}
+
 static struct usb_driver hdm_usb = {
        .name = "hdm_usb",
        .id_table = usbid,
        .probe = hdm_probe,
        .disconnect = hdm_disconnect,
+       .resume = hdm_resume,
+       .suspend = hdm_suspend,
 };
 
 module_usb_driver(hdm_usb);
-- 
2.7.4

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to