diff options
author | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2014-02-10 18:35:46 -0500 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2014-02-10 18:35:46 -0500 |
commit | 9cb32acf095e806e864c29d060dd79580fcd3d4f (patch) | |
tree | 5e60c07a4a793f9a15ffa347ba2b93f907f7d17a /include/acpi | |
parent | 2d984ad132a87ca2112f81f21039493176a8bca0 (diff) |
ACPI / scan: Add bind/unbind callbacks to struct acpi_scan_handler
In some cases it may be necessary to perform certain setup/cleanup
operations on a device object representing a physical device after
it has been associated with an ACPI companion by acpi_bind_one() or
before disassociating it from that companion by acpi_unbind_one(),
respectively. If there is a struct acpi_bus_type object for the
given device's bus type, the .setup()/.cleanup() callbacks from there
are executed for these purposes. However, an analogous mechanism will
be necessary for devices whose bus types don't have corresponding
struct acpi_bus_type objects and that have specific ACPI scan handlers.
For those devices, add new .bind() and .unbind() callbacks to struct
acpi_scan_handler that will be executed by acpi_platform_notify()
right after the given device has been associated with an ACPI
comapnion and by acpi_platform_notify_remove() right before calling
acpi_unbind_one() for that device, respectively.
To make that work for scan handlers registering new devices in their
.attach() callbacks, modify acpi_scan_attach_handler() to set the
ACPI device object's handler field before calling .attach() from the
scan handler at hand.
This changeset includes a fix from Mika Westerberg.
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'include/acpi')
-rw-r--r-- | include/acpi/acpi_bus.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h index 8256eb4ad057..c93bce469492 100644 --- a/include/acpi/acpi_bus.h +++ b/include/acpi/acpi_bus.h | |||
@@ -133,6 +133,8 @@ struct acpi_scan_handler { | |||
133 | struct list_head list_node; | 133 | struct list_head list_node; |
134 | int (*attach)(struct acpi_device *dev, const struct acpi_device_id *id); | 134 | int (*attach)(struct acpi_device *dev, const struct acpi_device_id *id); |
135 | void (*detach)(struct acpi_device *dev); | 135 | void (*detach)(struct acpi_device *dev); |
136 | void (*bind)(struct device *phys_dev); | ||
137 | void (*unbind)(struct device *phys_dev); | ||
136 | struct acpi_hotplug_profile hotplug; | 138 | struct acpi_hotplug_profile hotplug; |
137 | }; | 139 | }; |
138 | 140 | ||