Commit 95c513ec authored by Rafael J. Wysocki's avatar Rafael J. Wysocki

ACPI: Add Time and Alarm Device (TAD) driver

Introduce a driver for the ACPI Time and Alarm Device (TAD) based on
Section 9.18 of ACPI 6.2.

This driver only supports the system wakeup capabilities of the TAD
which are mandatory.  Support for the RTC capabilities of the TAD
will be added to it in the future.

This driver is entirely sysfs-based.  It provides attributes (under
the TAD platform device) to allow user space to manage the AC and DC
wakeup timers of the TAD: set and read their values, set and check
their expire timer wake policies, check and clear their status and
check the capabilities of the TAD reported by AML.  The DC timer
attributes are only present if the TAD supports a separate DC alarm
timer.

The wakeup events handling and power management of the TAD is
expected to be taken care of by the ACPI PM domain attached to its
platform device.
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
Tested-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
parent c698ca52
ACPI Time and Alarm (TAD) device attributes.
What: /sys/bus/platform/devices/ACPI000E:00/caps
Date: March 2018
Contact: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Description:
(RO) Hexadecimal bitmask of the TAD attributes are reported by
the platform firmware (see ACPI 6.2, section 9.18.2):
BIT(0): AC wakeup implemented if set
BIT(1): DC wakeup implemented if set
BIT(2): Get/set real time features implemented if set
BIT(3): Real time accuracy in milliseconds if set
BIT(4): Correct status reported for wakeups from S4/S5 if set
BIT(5): The AC timer wakes up from S4 if set
BIT(6): The AC timer wakes up from S5 if set
BIT(7): The DC timer wakes up from S4 if set
BIT(8): The DC timer wakes up from S5 if set
The other bits are reserved.
What: /sys/bus/platform/devices/ACPI000E:00/ac_alarm
Date: March 2018
Contact: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Description:
(RW) The AC alarm timer value.
Reads return the current AC alarm timer value in seconds or
"disabled", if the AC alarm is not set to wake up the system.
Write a new AC alarm timer value in seconds or "disabled" to it
to set the AC alarm timer or to disable it, respectively.
If the AC alarm timer is set through this attribute and it
expires, it will immediately wake up the system from the S3
sleep state (and from S4/S5 too if supported) until its status
is explicitly cleared via the ac_status attribute.
What: /sys/bus/platform/devices/ACPI000E:00/ac_policy
Date: March 2018
Contact: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Description:
(RW) The AC alarm expired timer wake policy (see ACPI 6.2,
Section 9.18 for details).
Reads return the current expired timer wake delay for the AC
alarm timer or "never", if the policy is to discard AC timer
wakeups if the system is on DC power.
Write a new expired timer wake delay for the AC alarm timer in
seconds or "never" to it to set the expired timer wake delay for
the AC alarm timer or to set its expired wake policy to discard
wakeups if the system is on DC power, respectively.
What: /sys/bus/platform/devices/ACPI000E:00/ac_status
Date: March 2018
Contact: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Description:
(RW) The AC alarm status.
Reads return a hexadecimal bitmask representing the AC alarm
timer status with the following meaning of bits (see ACPI 6.2,
Section 9.18.5):
Bit(0): The timer has expired if set.
Bit(1): The timer has woken up the system from a sleep state
(S3 or S4/S5 if supported) if set.
The other bits are reserved.
Reads also cause the AC alarm timer status to be reset.
Another way to reset the the status of the AC alarm timer is to
write (the number) 0 to this file.
If the status return value indicates that the timer has expired,
it will immediately wake up the system from the S3 sleep state
(and from S4/S5 too if supported) until its status is explicitly
cleared through this attribute.
What: /sys/bus/platform/devices/ACPI000E:00/dc_alarm
Date: March 2018
Contact: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Description:
(RW,optional) The DC alarm timer value.
This attribute is only present if the TAD supports a separate
DC timer.
It is analogous to the ac_alarm attribute.
What: /sys/bus/platform/devices/ACPI000E:00/dc_policy
Date: March 2018
Contact: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Description:
(RW,optional) The DC alarm expired timer wake policy.
This attribute is only present if the TAD supports a separate
DC timer.
It is analogous to the ac_policy attribute.
What: /sys/bus/platform/devices/ACPI000E:00/dc_status
Date: March 2018
Contact: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Description:
(RW,optional) The DC alarm status.
This attribute is only present if the TAD supports a separate
DC timer.
It is analogous to the ac_status attribute.
......@@ -217,6 +217,19 @@ config ACPI_FAN
To compile this driver as a module, choose M here:
the module will be called fan.
config ACPI_TAD
tristate "ACPI Time and Alarm (TAD) Device Support"
depends on SYSFS && PM_SLEEP
help
The ACPI Time and Alarm (TAD) device is an alternative to the Real
Time Clock (RTC). Its wake timers allow the system to transition from
the S3 (or optionally S4/S5) state to S0 state after a time period
elapses. In comparison with the RTC Alarm, the TAD provides a larger
scale of flexibility in the wake timers. The time capabilities of the
TAD maintain the time of day information across platform power
transitions, and keep track of time even when the platform is turned
off.
config ACPI_DOCK
bool "Dock"
help
......
......@@ -70,6 +70,7 @@ obj-$(CONFIG_ACPI_AC) += ac.o
obj-$(CONFIG_ACPI_BUTTON) += button.o
obj-$(CONFIG_ACPI_FAN) += fan.o
obj-$(CONFIG_ACPI_VIDEO) += video.o
obj-$(CONFIG_ACPI_TAD) += acpi_tad.o
obj-$(CONFIG_ACPI_PCI_SLOT) += pci_slot.o
obj-$(CONFIG_ACPI_PROCESSOR) += processor.o
obj-$(CONFIG_ACPI) += container.o
......
This diff is collapsed.
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