Commit 88bb965e authored by Lan Tianyu's avatar Lan Tianyu Committed by Greg Kroah-Hartman

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: default avatarAlan Stern <stern@rowland.harvard.edu>
Signed-off-by: default avatarLan Tianyu <tianyu.lan@intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 8eae0fb7
...@@ -66,6 +66,7 @@ static void usb_port_device_release(struct device *dev) ...@@ -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) ...@@ -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 = { ...@@ -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); ...@@ -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
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment