mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-06 12:44:14 +08:00
ACPI: scan: Simplify initialization of power and sleep buttons
It should be perfectly fine to use ACPI if the "fixed" power or sleep buttons cannot be initialized. Moreover, running acpi_bus_scan() successfully on ACPI_ROOT_OBJECT generally causes many devices to be enumerated and probed, possibly including the entire PCI bus, so unregistering acpi_root if the registration of the "fixed" buttons fails is rather unhelpful. For this reason, do not fail acpi_scan_init() when acpi_bus_scan_fixed() fails and turn the latter into a void function. While at it, drop the outdated and misleading comment from acpi_bus_scan_fixed(). Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com> Reviewed-by: Hans de Goede <hdegoede@redhat.com>
This commit is contained in:
parent
b6c55b162b
commit
681e7187ae
@ -2486,42 +2486,33 @@ int acpi_bus_register_early_device(int type)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(acpi_bus_register_early_device);
|
||||
|
||||
static int acpi_bus_scan_fixed(void)
|
||||
static void acpi_bus_scan_fixed(void)
|
||||
{
|
||||
int result = 0;
|
||||
|
||||
/*
|
||||
* Enumerate all fixed-feature devices.
|
||||
*/
|
||||
if (!(acpi_gbl_FADT.flags & ACPI_FADT_POWER_BUTTON)) {
|
||||
struct acpi_device *device = NULL;
|
||||
struct acpi_device *adev = NULL;
|
||||
|
||||
result = acpi_add_single_object(&device, NULL,
|
||||
ACPI_BUS_TYPE_POWER_BUTTON, false);
|
||||
if (result)
|
||||
return result;
|
||||
|
||||
device->flags.match_driver = true;
|
||||
result = device_attach(&device->dev);
|
||||
if (result < 0)
|
||||
return result;
|
||||
|
||||
device_init_wakeup(&device->dev, true);
|
||||
acpi_add_single_object(&adev, NULL, ACPI_BUS_TYPE_POWER_BUTTON,
|
||||
false);
|
||||
if (adev) {
|
||||
adev->flags.match_driver = true;
|
||||
if (device_attach(&adev->dev) >= 0)
|
||||
device_init_wakeup(&adev->dev, true);
|
||||
else
|
||||
dev_dbg(&adev->dev, "No driver\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (!(acpi_gbl_FADT.flags & ACPI_FADT_SLEEP_BUTTON)) {
|
||||
struct acpi_device *device = NULL;
|
||||
struct acpi_device *adev = NULL;
|
||||
|
||||
result = acpi_add_single_object(&device, NULL,
|
||||
ACPI_BUS_TYPE_SLEEP_BUTTON, false);
|
||||
if (result)
|
||||
return result;
|
||||
|
||||
device->flags.match_driver = true;
|
||||
result = device_attach(&device->dev);
|
||||
acpi_add_single_object(&adev, NULL, ACPI_BUS_TYPE_SLEEP_BUTTON,
|
||||
false);
|
||||
if (adev) {
|
||||
adev->flags.match_driver = true;
|
||||
if (device_attach(&adev->dev) < 0)
|
||||
dev_dbg(&adev->dev, "No driver\n");
|
||||
}
|
||||
}
|
||||
|
||||
return result < 0 ? result : 0;
|
||||
}
|
||||
|
||||
static void __init acpi_get_spcr_uart_addr(void)
|
||||
@ -2601,15 +2592,8 @@ void __init acpi_scan_init(void)
|
||||
goto out;
|
||||
|
||||
/* Fixed feature devices do not exist on HW-reduced platform */
|
||||
if (!acpi_gbl_reduced_hardware) {
|
||||
if (acpi_bus_scan_fixed()) {
|
||||
acpi_detach_data(acpi_root->handle,
|
||||
acpi_scan_drop_device);
|
||||
acpi_device_del(acpi_root);
|
||||
acpi_bus_put_acpi_device(acpi_root);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
if (!acpi_gbl_reduced_hardware)
|
||||
acpi_bus_scan_fixed();
|
||||
|
||||
acpi_turn_off_unused_power_resources();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user