mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	usb: Register usb port's acpi power resources
This patch is to register usb port's acpi power resources. Create link between usb port device and its acpi power resource. Acked-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Lan Tianyu <tianyu.lan@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
		
							parent
							
								
									8eae0fb7ef
								
							
						
					
					
						commit
						88bb965ed7
					
				
					 3 changed files with 29 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -66,6 +66,7 @@ static void usb_port_device_release(struct device *dev)
 | 
			
		|||
{
 | 
			
		||||
	struct usb_port *port_dev = to_usb_port(dev);
 | 
			
		||||
 | 
			
		||||
	usb_acpi_unregister_power_resources(dev);
 | 
			
		||||
	kfree(port_dev);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -95,6 +96,10 @@ int usb_hub_create_port_device(struct usb_hub *hub, int port1)
 | 
			
		|||
	if (retval)
 | 
			
		||||
		goto error_register;
 | 
			
		||||
 | 
			
		||||
	retval = usb_acpi_register_power_resources(&port_dev->dev);
 | 
			
		||||
	if (retval && retval != -ENODEV)
 | 
			
		||||
		dev_warn(&port_dev->dev, "the port can't register its ACPI power resource.\n");
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
 | 
			
		||||
error_register:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -216,6 +216,24 @@ static struct acpi_bus_type usb_acpi_bus = {
 | 
			
		|||
	.find_device = usb_acpi_find_device,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
int usb_acpi_register_power_resources(struct device *dev)
 | 
			
		||||
{
 | 
			
		||||
	acpi_handle port_handle = DEVICE_ACPI_HANDLE(dev);
 | 
			
		||||
 | 
			
		||||
	if (!port_handle)
 | 
			
		||||
		return -ENODEV;
 | 
			
		||||
 | 
			
		||||
	return acpi_power_resource_register_device(dev, port_handle);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void usb_acpi_unregister_power_resources(struct device *dev)
 | 
			
		||||
{
 | 
			
		||||
	acpi_handle port_handle = DEVICE_ACPI_HANDLE(dev);
 | 
			
		||||
 | 
			
		||||
	if (port_handle)
 | 
			
		||||
		acpi_power_resource_unregister_device(dev, port_handle);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int usb_acpi_register(void)
 | 
			
		||||
{
 | 
			
		||||
	return register_acpi_bus_type(&usb_acpi_bus);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -191,7 +191,13 @@ extern int usb_acpi_register(void);
 | 
			
		|||
extern void usb_acpi_unregister(void);
 | 
			
		||||
extern acpi_handle usb_get_hub_port_acpi_handle(struct usb_device *hdev,
 | 
			
		||||
	int port1);
 | 
			
		||||
extern int usb_acpi_register_power_resources(struct device *dev);
 | 
			
		||||
extern void usb_acpi_unregister_power_resources(struct device *dev);
 | 
			
		||||
#else
 | 
			
		||||
static inline int usb_acpi_register(void) { return 0; };
 | 
			
		||||
static inline void usb_acpi_unregister(void) { };
 | 
			
		||||
static inline int usb_acpi_register_power_resources(struct device *dev)
 | 
			
		||||
	{ return 0; };
 | 
			
		||||
static inline void usb_acpi_unregister_power_resources(struct device *dev)
 | 
			
		||||
	{ };
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue