USB / PM: Drop CONFIG_PM_RUNTIME from the USB core
After commit b2b49ccbdd (PM: Kconfig: Set PM_RUNTIME if PM_SLEEP is
selected) PM_RUNTIME is always set if PM is set, so quite a few
depend on CONFIG_PM (or even dropped in some cases).
Replace CONFIG_PM_RUNTIME with CONFIG_PM in the USB core code
and documentation.
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
	
	
This commit is contained in:
		
					parent
					
						
							
								6ed23b806e
							
						
					
				
			
			
				commit
				
					
						ceb6c9c862
					
				
			
		
					 19 changed files with 68 additions and 111 deletions
				
			
		| 
						 | 
				
			
			@ -32,10 +32,9 @@ Date:		January 2008
 | 
			
		|||
KernelVersion:	2.6.25
 | 
			
		||||
Contact:	Sarah Sharp <sarah.a.sharp@intel.com>
 | 
			
		||||
Description:
 | 
			
		||||
		If CONFIG_PM_RUNTIME is enabled then this file
 | 
			
		||||
		is present.  When read, it returns the total time (in msec)
 | 
			
		||||
		that the USB device has been connected to the machine.  This
 | 
			
		||||
		file is read-only.
 | 
			
		||||
		If CONFIG_PM is enabled, then this file is present.  When read,
 | 
			
		||||
		it returns the total time (in msec) that the USB device has been
 | 
			
		||||
		connected to the machine.  This file is read-only.
 | 
			
		||||
Users:
 | 
			
		||||
		PowerTOP <powertop@lists.01.org>
 | 
			
		||||
		https://01.org/powertop/
 | 
			
		||||
| 
						 | 
				
			
			@ -45,10 +44,9 @@ Date:		January 2008
 | 
			
		|||
KernelVersion:	2.6.25
 | 
			
		||||
Contact:	Sarah Sharp <sarah.a.sharp@intel.com>
 | 
			
		||||
Description:
 | 
			
		||||
		If CONFIG_PM_RUNTIME is enabled then this file
 | 
			
		||||
		is present.  When read, it returns the total time (in msec)
 | 
			
		||||
		that the USB device has been active, i.e. not in a suspended
 | 
			
		||||
		state.  This file is read-only.
 | 
			
		||||
		If CONFIG_PM is enabled, then this file is present.  When read,
 | 
			
		||||
		it returns the total time (in msec) that the USB device has been
 | 
			
		||||
		active, i.e. not in a suspended state.  This file is read-only.
 | 
			
		||||
 | 
			
		||||
		Tools can use this file and the connected_duration file to
 | 
			
		||||
		compute the percentage of time that a device has been active.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -104,16 +104,15 @@ What:		/sys/bus/usb/devices/.../power/usb2_hardware_lpm
 | 
			
		|||
Date:		September 2011
 | 
			
		||||
Contact:	Andiry Xu <andiry.xu@amd.com>
 | 
			
		||||
Description:
 | 
			
		||||
		If CONFIG_PM_RUNTIME is set and a USB 2.0 lpm-capable device
 | 
			
		||||
		is plugged in to a xHCI host which support link PM, it will
 | 
			
		||||
		perform a LPM test; if the test is passed and host supports
 | 
			
		||||
		USB2 hardware LPM (xHCI 1.0 feature), USB2 hardware LPM will
 | 
			
		||||
		be enabled for the device and the USB device directory will
 | 
			
		||||
		contain a file named power/usb2_hardware_lpm.  The file holds
 | 
			
		||||
		a string value (enable or disable) indicating whether or not
 | 
			
		||||
		USB2 hardware LPM is enabled for the device. Developer can
 | 
			
		||||
		write y/Y/1 or n/N/0 to the file to enable/disable the
 | 
			
		||||
		feature.
 | 
			
		||||
		If CONFIG_PM is set and a USB 2.0 lpm-capable device is plugged
 | 
			
		||||
		in to a xHCI host which support link PM, it will perform a LPM
 | 
			
		||||
		test; if the test is passed and host supports USB2 hardware LPM
 | 
			
		||||
		(xHCI 1.0 feature), USB2 hardware LPM will be enabled for the
 | 
			
		||||
		device and the USB device directory will contain a file named
 | 
			
		||||
		power/usb2_hardware_lpm.  The file holds a string value (enable
 | 
			
		||||
		or disable) indicating whether or not USB2 hardware LPM is
 | 
			
		||||
		enabled for the device. Developer can write y/Y/1 or n/N/0 to
 | 
			
		||||
		the file to enable/disable the feature.
 | 
			
		||||
 | 
			
		||||
What:		/sys/bus/usb/devices/.../removable
 | 
			
		||||
Date:		February 2012
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,14 +47,15 @@ dynamic PM is implemented in the USB subsystem, although system PM is
 | 
			
		|||
covered to some extent (see Documentation/power/*.txt for more
 | 
			
		||||
information about system PM).
 | 
			
		||||
 | 
			
		||||
Note: Dynamic PM support for USB is present only if the kernel was
 | 
			
		||||
built with CONFIG_USB_SUSPEND enabled (which depends on
 | 
			
		||||
CONFIG_PM_RUNTIME).  System PM support is present only if the kernel
 | 
			
		||||
was built with CONFIG_SUSPEND or CONFIG_HIBERNATION enabled.
 | 
			
		||||
System PM support is present only if the kernel was built with CONFIG_SUSPEND
 | 
			
		||||
or CONFIG_HIBERNATION enabled.  Dynamic PM support for USB is present whenever
 | 
			
		||||
the kernel was built with CONFIG_PM enabled.
 | 
			
		||||
 | 
			
		||||
(Starting with the 3.10 kernel release, dynamic PM support for USB is
 | 
			
		||||
present whenever the kernel was built with CONFIG_PM_RUNTIME enabled.
 | 
			
		||||
The CONFIG_USB_SUSPEND option has been eliminated.)
 | 
			
		||||
[Historically, dynamic PM support for USB was present only if the
 | 
			
		||||
kernel had been built with CONFIG_USB_SUSPEND enabled (which depended on
 | 
			
		||||
CONFIG_PM_RUNTIME).  Starting with the 3.10 kernel release, dynamic PM support
 | 
			
		||||
for USB was present whenever the kernel was built with CONFIG_PM_RUNTIME
 | 
			
		||||
enabled.  The CONFIG_USB_SUSPEND option had been eliminated.]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	What is Remote Wakeup?
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1493,10 +1493,6 @@ int usb_resume(struct device *dev, pm_message_t msg)
 | 
			
		|||
	return status;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* CONFIG_PM */
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_PM_RUNTIME
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * usb_enable_autosuspend - allow a USB device to be autosuspended
 | 
			
		||||
 * @udev: the USB device which may be autosuspended
 | 
			
		||||
| 
						 | 
				
			
			@ -1876,7 +1872,7 @@ int usb_set_usb2_hardware_lpm(struct usb_device *udev, int enable)
 | 
			
		|||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* CONFIG_PM_RUNTIME */
 | 
			
		||||
#endif /* CONFIG_PM */
 | 
			
		||||
 | 
			
		||||
struct bus_type usb_bus_type = {
 | 
			
		||||
	.name =		"usb",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -429,7 +429,6 @@ static int check_root_hub_suspended(struct device *dev)
 | 
			
		|||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if defined(CONFIG_PM_SLEEP) || defined(CONFIG_PM_RUNTIME)
 | 
			
		||||
static int suspend_common(struct device *dev, bool do_wakeup)
 | 
			
		||||
{
 | 
			
		||||
	struct pci_dev		*pci_dev = to_pci_dev(dev);
 | 
			
		||||
| 
						 | 
				
			
			@ -528,7 +527,6 @@ static int resume_common(struct device *dev, int event)
 | 
			
		|||
	}
 | 
			
		||||
	return retval;
 | 
			
		||||
}
 | 
			
		||||
#endif	/* SLEEP || RUNTIME */
 | 
			
		||||
 | 
			
		||||
#ifdef	CONFIG_PM_SLEEP
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -607,8 +605,6 @@ static int hcd_pci_restore(struct device *dev)
 | 
			
		|||
 | 
			
		||||
#endif	/* CONFIG_PM_SLEEP */
 | 
			
		||||
 | 
			
		||||
#ifdef	CONFIG_PM_RUNTIME
 | 
			
		||||
 | 
			
		||||
static int hcd_pci_runtime_suspend(struct device *dev)
 | 
			
		||||
{
 | 
			
		||||
	int	retval;
 | 
			
		||||
| 
						 | 
				
			
			@ -630,13 +626,6 @@ static int hcd_pci_runtime_resume(struct device *dev)
 | 
			
		|||
	return retval;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
#define hcd_pci_runtime_suspend	NULL
 | 
			
		||||
#define hcd_pci_runtime_resume	NULL
 | 
			
		||||
 | 
			
		||||
#endif	/* CONFIG_PM_RUNTIME */
 | 
			
		||||
 | 
			
		||||
const struct dev_pm_ops usb_hcd_pci_pm_ops = {
 | 
			
		||||
	.suspend	= hcd_pci_suspend,
 | 
			
		||||
	.suspend_noirq	= hcd_pci_suspend_noirq,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2258,10 +2258,6 @@ int hcd_bus_resume(struct usb_device *rhdev, pm_message_t msg)
 | 
			
		|||
	return status;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif	/* CONFIG_PM */
 | 
			
		||||
 | 
			
		||||
#ifdef	CONFIG_PM_RUNTIME
 | 
			
		||||
 | 
			
		||||
/* Workqueue routine for root-hub remote wakeup */
 | 
			
		||||
static void hcd_resume_work(struct work_struct *work)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -2293,7 +2289,7 @@ void usb_hcd_resume_root_hub (struct usb_hcd *hcd)
 | 
			
		|||
}
 | 
			
		||||
EXPORT_SYMBOL_GPL(usb_hcd_resume_root_hub);
 | 
			
		||||
 | 
			
		||||
#endif	/* CONFIG_PM_RUNTIME */
 | 
			
		||||
#endif	/* CONFIG_PM */
 | 
			
		||||
 | 
			
		||||
/*-------------------------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2476,7 +2472,7 @@ struct usb_hcd *usb_create_shared_hcd(const struct hc_driver *driver,
 | 
			
		|||
	init_timer(&hcd->rh_timer);
 | 
			
		||||
	hcd->rh_timer.function = rh_timer_func;
 | 
			
		||||
	hcd->rh_timer.data = (unsigned long) hcd;
 | 
			
		||||
#ifdef CONFIG_PM_RUNTIME
 | 
			
		||||
#ifdef CONFIG_PM
 | 
			
		||||
	INIT_WORK(&hcd->wakeup_work, hcd_resume_work);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2790,7 +2786,7 @@ error_create_attr_group:
 | 
			
		|||
	hcd->rh_registered = 0;
 | 
			
		||||
	spin_unlock_irq(&hcd_root_hub_lock);
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_PM_RUNTIME
 | 
			
		||||
#ifdef CONFIG_PM
 | 
			
		||||
	cancel_work_sync(&hcd->wakeup_work);
 | 
			
		||||
#endif
 | 
			
		||||
	mutex_lock(&usb_bus_list_lock);
 | 
			
		||||
| 
						 | 
				
			
			@ -2858,7 +2854,7 @@ void usb_remove_hcd(struct usb_hcd *hcd)
 | 
			
		|||
	hcd->rh_registered = 0;
 | 
			
		||||
	spin_unlock_irq (&hcd_root_hub_lock);
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_PM_RUNTIME
 | 
			
		||||
#ifdef CONFIG_PM
 | 
			
		||||
	cancel_work_sync(&hcd->wakeup_work);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1737,7 +1737,7 @@ static int hub_probe(struct usb_interface *intf, const struct usb_device_id *id)
 | 
			
		|||
	 * - If user has indicated to prevent autosuspend by passing
 | 
			
		||||
	 *   usbcore.autosuspend = -1 then keep autosuspend disabled.
 | 
			
		||||
	 */
 | 
			
		||||
#ifdef CONFIG_PM_RUNTIME
 | 
			
		||||
#ifdef CONFIG_PM
 | 
			
		||||
	if (hdev->dev.power.autosuspend_delay >= 0)
 | 
			
		||||
		pm_runtime_set_autosuspend_delay(&hdev->dev, 0);
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -3449,7 +3449,7 @@ int usb_port_resume(struct usb_device *udev, pm_message_t msg)
 | 
			
		|||
	return status;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef	CONFIG_PM_RUNTIME
 | 
			
		||||
#ifdef	CONFIG_PM
 | 
			
		||||
 | 
			
		||||
int usb_remote_wakeup(struct usb_device *udev)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -4856,7 +4856,7 @@ static void hub_port_connect_change(struct usb_hub *hub, int port1,
 | 
			
		|||
			udev->state != USB_STATE_NOTATTACHED) {
 | 
			
		||||
		if (portstatus & USB_PORT_STAT_ENABLE) {
 | 
			
		||||
			status = 0;		/* Nothing to do */
 | 
			
		||||
#ifdef CONFIG_PM_RUNTIME
 | 
			
		||||
#ifdef CONFIG_PM
 | 
			
		||||
		} else if (udev->state == USB_STATE_SUSPENDED &&
 | 
			
		||||
				udev->persist_enabled) {
 | 
			
		||||
			/* For a suspended device, treat this as a
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -72,7 +72,7 @@ static void usb_port_device_release(struct device *dev)
 | 
			
		|||
	kfree(port_dev);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_PM_RUNTIME
 | 
			
		||||
#ifdef CONFIG_PM
 | 
			
		||||
static int usb_port_runtime_resume(struct device *dev)
 | 
			
		||||
{
 | 
			
		||||
	struct usb_port *port_dev = to_usb_port(dev);
 | 
			
		||||
| 
						 | 
				
			
			@ -171,7 +171,7 @@ static int usb_port_runtime_suspend(struct device *dev)
 | 
			
		|||
#endif
 | 
			
		||||
 | 
			
		||||
static const struct dev_pm_ops usb_port_pm_ops = {
 | 
			
		||||
#ifdef CONFIG_PM_RUNTIME
 | 
			
		||||
#ifdef CONFIG_PM
 | 
			
		||||
	.runtime_suspend =	usb_port_runtime_suspend,
 | 
			
		||||
	.runtime_resume =	usb_port_runtime_resume,
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -334,14 +334,6 @@ static void remove_persist_attributes(struct device *dev)
 | 
			
		|||
			&dev_attr_persist.attr,
 | 
			
		||||
			power_group_name);
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
#define add_persist_attributes(dev)	0
 | 
			
		||||
#define remove_persist_attributes(dev)	do {} while (0)
 | 
			
		||||
 | 
			
		||||
#endif	/* CONFIG_PM */
 | 
			
		||||
 | 
			
		||||
#ifdef	CONFIG_PM_RUNTIME
 | 
			
		||||
 | 
			
		||||
static ssize_t connected_duration_show(struct device *dev,
 | 
			
		||||
				       struct device_attribute *attr, char *buf)
 | 
			
		||||
| 
						 | 
				
			
			@ -585,10 +577,13 @@ static void remove_power_attributes(struct device *dev)
 | 
			
		|||
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
#define add_persist_attributes(dev)	0
 | 
			
		||||
#define remove_persist_attributes(dev)	do {} while (0)
 | 
			
		||||
 | 
			
		||||
#define add_power_attributes(dev)	0
 | 
			
		||||
#define remove_power_attributes(dev)	do {} while (0)
 | 
			
		||||
 | 
			
		||||
#endif	/* CONFIG_PM_RUNTIME */
 | 
			
		||||
#endif	/* CONFIG_PM */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Descriptor fields */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -49,7 +49,7 @@ const char *usbcore_name = "usbcore";
 | 
			
		|||
 | 
			
		||||
static bool nousb;	/* Disable USB when built into kernel image */
 | 
			
		||||
 | 
			
		||||
#ifdef	CONFIG_PM_RUNTIME
 | 
			
		||||
#ifdef	CONFIG_PM
 | 
			
		||||
static int usb_autosuspend_delay = 2;		/* Default delay value,
 | 
			
		||||
						 * in seconds */
 | 
			
		||||
module_param_named(autosuspend, usb_autosuspend_delay, int, 0644);
 | 
			
		||||
| 
						 | 
				
			
			@ -348,11 +348,9 @@ static const struct dev_pm_ops usb_device_pm_ops = {
 | 
			
		|||
	.thaw =		usb_dev_thaw,
 | 
			
		||||
	.poweroff =	usb_dev_poweroff,
 | 
			
		||||
	.restore =	usb_dev_restore,
 | 
			
		||||
#ifdef CONFIG_PM_RUNTIME
 | 
			
		||||
	.runtime_suspend =	usb_runtime_suspend,
 | 
			
		||||
	.runtime_resume =	usb_runtime_resume,
 | 
			
		||||
	.runtime_idle =		usb_runtime_idle,
 | 
			
		||||
#endif
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif	/* CONFIG_PM */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -75,6 +75,14 @@ extern int usb_resume_complete(struct device *dev);
 | 
			
		|||
extern int usb_port_suspend(struct usb_device *dev, pm_message_t msg);
 | 
			
		||||
extern int usb_port_resume(struct usb_device *dev, pm_message_t msg);
 | 
			
		||||
 | 
			
		||||
extern void usb_autosuspend_device(struct usb_device *udev);
 | 
			
		||||
extern int usb_autoresume_device(struct usb_device *udev);
 | 
			
		||||
extern int usb_remote_wakeup(struct usb_device *dev);
 | 
			
		||||
extern int usb_runtime_suspend(struct device *dev);
 | 
			
		||||
extern int usb_runtime_resume(struct device *dev);
 | 
			
		||||
extern int usb_runtime_idle(struct device *dev);
 | 
			
		||||
extern int usb_set_usb2_hardware_lpm(struct usb_device *udev, int enable);
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
static inline int usb_port_suspend(struct usb_device *udev, pm_message_t msg)
 | 
			
		||||
| 
						 | 
				
			
			@ -87,20 +95,6 @@ static inline int usb_port_resume(struct usb_device *udev, pm_message_t msg)
 | 
			
		|||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_PM_RUNTIME
 | 
			
		||||
 | 
			
		||||
extern void usb_autosuspend_device(struct usb_device *udev);
 | 
			
		||||
extern int usb_autoresume_device(struct usb_device *udev);
 | 
			
		||||
extern int usb_remote_wakeup(struct usb_device *dev);
 | 
			
		||||
extern int usb_runtime_suspend(struct device *dev);
 | 
			
		||||
extern int usb_runtime_resume(struct device *dev);
 | 
			
		||||
extern int usb_runtime_idle(struct device *dev);
 | 
			
		||||
extern int usb_set_usb2_hardware_lpm(struct usb_device *udev, int enable);
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
#define usb_autosuspend_device(udev)		do {} while (0)
 | 
			
		||||
static inline int usb_autoresume_device(struct usb_device *udev)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -111,6 +105,7 @@ static inline int usb_set_usb2_hardware_lpm(struct usb_device *udev, int enable)
 | 
			
		|||
{
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
extern struct bus_type usb_bus_type;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -305,7 +305,7 @@ static int ehci_pci_setup(struct usb_hcd *hcd)
 | 
			
		|||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#ifdef	CONFIG_PM_RUNTIME
 | 
			
		||||
#ifdef	CONFIG_PM
 | 
			
		||||
	if (ehci->no_selective_suspend && device_can_wakeup(&pdev->dev))
 | 
			
		||||
		ehci_warn(ehci, "selective suspend/wakeup unavailable\n");
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,7 +22,7 @@
 | 
			
		|||
 * and usb-storage.
 | 
			
		||||
 *
 | 
			
		||||
 * TODO:
 | 
			
		||||
 * - usb suspend/resume triggered by sl811 (with PM_RUNTIME)
 | 
			
		||||
 * - usb suspend/resume triggered by sl811
 | 
			
		||||
 * - various issues noted in the code
 | 
			
		||||
 * - performance work; use both register banks; ...
 | 
			
		||||
 * - use urb->iso_frame_desc[] with ISO transfers
 | 
			
		||||
| 
						 | 
				
			
			@ -1752,8 +1752,7 @@ sl811h_probe(struct platform_device *dev)
 | 
			
		|||
#ifdef	CONFIG_PM
 | 
			
		||||
 | 
			
		||||
/* for this device there's no useful distinction between the controller
 | 
			
		||||
 * and its root hub, except that the root hub only gets direct PM calls
 | 
			
		||||
 * when CONFIG_PM_RUNTIME is enabled.
 | 
			
		||||
 * and its root hub.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3144,8 +3144,7 @@ static int u132_probe(struct platform_device *pdev)
 | 
			
		|||
#ifdef CONFIG_PM
 | 
			
		||||
/*
 | 
			
		||||
 * for this device there's no useful distinction between the controller
 | 
			
		||||
 * and its root hub, except that the root hub only gets direct PM calls
 | 
			
		||||
 * when CONFIG_PM_RUNTIME is enabled.
 | 
			
		||||
 * and its root hub.
 | 
			
		||||
 */
 | 
			
		||||
static int u132_suspend(struct platform_device *pdev, pm_message_t state)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1146,7 +1146,7 @@ int xhci_bus_suspend(struct usb_hcd *hcd)
 | 
			
		|||
			set_bit(port_index, &bus_state->bus_suspended);
 | 
			
		||||
		}
 | 
			
		||||
		/* USB core sets remote wake mask for USB 3.0 hubs,
 | 
			
		||||
		 * including the USB 3.0 roothub, but only if CONFIG_PM_RUNTIME
 | 
			
		||||
		 * including the USB 3.0 roothub, but only if CONFIG_PM
 | 
			
		||||
		 * is enabled, so also enable remote wake here.
 | 
			
		||||
		 */
 | 
			
		||||
		if (hcd->self.root_hub->do_remote_wakeup
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4024,7 +4024,7 @@ static int __maybe_unused xhci_change_max_exit_latency(struct xhci_hcd *xhci,
 | 
			
		|||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_PM_RUNTIME
 | 
			
		||||
#ifdef CONFIG_PM
 | 
			
		||||
 | 
			
		||||
/* BESL to HIRD Encoding array for USB2 LPM */
 | 
			
		||||
static int xhci_besl_encoding[16] = {125, 150, 200, 300, 400, 500, 1000, 2000,
 | 
			
		||||
| 
						 | 
				
			
			@ -4239,24 +4239,8 @@ int xhci_update_device(struct usb_hcd *hcd, struct usb_device *udev)
 | 
			
		|||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
int xhci_set_usb2_hardware_lpm(struct usb_hcd *hcd,
 | 
			
		||||
				struct usb_device *udev, int enable)
 | 
			
		||||
{
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int xhci_update_device(struct usb_hcd *hcd, struct usb_device *udev)
 | 
			
		||||
{
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* CONFIG_PM_RUNTIME */
 | 
			
		||||
 | 
			
		||||
/*---------------------- USB 3.0 Link PM functions ------------------------*/
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_PM
 | 
			
		||||
/* Service interval in nanoseconds = 2^(bInterval - 1) * 125us * 1000ns / 1us */
 | 
			
		||||
static unsigned long long xhci_service_interval_to_ns(
 | 
			
		||||
		struct usb_endpoint_descriptor *desc)
 | 
			
		||||
| 
						 | 
				
			
			@ -4687,6 +4671,17 @@ int xhci_disable_usb3_lpm_timeout(struct usb_hcd *hcd,
 | 
			
		|||
}
 | 
			
		||||
#else /* CONFIG_PM */
 | 
			
		||||
 | 
			
		||||
int xhci_set_usb2_hardware_lpm(struct usb_hcd *hcd,
 | 
			
		||||
				struct usb_device *udev, int enable)
 | 
			
		||||
{
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int xhci_update_device(struct usb_hcd *hcd, struct usb_device *udev)
 | 
			
		||||
{
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int xhci_enable_usb3_lpm_timeout(struct usb_hcd *hcd,
 | 
			
		||||
			struct usb_device *udev, enum usb3_link_state state)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1761,7 +1761,7 @@ static int msm_otg_remove(struct platform_device *pdev)
 | 
			
		|||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_PM_RUNTIME
 | 
			
		||||
#ifdef CONFIG_PM
 | 
			
		||||
static int msm_otg_runtime_idle(struct device *dev)
 | 
			
		||||
{
 | 
			
		||||
	struct msm_otg *motg = dev_get_drvdata(dev);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -637,7 +637,7 @@ static inline bool usb_acpi_power_manageable(struct usb_device *hdev, int index)
 | 
			
		|||
#endif
 | 
			
		||||
 | 
			
		||||
/* USB autosuspend and autoresume */
 | 
			
		||||
#ifdef CONFIG_PM_RUNTIME
 | 
			
		||||
#ifdef CONFIG_PM
 | 
			
		||||
extern void usb_enable_autosuspend(struct usb_device *udev);
 | 
			
		||||
extern void usb_disable_autosuspend(struct usb_device *udev);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -93,7 +93,7 @@ struct usb_hcd {
 | 
			
		|||
 | 
			
		||||
	struct timer_list	rh_timer;	/* drives root-hub polling */
 | 
			
		||||
	struct urb		*status_urb;	/* the current status urb */
 | 
			
		||||
#ifdef CONFIG_PM_RUNTIME
 | 
			
		||||
#ifdef CONFIG_PM
 | 
			
		||||
	struct work_struct	wakeup_work;	/* for remote wakeup */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -625,16 +625,13 @@ extern int usb_find_interface_driver(struct usb_device *dev,
 | 
			
		|||
extern void usb_root_hub_lost_power(struct usb_device *rhdev);
 | 
			
		||||
extern int hcd_bus_suspend(struct usb_device *rhdev, pm_message_t msg);
 | 
			
		||||
extern int hcd_bus_resume(struct usb_device *rhdev, pm_message_t msg);
 | 
			
		||||
#endif /* CONFIG_PM */
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_PM_RUNTIME
 | 
			
		||||
extern void usb_hcd_resume_root_hub(struct usb_hcd *hcd);
 | 
			
		||||
#else
 | 
			
		||||
static inline void usb_hcd_resume_root_hub(struct usb_hcd *hcd)
 | 
			
		||||
{
 | 
			
		||||
	return;
 | 
			
		||||
}
 | 
			
		||||
#endif /* CONFIG_PM_RUNTIME */
 | 
			
		||||
#endif /* CONFIG_PM */
 | 
			
		||||
 | 
			
		||||
/*-------------------------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue