[RFC PATCH v2 1/6] usb: Register usb port's acpi power resources

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This patch is to register usb port's acpi power resources. Create
link between usb port device and its acpi power resource.

Signed-off-by: Lan Tianyu <tianyu.lan@xxxxxxxxx>
---
 drivers/usb/core/hub.c      |    4 ++++
 drivers/usb/core/usb-acpi.c |   22 ++++++++++++++++++++++
 drivers/usb/core/usb.h      |    6 ++++++
 3 files changed, 32 insertions(+)

diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index 55c086e..3c85fe1c 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -1241,6 +1241,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);
 }
 
@@ -1276,6 +1277,9 @@ static int usb_hub_create_port_device(struct usb_hub *hub,
 	retval = device_register(&port_dev->dev);
 	if (retval)
 		goto error_register;
+
+	usb_acpi_register_power_resources(&port_dev->dev);
+
 	return 0;
 
 error_register:
diff --git a/drivers/usb/core/usb-acpi.c b/drivers/usb/core/usb-acpi.c
index cef4252..c58ebc0 100644
--- a/drivers/usb/core/usb-acpi.c
+++ b/drivers/usb/core/usb-acpi.c
@@ -216,6 +216,28 @@ 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;
+
+	if (acpi_power_resource_register_device(dev, port_handle) < 0)
+		return -ENODEV;
+	return 0;
+}
+
+void usb_acpi_unregister_power_resources(struct device *dev)
+{
+	acpi_handle port_handle = DEVICE_ACPI_HANDLE(dev);
+
+	if (!port_handle)
+		return;
+
+	acpi_power_resource_register_device(dev, port_handle);
+}
+
 int usb_acpi_register(void)
 {
 	return register_acpi_bus_type(&usb_acpi_bus);
diff --git a/drivers/usb/core/usb.h b/drivers/usb/core/usb.h
index 1633f6e..38958fb 100644
--- a/drivers/usb/core/usb.h
+++ b/drivers/usb/core/usb.h
@@ -175,7 +175,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 usb_device *udev)
+	{ return 0; };
+static inline int usb_acpi_unregister_power_resources(struct usb_device *udev)
+	{ };
 #endif
-- 
1.7.10.4

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux