^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) .. SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) .. include:: <isonum.txt>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) =========================================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) Special Usage Model of the ACPI Control Method Lid Device
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) =========================================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) :Copyright: |copy| 2016, Intel Corporation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) :Author: Lv Zheng <lv.zheng@intel.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) Abstract
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) ========
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) Platforms containing lids convey lid state (open/close) to OSPMs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) using a control method lid device. To implement this, the AML tables issue
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) Notify(lid_device, 0x80) to notify the OSPMs whenever the lid state has
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) changed. The _LID control method for the lid device must be implemented to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) report the "current" state of the lid as either "opened" or "closed".
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) For most platforms, both the _LID method and the lid notifications are
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) reliable. However, there are exceptions. In order to work with these
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) exceptional buggy platforms, special restrictions and exceptions should be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) taken into account. This document describes the restrictions and the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) exceptions of the Linux ACPI lid device driver.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) Restrictions of the returning value of the _LID control method
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) ==============================================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) The _LID control method is described to return the "current" lid state.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) However the word of "current" has ambiguity, some buggy AML tables return
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) the lid state upon the last lid notification instead of returning the lid
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) state upon the last _LID evaluation. There won't be difference when the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) _LID control method is evaluated during the runtime, the problem is its
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) initial returning value. When the AML tables implement this control method
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) with cached value, the initial returning value is likely not reliable.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) There are platforms always retun "closed" as initial lid state.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) Restrictions of the lid state change notifications
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) ==================================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) There are buggy AML tables never notifying when the lid device state is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) changed to "opened". Thus the "opened" notification is not guaranteed. But
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) it is guaranteed that the AML tables always notify "closed" when the lid
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) state is changed to "closed". The "closed" notification is normally used to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) trigger some system power saving operations on Windows. Since it is fully
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) tested, it is reliable from all AML tables.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) Exceptions for the userspace users of the ACPI lid device driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) ================================================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) The ACPI button driver exports the lid state to the userspace via the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) following file::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) /proc/acpi/button/lid/LID0/state
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) This file actually calls the _LID control method described above. And given
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) the previous explanation, it is not reliable enough on some platforms. So
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) it is advised for the userspace program to not to solely rely on this file
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) to determine the actual lid state.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) The ACPI button driver emits the following input event to the userspace:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) * SW_LID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) The ACPI lid device driver is implemented to try to deliver the platform
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) triggered events to the userspace. However, given the fact that the buggy
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) firmware cannot make sure "opened"/"closed" events are paired, the ACPI
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) button driver uses the following 3 modes in order not to trigger issues.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) If the userspace hasn't been prepared to ignore the unreliable "opened"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) events and the unreliable initial state notification, Linux users can use
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) the following kernel parameters to handle the possible issues:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) A. button.lid_init_state=method:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) When this option is specified, the ACPI button driver reports the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) initial lid state using the returning value of the _LID control method
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) and whether the "opened"/"closed" events are paired fully relies on the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) firmware implementation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) This option can be used to fix some platforms where the returning value
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) of the _LID control method is reliable but the initial lid state
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) notification is missing.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) This option is the default behavior during the period the userspace
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) isn't ready to handle the buggy AML tables.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) B. button.lid_init_state=open:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) When this option is specified, the ACPI button driver always reports the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) initial lid state as "opened" and whether the "opened"/"closed" events
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) are paired fully relies on the firmware implementation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) This may fix some platforms where the returning value of the _LID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) control method is not reliable and the initial lid state notification is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) missing.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) If the userspace has been prepared to ignore the unreliable "opened" events
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) and the unreliable initial state notification, Linux users should always
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) use the following kernel parameter:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) C. button.lid_init_state=ignore:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) When this option is specified, the ACPI button driver never reports the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) initial lid state and there is a compensation mechanism implemented to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) ensure that the reliable "closed" notifications can always be delivered
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) to the userspace by always pairing "closed" input events with complement
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) "opened" input events. But there is still no guarantee that the "opened"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) notifications can be delivered to the userspace when the lid is actually
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) opens given that some AML tables do not send "opened" notifications
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) reliably.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) In this mode, if everything is correctly implemented by the platform
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) firmware, the old userspace programs should still work. Otherwise, the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) new userspace programs are required to work with the ACPI button driver.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) This option will be the default behavior after the userspace is ready to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) handle the buggy AML tables.