blob: e657f4ca6fb8a503c99a610f62a38889dc8f2e73 [file] [log] [blame]
Angel Pons210a0082020-04-02 23:48:24 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Iru Cai44d399c2017-03-26 10:25:00 +08002
3Field (ECRM, ByteAcc, NoLock, Preserve)
4{
5 Offset (0x84),
6 , 3,
7 LCTV, 1,
8 BATP, 4,
9 BPU, 1,
10 Offset (0x86),
11 BSEL, 4, /* battery select */
12 Offset (0x87),
13 LB1, 8,
14 LB2, 8,
15 BDC, 16,
16 Offset (0x8D),
17 BFC, 16, /* battery full capacity */
18 BRTE, 16,
19 BTC, 1,
20 Offset (0x92),
21 BME, 16,
22 BDN, 8,
23 BDV, 16, /* battery design voltage */
24 BCV1, 16,
25 BST, 4,
26 Offset (0xC9),
27 BSN, 16, /* battery serial number */
28 BDAT, 16, /* battery date */
29 BMF, 8,
30}
31
32Name (NGBF, 0xFF)
33Name (NGBT, 0xFF)
34Name (GACP, 0x07)
35Name (NBAP, 0x00)
36Name (NNBO, 0x01)
37Name (NDCB, 0x00)
38Mutex (BTMX, 0x00)
39
40#define NLB1 0xC8 /* design capacity of warning */
41#define NLB2 0x64 /* design capacity of low */
42
43Method (ITLB, 0, NotSerialized)
44{
Felix Singer81713642022-12-25 16:54:45 +010045 Local0 = (NLB1 + 9) % 0x0a
46 Local1 = (NLB1 + 9) / 0x0a
47
48 Local0 = (0x96 + 9) % 0x0a
49 Local2 = (0x96 + 9) / 0x0a
50
Iru Cai44d399c2017-03-26 10:25:00 +080051 Local0 = Local0
52 LB1 = Local1
53 LB2 = Local2
54}
55
56Method (PWUP, 2, Serialized)
57{
58 Local0 = 0x00
59 Acquire (BTMX, 0xFFFF)
60 Local1 = (Arg0 | GACP)
61 GACP = (Local1 & 0x07)
62 If ((GACP & 0x02))
63 {
64 NGBF |= Arg1
65 }
66
67 If ((GACP & 0x04))
68 {
69 If ((NGBT != 0xFF))
70 {
71 Local0 = 0x01
72 }
73
74 NGBT |= Arg1
75 }
76
77 Release (BTMX)
78 Return (Local0)
79}
80
81Method (GBAP, 0, Serialized)
82{
83 Acquire (BTMX, 0xFFFF)
84 If ((GACP & 0x02))
85 {
86 GACP &= 0x05
87 Release (BTMX)
88 Acquire (ECMX, 0xFFFF)
89 NBAP = BATP
90 Release (ECMX)
91 }
92 Else
93 {
94 Release (BTMX)
95 }
96 Return (NBAP)
97}
98
99Method (BTDR, 1, Serialized)
100{
101 If ((Arg0 == 0x01))
102 {
103 NNBO = 0x01
104 }
105 ElseIf ((Arg0 == 0x00))
106 {
107 NNBO = 0x00
108 }
109
110 Return (NNBO)
111}
112
113Method (BSTA, 1, Serialized)
114{
115 BTDR (0x01)
116 Local0 = GBAP ()
117 Local1 = 0x0F
118 If ((Local0 & Arg0))
119 {
120 Local1 = 0x1F
121 }
122 Return (Local1)
123}
124
125Device (BAT0)
126{
127 Name (_HID, EisaId ("PNP0C0A"))
128 Name (_UID, 0x01)
129
130 Method (_STA, 0, NotSerialized)
131 {
132 Return (BSTA (0x01))
133 }
134
135 Method (_BIF, 0, NotSerialized)
136 {
137 Return (BTIF (0x00))
138 }
139
140 Method (_BST, 0, NotSerialized)
141 {
142 Return (BTSZ (0x00))
143 }
144
145 Name (_PCL, Package (0x01)
146 {
147 \_SB
148 })
149}
150
151Device (BAT1)
152{
153 Name (_HID, EisaId ("PNP0C0A"))
154 Name (_UID, 0x02)
155
156 Method (_STA, 0, NotSerialized)
157 {
158 Return (BSTA (0x02))
159 }
160
161 Method (_BIF, 0, NotSerialized)
162 {
163 Return (BTIF (0x01))
164 }
165
166 Method (_BST, 0, NotSerialized)
167 {
168 Return (BTSZ (0x01))
169 }
170
171 Name (_PCL, Package (0x01)
172 {
173 \_SB
174 })
175}
176
177Name (NBTI, Package (0x02)
178{
179 Package (0x0D)
180 {
181 0x01, /* power unit: mA */
182 0xFFFFFFFF, /* design capacity */
183 0xFFFFFFFF, /* last full charge capacity */
184 0x01, /* battery technology */
185 0xFFFFFFFF, /* design voltage */
186 0x00, /* design capacity of warning */
187 0x00, /* design capacity of low */
188 0x64, /* battery capacity granularity 1 */
189 0x64, /* battery capacity granularity 2 */
190 "Primary", /* model number */
191 "100000", /* serial number */
192 "LIon", /* battery type */
193 "Hewlett-Packard" /* OEM information */
194 },
195
196 Package (0x0D)
197 {
198 0x01,
199 0xFFFFFFFF,
200 0xFFFFFFFF,
201 0x01,
202 0xFFFFFFFF,
203 0x00,
204 0x00,
205 0x64,
206 0x64,
207 "Travel",
208 "100000",
209 "LIon",
210 "Hewlett-Packard"
211 }
212})
213
214Name (NBST, Package (0x02)
215{
216 Package (0x04) {0x00, 0x00, 0x0FA0, 0x04B0},
217 Package (0x04) {0x00, 0x00, 0x0FA0, 0x04B0}
218})
219
220Name (NDBS, Package (0x04)
221{
222 0x00,
223 0x00,
224 0x0FA0,
225 0x04B0
226})
227
Iru Cai12083912017-09-25 10:22:42 +0800228Method (\ISTR, 2, Serialized)
Iru Cai44d399c2017-03-26 10:25:00 +0800229{
230 Name (NUMB, Buffer (6) { " " })
231 Local0 = Arg0
232 Local1 = Arg1
233 While (Local1)
234 {
235 Local1--
Felix Singer81713642022-12-25 16:54:45 +0100236 Local2 = Local0 % 10
237 Local0 = Local0 / 10
Felix Singer103f89a2021-12-30 01:24:18 +0100238 NUMB[Local1] = Local2 + 48
Iru Cai44d399c2017-03-26 10:25:00 +0800239 }
240 ToString (NUMB, Arg1, Local3)
241 Return (Local3)
242}
243
244Method (GBSS, 2, Serialized)
245{
246 Local3 = \ISTR (Arg0, 0x05)
247 Concatenate (Local3, " ", Local4)
248 Local0 = (Arg1 >> 0x09)
249 Local1 = (Local0 + 1980)
250 Local2 = \ISTR (Local1, 0x04)
251 Concatenate (Local4, Local2, Local3)
252 Concatenate (Local3, "/", Local4)
253 Local0 = (Arg1 >> 0x05)
254 Local1 = (Local0 & 0x0F)
255 Local2 = \ISTR (Local1, 0x02)
256 Concatenate (Local4, Local2, Local3)
257 Concatenate (Local3, "/", Local4)
258 Local1 = (Arg1 & 0x1F)
259 Local2 = \ISTR (Local1, 0x02)
260 Concatenate (Local4, Local2, Local3)
261 Return (Local3)
262}
263
264Method (BTIG, 1, Serialized) /* in vendor DSDT is EC0.BTIF */
265{
266 Local7 = (0x01 << Arg0)
267 BTDR (0x01)
268 If ((BSTA (Local7) == 0x0F))
269 {
270 Return (0xFF)
271 }
272
273 Acquire (BTMX, 0xFFFF)
274 Local0 = NGBF
275 Release (BTMX)
276 If (((Local0 & Local7) == 0x00))
277 {
278 Return (0x00)
279 }
280
281 NBST [Arg0] = NDBS
282 Acquire (BTMX, 0xFFFF)
283 NGBT |= Local7
284 Release (BTMX)
285
286 /* fill battery information */
287 Acquire (ECMX, 0xFFFF)
288 BSEL = Arg0
289 Local0 = BFC
290 DerefOf (NBTI [Arg0]) [0x01] = Local0
291 DerefOf (NBTI [Arg0]) [0x02] = Local0
292 DerefOf (NBTI [Arg0]) [0x04] = BDV
293 DerefOf (NBTI [Arg0]) [0x05] = NLB1
294 DerefOf (NBTI [Arg0]) [0x06] = NLB2
295 Local0 = BSN
296 Local1 = BDAT
297 Release (ECMX)
298
299 /* serial number */
300 Local2 = GBSS (Local0, Local1)
301 DerefOf (NBTI [Arg0]) [0x0A] = Local2
302
303 Acquire (BTMX, 0xFFFF)
304 NGBF &= ~Local7
305 Release (BTMX)
306 Return (0x00)
307}
308
309Method (BTIF, 1, Serialized) /* in vendor DSDT is SB.BTIF */
310{
311 Local0 = BTIG (Arg0)
312 If ((Local0 == 0xFF))
313 {
314 Return (Package (0x0D)
315 {
316 0x00,
317 0xFFFFFFFF,
318 0xFFFFFFFF,
319 0x01,
320 0xFFFFFFFF,
321 0x00,
322 0x00,
323 0x00,
324 0x00,
325 "",
326 "",
327 "",
328 0x00
329 })
330 }
331 Else
332 {
333 Return (DerefOf (NBTI [Arg0]))
334 }
335}
336
337Name (NFBS, 0x01)
338Method (BTSZ, 1, Serialized) /* in vendor DSDT is EC.BTST */
339{
340 Local1 = NFBS
341 If (NFBS)
342 {
343 NFBS = 0x00
344 }
345 BTST (Arg0, Local1)
346 Return (DerefOf (NBST [Arg0]))
347}
348
349Method (BTST, 2, Serialized)
350{
351 Local7 = (0x01 << Arg0)
352 BTDR (0x01)
353 If ((BSTA (Local7) == 0x0F))
354 {
355 NBST [Arg0] = Package (0x04)
356 {
357 0x00,
358 0xFFFFFFFF,
359 0xFFFFFFFF,
360 0xFFFFFFFF
361 }
362 Return (0xFF)
363 }
364
365 Acquire (BTMX, 0xFFFF)
366 If (Arg1)
367 {
368 NGBT = 0xFF
369 }
370
371 Local0 = NGBT /* \_SB_.PCI0.LPCB.EC0_.NGBT */
372 Release (BTMX)
373 If (((Local0 & Local7) == 0x00))
374 {
375 Return (0x00)
376 }
377
378 Acquire (ECMX, 0xFFFF)
379 BSEL = Arg0
380 Local0 = BST
381 Local3 = BPR
382 DerefOf (NBST [Arg0]) [0x02] = BRC
383 DerefOf (NBST [Arg0]) [0x03] = BPV
384 Release (ECMX)
385
386 If ((GACS () == 0x01))
387 {
388 Local0 &= ~0x01
389 }
390 Else
391 {
392 Local0 &= ~0x02
393 }
394
395 If ((Local0 & 0x01))
396 {
397 Acquire (BTMX, 0xFFFF)
398 NDCB = Local7
399 Release (BTMX)
400 }
401
402 DerefOf (NBST [Arg0]) [0x00] = Local0
403 If ((Local0 & 0x01))
404 {
405 If (((Local3 < 0x0190) || (Local3 > 0x1964)))
406 {
407 Local5 = DerefOf (DerefOf (NBST [Arg0]) [0x01])
408 If (((Local5 < 0x0190) || (Local5 > 0x1964)))
409 {
410 Local3 = (0x1AF4 / 0x02)
411 }
412 Else
413 {
414 Local3 = Local5
415 }
416 }
417 }
418 ElseIf (((Local0 & 0x02) == 0x00))
419 {
420 Local3 = 0x00
421 }
422
423 DerefOf (NBST [Arg0]) [0x01] = Local3
424 Acquire (BTMX, 0xFFFF)
425 NGBT &= ~Local7
426 Release (BTMX)
427 Return (0x00)
428}
429
430Method (SBTN, 2, Serialized)
431{
432 If ((Arg0 & 0x01))
433 {
434 Notify (BAT0, Arg1)
435 }
436
437 If ((Arg0 & 0x02))
438 {
439 Notify (BAT1, Arg1)
440 }
441}
442
443Method (_Q03, 0, NotSerialized)
444{
Felix Singere0625f82021-12-26 15:33:54 +0100445 Printf ("EC: _Q03")
Iru Cai44d399c2017-03-26 10:25:00 +0800446 Acquire (BTMX, 0xFFFF)
447 Local0 = NDCB
448 Release (BTMX)
449 PWUP (0x04, Local0)
450 SBTN (Local0, 0x80)
451}
452
453Method (_Q08, 0, NotSerialized)
454{
Felix Singere0625f82021-12-26 15:33:54 +0100455 Printf ("EC: PRIMARY BATTERY ATTACHED/DETACHED")
Iru Cai44d399c2017-03-26 10:25:00 +0800456 PWUP (0x06, 0x01)
457 Local0 = GBAP ()
458 If ((Local0 != 0x02))
459 {
460 PWUP (0x04, 0x02)
461 If (BTDR (0x02))
462 {
463 Notify (BAT1, 0x80)
464 }
465 }
466
467 If (BTDR (0x02))
468 {
469 Notify (BAT0, 0x81)
470 }
471}
472
473Method (_Q09, 0, NotSerialized)
474{
Felix Singere0625f82021-12-26 15:33:54 +0100475 Printf ("EC: PRIMARY BATTERY STATUS")
Iru Cai44d399c2017-03-26 10:25:00 +0800476 PWUP (0x04, 0x01)
477 If (BTDR (0x02))
478 {
479 Notify (BAT0, 0x80)
480 }
481}
482
483Method (_Q18, 0, NotSerialized)
484{
Felix Singere0625f82021-12-26 15:33:54 +0100485 Printf ("EC: SECONDARY BATTERY ATTACHED/DETACHED")
Iru Cai44d399c2017-03-26 10:25:00 +0800486 PWUP (0x06, 0x02)
487 Local0 = GBAP ()
488 If ((Local0 != 0x01))
489 {
490 PWUP (0x04, 0x01)
491 If (BTDR (0x02))
492 {
493 Notify (BAT0, 0x80)
494 }
495 }
496
497 If (BTDR (0x02))
498 {
499 Notify (BAT1, 0x81) // Information Change
500 }
501}
502
503Method (_Q19, 0, NotSerialized)
504{
Felix Singere0625f82021-12-26 15:33:54 +0100505 Printf ("EC: SECONDARY BATTERY STATUS")
Iru Cai44d399c2017-03-26 10:25:00 +0800506 PWUP (0x04, 0x02)
507 If (BTDR (0x02))
508 {
509 Notify (BAT1, 0x80)
510 }
511}