1/* SPDX-License-Identifier: GPL-2.0-only */ 2 3// Notifications: 4// 0x80 - hardware backlight toggle 5// 0x81 - backlight toggle 6// 0x82 - backlight down 7// 0x83 - backlight up 8// 0x84 - backlight color change 9// 0x85 - OLED screen toggle 10Device (S76D) { 11 Name (_HID, "17761776") 12 Name (_UID, 0) 13 // Hide the device so that Windows does not warn about a missing driver. 14 Name (_STA, 0xB) 15 16 Method (RSET, 0, Serialized) { 17 Printf ("S76D: RSET") 18 SAPL(0) 19 SKBB(0) 20 SKBC(0xFFFFFF) 21 } 22 23 Method (INIT, 0, Serialized) { 24 Printf ("S76D: INIT") 25 RSET() 26 If (^^PCI0.LPCB.EC0.ECOK) { 27 // Set flags to use software control 28 ^^PCI0.LPCB.EC0.ECOS = 2 29 Return (0) 30 } Else { 31 Return (1) 32 } 33 } 34 35 Method (FINI, 0, Serialized) { 36 Printf ("S76D: FINI") 37 RSET() 38 If (^^PCI0.LPCB.EC0.ECOK) { 39 // Set flags to use hardware control 40 ^^PCI0.LPCB.EC0.ECOS = 1 41 Return (0) 42 } Else { 43 Return (1) 44 } 45 } 46 47 // Get Airplane LED 48 Method (GAPL, 0, Serialized) { 49 If (^^PCI0.LPCB.EC0.ECOK) { 50 If (^^PCI0.LPCB.EC0.AIRP & 0x40) { 51 Return (1) 52 } 53 } 54 Return (0) 55 } 56 57 // Set Airplane LED 58 Method (SAPL, 1, Serialized) { 59 If (^^PCI0.LPCB.EC0.ECOK) { 60 If (Arg0) { 61 ^^PCI0.LPCB.EC0.AIRP |= 0x40 62 } Else { 63 ^^PCI0.LPCB.EC0.AIRP &= 0xBF 64 } 65 } 66 } 67 68 // Get Keyboard Backlight Kind 69 // 0 - No backlight 70 // 1 - White backlight 71 // 2 - RGB backlight 72 Method (GKBK, 0, Serialized) { 73 Local0 = 0 74 If (^^PCI0.LPCB.EC0.ECOK) { 75 ^^PCI0.LPCB.EC0.FDAT = 2 76 ^^PCI0.LPCB.EC0.FCMD = 0xCA 77 Local0 = ^^PCI0.LPCB.EC0.FBUF 78 } 79 Return (Local0) 80 } 81 82 // Get Keyboard Brightness 83 Method (GKBB, 0, Serialized) { 84 Local0 = 0 85 If (^^PCI0.LPCB.EC0.ECOK) { 86 ^^PCI0.LPCB.EC0.FDAT = 1 87 ^^PCI0.LPCB.EC0.FCMD = 0xCA 88 Local0 = ^^PCI0.LPCB.EC0.FBUF 89 } 90 Return (Local0) 91 } 92 93 // Set Keyboard Brightness 94 Method (SKBB, 1, Serialized) { 95 If (^^PCI0.LPCB.EC0.ECOK) { 96 ^^PCI0.LPCB.EC0.FDAT = 0 97 ^^PCI0.LPCB.EC0.FBUF = Arg0 98 ^^PCI0.LPCB.EC0.FCMD = 0xCA 99 } 100 } 101 102 // Get Keyboard Color 103 Method (GKBC, 0, Serialized) { 104 Local0 = 0 105 If (^^PCI0.LPCB.EC0.ECOK) { 106 ^^PCI0.LPCB.EC0.FDAT = 4 107 ^^PCI0.LPCB.EC0.FCMD = 0xCA 108 Local0 = ^^PCI0.LPCB.EC0.FBUF 109 Local0 |= (^^PCI0.LPCB.EC0.FBF1) << 16 110 Local0 |= (^^PCI0.LPCB.EC0.FBF2) << 8 111 } 112 Return (Local0) 113 } 114 115 // Set Keyboard Color 116 Method (SKBC, 1, Serialized) { 117 If (^^PCI0.LPCB.EC0.ECOK) { 118 ^^PCI0.LPCB.EC0.FDAT = 3 119 ^^PCI0.LPCB.EC0.FBUF = (Arg0 & 0xFF) 120 ^^PCI0.LPCB.EC0.FBF1 = ((Arg0 >> 16) & 0xFF) 121 ^^PCI0.LPCB.EC0.FBF2 = ((Arg0 >> 8) & 0xFF) 122 ^^PCI0.LPCB.EC0.FCMD = 0xCA 123 } 124 } 125 126 // Fan names 127 Method (NFAN, 0, Serialized) { 128 Return (Package() { 129 "CPU fan", 130#if CONFIG(EC_DASHARO_EC_DGPU) 131 "GPU fan", 132#endif 133 }) 134 } 135 136 // Get fan duty cycle and RPM as a single value 137 Method (GFAN, 1, Serialized) { 138 Local0 = 0 139 Local1 = 0 140 If (^^PCI0.LPCB.EC0.ECOK) { 141 If (Arg0 == 0) { 142 Local0 = ^^PCI0.LPCB.EC0.DUT1 143 Local1 = ^^PCI0.LPCB.EC0.RPM1 144 } ElseIf (Arg0 == 1) { 145 Local0 = ^^PCI0.LPCB.EC0.DUT2 146 Local1 = ^^PCI0.LPCB.EC0.RPM2 147 } 148 } 149 If (Local1 != 0) { 150 // 60 * (EC frequency / 120) / 2 151 Local1 = 2156250 / Local1 152 } 153 Return ((Local1 << 8) | Local0) 154 } 155 156 // Temperature names 157 Method (NTMP, 0, Serialized) { 158 Return (Package() { 159 "CPU temp", 160#if CONFIG(EC_DASHARO_EC_DGPU) 161 "GPU temp", 162#endif 163 }) 164 } 165 166 // Get temperature 167 Method (GTMP, 1, Serialized) { 168 Local0 = 0; 169 If (^^PCI0.LPCB.EC0.ECOK) { 170 If (Arg0 == 0) { 171 Local0 = ^^PCI0.LPCB.EC0.TMP1 172 } ElseIf (Arg0 == 1) { 173 Local0 = ^^PCI0.LPCB.EC0.TMP2 174 } 175 } 176 Return (Local0) 177 } 178} 179