mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 04:18:39 +08:00
ACPI / sysfs: Use new GPE masking mechanism in GPE interface
Now GPE can be masked via the new acpi_mask_gpe() API and this patch modifies /sys/firmware/acpi/interrupts/gpexx to use this new facility. Writes "mask/unmask" to this file now invokes acpi_mask_gpe(). Reads from this file now returns new "EN/STS" when the corresponding GPE hardware register's EN/STS bits are flagged, and new "masked/unmasked" attribute to indicate the status of the masking mechanism. Signed-off-by: Lv Zheng <lv.zheng@intel.com> [ rjw: Subject ] Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
6bd483c036
commit
18864cc489
@ -572,7 +572,7 @@ static int acpi_suspend_enter(suspend_state_t pm_state)
|
||||
|
||||
acpi_get_event_status(ACPI_EVENT_POWER_BUTTON, &pwr_btn_status);
|
||||
|
||||
if (pwr_btn_status & ACPI_EVENT_FLAG_SET) {
|
||||
if (pwr_btn_status & ACPI_EVENT_FLAG_STATUS_SET) {
|
||||
acpi_clear_event(ACPI_EVENT_POWER_BUTTON);
|
||||
/* Flag for later */
|
||||
pwr_btn_event_pending = true;
|
||||
|
@ -597,14 +597,27 @@ static ssize_t counter_show(struct kobject *kobj,
|
||||
if (result)
|
||||
goto end;
|
||||
|
||||
if (!(status & ACPI_EVENT_FLAG_HAS_HANDLER))
|
||||
size += sprintf(buf + size, " invalid");
|
||||
else if (status & ACPI_EVENT_FLAG_ENABLED)
|
||||
size += sprintf(buf + size, " enabled");
|
||||
else if (status & ACPI_EVENT_FLAG_WAKE_ENABLED)
|
||||
size += sprintf(buf + size, " wake_enabled");
|
||||
if (status & ACPI_EVENT_FLAG_ENABLE_SET)
|
||||
size += sprintf(buf + size, " EN");
|
||||
else
|
||||
size += sprintf(buf + size, " disabled");
|
||||
size += sprintf(buf + size, " ");
|
||||
if (status & ACPI_EVENT_FLAG_STATUS_SET)
|
||||
size += sprintf(buf + size, " STS");
|
||||
else
|
||||
size += sprintf(buf + size, " ");
|
||||
|
||||
if (!(status & ACPI_EVENT_FLAG_HAS_HANDLER))
|
||||
size += sprintf(buf + size, " invalid ");
|
||||
else if (status & ACPI_EVENT_FLAG_ENABLED)
|
||||
size += sprintf(buf + size, " enabled ");
|
||||
else if (status & ACPI_EVENT_FLAG_WAKE_ENABLED)
|
||||
size += sprintf(buf + size, " wake_enabled");
|
||||
else
|
||||
size += sprintf(buf + size, " disabled ");
|
||||
if (status & ACPI_EVENT_FLAG_MASKED)
|
||||
size += sprintf(buf + size, " masked ");
|
||||
else
|
||||
size += sprintf(buf + size, " unmasked");
|
||||
|
||||
end:
|
||||
size += sprintf(buf + size, "\n");
|
||||
@ -655,8 +668,12 @@ static ssize_t counter_set(struct kobject *kobj,
|
||||
!(status & ACPI_EVENT_FLAG_ENABLED))
|
||||
result = acpi_enable_gpe(handle, index);
|
||||
else if (!strcmp(buf, "clear\n") &&
|
||||
(status & ACPI_EVENT_FLAG_SET))
|
||||
(status & ACPI_EVENT_FLAG_STATUS_SET))
|
||||
result = acpi_clear_gpe(handle, index);
|
||||
else if (!strcmp(buf, "mask\n"))
|
||||
result = acpi_mask_gpe(handle, index, TRUE);
|
||||
else if (!strcmp(buf, "unmask\n"))
|
||||
result = acpi_mask_gpe(handle, index, FALSE);
|
||||
else if (!kstrtoul(buf, 0, &tmp))
|
||||
all_counters[index].count = tmp;
|
||||
else
|
||||
@ -664,13 +681,13 @@ static ssize_t counter_set(struct kobject *kobj,
|
||||
} else if (index < num_gpes + ACPI_NUM_FIXED_EVENTS) {
|
||||
int event = index - num_gpes;
|
||||
if (!strcmp(buf, "disable\n") &&
|
||||
(status & ACPI_EVENT_FLAG_ENABLED))
|
||||
(status & ACPI_EVENT_FLAG_ENABLE_SET))
|
||||
result = acpi_disable_event(event, ACPI_NOT_ISR);
|
||||
else if (!strcmp(buf, "enable\n") &&
|
||||
!(status & ACPI_EVENT_FLAG_ENABLED))
|
||||
!(status & ACPI_EVENT_FLAG_ENABLE_SET))
|
||||
result = acpi_enable_event(event, ACPI_NOT_ISR);
|
||||
else if (!strcmp(buf, "clear\n") &&
|
||||
(status & ACPI_EVENT_FLAG_SET))
|
||||
(status & ACPI_EVENT_FLAG_STATUS_SET))
|
||||
result = acpi_clear_event(event);
|
||||
else if (!kstrtoul(buf, 0, &tmp))
|
||||
all_counters[index].count = tmp;
|
||||
|
Loading…
Reference in New Issue
Block a user