|
Jesse Keating |
2f82dda |
commit 7d0d20a25c6f477fb198b85510c78156d7d7c5af
|
|
Jesse Keating |
2f82dda |
Author: Matthew Garrett <mjg@redhat.com>
|
|
Jesse Keating |
2f82dda |
Date: Tue Jun 9 20:11:47 2009 +0100
|
|
Jesse Keating |
2f82dda |
|
|
Jesse Keating |
2f82dda |
usb: Allow drivers to enable USB autosuspend on a per-device basis
|
|
Jesse Keating |
2f82dda |
|
|
Jesse Keating |
2f82dda |
USB autosuspend is currently only enabled by default for hubs. On other
|
|
Jesse Keating |
2f82dda |
hardware the decision is made by userspace. This is unnecessary in cases
|
|
Jesse Keating |
2f82dda |
where we know that the hardware supports autosuspend, so this patch adds
|
|
Jesse Keating |
2f82dda |
a function to allow drivers to enable it at probe time.
|
|
Jesse Keating |
2f82dda |
|
|
Jesse Keating |
2f82dda |
Signed-off-by: Matthew Garrett <mjg@redhat.com>
|
|
Jesse Keating |
2f82dda |
|
|
Jesse Keating |
2f82dda |
diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
|
|
Jesse Keating |
2f82dda |
index 4f86447..f7caf00 100644
|
|
Jesse Keating |
2f82dda |
--- a/drivers/usb/core/driver.c
|
|
Jesse Keating |
2f82dda |
+++ b/drivers/usb/core/driver.c
|
|
Jesse Keating |
2f82dda |
@@ -1575,6 +1575,22 @@ void usb_autopm_put_interface_async(struct usb_interface *intf)
|
|
Jesse Keating |
2f82dda |
EXPORT_SYMBOL_GPL(usb_autopm_put_interface_async);
|
|
Jesse Keating |
2f82dda |
|
|
Jesse Keating |
2f82dda |
/**
|
|
Jesse Keating |
2f82dda |
+ * usb_device_autosuspend_enable - enable autosuspend on a device
|
|
Jesse Keating |
2f82dda |
+ * @udev: the usb_device to be autosuspended
|
|
Jesse Keating |
2f82dda |
+ *
|
|
Jesse Keating |
2f82dda |
+ * This routine should be called by an interface driver when it knows that
|
|
Jesse Keating |
2f82dda |
+ * the device in question supports USB autosuspend.
|
|
Jesse Keating |
2f82dda |
+ *
|
|
Jesse Keating |
2f82dda |
+ */
|
|
Jesse Keating |
2f82dda |
+void usb_device_autosuspend_enable(struct usb_device *udev)
|
|
Jesse Keating |
2f82dda |
+{
|
|
Jesse Keating |
2f82dda |
+ udev->autosuspend_disabled = 0;
|
|
Jesse Keating |
2f82dda |
+ udev->autoresume_disabled = 0;
|
|
Jesse Keating |
2f82dda |
+ usb_external_suspend_device(udev, PMSG_USER_SUSPEND);
|
|
Jesse Keating |
2f82dda |
+}
|
|
Jesse Keating |
2f82dda |
+EXPORT_SYMBOL_GPL(usb_device_autosuspend_enable);
|
|
Jesse Keating |
2f82dda |
+
|
|
Jesse Keating |
2f82dda |
+/**
|
|
Jesse Keating |
2f82dda |
* usb_autopm_get_interface - increment a USB interface's PM-usage counter
|
|
Jesse Keating |
2f82dda |
* @intf: the usb_interface whose counter should be incremented
|
|
Jesse Keating |
2f82dda |
*
|
|
Jesse Keating |
2f82dda |
diff --git a/include/linux/usb.h b/include/linux/usb.h
|
|
Jesse Keating |
2f82dda |
index a34fa89..0c22c64 100644
|
|
Jesse Keating |
2f82dda |
--- a/include/linux/usb.h
|
|
Jesse Keating |
2f82dda |
+++ b/include/linux/usb.h
|
|
Jesse Keating |
2f82dda |
@@ -543,6 +543,7 @@ extern struct usb_device *usb_find_device(u16 vendor_id, u16 product_id);
|
|
Jesse Keating |
2f82dda |
|
|
Jesse Keating |
2f82dda |
/* USB autosuspend and autoresume */
|
|
Jesse Keating |
2f82dda |
#ifdef CONFIG_USB_SUSPEND
|
|
Jesse Keating |
2f82dda |
+extern void usb_device_autosuspend_enable(struct usb_device *udev);
|
|
Jesse Keating |
2f82dda |
extern int usb_autopm_set_interface(struct usb_interface *intf);
|
|
Jesse Keating |
2f82dda |
extern int usb_autopm_get_interface(struct usb_interface *intf);
|
|
Jesse Keating |
2f82dda |
extern void usb_autopm_put_interface(struct usb_interface *intf);
|
|
Jesse Keating |
2f82dda |
@@ -568,6 +569,9 @@ static inline void usb_mark_last_busy(struct usb_device *udev)
|
|
Jesse Keating |
2f82dda |
|
|
Jesse Keating |
2f82dda |
#else
|
|
Jesse Keating |
2f82dda |
|
|
Jesse Keating |
2f82dda |
+static inline void usb_device_autosuspend_enable(struct usb_device *udev)
|
|
Jesse Keating |
2f82dda |
+{ }
|
|
Jesse Keating |
2f82dda |
+
|
|
Jesse Keating |
2f82dda |
static inline int usb_autopm_set_interface(struct usb_interface *intf)
|
|
Jesse Keating |
2f82dda |
{ return 0; }
|
|
Jesse Keating |
2f82dda |
|