mb/starlabs/starlite_adl: Configure GPIO interrupt for Virtual Button
[coreboot2.git] / src / ec / kontron / it8516e / acpi / pm_channels.asl
blobca414f02df2be2586a0867877e1fb868f1c3ace8
1 /* SPDX-License-Identifier: GPL-2.0-only */
3 #ifdef IT8516E_FIRST_DATA
4 Device (PM1) {
5         Name (_HID, EisaId("PNP0C02"))
6         Name (_STR, Unicode("IT8516E PM Channel 1"))
7         Name (_UID, SUPERIO_UID(PM, 1))
9         /*
10          * The EC firmware exposes CPU temperature through ec ram
11          * on the first PM channel.
12          */
14         #undef EC_DATA_IO
15         #define EC_DATA_IO IT8516E_FIRST_DATA
16         #undef EC_SC_IO
17         #define EC_SC_IO IT8516E_FIRST_SC
18         #include <ec/acpi/ec.asl>
20         Method (_CRS)
21         {
22                 /* Announce the used i/o ports to the OS */
23                 Return (ResourceTemplate () {
24                         IO (Decode16, IT8516E_FIRST_DATA, IT8516E_FIRST_DATA, 0x01, 0x01)
25                         IO (Decode16, IT8516E_FIRST_SC, IT8516E_FIRST_SC, 0x01, 0x01)
26                 })
27         }
29         /*
30          * Get CPU temperature from first PM channel (in 10th Kelvin)
31          */
32         Method (CTK)
33         {
34                 Local0 = EC_READ (0x52)
35                 If (Local0 & EC_ERROR_MASK) {
36                         Return (0)
37                 }
38                 Local0 *= 10
39                 Return (Local0 + 2732)  /* Return as 10th Kelvin */
40         }
42 #endif
44 #ifdef IT8516E_SECOND_DATA
45 Device (PM2) {
46         Name (_HID, EisaId("PNP0C02"))
47         Name (_STR, Unicode("IT8516E PM Channel 2"))
48         Name (_UID, SUPERIO_UID(PM, 2))
50         /*
51          * The EC firmware exposes fan and GPIO control through the
52          * second PM channel.
53          */
55         #undef EC_DATA_IO
56         #define EC_DATA_IO IT8516E_SECOND_DATA
57         #undef EC_SC_IO
58         #define EC_SC_IO IT8516E_SECOND_SC
59         #include <ec/acpi/ec.asl>
61         Method (_CRS)
62         {
63                 /* Announce the used i/o ports to the OS */
64                 Return (ResourceTemplate () {
65                         IO (Decode16, IT8516E_SECOND_DATA, IT8516E_SECOND_DATA, 0x01, 0x01)
66                         IO (Decode16, IT8516E_SECOND_SC, IT8516E_SECOND_SC, 0x01, 0x01)
67                 })
68         }
70         /*
71          * Get CPU temperature from second PM channel (in 10th Kelvin)
72          */
73         Method (CTK)
74         {
75                 Acquire (EC_MUTEX, 0xffff)
76                 Local0 = SEND_EC_COMMAND (0x20) /* GET_CPUTEMP */
77                 If (Local0 & EC_ERROR_MASK) {
78                         Release (EC_MUTEX)
79                         Return (0)
80                 }
81                 Local0 = RECV_EC_DATA ()        /* Temp low byte in 64th °C */
82                 If (Local0 & EC_ERROR_MASK) {
83                         Release (EC_MUTEX)
84                         Return (0)
85                 }
86                 Local1 = RECV_EC_DATA ()        /* Temp high byte in 64th °C */
87                 If (Local1 & EC_ERROR_MASK) {
88                         Release (EC_MUTEX)
89                         Return (0)
90                 }
91                 Release (EC_MUTEX)
93                 Local0 |= Local1 << 8
94                 Local0 *= 10 / 64                               /* Convert to 10th °C */
95                 Return (Local0 + 2732)                          /* Return as 10th Kelvin */
96         }
98 #endif