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