diff options
author | Patrick Rudolph <siro@das-labor.org> | 2017-11-08 19:52:51 +0100 |
---|---|---|
committer | Felix Held <felix-coreboot@felixheld.de> | 2018-07-19 16:49:18 +0000 |
commit | 31fb846c59be4b24fe621b67012e57de90c75ad5 (patch) | |
tree | 81523c287b8ffcfb5db634d59aeaf9f3bdd17af6 /src/ec/lenovo | |
parent | f281b6d175905e625f481bf8b8a2b7b10d037582 (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.asl | 48 |
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) + } + } } |