mb/google/brya: Create rull variant
[coreboot2.git] / src / ec / quanta / it8518 / acpi / battery.asl
blobcfc88ed9ccaf7a0223c6e814988a4661c3c3cd67
1 /* SPDX-License-Identifier: GPL-2.0-only */
3 // Scope (EC0)
5 Device (BATX)
7         Name (_HID, EISAID ("PNP0C0A"))
8         Name (_UID, 1)
9         Name (_PCL, Package () { \_SB })
11         //
12         // Indicator of BATX attach/detach
13         // Battery X Information
14         // Battery X Status
15         //
16         Name (BXST, 0)
18         //
19         // Default Static Battery Information
20         //
21         Name (PBIF, Package()
22         {
23                 0,            //  0: Power Unit
24                 0xFFFFFFFF,   //  1: Design Capacity
25                 0xFFFFFFFF,   //  2: Last Full Charge Capacity
26                 1,            //  3: Battery Technology(Rechargeable)
27                 10800,        //  4: Design Voltage 10.8V
28                 0,            //  5: Design capacity of warning
29                 0,            //  6: Design capacity of low
30                 1,            //  7: Battery capacity granularity 1
31                 1,            //  8: Battery capacity granularity 2
32                 "",           //  9: Model Number
33                 "",           // 10: Serial Number
34                 "",           // 11: Battery Type
35                 ""            // 12: OEM Infomration
36         })
38         Name (PBST, Package ()
39         {
40                 0x00000000,  // Battery State
41                 0xFFFFFFFF,  // Battery Present Rate
42                 0xFFFFFFFF,  // Battery Remaining Capacity
43                 0xFFFFFFFF,  // Battery Present Voltage
44         })
46         // Workaround for full battery status, enabled by default
47         Name (BFWK, 1)
49         // Method to enable full battery workaround
50         Method (BFWE)
51         {
52                 BFWK = 1
53         }
55         // Method to disable full battery workaround
56         Method (BFWD)
57         {
58                 BFWK = 0
59         }
61         // Method to wait for EC to be ready after changing the Battery Info ID
62         // Selector
63         Method (WAEC)
64         {
65                 Local0 = 20     // Timeout 100 msec
66                 While (HSID == 0)
67                 {
68                         // EC Is not ready
69                         Sleep (5)
70                         Local0--
71                         If (Local0 == 0)
72                         {
73                                 Break
74                         }
75                 }
76         }
78         // Battery Slot Status
79         Method (_STA, 0, Serialized)
80         {
81                 BXST = MBTS
82                 If (BXST)
83                 {
84                         // Battery is present
85                         Return (0x1F)
86                 }
87                 Else
88                 {
89                         Return (0x0F)
90                 }
91         }
93         Method (_BIF, 0, Serialized)
94         {
95                 // Update fields from EC
97                 //
98                 // Information ID 1 -
99                 //
100                 HIID = 1
101                 WAEC ()
103                 //
104                 //  Power Unit
105                 //   SMART battery : 1 - 10mWh : 0 - mAh
106                 //   ACPI spec     : 0 - mWh   : 1 - mAh
107                 //
108                 Local7 = SBCM
109                 PBIF[0] = Local7 ^ 1
111                 //
112                 // Information ID 0 -
113                 //
114                 HIID = 0
115                 WAEC ()
117                 //
118                 //  Last Full Charge Capacity
119                 //
120                 If (Local7)
121                 {
122                         PBIF[2] = SBFC * 10
123                 }
124                 Else
125                 {
126                         PBIF[2] = SBFC
127                 }
129                 //
130                 // Information ID 2 -
131                 //
132                 HIID = 2
133                 WAEC ()
135                 //
136                 //  Design capacity
137                 //
138                 If (Local7)
139                 {
140                         Local0 = SBDC * 10
141                 }
142                 Else
143                 {
144                         Local0 = SBDC
145                 }
146                 PBIF[1] = Local0
148                 //
149                 //  Design capacity of High (5%)
150                 //  Design capacity of Low (1%)
151                 //
152                 PBIF[5] = Local0 / 20
153                 PBIF[6] = Local0 / 100
155                 //
156                 //  Design voltage
157                 //
158                 PBIF[4] = SBDV
160                 //
161                 // Serial Number
162                 //
163                 PBIF[10] = ToHexString (SBSN)
165                 //
166                 // Information ID 4 -
167                 //
168                 HIID = 4
169                 WAEC ()
171                 //
172                 //  Battery Type - Device Chemistry
173                 //
174                 PBIF[11] = ToString (Concatenate(SBCH, 0x00))
176                 //
177                 // Information ID 5 -
178                 //
179                 HIID = 5
180                 WAEC ()
182                 //
183                 // OEM Information - Manufacturer Name
184                 //
185                 PBIF[12] = ToString (Concatenate(SBMN, 0x00))
187                 //
188                 // Information ID 6 -
189                 //
190                 HIID = 6
191                 WAEC ()
193                 //
194                 // Model Number - Device Name
195                 //
196                 PBIF[9] = ToString (Concatenate(SBDN, 0x00))
198                 Return (PBIF)
199         }
201         Method (_BST, 0, Serialized)
202         {
203                 // Update Battery First Used Date, if requested
204                 If (BFUD)
205                 {
206                         // TODO: Handle First Used Date Request
207                         //\BFUD()
208                 }
210                 //
211                 // 0: BATTERY STATE
212                 //
213                 // bit 0 = discharging
214                 // bit 1 = charging
215                 // bit 2 = critical level
216                 //
218                 // Get battery state from EC
219                 If (HB0S & 0x20)
220                 {
221                         Local0 = 2
222                 }
223                 Else
224                 {
225                         if (HB0S & 0x40)
226                         {
227                                 Local0 = 1
228                         }
229                         Else
230                         {
231                                 Local0 = 0
232                         }
233                 }
235                 // Set critical flag if battery is empty
236                 If (HB0S & 0x0F == 0)
237                 {
238                         Local0 |= 4
239                 }
241                 Local1 = 0
243                 // Check if AC is present
244                 If (ACPW)
245                 {
246                         // Set only charging/discharging bits
247                         Local1 = Local0 & 3
248                 }
249                 Else
250                 {
251                         // Always discharging when on battery power
252                         Local1 = 1
253                 }
255                 // Flag if the battery level is critical
256                 Local4 = Local0 & 4
257                 Local1 |= Local4
258                 PBST[0] = Local1
260                 //
261                 // 1: BATTERY PRESENT RATE/CURRENT
262                 //
263                 Local1 = ECAC
264                 If (Local1 >= 0x8000)
265                 {
266                         If (Local0 & 1)
267                         {
268                                 Local1 = 0x10000 - Local1
269                         }
270                         Else
271                         {
272                                 // Error
273                                 Local1 = 0
274                         }
275                 }
276                 Else
277                 {
278                         If (!(Local0 & 2))
279                         {
280                                 // Battery is not charging
281                                 Local1 = 0
282                         }
283                 }
285                 Local6 = DerefOf (PBIF[0]) ^ 1
287                 If (Local6)
288                 {
289                         Local1 *= ECVO
290                         Local1 /= 1000
291                 }
292                 PBST[1] = Local1
294                 //
295                 // 2: BATTERY REMAINING CAPACITY
296                 //
297                 // Get Power unit from the battery static information
298                 //   SMART battery : 1 - 10mWh : 0 - mAh
299                 //   ACPI spec     : 0 - mWh   : 1 - mAh
300                 If (Local6)
301                 {
302                         Local1 = ECRC * 10
303                 }
304                 Else
305                 {
306                         Local1 = ECRC
307                 }
309                 If (BFWK && ACPW && !Local0)
310                 {
311                         // On AC power and battery is neither charging
312                         // nor discharging.  Linux expects a full battery
313                         // to report same capacity as last full charge.
314                         // https://bugzilla.kernel.org/show_bug.cgi?id=12632
315                         // TODO: Is SBRS the "battery gas gauge"?
316                         Local2 = SBRS
318                         // See if within ~3% of full
319                         Local3 = Local2 >> 5
320                         If (Local1 > Local2 - Local3 && Local1 < Local2 + Local3)
321                         {
322                                 Local1 = Local2
323                         }
324                 }
325                 PBST[2] = Local1
327                 //
328                 // 3: BATTERY PRESENT VOLTAGE
329                 //
330                 PBST[3] = ECVO
332                 Return (PBST)
333         }