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
@ -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…
Reference in New Issue
Block a user