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