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