blob: 6b1572bd492e13e74e571169560269f69880e5c2 [file] [log] [blame]
Matt DeVillier7d57d562021-04-14 13:15:43 -05001/* SPDX-License-Identifier: GPL-2.0-only */
2
Nicole Faerbere00ea2f2021-04-15 05:59:37 -05003#define BATTERY_DESIGN_VOLTAGE_MV 14800
4
Matt DeVillier7d57d562021-04-14 13:15:43 -05005Device (BAT0)
6{
7 Name (_HID, EisaId ("PNP0C0A") /* Control Method Battery */) // _HID: Hardware ID
Felix Singer42efd7f2022-12-26 09:38:45 +01008 Name (_UID, 0) // _UID: Unique ID
Matt DeVillier7d57d562021-04-14 13:15:43 -05009 Name (_PCL, Package (0x01) // _PCL: Power Consumer List
10 {
11 _SB
12 })
Felix Singer42efd7f2022-12-26 09:38:45 +010013 Name (BFCC, 0)
Matt DeVillier7d57d562021-04-14 13:15:43 -050014 Method (_STA, 0, NotSerialized) // _STA: Status
15 {
16 If (^^PCI0.LPCB.EC0.ECOK)
17 {
18 If (^^PCI0.LPCB.EC0.BAT0)
19 {
20 Return (0x1F)
21 }
22 Else
23 {
24 Return (0x0F)
25 }
26 }
27 Else
28 {
29 Return (0x0F)
30 }
31 }
32
33 Name (PBIF, Package (0x0D)
34 {
Felix Singerca4b5872022-12-26 08:17:06 +010035 1, // 0 - Power Unit
Matt DeVillier7d57d562021-04-14 13:15:43 -050036 0xFFFFFFFF, // 1 - Design Capacity
37 0xFFFFFFFF, // 2 - Last Full Charge Capacity
Felix Singerca4b5872022-12-26 08:17:06 +010038 1, // 3 - Battery Technology
Nicole Faerbere00ea2f2021-04-15 05:59:37 -050039 BATTERY_DESIGN_VOLTAGE_MV, // 4 - Design Voltage
Felix Singer42efd7f2022-12-26 09:38:45 +010040 0, // 5 - Design Capacity of Warning
41 0, // 6 - Design Capacity of Low
Matt DeVillier7d57d562021-04-14 13:15:43 -050042 0x40, // 7 - Battery Capacity Granularity 1
43 0x40, // 8 - Battery Capacity Granularity 2
Nicole Faerbere00ea2f2021-04-15 05:59:37 -050044 "BAT", // 9 - Model Number
45 "0001", // 10 - Serial Number
46 "LION", // 11 - Battery Type
47 "Notebook" // 12 - OEM Information
Matt DeVillier7d57d562021-04-14 13:15:43 -050048 })
49 Method (IVBI, 0, NotSerialized)
50 {
51 PBIF [1] = 0xFFFFFFFF
52 PBIF [2] = 0xFFFFFFFF
53 PBIF [4] = 0xFFFFFFFF
54 PBIF [9] = " "
55 PBIF [10] = " "
56 PBIF [11] = " "
57 PBIF [12] = " "
Felix Singer42efd7f2022-12-26 09:38:45 +010058 BFCC = 0
Matt DeVillier7d57d562021-04-14 13:15:43 -050059 }
60
61 Method (UPBI, 0, NotSerialized)
62 {
63 If (^^PCI0.LPCB.EC0.BAT0)
64 {
65 Local0 = (^^PCI0.LPCB.EC0.BDC0 & 0xFFFF)
66 PBIF [1] = Local0
67 Local0 = (^^PCI0.LPCB.EC0.BFC0 & 0xFFFF)
68 PBIF [2] = Local0
69 BFCC = Local0
70 Local0 = (^^PCI0.LPCB.EC0.BDV0 & 0xFFFF)
71 PBIF [4] = Local0
72 Local0 = (^^PCI0.LPCB.EC0.BCW0 & 0xFFFF)
73 PBIF [5] = Local0
74 Local0 = (^^PCI0.LPCB.EC0.BCL0 & 0xFFFF)
75 PBIF [6] = Local0
76 PBIF [9] = "BAT"
77 PBIF [10] = "0001"
78 PBIF [11] = "LION"
79 PBIF [12] = "Notebook"
80 }
81 Else
82 {
83 IVBI ()
84 }
85 }
86
87 Method (_BIF, 0, NotSerialized) // _BIF: Battery Information
88 {
89 If (^^PCI0.LPCB.EC0.ECOK)
90 {
91 UPBI ()
92 }
93 Else
94 {
95 IVBI ()
96 }
97
98 Return (PBIF) /* \_SB_.BAT0.PBIF */
99 }
100
101 Name (PBST, Package (0x04)
102 {
Felix Singer42efd7f2022-12-26 09:38:45 +0100103 0, // 0 - Battery state
Matt DeVillier7d57d562021-04-14 13:15:43 -0500104 0xFFFFFFFF, // 1 - Battery present rate
105 0xFFFFFFFF, // 2 - Battery remaining capacity
Nicole Faerbere00ea2f2021-04-15 05:59:37 -0500106 BATTERY_DESIGN_VOLTAGE_MV // 3 - Battery present voltage
Matt DeVillier7d57d562021-04-14 13:15:43 -0500107 })
108 Method (IVBS, 0, NotSerialized)
109 {
Felix Singer42efd7f2022-12-26 09:38:45 +0100110 PBST [0] = 0
Matt DeVillier7d57d562021-04-14 13:15:43 -0500111 PBST [1] = 0xFFFFFFFF
112 PBST [2] = 0xFFFFFFFF
Nicole Faerbere00ea2f2021-04-15 05:59:37 -0500113 PBST [3] = 0x2710
Matt DeVillier7d57d562021-04-14 13:15:43 -0500114 }
115
116 Method (UPBS, 0, NotSerialized)
117 {
118 If (^^PCI0.LPCB.EC0.BAT0)
119 {
Felix Singer42efd7f2022-12-26 09:38:45 +0100120 Local0 = 0
121 Local1 = 0
Matt DeVillier7d57d562021-04-14 13:15:43 -0500122 If (^^AC.ACFG)
123 {
124 If (((^^PCI0.LPCB.EC0.BST0 & 0x02) == 0x02))
125 {
126 Local0 |= 0x02
127 Local1 = (^^PCI0.LPCB.EC0.BPR0 & 0xFFFF)
128 }
129 }
130 Else
131 {
Felix Singerca4b5872022-12-26 08:17:06 +0100132 Local0 |= 1
Matt DeVillier7d57d562021-04-14 13:15:43 -0500133 Local1 = (^^PCI0.LPCB.EC0.BPR0 & 0xFFFF)
134 }
135
136 Local7 = (Local1 & 0x8000)
137 If ((Local7 == 0x8000))
138 {
139 Local1 ^= 0xFFFF
140 }
141
142 Local2 = (^^PCI0.LPCB.EC0.BRC0 & 0xFFFF)
143 Local3 = (^^PCI0.LPCB.EC0.BPV0 & 0xFFFF)
144 PBST [0] = Local0
145 PBST [1] = Local1
146 PBST [2] = Local2
147 PBST [3] = Local3
148 If ((BFCC != ^^PCI0.LPCB.EC0.BFC0))
149 {
150 Notify (BAT0, 0x81) // Information Change
151 }
152 }
153 Else
154 {
155 IVBS ()
156 }
157 }
158
159 Method (_BST, 0, NotSerialized) // _BST: Battery Status
160 {
161 If (^^PCI0.LPCB.EC0.ECOK)
162 {
163 UPBS ()
164 }
165 Else
166 {
167 IVBS ()
168 }
169
170 Return (PBST) /* \_SB_.BAT0.PBST */
171 }
172}