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); | 	struct usb_port *port_dev = to_usb_port(dev); | ||||||
| 
 | 
 | ||||||
|  | 	usb_acpi_unregister_power_resources(dev); | ||||||
| 	kfree(port_dev); | 	kfree(port_dev); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -95,6 +96,10 @@ int usb_hub_create_port_device(struct usb_hub *hub, int port1) | ||||||
| 	if (retval) | 	if (retval) | ||||||
| 		goto error_register; | 		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; | 	return 0; | ||||||
| 
 | 
 | ||||||
| error_register: | error_register: | ||||||
|  |  | ||||||
|  | @ -216,6 +216,24 @@ static struct acpi_bus_type usb_acpi_bus = { | ||||||
| 	.find_device = usb_acpi_find_device, | 	.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) | int usb_acpi_register(void) | ||||||
| { | { | ||||||
| 	return register_acpi_bus_type(&usb_acpi_bus); | 	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 void usb_acpi_unregister(void); | ||||||
| extern acpi_handle usb_get_hub_port_acpi_handle(struct usb_device *hdev, | extern acpi_handle usb_get_hub_port_acpi_handle(struct usb_device *hdev, | ||||||
| 	int port1); | 	int port1); | ||||||
|  | extern int usb_acpi_register_power_resources(struct device *dev); | ||||||
|  | extern void usb_acpi_unregister_power_resources(struct device *dev); | ||||||
| #else | #else | ||||||
| static inline int usb_acpi_register(void) { return 0; }; | static inline int usb_acpi_register(void) { return 0; }; | ||||||
| static inline void usb_acpi_unregister(void) { }; | 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 | #endif | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Lan Tianyu
				Lan Tianyu