• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/* SPDX-License-Identifier: GPL-2.0-only */
2
3// Thermal Zone
4
5External (\PPKG, MethodObj)
6
7#define HAVE_THERMALZONE
8Scope (\_TZ)
9{
10	ThermalZone (THRM)
11	{
12		Name (_TC1, 0x02)
13		Name (_TC2, 0x05)
14
15		// Ignore critical temps for the first few reads
16		// at boot to prevent unexpected shutdown
17		Name (IRDC, 4)
18		Name (CRDC, 0)
19
20		// Thermal zone polling frequency: 10 seconds
21		Name (_TZP, 100)
22
23		// Thermal sampling period for passive cooling: 2 seconds
24		Name (_TSP, 20)
25
26		// Convert from Degrees C to 1/10 Kelvin for ACPI
27		Method (CTOK, 1) {
28			// 10th of Degrees C
29			Local0 = Arg0 * 10
30
31			// Convert to Kelvin
32			Local0 += 2732
33
34			Return (Local0)
35		}
36
37		// Threshold for OS to shutdown
38		Method (_CRT, 0, Serialized)
39		{
40			Return (CTOK (\TCRT))
41		}
42
43		// Threshold for passive cooling
44		Method (_PSV, 0, Serialized)
45		{
46			Return (CTOK (\TPSV))
47		}
48
49		// Processors used for passive cooling
50		Method (_PSL, 0, Serialized)
51		{
52			Return (\PPKG ())
53		}
54
55		Method (_TMP, 0, Serialized)
56		{
57			// Get CPU Temperature from the Embedded Controller
58			Local0 = \_SB.PCI0.LPCB.EC0.CPUT
59
60			// Re-read from EC if the temperature is very high to
61			// avoid OS shutdown if we got a bad reading.
62			If (Local0 >= \TCRT) {
63				Local0 = \_SB.PCI0.LPCB.EC0.CPUT
64				If (Local0 >= \TCRT) {
65					// Check if this is an early read
66					If (CRDC < IRDC) {
67						Local0 = 0
68					}
69				}
70			}
71
72			// Keep track of first few reads by the OS
73			If (CRDC < IRDC) {
74				CRDC++
75			}
76
77			// Invalid reading, ensure fan is spinning
78			If (Local0 >= 0x80) {
79				Return (CTOK (\F4ON))
80			}
81
82			Return (CTOK (Local0))
83		}
84
85		Method (_AC0) {
86			If (\FLVL <= 0) {
87				Return (CTOK (\F0OF))
88			} Else {
89				Return (CTOK (\F0ON))
90			}
91		}
92
93		Method (_AC1) {
94			If (\FLVL <= 1) {
95				Return (CTOK (\F1OF))
96			} Else {
97				Return (CTOK (\F1ON))
98			}
99		}
100
101		Method (_AC2) {
102			If (\FLVL <= 2) {
103				Return (CTOK (\F2OF))
104			} Else {
105				Return (CTOK (\F2ON))
106			}
107		}
108
109		Method (_AC3) {
110			If (\FLVL <= 3) {
111				Return (CTOK (\F3OF))
112			} Else {
113				Return (CTOK (\F3ON))
114			}
115		}
116
117		Method (_AC4) {
118			If (\FLVL <= 4) {
119				Return (CTOK (\F4OF))
120			} Else {
121				Return (CTOK (\F4ON))
122			}
123		}
124
125		Name (_AL0, Package () { \_SB.PCI0.LPCB.EC0.FAN0 })
126		Name (_AL1, Package () { \_SB.PCI0.LPCB.EC0.FAN1 })
127		Name (_AL2, Package () { \_SB.PCI0.LPCB.EC0.FAN2 })
128		Name (_AL3, Package () { \_SB.PCI0.LPCB.EC0.FAN3 })
129		Name (_AL4, Package () { \_SB.PCI0.LPCB.EC0.FAN4 })
130	}
131}
132