Lines Matching +full:wakeup +full:- +full:method

1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * button.c - ACPI Button Driver
54 [ACPI_BUTTON_LID_INIT_METHOD] = "method",
75 /* GP-electronic T701, _LID method points to a floating GPIO */
143 DMI_MATCH(DMI_PRODUCT_NAME, "Blade Pro 17 (Early 2020) - RZ09-0329"),
177 .name = "acpi-button",
198 static long lid_init_state = -1;
215 return -ENODEV; in acpi_lid_evaluate_state()
222 struct acpi_device *device = button->adev; in acpi_lid_notify_state()
234 button->last_state != state; in acpi_lid_notify_state()
235 next_report = ktime_add(button->last_time, in acpi_lid_notify_state()
237 if (button->last_state == state && in acpi_lid_notify_state()
279 input_report_switch(button->input, in acpi_lid_notify_state()
281 input_sync(button->input); in acpi_lid_notify_state()
287 acpi_handle_debug(device->handle, "ACPI LID %s\n", in acpi_lid_notify_state()
289 input_report_switch(button->input, SW_LID, !state); in acpi_lid_notify_state()
290 input_sync(button->input); in acpi_lid_notify_state()
291 button->last_state = state; in acpi_lid_notify_state()
292 button->last_time = ktime_get(); in acpi_lid_notify_state()
299 struct acpi_button *button = seq->private; in acpi_button_state_seq_show()
302 state = acpi_lid_evaluate_state(button->adev->handle); in acpi_button_state_seq_show()
310 struct acpi_device *device = button->adev; in acpi_lid_add_fs()
315 return -EEXIST; in acpi_lid_add_fs()
321 return -ENODEV; in acpi_lid_add_fs()
351 return -ENODEV; in acpi_lid_add_fs()
357 struct acpi_device *device = button->adev; in acpi_lid_remove_fs()
388 saved_lid_handle = adev->handle; in acpi_lid_save()
395 if (saved_lid_handle == adev->handle) in acpi_lid_forget()
405 return -ENODEV; in acpi_lid_open()
415 state = acpi_lid_evaluate_state(button->adev->handle); in acpi_lid_update_state()
420 acpi_pm_wakeup_event(button->dev); in acpi_lid_update_state()
439 button->lid_state_initialized = true; in acpi_lid_initialize_state()
445 struct acpi_device *device = button->adev; in acpi_lid_notify()
448 acpi_handle_debug(device->handle, "Unsupported event [0x%x]\n", in acpi_lid_notify()
453 if (!button->lid_state_initialized) in acpi_lid_notify()
462 struct acpi_device *device = button->adev; in acpi_button_notify()
472 acpi_handle_debug(device->handle, "Unsupported event [0x%x]\n", in acpi_button_notify()
477 acpi_pm_wakeup_event(button->dev); in acpi_button_notify()
479 if (button->suspended || event == ACPI_BUTTON_NOTIFY_WAKE) in acpi_button_notify()
482 input = button->input; in acpi_button_notify()
483 keycode = test_bit(KEY_SLEEP, input->keybit) ? KEY_SLEEP : KEY_POWER; in acpi_button_notify()
490 acpi_bus_generate_netlink_event(button->class, dev_name(&device->dev), in acpi_button_notify()
491 event, ++button->pushed); in acpi_button_notify()
510 button->suspended = true; in acpi_button_suspend()
519 button->suspended = false; in acpi_button_resume()
520 if (button->type == ACPI_BUTTON_TYPE_LID) { in acpi_button_resume()
521 button->last_state = !!acpi_lid_evaluate_state(ACPI_HANDLE(dev)); in acpi_button_resume()
522 button->last_time = ktime_get(); in acpi_button_resume()
526 if (button->type == ACPI_BUTTON_TYPE_POWER) { in acpi_button_resume()
527 input = button->input; in acpi_button_resume()
541 button->last_state = !!acpi_lid_evaluate_state(button->adev->handle); in acpi_lid_input_open()
542 button->last_time = ktime_get(); in acpi_lid_input_open()
550 if (button->type == ACPI_BUTTON_TYPE_LID) in acpi_button_notify_handler()
570 struct acpi_device *adev = button->adev; in acpi_button_remove_event_handler()
572 switch (adev->device_type) { in acpi_button_remove_event_handler()
584 if (button->gpe_enabled) { in acpi_button_remove_event_handler()
585 dev_dbg(button->dev, "Disabling ACPI GPE%02llx\n", in acpi_button_remove_event_handler()
586 adev->wakeup.gpe_number); in acpi_button_remove_event_handler()
587 acpi_disable_gpe(adev->wakeup.gpe_device, in acpi_button_remove_event_handler()
588 adev->wakeup.gpe_number); in acpi_button_remove_event_handler()
590 acpi_remove_notify_handler(adev->handle, ACPI_ALL_NOTIFY, in acpi_button_remove_event_handler()
604 return -ENODEV; in acpi_button_add_fixed_event_handler()
611 struct acpi_device *adev = button->adev; in acpi_button_add_event_handler()
614 if (adev->device_type == ACPI_BUS_TYPE_POWER_BUTTON) in acpi_button_add_event_handler()
618 if (adev->device_type == ACPI_BUS_TYPE_SLEEP_BUTTON) in acpi_button_add_event_handler()
622 status = acpi_install_notify_handler(adev->handle, ACPI_ALL_NOTIFY, in acpi_button_add_event_handler()
626 return -ENODEV; in acpi_button_add_event_handler()
628 if (!adev->wakeup.flags.valid) in acpi_button_add_event_handler()
632 * If the wakeup GPE has a handler method, enable it in case it is also in acpi_button_add_event_handler()
635 status = acpi_enable_gpe_cond(adev->wakeup.gpe_device, in acpi_button_add_event_handler()
636 adev->wakeup.gpe_number, in acpi_button_add_event_handler()
638 button->gpe_enabled = ACPI_SUCCESS(status); in acpi_button_add_event_handler()
639 if (button->gpe_enabled) in acpi_button_add_event_handler()
640 dev_dbg(button->dev, "Enabled ACPI GPE%02llx\n", in acpi_button_add_event_handler()
641 adev->wakeup.gpe_number); in acpi_button_add_event_handler()
661 struct device *dev = &pdev->dev; in acpi_button_probe()
670 if (!id || strcmp(acpi_device_hid(device), id->id)) in acpi_button_probe()
671 return dev_err_probe(dev, -ENODEV, "Unsupported device\n"); in acpi_button_probe()
673 button_type = id->driver_data; in acpi_button_probe()
676 return -ENODEV; in acpi_button_probe()
680 return -ENOMEM; in acpi_button_probe()
684 button->dev = dev; in acpi_button_probe()
685 button->adev = device; in acpi_button_probe()
688 return -ENOMEM; in acpi_button_probe()
690 button->input = input; in acpi_button_probe()
691 button->type = button_type; in acpi_button_probe()
695 button->class = ACPI_BUTTON_CLASS_LID; in acpi_button_probe()
697 input->name = ACPI_BUTTON_DEVICE_NAME_LID; in acpi_button_probe()
699 input->open = acpi_lid_input_open; in acpi_button_probe()
708 button->class = ACPI_BUTTON_CLASS_POWER; in acpi_button_probe()
710 input->name = ACPI_BUTTON_DEVICE_NAME_POWER; in acpi_button_probe()
716 button->class = ACPI_BUTTON_CLASS_SLEEP; in acpi_button_probe()
718 input->name = ACPI_BUTTON_DEVICE_NAME_SLEEP; in acpi_button_probe()
723 return dev_err_probe(dev, -ENODEV, "Unrecognized button type\n"); in acpi_button_probe()
726 snprintf(button->phys, sizeof(button->phys), "%s/button/input0", in acpi_button_probe()
729 input->phys = button->phys; in acpi_button_probe()
730 input->id.bustype = BUS_HOST; in acpi_button_probe()
731 input->id.product = button_type; in acpi_button_probe()
754 pr_info("%s [%s]\n", input->name, acpi_device_bid(device)); in acpi_button_probe()
763 if (button->type == ACPI_BUTTON_TYPE_LID) in acpi_button_remove()
764 acpi_lid_forget(button->adev); in acpi_button_remove()
791 buf[c - 1] = '\n'; /* Replace the final space with a newline */ in param_get_lid_init_state()
805 if (lid_init_state == -1) { in acpi_button_init()
808 lid_init_state = (long)dmi_id->driver_data; in acpi_button_init()
816 * capable kernels booted in non-ACPI mode if the return value of in acpi_button_init()