xref: /freebsd/sys/dev/acpica/acpi_smbus.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
1a7e59a76SNate Lawson /*-
2a7e59a76SNate Lawson  * Copyright (c) 2005 Hans Petter Selasky
3a7e59a76SNate Lawson  * All rights reserved.
4a7e59a76SNate Lawson  *
5a7e59a76SNate Lawson  * Redistribution and use in source and binary forms, with or without
6a7e59a76SNate Lawson  * modification, are permitted provided that the following conditions
7a7e59a76SNate Lawson  * are met:
8a7e59a76SNate Lawson  * 1. Redistributions of source code must retain the above copyright
9a7e59a76SNate Lawson  *    notice, this list of conditions and the following disclaimer.
10a7e59a76SNate Lawson  * 2. Redistributions in binary form must reproduce the above copyright
11a7e59a76SNate Lawson  *    notice, this list of conditions and the following disclaimer in the
12a7e59a76SNate Lawson  *    documentation and/or other materials provided with the distribution.
13a7e59a76SNate Lawson  *
14a7e59a76SNate Lawson  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15a7e59a76SNate Lawson  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16a7e59a76SNate Lawson  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17a7e59a76SNate Lawson  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18a7e59a76SNate Lawson  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19a7e59a76SNate Lawson  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20a7e59a76SNate Lawson  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21a7e59a76SNate Lawson  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22a7e59a76SNate Lawson  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23a7e59a76SNate Lawson  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24a7e59a76SNate Lawson  * SUCH DAMAGE.
25a7e59a76SNate Lawson  */
26a7e59a76SNate Lawson 
27a7e59a76SNate Lawson #ifndef _ACPI_SMBUS_H_
28a7e59a76SNate Lawson #define _ACPI_SMBUS_H_
29a7e59a76SNate Lawson 
30a7e59a76SNate Lawson /*
31a7e59a76SNate Lawson  * System Management Bus register offsets
32a7e59a76SNate Lawson  */
33a7e59a76SNate Lawson #define SMBUS_PRTCL		0
34a7e59a76SNate Lawson #define SMBUS_STS		1
35a7e59a76SNate Lawson #define SMBUS_STS_MASK		0x1f
36a7e59a76SNate Lawson #define SMBUS_ADDR		2
37a7e59a76SNate Lawson #define SMBUS_CMD		3
38a7e59a76SNate Lawson #define SMBUS_DATA		4	/* 32 bytes */
39a7e59a76SNate Lawson #define SMBUS_BCNT		36
40a7e59a76SNate Lawson #define SMBUS_ALRM_ADDR		37
41a7e59a76SNate Lawson #define SMBUS_ALRM_DATA		38	/* 2 bytes */
42a7e59a76SNate Lawson 
43a7e59a76SNate Lawson /*
44a7e59a76SNate Lawson  * Smart-Battery commands and definitions
45a7e59a76SNate Lawson  */
46a7e59a76SNate Lawson 
47a7e59a76SNate Lawson /* Base address */
48a7e59a76SNate Lawson #define SMBATT_ADDRESS		0x16
49a7e59a76SNate Lawson 
50a7e59a76SNate Lawson /* access: READ WRITE WORD */
51a7e59a76SNate Lawson #define SMBATT_CMD_MANUFACTURER_ACCESS		0
52a7e59a76SNate Lawson 
53a7e59a76SNate Lawson /*
54a7e59a76SNate Lawson  * access: READ WRITE WORD
55a7e59a76SNate Lawson  * unit  : mAh (CAPACITY_MODE=0) or 10 mWh (CAPACITY_MODE=1)
56a7e59a76SNate Lawson  * range : 0 .. 65535 inclusively
57a7e59a76SNate Lawson  */
58a7e59a76SNate Lawson #define SMBATT_CMD_REMAINING_CAPACITY_ALARM	0x1
59a7e59a76SNate Lawson 
60a7e59a76SNate Lawson /*
61a7e59a76SNate Lawson  * access: READ WRITE WORD
62a7e59a76SNate Lawson  * unit  : minutes
63a7e59a76SNate Lawson  * range : 0 .. 65535 inclusively
64a7e59a76SNate Lawson  */
65a7e59a76SNate Lawson #define SMBATT_CMD_REMAINING_TIME_ALARM		0x2
66a7e59a76SNate Lawson 
67a7e59a76SNate Lawson /* access: READ WRITE WORD */
68a7e59a76SNate Lawson #define SMBATT_CMD_BATTERY_MODE			0x3
69a7e59a76SNate Lawson 
70a7e59a76SNate Lawson #define SMBATT_BM_INTERNAL_CHARGE_CONTROLLER	(1 <<  0) /* READ */
71a7e59a76SNate Lawson #define SMBATT_BM_PRIMARY_BATTERY_SUPPORT	(1 <<  1) /* READ */
72a7e59a76SNate Lawson #define SMBATT_BM_CONDITION_FLAG		(1 <<  7) /* READ */
73a7e59a76SNate Lawson #define SMBATT_BM_CHARGE_CONTROLLER_ENABLED	(1 <<  8) /* READ WRITE */
74a7e59a76SNate Lawson #define SMBATT_BM_PRIMARY_BATTERY		(1 <<  9) /* READ WRITE */
75a7e59a76SNate Lawson #define SMBATT_BM_ALARM_MODE			(1 << 13) /* READ WRITE */
76a7e59a76SNate Lawson #define SMBATT_BM_CHARGER_MODE			(1 << 14) /* READ WRITE */
77a7e59a76SNate Lawson #define SMBATT_BM_CAPACITY_MODE			(1 << 15) /* READ WRITE */
78a7e59a76SNate Lawson 
79a7e59a76SNate Lawson /*
80a7e59a76SNate Lawson  * access: READ WRITE WORD
81a7e59a76SNate Lawson  * unit  : mAh (CAPACITY_MODE=0) or 10 mWh (CAPACITY_MODE=1)
82a7e59a76SNate Lawson  * range : signed WORD
83a7e59a76SNate Lawson  */
84a7e59a76SNate Lawson #define SMBATT_CMD_AT_RATE			0x4
85a7e59a76SNate Lawson 
86a7e59a76SNate Lawson /*
87a7e59a76SNate Lawson  * access: READ WORD
88a7e59a76SNate Lawson  * unit  : minutes
89a7e59a76SNate Lawson  * range : 0 .. 65534, 65535 has special meaning
90a7e59a76SNate Lawson  */
91a7e59a76SNate Lawson #define SMBATT_CMD_AT_RATE_TIME_TO_FULL		0x5
92a7e59a76SNate Lawson 
93a7e59a76SNate Lawson /*
94a7e59a76SNate Lawson  * access: READ WORD
95a7e59a76SNate Lawson  * unit  : minutes
96a7e59a76SNate Lawson  * range : 0 .. 65534, 65535 has special meaning
97a7e59a76SNate Lawson  */
98a7e59a76SNate Lawson #define SMBATT_CMD_AT_RATE_TIME_TO_EMPTY	0x6
99a7e59a76SNate Lawson 
100a7e59a76SNate Lawson /*
101a7e59a76SNate Lawson  * access: READ WORD */
102a7e59a76SNate Lawson #define SMBATT_CMD_AT_RATE_OK			0x7
103a7e59a76SNate Lawson 
104a7e59a76SNate Lawson /*
105a7e59a76SNate Lawson  * access: READ WORD
106a7e59a76SNate Lawson  * unit  : 0.1 degrees Kelvin
107a7e59a76SNate Lawson  * range : 0 .. 6553.5 Kelvin
108a7e59a76SNate Lawson  */
109a7e59a76SNate Lawson #define SMBATT_CMD_TEMPERATURE			0x8
110a7e59a76SNate Lawson 
111a7e59a76SNate Lawson /*
112a7e59a76SNate Lawson  * access: READ WORD
113a7e59a76SNate Lawson  * unit  : mV
114a7e59a76SNate Lawson  * range : 0 .. 65535 inclusively
115a7e59a76SNate Lawson  */
116a7e59a76SNate Lawson #define SMBATT_CMD_VOLTAGE			0x9
117a7e59a76SNate Lawson 
118a7e59a76SNate Lawson /*
119a7e59a76SNate Lawson  * access: READ WORD
120a7e59a76SNate Lawson  * unit  : mA
121a7e59a76SNate Lawson  * range : signed WORD
122a7e59a76SNate Lawson  */
123a7e59a76SNate Lawson #define SMBATT_CMD_CURRENT			0xa
124a7e59a76SNate Lawson 
125a7e59a76SNate Lawson /*
126a7e59a76SNate Lawson  * access: READ WORD
127a7e59a76SNate Lawson  * unit  : mA
128a7e59a76SNate Lawson  * range : signed WORD
129a7e59a76SNate Lawson  */
130a7e59a76SNate Lawson #define SMBATT_CMD_AVERAGE_CURRENT		0xb
131a7e59a76SNate Lawson 
132a7e59a76SNate Lawson /*
133a7e59a76SNate Lawson  * access: READ WORD
134a7e59a76SNate Lawson  * unit  : percent
135a7e59a76SNate Lawson  * range : 0..100 inclusively
136a7e59a76SNate Lawson  */
137a7e59a76SNate Lawson #define SMBATT_CMD_MAX_ERROR			0xc
138a7e59a76SNate Lawson 
139a7e59a76SNate Lawson /*
140a7e59a76SNate Lawson  * access: READ WORD
141a7e59a76SNate Lawson  * unit  : percent
142a7e59a76SNate Lawson  * range : 0..100 inclusively
143a7e59a76SNate Lawson  */
144a7e59a76SNate Lawson #define SMBATT_CMD_RELATIVE_STATE_OF_CHARGE	0xd
145a7e59a76SNate Lawson 
146a7e59a76SNate Lawson /*
147a7e59a76SNate Lawson  * access: READ WORD
148a7e59a76SNate Lawson  * unit  : percent
149a7e59a76SNate Lawson  * range : 0..100 inclusively
150a7e59a76SNate Lawson  */
151a7e59a76SNate Lawson #define SMBATT_CMD_ABSOLUTE_STATE_OF_CHARGE	0xe
152a7e59a76SNate Lawson 
153a7e59a76SNate Lawson /*
154a7e59a76SNate Lawson  * access: READ WORD
155a7e59a76SNate Lawson  * unit  : mAh (CAPACITY_MODE=0) or 10 mWh (CAPACITY_MODE=1)
156a7e59a76SNate Lawson  * range : 0..65535 inclusively
157a7e59a76SNate Lawson  */
158a7e59a76SNate Lawson #define SMBATT_CMD_REMAINING_CAPACITY		0xf
159a7e59a76SNate Lawson 
160a7e59a76SNate Lawson /*
161a7e59a76SNate Lawson  * access: READ WORD
162a7e59a76SNate Lawson  * unit  : mAh (CAPACITY_MODE=0) or 10 mWh (CAPACITY_MODE=1)
163a7e59a76SNate Lawson  * range : 0..65535 inclusively
164a7e59a76SNate Lawson  */
165a7e59a76SNate Lawson #define SMBATT_CMD_FULL_CHARGE_CAPACITY		0x10
166a7e59a76SNate Lawson 
167a7e59a76SNate Lawson /*
168a7e59a76SNate Lawson  * access: READ WORD
169a7e59a76SNate Lawson  * unit  : minutes
170a7e59a76SNate Lawson  * range : 0..65534, 65535 is reserved
171a7e59a76SNate Lawson  */
172a7e59a76SNate Lawson #define SMBATT_CMD_RUN_TIME_TO_EMPTY		0x11
173a7e59a76SNate Lawson 
174a7e59a76SNate Lawson /*
175a7e59a76SNate Lawson  * access: READ WORD
176a7e59a76SNate Lawson  * unit  : minutes
177a7e59a76SNate Lawson  * range : 0..65534, 65535 is reserved
178a7e59a76SNate Lawson  */
179a7e59a76SNate Lawson #define SMBATT_CMD_AVERAGE_TIME_TO_EMPTY	0x12
180a7e59a76SNate Lawson 
181a7e59a76SNate Lawson /*
182a7e59a76SNate Lawson  * access: READ WORD
183a7e59a76SNate Lawson  * unit  : minutes
184a7e59a76SNate Lawson  * range : 0..65534, 65535 is reserved
185a7e59a76SNate Lawson  */
186a7e59a76SNate Lawson #define SMBATT_CMD_AVERAGE_TIME_TO_FULL		0x13
187a7e59a76SNate Lawson 
188a7e59a76SNate Lawson /*
189a7e59a76SNate Lawson  * access: READ WORD
190a7e59a76SNate Lawson  * unit  : mA
191a7e59a76SNate Lawson  */
192a7e59a76SNate Lawson #define SMBATT_CMD_CHARGING_CURRENT		0x14
193a7e59a76SNate Lawson 
194a7e59a76SNate Lawson /*
195a7e59a76SNate Lawson  * access: READ WORD
196a7e59a76SNate Lawson  * unit  : mV
197a7e59a76SNate Lawson  * range : 0 .. 65534, 65535 reserved
198a7e59a76SNate Lawson  */
199a7e59a76SNate Lawson #define SMBATT_CMD_CHARGING_VOLTAGE		0x15
200a7e59a76SNate Lawson 
201a7e59a76SNate Lawson /* access: READ WORD */
202a7e59a76SNate Lawson #define SMBATT_CMD_BATTERY_STATUS		0x16
203a7e59a76SNate Lawson 
204a7e59a76SNate Lawson /* alarm bits */
205a7e59a76SNate Lawson #define SMBATT_BS_OVER_CHARGED_ALARM		(1 << 15)
206a7e59a76SNate Lawson #define SMBATT_BS_TERMINATE_CHARGE_ALARM	(1 << 14)
207a7e59a76SNate Lawson #define SMBATT_BS_RESERVED_2			(1 << 13)
208a7e59a76SNate Lawson #define SMBATT_BS_OVER_TEMP_ALARM		(1 << 12)
209a7e59a76SNate Lawson #define SMBATT_BS_TERMINATE_DISCHARGE_ALARM	(1 << 11)
210a7e59a76SNate Lawson #define SMBATT_BS_RESERVED_1			(1 << 10)
211a7e59a76SNate Lawson #define SMBATT_BS_REMAINING_CAPACITY_ALARM     	(1 << 9)
212a7e59a76SNate Lawson #define SMBATT_BS_REMAINING_TIME_ALARM		(1 << 8)
213a7e59a76SNate Lawson 
214a7e59a76SNate Lawson /* status bits */
215a7e59a76SNate Lawson #define SMBATT_BS_INITIALIZED			(1 << 7)
216a7e59a76SNate Lawson #define SMBATT_BS_DISCHARGING			(1 << 6)
217a7e59a76SNate Lawson #define SMBATT_BS_FULLY_CHARGED			(1 << 5)
218a7e59a76SNate Lawson #define SMBATT_BS_FULLY_DISCHARGED		(1 << 4)
219a7e59a76SNate Lawson 
220a7e59a76SNate Lawson /* error bits */
221a7e59a76SNate Lawson #define SMBATT_BS_GET_ERROR(x)			((x) & 0xf)
222a7e59a76SNate Lawson #define SMBATT_BS_ERROR_OK			0
223a7e59a76SNate Lawson #define SMBATT_BS_ERROR_BUSY			1
224a7e59a76SNate Lawson #define SMBATT_BS_ERROR_RESERVED_COMMAND	2
225a7e59a76SNate Lawson #define SMBATT_BS_ERROR_UNSUPPORTED_COMMAND	3
226a7e59a76SNate Lawson #define SMBATT_BS_ERROR_ACCESS_DENIED		4
227a7e59a76SNate Lawson #define SMBATT_BS_ERROR_OVER_UNDER_FLOW		5
228a7e59a76SNate Lawson #define SMBATT_BS_ERROR_BADSIZE			6
229a7e59a76SNate Lawson #define SMBATT_BS_ERROR_UNKNOWN			7
230a7e59a76SNate Lawson 
231a7e59a76SNate Lawson /*
232a7e59a76SNate Lawson  * access: READ WORD
233a7e59a76SNate Lawson  * unit  : cycle(s)
234a7e59a76SNate Lawson  * range : 0 .. 65534, 65535 reserved
235a7e59a76SNate Lawson  */
236a7e59a76SNate Lawson #define SMBATT_CMD_CYCLE_COUNT			0x17
237a7e59a76SNate Lawson 
238a7e59a76SNate Lawson /*
239a7e59a76SNate Lawson  * access: READ WORD
240a7e59a76SNate Lawson  * unit  : mAh (CAPACITY_MODE=0) or 10 mWh (CAPACITY_MODE=1)
241a7e59a76SNate Lawson  * range : 0..65535 inclusively
242a7e59a76SNate Lawson  */
243a7e59a76SNate Lawson #define SMBATT_CMD_DESIGN_CAPACITY		0x18
244a7e59a76SNate Lawson 
245a7e59a76SNate Lawson /*
246a7e59a76SNate Lawson  * access: READ WORD
247a7e59a76SNate Lawson  * unit  : mV
248a7e59a76SNate Lawson  * range : 0..65535 mV
249a7e59a76SNate Lawson  */
250a7e59a76SNate Lawson #define SMBATT_CMD_DESIGN_VOLTAGE		0x19
251a7e59a76SNate Lawson 
252a7e59a76SNate Lawson /* access: READ WORD */
253a7e59a76SNate Lawson #define SMBATT_CMD_SPECIFICATION_INFO		0x1a
254a7e59a76SNate Lawson 
255a7e59a76SNate Lawson #define SMBATT_SI_GET_REVISION(x)	(((x) >>  0) & 0xf)
256a7e59a76SNate Lawson #define SMBATT_SI_GET_VERSION(x)	(((x) >>  4) & 0xf)
257a7e59a76SNate Lawson #define SMBATT_SI_GET_VSCALE(x)		(((x) >>  8) & 0xf)
258a7e59a76SNate Lawson #define SMBATT_SI_GET_IPSCALE(x)	(((x) >> 12) & 0xf)
259a7e59a76SNate Lawson 
260a7e59a76SNate Lawson /* access: READ WORD */
261a7e59a76SNate Lawson #define SMBATT_CMD_MANUFACTURE_DATE 		0x1b
262a7e59a76SNate Lawson 
263a7e59a76SNate Lawson #define SMBATT_MD_GET_DAY(x)		 (((x) >> 0) & 0x1f)
264a7e59a76SNate Lawson #define SMBATT_MD_GET_MONTH(x)		 (((x) >> 5) & 0xf)
265a7e59a76SNate Lawson #define SMBATT_MD_GET_YEAR(x)		((((x) >> 9) & 0x7f) + 1980)
266a7e59a76SNate Lawson 
267a7e59a76SNate Lawson /* access: READ WORD */
268a7e59a76SNate Lawson #define SMBATT_CMD_SERIAL_NUMBER		0x1c
269a7e59a76SNate Lawson 
270a7e59a76SNate Lawson /* access: READ BLOCK */
271a7e59a76SNate Lawson #define SMBATT_CMD_MANUFACTURER_NAME		0x20
272a7e59a76SNate Lawson 
273a7e59a76SNate Lawson /* access: READ BLOCK */
274a7e59a76SNate Lawson #define SMBATT_CMD_DEVICE_NAME			0x21
275a7e59a76SNate Lawson 
276a7e59a76SNate Lawson /* access: READ BLOCK */
277a7e59a76SNate Lawson #define SMBATT_CMD_DEVICE_CHEMISTRY		0x22
278a7e59a76SNate Lawson 
279a7e59a76SNate Lawson /* access: READ BLOCK */
280a7e59a76SNate Lawson #define SMBATT_CMD_MANUFACTURER_DATA		0x23
281a7e59a76SNate Lawson 
282a7e59a76SNate Lawson #endif /* !_ACPI_SMBUS_H_ */
283