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