blob: df174d3092e139b71439381110fb3ef718e7c989 [file] [log] [blame]
Angel Ponsfeedf232020-04-05 13:22:01 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Stefan Reinauer49428d82013-02-21 15:48:37 -08002
3// Thermal Zone
4
Arthur Heymans04008a92018-11-28 12:13:54 +01005External (\PPKG, MethodObj)
6
Martin Rotha50b1f92018-05-06 18:13:19 -05007#define HAVE_THERMALZONE
Stefan Reinauer49428d82013-02-21 15:48:37 -08008Scope (\_TZ)
9{
10 ThermalZone (CRIT)
11 {
12 // Thermal zone polling frequency: 5 seconds
13 Name (_TZP, 50)
14
15 // Convert from Degrees C to 1/10 Kelvin for ACPI
16 Method (CTOK, 1) {
17 // 10th of Degrees C
Elyes HAOUAS527690c2020-10-08 09:33:16 +020018 Local0 = Arg0 * 10
Stefan Reinauer49428d82013-02-21 15:48:37 -080019
20 // Convert to Kelvin
Elyes HAOUAS527690c2020-10-08 09:33:16 +020021 Local0 += 2732
Stefan Reinauer49428d82013-02-21 15:48:37 -080022
23 Return (Local0)
24 }
25
26 // Threshold for OS to shutdown
27 Method (_CRT, 0, Serialized)
28 {
29 Return (CTOK (\TCRT))
30 }
31
32 Method (_TMP, 0, Serialized)
33 {
34 // Get CPU Temperature from TIN9/PECI via EC
Elyes HAOUAS527690c2020-10-08 09:33:16 +020035 Local0 = \_SB.PCI0.LPCB.EC0.TIN9
Stefan Reinauer49428d82013-02-21 15:48:37 -080036
Duncan Laurie433432b2013-06-03 10:38:22 -070037 // Check for sensor not calibrated
Elyes HAOUAS527690c2020-10-08 09:33:16 +020038 If (Local0 == \_SB.PCI0.LPCB.EC0.TNCA) {
Duncan Laurie433432b2013-06-03 10:38:22 -070039 Return (CTOK(0))
40 }
41
Stefan Reinauer49428d82013-02-21 15:48:37 -080042 // Check for sensor not present
Elyes HAOUAS527690c2020-10-08 09:33:16 +020043 If (Local0 == \_SB.PCI0.LPCB.EC0.TNPR) {
Stefan Reinauer49428d82013-02-21 15:48:37 -080044 Return (CTOK(0))
45 }
46
47 // Check for sensor not powered
Elyes HAOUAS527690c2020-10-08 09:33:16 +020048 If (Local0 == \_SB.PCI0.LPCB.EC0.TNOP) {
Stefan Reinauer49428d82013-02-21 15:48:37 -080049 Return (CTOK(0))
50 }
51
52 // Check for sensor bad reading
Elyes HAOUAS527690c2020-10-08 09:33:16 +020053 If (Local0 == \_SB.PCI0.LPCB.EC0.TBAD) {
Stefan Reinauer49428d82013-02-21 15:48:37 -080054 Return (CTOK(0))
55 }
56
57 // Adjust by offset to get Kelvin
Elyes HAOUAS527690c2020-10-08 09:33:16 +020058 Local0 += \_SB.PCI0.LPCB.EC0.TOFS
Stefan Reinauer49428d82013-02-21 15:48:37 -080059
60 // Convert to 1/10 Kelvin
Elyes HAOUAS527690c2020-10-08 09:33:16 +020061 Local0 *= 10
Stefan Reinauer49428d82013-02-21 15:48:37 -080062 Return (Local0)
63 }
64 }
65
66 ThermalZone (THRM)
67 {
68 Name (_TC1, 0x02)
69 Name (_TC2, 0x05)
70
71 // Thermal zone polling frequency: 10 seconds
72 Name (_TZP, 100)
73
74 // Thermal sampling period for passive cooling: 2 seconds
75 Name (_TSP, 20)
76
77 // Convert from Degrees C to 1/10 Kelvin for ACPI
78 Method (CTOK, 1) {
79 // 10th of Degrees C
Elyes HAOUAS527690c2020-10-08 09:33:16 +020080 Local0 = Arg0 * 10
Stefan Reinauer49428d82013-02-21 15:48:37 -080081
82 // Convert to Kelvin
Elyes HAOUAS527690c2020-10-08 09:33:16 +020083 Local0 += 2732
Stefan Reinauer49428d82013-02-21 15:48:37 -080084
85 Return (Local0)
86 }
87
88 // Threshold for OS to shutdown
89 Method (_CRT, 0, Serialized)
90 {
91 Return (CTOK (\TCRT))
92 }
93
94 // Threshold for passive cooling
95 Method (_PSV, 0, Serialized)
96 {
97 Return (CTOK (\TPSV))
98 }
99
100 // Processors used for passive cooling
101 Method (_PSL, 0, Serialized)
102 {
103 Return (\PPKG ())
104 }
105
106 Method (_TMP, 0, Serialized)
107 {
108 // Get Temperature from TIN# set in NVS
Elyes HAOUAS527690c2020-10-08 09:33:16 +0200109 Local0 = \_SB.PCI0.LPCB.EC0.TINS (TMPS)
Stefan Reinauer49428d82013-02-21 15:48:37 -0800110
111 // Check for sensor not present
Elyes HAOUAS527690c2020-10-08 09:33:16 +0200112 If (Local0 == \_SB.PCI0.LPCB.EC0.TNPR) {
Stefan Reinauer49428d82013-02-21 15:48:37 -0800113 Return (CTOK(0))
114 }
115
116 // Check for sensor not powered
Elyes HAOUAS527690c2020-10-08 09:33:16 +0200117 If (Local0 == \_SB.PCI0.LPCB.EC0.TNOP) {
Stefan Reinauer49428d82013-02-21 15:48:37 -0800118 Return (CTOK(0))
119 }
120
121 // Check for sensor bad reading
Elyes HAOUAS527690c2020-10-08 09:33:16 +0200122 If (Local0 == \_SB.PCI0.LPCB.EC0.TBAD) {
Stefan Reinauer49428d82013-02-21 15:48:37 -0800123 Return (CTOK(0))
124 }
125
126 // Adjust by offset to get Kelvin
Elyes HAOUAS527690c2020-10-08 09:33:16 +0200127 Local0 += \_SB.PCI0.LPCB.EC0.TOFS
Stefan Reinauer49428d82013-02-21 15:48:37 -0800128
129 // Convert to 1/10 Kelvin
Elyes HAOUAS527690c2020-10-08 09:33:16 +0200130 Local0 *= 10
Stefan Reinauer49428d82013-02-21 15:48:37 -0800131 Return (Local0)
132 }
133
134 /* CTDP Down */
135 Method (_AC0) {
Elyes HAOUAS527690c2020-10-08 09:33:16 +0200136 If (\FLVL <= 0) {
Stefan Reinauer49428d82013-02-21 15:48:37 -0800137 Return (CTOK (\F0OF))
138 } Else {
139 Return (CTOK (\F0ON))
140 }
141 }
142
143 /* CTDP Nominal */
144 Method (_AC1) {
Elyes HAOUAS527690c2020-10-08 09:33:16 +0200145 If (\FLVL <= 1) {
Stefan Reinauer49428d82013-02-21 15:48:37 -0800146 Return (CTOK (\F1OF))
147 } Else {
148 Return (CTOK (\F1ON))
149 }
150 }
151
152 Name (_AL0, Package () { TDP0 })
153 Name (_AL1, Package () { TDP1 })
154
155 PowerResource (TNP0, 0, 0)
156 {
157 Method (_STA) {
Elyes HAOUAS527690c2020-10-08 09:33:16 +0200158 If (\FLVL <= 0) {
Felix Singerdfbb6342022-12-26 08:39:35 +0100159 Return (1)
Stefan Reinauer49428d82013-02-21 15:48:37 -0800160 } Else {
Felix Singerfa06bcb2022-12-26 09:32:47 +0100161 Return (0)
Stefan Reinauer49428d82013-02-21 15:48:37 -0800162 }
163 }
164 Method (_ON) {
Elyes HAOUAS527690c2020-10-08 09:33:16 +0200165 \FLVL = 0
Stefan Reinauer49428d82013-02-21 15:48:37 -0800166 \_SB.PCI0.MCHC.STND ()
167 Notify (\_TZ.THRM, 0x81)
168 }
169 Method (_OFF) {
Elyes HAOUAS527690c2020-10-08 09:33:16 +0200170 \FLVL = 1
Stefan Reinauer49428d82013-02-21 15:48:37 -0800171 \_SB.PCI0.MCHC.STDN ()
172 Notify (\_TZ.THRM, 0x81)
173 }
174 }
175
176 PowerResource (TNP1, 0, 0)
177 {
178 Method (_STA) {
Elyes HAOUAS527690c2020-10-08 09:33:16 +0200179 If (\FLVL <= 1) {
Felix Singerdfbb6342022-12-26 08:39:35 +0100180 Return (1)
Stefan Reinauer49428d82013-02-21 15:48:37 -0800181 } Else {
Felix Singerfa06bcb2022-12-26 09:32:47 +0100182 Return (0)
Stefan Reinauer49428d82013-02-21 15:48:37 -0800183 }
184 }
185 Method (_ON) {
Elyes HAOUAS527690c2020-10-08 09:33:16 +0200186 \FLVL = 1
Stefan Reinauer49428d82013-02-21 15:48:37 -0800187 Notify (\_TZ.THRM, 0x81)
188 }
189 Method (_OFF) {
Elyes HAOUAS527690c2020-10-08 09:33:16 +0200190 \FLVL = 1
Stefan Reinauer49428d82013-02-21 15:48:37 -0800191 Notify (\_TZ.THRM, 0x81)
192 }
193 }
194
195 Device (TDP0)
196 {
197 Name (_HID, EISAID ("PNP0C0B"))
198 Name (_UID, 0)
199 Name (_PR0, Package () { TNP0 })
200 }
201
202 Device (TDP1)
203 {
204 Name (_HID, EISAID ("PNP0C0B"))
205 Name (_UID, 1)
206 Name (_PR0, Package () { TNP1 })
207 }
208 }
209}