aboutsummaryrefslogtreecommitdiff
path: root/src/ec/lenovo
diff options
context:
space:
mode:
authorPatrick Rudolph <siro@das-labor.org>2017-11-08 19:52:51 +0100
committerFelix Held <felix-coreboot@felixheld.de>2018-07-19 16:49:18 +0000
commit31fb846c59be4b24fe621b67012e57de90c75ad5 (patch)
tree81523c287b8ffcfb5db634d59aeaf9f3bdd17af6 /src/ec/lenovo
parentf281b6d175905e625f481bf8b8a2b7b10d037582 (diff)
ec/lenovo/h8/acpi: Apply state on wake
Implement ACPI S3 resume control to restore the state before entering sleep. * Store the requested state wake state for bluetooth and WWAN. * Add new methods to init the state and apply the requested state on wake. * Call the new method on all devices. Change-Id: I13c08b8c6b1bf0f3deb25a464b26880d8469c005 Signed-off-by: Patrick Rudolph <siro@das-labor.org> Reviewed-on: https://review.coreboot.org/22377 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Felix Held <felix-coreboot@felixheld.de>
Diffstat (limited to 'src/ec/lenovo')
-rw-r--r--src/ec/lenovo/h8/acpi/thinkpad.asl48
1 files changed, 40 insertions, 8 deletions
diff --git a/src/ec/lenovo/h8/acpi/thinkpad.asl b/src/ec/lenovo/h8/acpi/thinkpad.asl
index e67bc8f65f..8fb5716531 100644
--- a/src/ec/lenovo/h8/acpi/thinkpad.asl
+++ b/src/ec/lenovo/h8/acpi/thinkpad.asl
@@ -157,6 +157,11 @@ Device (HKEY)
Return (\_SB.PCI0.LPCB.EC.GSTS)
}
+ /* Has thinkpad_acpi module loaded */
+ Name (HAST, 0)
+
+ /* State after sleep */
+ Name (WBDC, 0)
/*
* Returns the current state:
* Bit 0: BT HW present
@@ -165,14 +170,15 @@ Device (HKEY)
*/
Method (GBDC, 0)
{
+ Store (One, HAST)
+
If (HBDC) {
Store(One, Local0)
If(\_SB.PCI0.LPCB.EC.BTEB)
{
Or(Local0, 2, Local0)
}
- /* FIXME: Implement state at resume, for now Enabled */
- Or(Local0, 4, Local0)
+ Or(Local0, ShiftLeft(WBDC, 2), Local0)
Return (Local0)
} Else {
Return (0)
@@ -186,14 +192,18 @@ Device (HKEY)
*/
Method (SBDC, 1)
{
+ Store (One, HAST)
+
If (HBDC) {
ShiftRight (And(Arg0, 2), 1, Local0)
Store (Local0, \_SB.PCI0.LPCB.EC.BTEB)
-
- /* FIXME: Store state at resume */
+ ShiftRight (And(Arg0, 4), 2, Local0)
+ Store (Local0, WBDC)
}
}
+ /* State after sleep */
+ Name (WWAN, 0)
/*
* Returns the current state:
* Bit 0: WWAN HW present
@@ -202,14 +212,15 @@ Device (HKEY)
*/
Method (GWAN, 0)
{
+ Store (One, HAST)
+
If (HWAN) {
Store(One, Local0)
If(\_SB.PCI0.LPCB.EC.WWEB)
{
Or(Local0, 2, Local0)
}
- /* FIXME: Implement state at resume, for now Enabled */
- Or(Local0, 4, Local0)
+ Or(Local0, ShiftLeft(WWAN, 2), Local0)
Return (Local0)
} Else {
Return (0)
@@ -223,11 +234,12 @@ Device (HKEY)
*/
Method (SWAN, 1)
{
+ Store (One, HAST)
+
If (HWAN) {
ShiftRight (And(Arg0, 2), 1, Local0)
Store (Local0, \_SB.PCI0.LPCB.EC.WWEB)
-
- /* FIXME: Store state at resume */
+ ShiftRight (And(Arg0, 4), 2, WWAN)
}
}
@@ -291,4 +303,24 @@ Device (HKEY)
Store (Local0, \_SB.PCI0.LPCB.EC.UWBE)
}
}
+
+ /*
+ * Store initial state
+ */
+ Method (_INI, 0, NotSerialized)
+ {
+ Store (\_SB.PCI0.LPCB.EC.BTEB, WBDC)
+ Store (\_SB.PCI0.LPCB.EC.WWEB, WWAN)
+ }
+
+ /*
+ * Called from _WAK
+ */
+ Method (WAKE, 1)
+ {
+ If (HAST) {
+ Store (WBDC, \_SB.PCI0.LPCB.EC.BTEB)
+ Store (WWAN, \_SB.PCI0.LPCB.EC.WWEB)
+ }
+ }
}