{
struct usb_port *port_dev = to_usb_port(dev);
+ usb_acpi_unregister_power_resources(dev);
kfree(port_dev);
}
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:
.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);
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