summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ec/lenovo/h8/acpi/ec.asl4
-rw-r--r--src/ec/lenovo/h8/acpi/thermal.asl69
2 files changed, 67 insertions, 6 deletions
diff --git a/src/ec/lenovo/h8/acpi/ec.asl b/src/ec/lenovo/h8/acpi/ec.asl
index 5117264e89..0ed370f292 100644
--- a/src/ec/lenovo/h8/acpi/ec.asl
+++ b/src/ec/lenovo/h8/acpi/ec.asl
@@ -39,6 +39,10 @@ Device(EC)
DKR2, 1, /* Dock register 2 */
Offset (0x2a),
EVNT, 8, /* write will trigger EC event */
+ Offset (0x2f),
+ , 6,
+ FAND, 1, /* Fan disengage */
+ FANA, 1, /* Fan automatic mode enable */
Offset (0x30),
, 6,
ALMT, 1, /* Audio Mute + LED */
diff --git a/src/ec/lenovo/h8/acpi/thermal.asl b/src/ec/lenovo/h8/acpi/thermal.asl
index d43e3c6fbd..83c966af10 100644
--- a/src/ec/lenovo/h8/acpi/thermal.asl
+++ b/src/ec/lenovo/h8/acpi/thermal.asl
@@ -11,6 +11,8 @@
* GNU General Public License for more details.
*/
+#include <arch/x86/acpi/statdef.asl>
+
Scope(\_TZ)
{
#if defined (EC_LENOVO_H8_ME_WORKAROUND)
@@ -56,20 +58,30 @@ External (\PPKG, MethodObj)
Return (\PPKG ())
}
- Method (_CRT, 0, NotSerialized) {
+ /* Get critical temperature in degree celsius */
+ Method (GCRT, 0, NotSerialized) {
Store (\TCRT, Local0)
if (LGreater (Local0, 0)) {
- Return (C2K (Local0))
+ Return (Local0)
}
- Return (C2K (127))
+ Return (127)
}
- Method (_PSV, 0, NotSerialized) {
+ /* Get passive temperature in degree celsius */
+ Method (GPSV, 0, NotSerialized) {
Store (\TPSV, Local0)
if (LGreater (Local0, 0)) {
- Return (C2K(Local0))
+ Return (Local0)
}
- Return (C2K (95))
+ Return (95)
+ }
+
+ Method (_CRT, 0, NotSerialized) {
+ Return (C2K (GCRT ()))
+ }
+
+ Method (_PSV, 0, NotSerialized) {
+ Return (C2K (GPSV ()))
}
Method(_TMP) {
@@ -82,6 +94,51 @@ External (\PPKG, MethodObj)
#endif
Return (C2K(\_SB.PCI0.LPCB.EC.TMP0))
}
+
+ Method (_AC0) {
+ Store (GPSV (), Local0)
+
+ /* Active fan 10 degree below passive threshold */
+ Subtract (Local0, 10, Local0)
+
+ If (LEqual (\_SB.PCI0.LPCB.EC.FAND, 1)) {
+ /* Turn of 5 degree below trip point */
+ Subtract (Local0, 5, Local0)
+ }
+
+ Return (C2K (Local0))
+ }
+
+ Name (_AL0, Package () { FAN })
+
+ PowerResource (FPwR, 0, 0)
+ {
+ Method (_STA) {
+ If (LEqual (\_SB.PCI0.LPCB.EC.FAND, 0)) {
+ Return (Zero)
+ } Else {
+ Return (One)
+ }
+ }
+
+ Method (_ON) {
+ Store (One, \_SB.PCI0.LPCB.EC.FAND)
+ Store (Zero, \_SB.PCI0.LPCB.EC.FANA)
+ Notify (\_TZ.THM0, NOTIFY_TZ_TRIPPTCHG)
+ }
+
+ Method (_OFF) {
+ Store (Zero, \_SB.PCI0.LPCB.EC.FAND)
+ Store (One, \_SB.PCI0.LPCB.EC.FANA)
+ Notify (\_TZ.THM0, NOTIFY_TZ_TRIPPTCHG)
+ }
+ }
+
+ Device (FAN)
+ {
+ Name (_HID, EISAID ("PNP0C0B"))
+ Name (_PR0, Package () { FPwR })
+ }
}
ThermalZone(THM1)