blob: 0f1a619f41339bab124b4a08eb48dff2f0a475e4 [file] [log] [blame]
/* Copyright 2020 The Chromium OS Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*
* LION Semiconductor LN-9310 switched capacitor converter.
*/
#ifndef __CROS_EC_LN9310_H
#define __CROS_EC_LN9310_H
/* I2C address */
#define LN9310_I2C_ADDR_0_FLAGS 0x72
#define LN9310_I2C_ADDR_1_FLAGS 0x73
#define LN9310_I2C_ADDR_2_FLAGS 0x53
#define LN9310_I2C_ADDR_3_FLAGS 0x54
/* Registers */
#define LN9310_REG_CHIP_ID 0x00
#define LN9310_CHIP_ID 0x44
#define LN9310_REG_INT1 0x01
#define LN9310_REG_INT1_MSK 0x02
#define LN9310_INT1_TIMER BIT(0)
#define LN9310_INT1_INFET BIT(1)
#define LN9310_INT1_TEMP BIT(2)
#define LN9310_INT1_REV_CURR BIT(3)
#define LN9310_INT1_MODE BIT(4)
#define LN9310_INT1_ALARM BIT(5)
#define LN9310_INT1_OK BIT(6)
#define LN9310_INT1_FAULT BIT(7)
#define LN9310_REG_SYSGPIO_MSK 0x03
#define LN9310_REG_SYS_STS 0x04
#define LN9310_SYS_STANDBY BIT(0)
#define LN9310_SYS_SWITCHING21_ACTIVE BIT(1)
#define LN9310_SYS_SWITCHING31_ACTIVE BIT(2)
#define LN9310_SYS_BYPASS_ACTIVE BIT(3)
#define LN9310_SYS_INFET_OK BIT(4)
#define LN9310_SYS_SC_OUT_SWITCH_OK BIT(5)
#define LN9310_SYS_INFET_OUT_SWITCH_OK BIT(6)
#define LN9310_REG_SAFETY_STS 0x05
#define LN9310_REG_FAULT1_STS 0x06
#define LN9310_REG_FAULT2_STS 0x07
#define LN9310_REG_PWR_CTRL 0x1d
#define LN9310_PWR_OP_MODE0 BIT(0)
#define LN9310_PWR_OP_MODE1 BIT(1)
#define LN9310_PWR_INFET_EN BIT(2)
#define LN9310_PWR_INFET_AUTO_MODE BIT(3)
#define LN9310_PWR_REVERSE_MODE BIT(4)
#define LN9310_PWR_VIN_OV_IGNORE BIT(5)
#define LN9310_PWR_OP_MANUAL_UPDATE BIT(6)
#define LN9310_PWR_FORCE_INSNS_EN BIT(7)
#define LN9310_PWR_OP_MODE_MASK 0x03
#define LN9310_PWR_OP_MODE_DISABLED 0x00
#define LN9310_PWR_OP_MODE_BYPASS 0x01
#define LN9310_PWR_OP_MODE_SWITCH21 0x02
#define LN9310_PWR_OP_MODE_SWITCH31 0x03
#define LN9310_PWR_OP_MODE_MANUAL_UPDATE_MASK 0x40
#define LN9310_PWR_OP_MODE_MANUAL_UPDATE_OFF 0x00
#define LN9310_REG_SYS_CTRL 0x1e
#define LN9310_REG_STARTUP_CTRL 0x1f
#define LN9310_STARTUP_STANDBY_EN BIT(0)
#define LN9310_STARTUP_SELECT_EXT_5V_FOR_VDR BIT(3)
#define LN9310_REG_IIN_CTRL 0x20
#define LN9310_REG_VIN_CTRL 0x21
#define LN9310_REG_TRACK_CTRL 0x22
#define LN9310_TRACK_INFET_OUT_SWITCH_OK_EN BIT(7)
#define LN9310_TRACK_INFET_OUT_SWITCH_OK_CFG2 BIT(6)
#define LN9310_TRACK_INFET_OUT_SWITCH_OK_CFG1 BIT(5)
#define LN9310_TRACK_INFET_OUT_SWITCH_OK_CFG0 BIT(4)
#define LN9310_TRACK_INFET_OUT_SWITCH_OK_EN_MASK 0x80
#define LN9310_TRACK_INFET_OUT_SWITCH_OK_EN_ON 0x80
#define LN9310_TRACK_INFET_OUT_SWITCH_OK_EN_OFF 0x00
#define LN9310_TRACK_INFET_OUT_SWITCH_OK_CFG_MASK 0x70
#define LN9310_TRACK_INFET_OUT_SWITCH_OK_CFG_10V 0x10
#define LN9310_REG_OCP_CTRL 0x23
#define LN9310_REG_TIMER_CTRL 0x24
#define LN9310_TIMER_OP_SELF_SYNC_EN BIT(3)
#define LN9310_TIMER_OP_SELF_SYNC_EN_MASK 0x08
#define LN9310_TIMER_OP_SELF_SYNC_EN_ON 0x08
#define LN9310_REG_RECOVERY_CTRL 0x25
#define LN9310_REG_LB_CTRL 0x26
#define LN9310_LB_MIN_FREQ_EN BIT(2)
#define LN9310_LB_DELTA_MASK 0x38
#define LN9310_LB_DELTA_2S 0x20
#define LN9310_LB_DELTA_3S 0x20
#define LN9310_REG_SC_OUT_OV_CTRL 0x29
#define LN9310_REG_STS_CTRL 0x2d
#define LN9310_REG_MODE_CHANGE_CFG 0x2e
#define LN9310_MODE_TM_VIN_OV_CFG0 BIT(0)
#define LN9310_MODE_TM_VIN_OV_CFG1 BIT(1)
#define LN9310_MODE_TM_VIN_OV_CFG2 BIT(2)
#define LN9310_MODE_TM_SC_OUT_PRECHG_CFG0 BIT(3)
#define LN9310_MODE_TM_SC_OUT_PRECHG_CFG1 BIT(4)
#define LN9310_MODE_TM_TRACK_CFG0 BIT(5)
#define LN9310_MODE_TM_TRACK_CFG1 BIT(6)
#define LN9310_MODE_FORCE_MODE_CFG BIT(7)
#define LN9310_MODE_TM_TRACK_MASK 0x60
#define LN9310_MODE_TM_TRACK_BYPASS 0x00
#define LN9310_MODE_TM_TRACK_SWITCH21 0x20
#define LN9310_MODE_TM_TRACK_SWITCH31 0x60
#define LN9310_MODE_TM_SC_OUT_PRECHG_MASK 0x18
#define LN9310_MODE_TM_SC_OUT_PRECHG_BYPASS 0x0
#define LN9310_MODE_TM_SC_OUT_PRECHG_SWITCH21 0x08
#define LN9310_MODE_TM_SC_OUT_PRECHG_SWITCH31 0x18
#define LN9310_MODE_TM_VIN_OV_CFG_MASK 0x07
#define LN9310_MODE_TM_VIN_OV_CFG_2S 0x0 /* 14V */
#define LN9310_MODE_TM_VIN_OV_CFG_3S 0x2 /* 20V */
#define LN9310_REG_SC_DITHER_CTRL 0x2f
#define LN9310_REG_BC_STS_B 0x51
#define LN9310_BC_STS_B_INFET_OUT_SWITCH_OK BIT(5)
#define LN9310_BC_STS_B_INFET_OUT_SWITCH_OK_MASK 0x20
/* LN9310 Timing definition */
#define LN9310_CDC_DELAY 120 /* 120us */
/* Battery cell type */
enum battery_cell_type {
BATTERY_CELL_TYPE_UNKNOWN = 0,
BATTERY_CELL_TYPE_2S = 2,
BATTERY_CELL_TYPE_3S = 3
};
/* Define configuration of LN9310 part */
struct ln9310_config_t {
const int i2c_port;
const int i2c_addr_flags;
};
/* Configuration struct defined at board level */
extern const struct ln9310_config_t ln9310_config;
/* Init the driver */
void ln9310_init(void);
/* Interrupt handler */
void ln9310_interrupt(enum gpio_signal signal);
/* Return the POWER_GOOD status */
int ln9310_power_good(void);
#endif /* __CROS_EC_LN9310_H */