• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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