/* Copyright 2012 The ChromiumOS Authors
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 *
 * Smart battery v1.0
 * Smart battery charger v1.1
 */
#ifndef __CROS_EC_BATTERY_SMART_H
#define __CROS_EC_BATTERY_SMART_H

#include "common.h"

#ifdef __cplusplus
extern "C" {
#endif

/* Smart battery and charger I2C address */
#define BATTERY_ADDR_FLAGS 0x0B
#define CHARGER_ADDR_FLAGS 0x09

/* Charger functions */
#define SB_CHARGER_SPEC_INFO 0x11
#define SB_CHARGE_MODE 0x12
#define SB_CHARGER_STATUS 0x13
#define SB_CHARGING_CURRENT 0x14
#define SB_CHARGING_VOLTAGE 0x15
#define SB_ALARM_WARNING 0x16

/* Battery functions */
#define SB_MANUFACTURER_ACCESS 0x00
#define SB_REMAINING_CAPACITY_ALARM 0x01
#define SB_REMAINING_TIME_ALARM 0x02
#define SB_BATTERY_MODE 0x03
#define SB_AT_RATE 0x04
#define SB_AT_RATE_TIME_TO_FULL 0x05
#define SB_AT_RATE_TIME_TO_EMPTY 0x06
#define SB_AT_RATE_OK 0x07
#define SB_TEMPERATURE 0x08
#define SB_VOLTAGE 0x09
#define SB_CURRENT 0x0a
#define SB_AVERAGE_CURRENT 0x0b
#define SB_MAX_ERROR 0x0c
#define SB_RELATIVE_STATE_OF_CHARGE 0x0d
#define SB_ABSOLUTE_STATE_OF_CHARGE 0x0e
#define SB_REMAINING_CAPACITY 0x0f
#define SB_FULL_CHARGE_CAPACITY 0x10
#define SB_RUN_TIME_TO_EMPTY 0x11
#define SB_AVERAGE_TIME_TO_EMPTY 0x12
#define SB_AVERAGE_TIME_TO_FULL 0x13
#define SB_CHARGING_CURRENT 0x14
#define SB_CHARGING_VOLTAGE 0x15
#define SB_BATTERY_STATUS 0x16
#define SB_CYCLE_COUNT 0x17
#define SB_DESIGN_CAPACITY 0x18
#define SB_DESIGN_VOLTAGE 0x19
#define SB_SPECIFICATION_INFO 0x1a
#define SB_MANUFACTURE_DATE 0x1b
#define SB_SERIAL_NUMBER 0x1c
#define SB_MANUFACTURER_NAME 0x20
#define SB_DEVICE_NAME 0x21
#define SB_DEVICE_CHEMISTRY 0x22
#define SB_MANUFACTURER_DATA 0x23
#define SB_OPTIONAL_MFG_FUNC1 0x3C
#define SB_OPTIONAL_MFG_FUNC2 0x3D
#define SB_OPTIONAL_MFG_FUNC3 0x3E
#define SB_OPTIONAL_MFG_FUNC4 0x3F
/* Extension of smart battery spec, may not be supported on all platforms */
#define SB_PACK_STATUS 0x43
#define SB_ALT_MANUFACTURER_ACCESS 0x44
#define SB_MANUFACTURE_INFO 0x70

/* Battery mode */
#define MODE_INTERNAL_CHARGE_CONTROLLER BIT(0)
#define MODE_PRIMARY_BATTERY_SUPPORT BIT(1)
#define MODE_CONDITION_CYCLE BIT(7)
#define MODE_CHARGE_CONTROLLER_ENABLED BIT(8)
#define MODE_PRIMARY_BATTERY BIT(9)
#define MODE_ALARM BIT(13)
#define MODE_CHARGER BIT(14)
#define MODE_CAPACITY BIT(15)

/* Battery status */
#define STATUS_ERR_CODE_MASK 0xf
#define STATUS_CODE_OK 0
#define STATUS_CODE_BUSY 1
#define STATUS_CODE_RESERVED 2
#define STATUS_CODE_UNSUPPORTED 3
#define STATUS_CODE_ACCESS_DENIED 4
#define STATUS_CODE_OVERUNDERFLOW 5
#define STATUS_CODE_BADSIZE 6
#define STATUS_CODE_UNKNOWN_ERROR 7
#define STATUS_FULLY_DISCHARGED BIT(4)
#define STATUS_FULLY_CHARGED BIT(5)
#define STATUS_DISCHARGING BIT(6)
#define STATUS_INITIALIZED BIT(7)
#define STATUS_REMAINING_TIME_ALARM BIT(8)
#define STATUS_REMAINING_CAPACITY_ALARM BIT(9)
#define STATUS_TERMINATE_DISCHARGE_ALARM BIT(11)
#define STATUS_OVERTEMP_ALARM BIT(12)
#define STATUS_TERMINATE_CHARGE_ALARM BIT(14)
#define STATUS_OVERCHARGED_ALARM BIT(15)

/* Battery Spec Info */
#define BATTERY_SPEC_REVISION_MASK 0x000F
#define BATTERY_SPEC_REVISION_SHIFT 0
#define BATTERY_SPEC_VERSION_MASK 0x00F0
#define BATTERY_SPEC_VERSION_SHIFT 4
#define BATTERY_SPEC_VSCALE_MASK 0x0F00
#define BATTERY_SPEC_VSCALE_SHIFT 8
#define BATTERY_SPEC_IPSCALE_MASK 0xF000
#define BATTERY_SPEC_IPSCALE_SHIFT 12

#define BATTERY_SPEC_VERSION(INFO) \
	((INFO & BATTERY_SPEC_VERSION_MASK) >> BATTERY_SPEC_VERSION_SHIFT)
/* Smart battery version info */
#define BATTERY_SPEC_VER_1_0 1
#define BATTERY_SPEC_VER_1_1 2
#define BATTERY_SPEC_VER_1_1_WITH_PEC 3
/* Smart battery revision info */
#define BATTERY_SPEC_REVISION_1 1

/* Charge mode */
#define CHARGE_FLAG_INHIBIT_CHARGE BIT(0)
#define CHARGE_FLAG_ENABLE_POLLING BIT(1)
#define CHARGE_FLAG_POR_RESET BIT(2)
#define CHARGE_FLAG_RESET_TO_ZERO BIT(3)
/* Charger status */
#define CHARGER_CHARGE_INHIBITED BIT(0)
#define CHARGER_POLLING_ENABLED BIT(1)
#define CHARGER_VOLTAGE_NOTREG BIT(2)
#define CHARGER_CURRENT_NOTREG BIT(3)
#define CHARGER_LEVEL_2 BIT(4)
#define CHARGER_LEVEL_3 BIT(5)
#define CHARGER_CURRENT_OR BIT(6)
#define CHARGER_VOLTAGE_OR BIT(7)
#define CHARGER_RES_OR BIT(8)
#define CHARGER_RES_COLD BIT(9)
#define CHARGER_RES_HOT BIT(10)
#define CHARGER_RES_UR BIT(11)
#define CHARGER_ALARM_INHIBITED BIT(12)
#define CHARGER_POWER_FAIL BIT(13)
#define CHARGER_BATTERY_PRESENT BIT(14)
#define CHARGER_AC_PRESENT BIT(15)
#define CHARGER_BYPASS_MODE BIT(16)
/* Charger specification info */
#define INFO_CHARGER_SPEC(INFO) ((INFO) & 0xf)
#define INFO_SELECTOR_SUPPORT(INFO) (((INFO) >> 4) & 1)

/* Manufacturer Access parameters */
#define PARAM_SAFETY_STATUS 0x51
#define PARAM_OPERATION_STATUS 0x54
#define PARAM_FIRMWARE_RUNTIME 0x62
/* Operation status masks -- 6 byte reply */
/* reply[3] */
#define BATTERY_DISCHARGING_DISABLED 0x20
#define BATTERY_CHARGING_DISABLED 0x40

/* Battery manufacture date */
#define MANUFACTURE_DATE_DAY_MASK 0x001F
#define MANUFACTURE_DATE_DAY_SHIFT 0
#define MANUFACTURE_DATE_MONTH_MASK 0x01E0
#define MANUFACTURE_DATE_MONTH_SHIFT 5
#define MANUFACTURE_DATE_YEAR_MASK 0xFE00
#define MANUFACTURE_DATE_YEAR_SHIFT 9
#define MANUFACTURE_DATE_YEAR_OFFSET 1980
#define MANUFACTURE_RUNTIME_SIZE 4

/* Read from battery */
int sb_read(int cmd, int *param);

/**
 * Read null-terminated string from battery
 * @param offset	Battery register to read from
 * @param data		Buffer to hold the string
 * @param len		Length of data buffer
 */
int sb_read_string(int offset, uint8_t *data, int len);

/**
 * Read sized block of data from battery
 * @param offset	Battery register to read from
 * @param data		Buffer to hold read data
 * @param len		Length of data buffer
 */
int sb_read_sized_block(int offset, uint8_t *data, int len);

/* Write to battery */
int sb_write(int cmd, int param);

/**
 * Write block to do battery cutoff
 *
 * @param reg		Battery cutoff register
 * @param val		Battery cutoff data value
 * @param len		Param val data length
 * @return          non-zero if error
 */
int sb_write_block(int reg, const uint8_t *val, int len);

/* Read manufactures access data from the battery */
int sb_read_mfgacc(int cmd, int block, uint8_t *data, int len);

/* Read manufactures access data from the battery */
int sb_read_mfgacc_block(int cmd, int block, uint8_t *data, int len);

#ifdef __cplusplus
}
#endif

#endif /* __CROS_EC_BATTERY_SMART_H */
