[PATCH 3/25] UBUNTU hardy-lum lpia branch sync

Steve Conklin sconklin at canonical.com
Tue Mar 10 19:27:17 UTC 2009


>From 81dc438296f77deb5c2d40b142617ebabaa23c0b Mon Sep 17 00:00:00 2001
From: Uri Shkolnik <uris at siano-ms.com>
Date: Fri, 6 Mar 2009 11:27:43 -0500
Subject: [PATCH] UBUNTU: sms1xxx: add USB suspend and hibernation support
 OriginalAuthor: Uri Shkolnik <uris at siano-ms.com>
 OriginalLocation: http://linuxtv.org/hg/v4l-dvb/rev/edd5d535a5cc

This patch provides USB suspend and hibernation support
for Siano's SMS chipset based USB device

Signed-off-by: Uri Shkolnik <uris at siano-ms.com>
Signed-off-by: Michael Krufky <mkrufky at linuxtv.org>
---
 ubuntu/media/sms1xxx/smsusb.c |   45 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 45 insertions(+), 0 deletions(-)

diff --git a/ubuntu/media/sms1xxx/smsusb.c b/ubuntu/media/sms1xxx/smsusb.c
index ff12fa1..fc79731 100644
--- a/ubuntu/media/sms1xxx/smsusb.c
+++ b/ubuntu/media/sms1xxx/smsusb.c
@@ -414,11 +414,56 @@ static void smsusb_disconnect(struct usb_interface *intf)
 	smsusb_term_device(intf);
 }
 
+static int smsusb_suspend(struct usb_interface *intf, pm_message_t msg)
+{
+	struct smsusb_device_t *dev =
+		(struct smsusb_device_t *)usb_get_intfdata(intf);
+	printk(KERN_INFO "%s  Entering status %d.\n", __func__, msg.event);
+	smsusb_stop_streaming(dev);
+	return 0;
+}
+
+static int smsusb_resume(struct usb_interface *intf)
+{
+	int rc, i;
+	struct smsusb_device_t *dev =
+		(struct smsusb_device_t *)usb_get_intfdata(intf);
+	struct usb_device *udev = interface_to_usbdev(intf);
+
+	printk(KERN_INFO "%s  Entering.\n", __func__);
+	usb_clear_halt(udev, usb_rcvbulkpipe(udev, 0x81));
+	usb_clear_halt(udev, usb_rcvbulkpipe(udev, 0x02));
+
+	for (i = 0; i < intf->cur_altsetting->desc.bNumEndpoints; i++)
+		printk(KERN_INFO "endpoint %d %02x %02x %d\n", i,
+		       intf->cur_altsetting->endpoint[i].desc.bEndpointAddress,
+		       intf->cur_altsetting->endpoint[i].desc.bmAttributes,
+		       intf->cur_altsetting->endpoint[i].desc.wMaxPacketSize);
+
+	if (intf->num_altsetting > 0) {
+		rc = usb_set_interface(udev,
+				       intf->cur_altsetting->desc.
+				       bInterfaceNumber, 0);
+		if (rc < 0) {
+			printk(KERN_INFO
+			       "%s usb_set_interface failed, rc %d\n",
+			       __func__, rc);
+			return rc;
+		}
+	}
+
+	smsusb_start_streaming(dev);
+	return 0;
+}
+
 static struct usb_driver smsusb_driver = {
 	.name			= "sms1xxx",
 	.probe			= smsusb_probe,
 	.disconnect		= smsusb_disconnect,
 	.id_table		= smsusb_id_table,
+
+	.suspend		= smsusb_suspend,
+	.resume			= smsusb_resume,
 };
 
 int smsusb_register(void)
-- 
1.5.6.3





More information about the kernel-team mailing list