blob: b1ff65f10046a4d0dc2e83fdc8157e547b43a0a1 [file] [log] [blame]
Angel Pons210a0082020-04-02 23:48:24 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Alexey Kharlamov93d6ba02018-01-09 00:50:06 +03002
3/*
4 * This defines the battery charging thresholds setting methods tpacpi-bat can
5 * use. This implements what the vendor defines but is rather ugly...
6 */
7
8/* SetBatteryCharge Start/Stop Capacity Threshold
9 * In Parameter:
10 * DWORD
11 * Bit 7-0: Charge stop capacity (Unit:%)
12 * =0: Use battery default setting
13 * =1-99: Threshold to stop charging battery (Relative capacity)
14 * Bit 9-8:BatteryID
15 * = 0: Any battery
16 * = 1: Primary battery
17 * = 2: Secondary battery
18 * = Others: Reserved (0)
19 * Bit 31-10: Reserved (0)
Felix Singer42efd7f2022-12-26 09:38:45 +010020 * Must be 0
Alexey Kharlamov93d6ba02018-01-09 00:50:06 +030021 *
22 * Out Parameter:
23 * DWORD
24 * Bit 30-0: Reserved (0)
25 * Bit 31: Error status
26 * 0 ... Success
27 * 1 ... Fail
28 */
29
30#define START_THRESH_ARG 0
31#define STOP_THRESH_ARG 1
32
33// Set stop threshold
34Method (BCSS, 1, NotSerialized)
35{
36 Local0 = Arg0 & 0xff // Percentage
37 Local1 = (Arg0 >> 8) & 0x3 // Battery ID
38
39 // Any battery
40 If (Local1 == 0)
41 {
42 \_SB.PCI0.LPCB.EC.BAT0.SETT(STOP_THRESH_ARG, Local0)
43 \_SB.PCI0.LPCB.EC.BAT1.SETT(STOP_THRESH_ARG, Local0)
44
45 Local2 = Local0 != \_SB.PCI0.LPCB.EC.BAT0.GETT(STOP_THRESH_ARG)
46 Local3 = Local0 != \_SB.PCI0.LPCB.EC.BAT1.GETT(STOP_THRESH_ARG)
47
48 Return ((Local2 && Local3) << 31)
49 }
50
51 // Battery1
52 If (Local1 == 1)
53 {
54 \_SB.PCI0.LPCB.EC.BAT0.SETT(STOP_THRESH_ARG, Local0)
55 Return ((Local0 !=
56 \_SB.PCI0.LPCB.EC.BAT0.GETT(STOP_THRESH_ARG)) << 31)
57 }
58
59 // Battery2
60 If (Local1 == 2)
61 {
62 \_SB.PCI0.LPCB.EC.BAT1.SETT(STOP_THRESH_ARG, Local0)
63 Return ((Local0 !=
64 \_SB.PCI0.LPCB.EC.BAT1.GETT(STOP_THRESH_ARG)) << 31)
65 }
66
67 Return (1 << 31) /* Should not be reached */
68}
69
70// Set start threshold
71Method (BCCS, 1, NotSerialized)
72{
73 Local0 = Arg0 & 0xff // Percentage
74 Local1 = (Arg0 >> 8) & 0x3 // Battery ID
75
76 // Any battery
77 If (Local1 == 0)
78 {
79 \_SB.PCI0.LPCB.EC.BAT0.SETT(START_THRESH_ARG, Local0)
80 \_SB.PCI0.LPCB.EC.BAT1.SETT(START_THRESH_ARG, Local0)
81
82 Local2 = Local0 != \_SB.PCI0.LPCB.EC.BAT0.GETT(START_THRESH_ARG)
83 Local3 = Local0 != \_SB.PCI0.LPCB.EC.BAT1.GETT(START_THRESH_ARG)
84
85 Return ((Local2 && Local3) << 31)
86 }
87
88 // Battery1
89 If (Local1 == 1)
90 {
91 \_SB.PCI0.LPCB.EC.BAT0.SETT(START_THRESH_ARG, Local0)
92 Return ((Local0 !=
93 \_SB.PCI0.LPCB.EC.BAT0.GETT(START_THRESH_ARG)) << 31)
94 }
95
96 // Battery2
97 If (Local1 == 2)
98 {
99 \_SB.PCI0.LPCB.EC.BAT1.SETT(START_THRESH_ARG, Local0)
100 Return ((Local0 !=
101 \_SB.PCI0.LPCB.EC.BAT1.GETT(START_THRESH_ARG)) << 31)
102 }
103
104 Return (1 << 31) /* Should not be reached */
105}
106
107/*
108 * GetBatteryCharge Start/Stop Capacity Threshold
109 * In Parameter:
110 * DWORD
111 * Bit 7-0:BatteryID
112 * Bit 31-8: Reserved (0)
Felix Singer42efd7f2022-12-26 09:38:45 +0100113 * Must be 0
Alexey Kharlamov93d6ba02018-01-09 00:50:06 +0300114 *
115 * Out Parameter:
116 * DWORD
117 * Bit 7-0: Charge stop capacity (Unit:%)
118 * =0: Use battery default setting
119 * =1-99: Threshold to stop charging battery (Relative capacity)
120 * =Others: Reserved (0)
121 * Bit 9-8: Capability of BatteryCharge Stop Capacity Threshold
122 * Bit 8:Batterycharge stop capacity threshold
123 * (0:Not support 1:Support)
124 * Bit 9: Specify every battery parameter
125 * (0:Not support(apply parameter for all battery)
126 * 1:Support(apply parameter for all battery))
127 * Bit 30-10: Reserved (0)
128 * Bit 31: Error status
129 * 0 ... Success
130 * 1 ... Fail
131*/
132
133// Get stop threshold
134Method (BCSG, 1, NotSerialized)
135{
136 // Battery1
137 If (Arg0 == 1)
138 {
139 Return (0x300 | \_SB.PCI0.LPCB.EC.BAT0.GETT(STOP_THRESH_ARG))
140 }
141
142 // Battery2
143 If (Arg0 == 2)
144 {
145 Return (0x300 | \_SB.PCI0.LPCB.EC.BAT1.GETT(STOP_THRESH_ARG))
146 }
147
148 Return (1 << 31)
149}
150
151// Get start threshold
152Method (BCTG, 1, NotSerialized)
153{
154 // Battery 1
155 If (Arg0 == 1)
156 {
157 Return (0x300 | \_SB.PCI0.LPCB.EC.BAT0.GETT(START_THRESH_ARG))
158 }
159
160 // Battery 2
161 If (Arg0 == 2)
162 {
163 Return (0x300 | \_SB.PCI0.LPCB.EC.BAT1.GETT(START_THRESH_ARG))
164 }
165
166 Return (1 << 31)
167}