Commit d34afa9d authored by Rafael J. Wysocki's avatar Rafael J. Wysocki

ACPI / scan: Change the meaning of missing .attach() in scan handlers

Currently, some scan handlers can be compiled out entirely, which
leaves the device objects they normally attach to without a scan
handler.  This isn't a problem as long as we don't have any default
enumeration mechanism that applies to all devices without a scan
handler.  However, if such a default enumeration is added, it still
should not be applied to devices that are normally attached to by
scan handlers, because that may result in creating "physical" device
objects of a wrong type for them.

Since we are going to create platform device objects for all ACPI
device objects with pnp.type.platform_id set by default, clear
pnp.type.platform_id where there is a matching scan handler without
an .attach() callback and otherwise simply treat that scan handler
as though the .attach() callback was present but always returned 0.

This will allow us to compile out scan handler callbacks and leave
the device ID lists used by them so as to prevent creating platform
device objects for the matching ACPI devices.
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
parent 549e6845
...@@ -84,7 +84,7 @@ EXPORT_SYMBOL_GPL(acpi_initialize_hp_context); ...@@ -84,7 +84,7 @@ EXPORT_SYMBOL_GPL(acpi_initialize_hp_context);
int acpi_scan_add_handler(struct acpi_scan_handler *handler) int acpi_scan_add_handler(struct acpi_scan_handler *handler)
{ {
if (!handler || !handler->attach) if (!handler)
return -EINVAL; return -EINVAL;
list_add_tail(&handler->list_node, &acpi_scan_handlers_list); list_add_tail(&handler->list_node, &acpi_scan_handlers_list);
...@@ -2081,6 +2081,10 @@ static int acpi_scan_attach_handler(struct acpi_device *device) ...@@ -2081,6 +2081,10 @@ static int acpi_scan_attach_handler(struct acpi_device *device)
handler = acpi_scan_match_handler(hwid->id, &devid); handler = acpi_scan_match_handler(hwid->id, &devid);
if (handler) { if (handler) {
if (!handler->attach) {
device->pnp.type.platform_id = 0;
continue;
}
device->handler = handler; device->handler = handler;
ret = handler->attach(device, devid); ret = handler->attach(device, devid);
if (ret > 0) if (ret > 0)
......
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