summaryrefslogtreecommitdiff
path: root/driver/ln9310.h
blob: 92aa16e8222b22312a00ee53fff46ab5efab2fa7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/* 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_REG_SYS_CTRL		0x1e
#define LN9310_SYS_CTRL_LB_DELTA_MASK	0x38
#define LN9310_SYS_CTRL_LB_DELTA_2S	0x4
#define LN9310_SYS_CTRL_LB_DELTA_3S	0x4

#define LN9310_REG_STARTUP_CTRL		0x1f
#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_REG_RECOVERY_CTRL	0x25
#define LN9310_REG_LB_CTRL		0x26
#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

/* 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 */