blob: c2adf617360b32bafc6fff98e4451972819f1736 [file] [log] [blame]
Angel Pons210a0082020-04-02 23:48:24 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Stefan Reinauerd8a5fd22012-12-11 15:51:47 -08002
3// Scope (EC0)
4
5Device (BATX)
6{
7 Name (_HID, EISAID ("PNP0C0A"))
8 Name (_UID, 1)
9 Name (_PCL, Package () { \_SB })
10
11 Name (PBIF, Package () {
12 0x00000001, // Power Unit: mAh
13 0xFFFFFFFF, // Design Capacity
14 0xFFFFFFFF, // Last Full Charge Capacity
15 0x00000001, // Battery Technology: Rechargeable
16 0xFFFFFFFF, // Design Voltage
17 0x00000003, // Design Capacity of Warning
18 0xFFFFFFFF, // Design Capacity of Low
19 0x00000001, // Capacity Granularity 1
20 0x00000001, // Capacity Granularity 2
21 "", // Model Number
22 "", // Serial Number
23 "LION", // Battery Type
24 "" // OEM Information
25 })
26
27 Name (PBST, Package () {
28 0x00000000, // Battery State
29 0xFFFFFFFF, // Battery Present Rate
30 0xFFFFFFFF, // Battery Remaining Capacity
31 0xFFFFFFFF, // Battery Present Voltage
32 })
Felix Singer42efd7f2022-12-26 09:38:45 +010033 Name (BTNM, 0) // Battery number
Stefan Reinauerd8a5fd22012-12-11 15:51:47 -080034
35 // Workaround for full battery status, enabled by default
Felix Singerca4b5872022-12-26 08:17:06 +010036 Name (BFWK, 1)
Stefan Reinauerd8a5fd22012-12-11 15:51:47 -080037
38 // Method to enable full battery workaround
39 Method (BFWE)
40 {
Elyes HAOUAS5b880a12020-10-06 18:02:47 +020041 BFWK = 1
Stefan Reinauerd8a5fd22012-12-11 15:51:47 -080042 }
43
44 // Method to disable full battery workaround
45 Method (BFWD)
46 {
Elyes HAOUAS5b880a12020-10-06 18:02:47 +020047 BFWK = 0
Stefan Reinauerd8a5fd22012-12-11 15:51:47 -080048 }
49
50 Method (_STA, 0, Serialized)
51 {
52 If (BOL0) {
53 Return (0x1F)
54 } Else {
55 Return (0x0F)
56 }
57 }
58
59 Method (_BIF, 0, Serialized)
60 {
61 // Update fields from EC
Elyes HAOUAS5b880a12020-10-06 18:02:47 +020062 PBIF [0] = BAM0
63 PBIF [1] = BDC0
64 PBIF [2] = BFC0
65 PBIF [4] = BDV0
66 Local1 = BFC0 / 100
67 Local1 *= 10
68 PBIF [5] = Local1
69 Local1 = BFC0 / 100
70 Local1 *= 3
71 PBIF [6] = Local1
Stefan Reinauerd8a5fd22012-12-11 15:51:47 -080072
Elyes HAOUAS5b880a12020-10-06 18:02:47 +020073 PBIF [9] = ToString (Concatenate (BATD, 0x00)) // model
74 PBIF [10] = ToHexString (BSN0) // serial
75 PBIF [12] = ToString (BMFN) // vendor
Stefan Reinauerd8a5fd22012-12-11 15:51:47 -080076
Elyes HAOUAS5b880a12020-10-06 18:02:47 +020077 BTNM = BDN0 // Save the battery number
Stefan Reinauerd8a5fd22012-12-11 15:51:47 -080078
79 Return (PBIF)
80 }
81
82 Method (_BST, 0, Serialized)
83 {
84 //
85 // 0: BATTERY STATE
86 //
87 // bit 0 = discharging
88 // bit 1 = charging
89 // bit 2 = critical level
90 //
91
92 // Get battery state from EC and save it for the charging workaround
Elyes HAOUAS5b880a12020-10-06 18:02:47 +020093 Local0 = BST0
94 PBST [0] = Local0
Stefan Reinauerd8a5fd22012-12-11 15:51:47 -080095
96 //
97 // 1: BATTERY PRESENT RATE/CURRENT
98 //
99
Elyes HAOUAS5b880a12020-10-06 18:02:47 +0200100 Local1 = BAC0
101 Local1 = 0xFFFF - Local1
102 PBST [1] = Local1
Stefan Reinauerd8a5fd22012-12-11 15:51:47 -0800103
104 //
105 // 2: BATTERY REMAINING CAPACITY
106 //
Elyes HAOUAS5b880a12020-10-06 18:02:47 +0200107 Local1 = BFC0 * GAU0
108 Local2 = Local1 % 100
109 Local1 /= 100
Stefan Reinauerd8a5fd22012-12-11 15:51:47 -0800110
Elyes HAOUAS5b880a12020-10-06 18:02:47 +0200111 If (BFWK && ADPT && !Local0) {
Stefan Reinauerd8a5fd22012-12-11 15:51:47 -0800112 // On AC power and battery is neither charging
113 // nor discharging. Linux expects a full battery
114 // to report same capacity as last full charge.
115 // https://bugzilla.kernel.org/show_bug.cgi?id=12632
Elyes HAOUAS5b880a12020-10-06 18:02:47 +0200116 Local2 = GAU0
Stefan Reinauerd8a5fd22012-12-11 15:51:47 -0800117
118 // See if within ~3% of full
Elyes HAOUAS5b880a12020-10-06 18:02:47 +0200119 Local3 = Local2 >> 5
120 If ((Local1 > (Local2 - Local3)) && (Local1 < (Local2 + Local3)))
Stefan Reinauerd8a5fd22012-12-11 15:51:47 -0800121 {
Elyes HAOUAS5b880a12020-10-06 18:02:47 +0200122 Local1 = Local2
Stefan Reinauerd8a5fd22012-12-11 15:51:47 -0800123 }
124 }
Elyes HAOUAS5b880a12020-10-06 18:02:47 +0200125 PBST [2] = Local1
Stefan Reinauerd8a5fd22012-12-11 15:51:47 -0800126
127 //
128 // 3: BATTERY PRESENT VOLTAGE
129 //
Elyes HAOUAS5b880a12020-10-06 18:02:47 +0200130 PBST [3] = BPV0
Stefan Reinauerd8a5fd22012-12-11 15:51:47 -0800131
132 // Check the Battery Number
Elyes HAOUAS5b880a12020-10-06 18:02:47 +0200133 If(BDN0 != BTNM) {
Stefan Reinauerd8a5fd22012-12-11 15:51:47 -0800134 Notify(BATX, 0x81)
135 }
136
137 Return (PBST)
138 }
139}