summaryrefslogtreecommitdiffstats
path: root/include/linux/mfd/rohm-bd96801.h
blob: e2d9e10b6364c7786e8ab978263b6dbcd0e02f85 (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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
/* SPDX-License-Identifier: GPL-2.0-or-later */
/* Copyright (C) 2024 ROHM Semiconductors */

#ifndef __MFD_BD96801_H__
#define __MFD_BD96801_H__

#define BD96801_REG_SSCG_CTRL		0x09
#define BD96801_REG_SHD_INTB            0x20
#define BD96801_LDO5_VOL_LVL_REG	0x2c
#define BD96801_LDO6_VOL_LVL_REG	0x2d
#define BD96801_LDO7_VOL_LVL_REG	0x2e
#define BD96801_REG_BUCK_OVP		0x30
#define BD96801_REG_BUCK_OVD		0x35
#define BD96801_REG_LDO_OVP		0x31
#define BD96801_REG_LDO_OVD		0x36
#define BD96801_REG_BOOT_OVERTIME	0x3a
#define BD96801_REG_WD_TMO		0x40
#define BD96801_REG_WD_CONF		0x41
#define BD96801_REG_WD_FEED		0x42
#define BD96801_REG_WD_FAILCOUNT	0x43
#define BD96801_REG_WD_ASK		0x46
#define BD96801_REG_WD_STATUS		0x4a
#define BD96801_REG_PMIC_STATE		0x4f
#define BD96801_REG_EXT_STATE		0x50

#define BD96801_STATE_STBY		0x09

#define BD96801_LOCK_REG		0x04
#define BD96801_UNLOCK			0x9d
#define BD96801_LOCK			0x00

/* IRQ register area */
#define BD96801_REG_INT_MAIN		0x51

/*
 * The BD96801 has two physical IRQ lines, INTB and ERRB.
 *
 * The 'main status register' is located at 0x51.
 * The ERRB status registers are located at 0x52 ... 0x5B
 * INTB status registers are at range 0x5c ... 0x63
 */
#define BD96801_REG_INT_SYS_ERRB1	0x52
#define BD96801_REG_INT_SYS_INTB	0x5c
#define BD96801_REG_INT_LDO7_INTB	0x63

/* MASK registers */
#define BD96801_REG_MASK_SYS_INTB	0x73
#define BD96801_REG_MASK_SYS_ERRB	0x69

#define BD96801_MAX_REGISTER		0x7a

#define BD96801_OTP_ERR_MASK		BIT(0)
#define BD96801_DBIST_ERR_MASK		BIT(1)
#define BD96801_EEP_ERR_MASK		BIT(2)
#define BD96801_ABIST_ERR_MASK		BIT(3)
#define BD96801_PRSTB_ERR_MASK		BIT(4)
#define BD96801_DRMOS1_ERR_MASK		BIT(5)
#define BD96801_DRMOS2_ERR_MASK		BIT(6)
#define BD96801_SLAVE_ERR_MASK		BIT(7)
#define BD96801_VREF_ERR_MASK		BIT(0)
#define BD96801_TSD_ERR_MASK		BIT(1)
#define BD96801_UVLO_ERR_MASK		BIT(2)
#define BD96801_OVLO_ERR_MASK		BIT(3)
#define BD96801_OSC_ERR_MASK		BIT(4)
#define BD96801_PON_ERR_MASK		BIT(5)
#define BD96801_POFF_ERR_MASK		BIT(6)
#define BD96801_CMD_SHDN_ERR_MASK	BIT(7)
#define BD96801_INT_PRSTB_WDT_ERR_MASK	BIT(0)
#define BD96801_INT_CHIP_IF_ERR_MASK	BIT(3)
#define BD96801_INT_SHDN_ERR_MASK	BIT(7)
#define BD96801_OUT_PVIN_ERR_MASK	BIT(0)
#define BD96801_OUT_OVP_ERR_MASK	BIT(1)
#define BD96801_OUT_UVP_ERR_MASK	BIT(2)
#define BD96801_OUT_SHDN_ERR_MASK	BIT(7)

/* ERRB IRQs */
enum {
	/* Reg 0x52, 0x53, 0x54 - ERRB system IRQs */
	BD96801_OTP_ERR_STAT,
	BD96801_DBIST_ERR_STAT,
	BD96801_EEP_ERR_STAT,
	BD96801_ABIST_ERR_STAT,
	BD96801_PRSTB_ERR_STAT,
	BD96801_DRMOS1_ERR_STAT,
	BD96801_DRMOS2_ERR_STAT,
	BD96801_SLAVE_ERR_STAT,
	BD96801_VREF_ERR_STAT,
	BD96801_TSD_ERR_STAT,
	BD96801_UVLO_ERR_STAT,
	BD96801_OVLO_ERR_STAT,
	BD96801_OSC_ERR_STAT,
	BD96801_PON_ERR_STAT,
	BD96801_POFF_ERR_STAT,
	BD96801_CMD_SHDN_ERR_STAT,
	BD96801_INT_PRSTB_WDT_ERR,
	BD96801_INT_CHIP_IF_ERR,
	BD96801_INT_SHDN_ERR_STAT,

	/* Reg 0x55 BUCK1 ERR IRQs */
	BD96801_BUCK1_PVIN_ERR_STAT,
	BD96801_BUCK1_OVP_ERR_STAT,
	BD96801_BUCK1_UVP_ERR_STAT,
	BD96801_BUCK1_SHDN_ERR_STAT,

	/* Reg 0x56 BUCK2 ERR IRQs */
	BD96801_BUCK2_PVIN_ERR_STAT,
	BD96801_BUCK2_OVP_ERR_STAT,
	BD96801_BUCK2_UVP_ERR_STAT,
	BD96801_BUCK2_SHDN_ERR_STAT,

	/* Reg 0x57 BUCK3 ERR IRQs */
	BD96801_BUCK3_PVIN_ERR_STAT,
	BD96801_BUCK3_OVP_ERR_STAT,
	BD96801_BUCK3_UVP_ERR_STAT,
	BD96801_BUCK3_SHDN_ERR_STAT,

	/* Reg 0x58 BUCK4 ERR IRQs */
	BD96801_BUCK4_PVIN_ERR_STAT,
	BD96801_BUCK4_OVP_ERR_STAT,
	BD96801_BUCK4_UVP_ERR_STAT,
	BD96801_BUCK4_SHDN_ERR_STAT,

	/* Reg 0x59 LDO5 ERR IRQs */
	BD96801_LDO5_PVIN_ERR_STAT,
	BD96801_LDO5_OVP_ERR_STAT,
	BD96801_LDO5_UVP_ERR_STAT,
	BD96801_LDO5_SHDN_ERR_STAT,

	/* Reg 0x5a LDO6 ERR IRQs */
	BD96801_LDO6_PVIN_ERR_STAT,
	BD96801_LDO6_OVP_ERR_STAT,
	BD96801_LDO6_UVP_ERR_STAT,
	BD96801_LDO6_SHDN_ERR_STAT,

	/* Reg 0x5b LDO7 ERR IRQs */
	BD96801_LDO7_PVIN_ERR_STAT,
	BD96801_LDO7_OVP_ERR_STAT,
	BD96801_LDO7_UVP_ERR_STAT,
	BD96801_LDO7_SHDN_ERR_STAT,
};

/* INTB IRQs */
enum {
	/* Reg 0x5c (System INTB) */
	BD96801_TW_STAT,
	BD96801_WDT_ERR_STAT,
	BD96801_I2C_ERR_STAT,
	BD96801_CHIP_IF_ERR_STAT,

	/* Reg 0x5d (BUCK1 INTB) */
	BD96801_BUCK1_OCPH_STAT,
	BD96801_BUCK1_OCPL_STAT,
	BD96801_BUCK1_OCPN_STAT,
	BD96801_BUCK1_OVD_STAT,
	BD96801_BUCK1_UVD_STAT,
	BD96801_BUCK1_TW_CH_STAT,

	/* Reg 0x5e (BUCK2 INTB) */
	BD96801_BUCK2_OCPH_STAT,
	BD96801_BUCK2_OCPL_STAT,
	BD96801_BUCK2_OCPN_STAT,
	BD96801_BUCK2_OVD_STAT,
	BD96801_BUCK2_UVD_STAT,
	BD96801_BUCK2_TW_CH_STAT,

	/* Reg 0x5f (BUCK3 INTB)*/
	BD96801_BUCK3_OCPH_STAT,
	BD96801_BUCK3_OCPL_STAT,
	BD96801_BUCK3_OCPN_STAT,
	BD96801_BUCK3_OVD_STAT,
	BD96801_BUCK3_UVD_STAT,
	BD96801_BUCK3_TW_CH_STAT,

	/* Reg 0x60 (BUCK4 INTB)*/
	BD96801_BUCK4_OCPH_STAT,
	BD96801_BUCK4_OCPL_STAT,
	BD96801_BUCK4_OCPN_STAT,
	BD96801_BUCK4_OVD_STAT,
	BD96801_BUCK4_UVD_STAT,
	BD96801_BUCK4_TW_CH_STAT,

	/* Reg 0x61 (LDO5 INTB) */
	BD96801_LDO5_OCPH_STAT, /* bit [0] */
	BD96801_LDO5_OVD_STAT,	/* bit [3] */
	BD96801_LDO5_UVD_STAT,  /* bit [4] */

	/* Reg 0x62 (LDO6 INTB) */
	BD96801_LDO6_OCPH_STAT, /* bit [0] */
	BD96801_LDO6_OVD_STAT,	/* bit [3] */
	BD96801_LDO6_UVD_STAT,  /* bit [4] */

	/* Reg 0x63 (LDO7 INTB) */
	BD96801_LDO7_OCPH_STAT, /* bit [0] */
	BD96801_LDO7_OVD_STAT,	/* bit [3] */
	BD96801_LDO7_UVD_STAT,  /* bit [4] */
};

/* IRQ MASKs */
#define BD96801_TW_STAT_MASK		BIT(0)
#define BD96801_WDT_ERR_STAT_MASK	BIT(1)
#define BD96801_I2C_ERR_STAT_MASK	BIT(2)
#define BD96801_CHIP_IF_ERR_STAT_MASK	BIT(3)

#define BD96801_BUCK_OCPH_STAT_MASK	BIT(0)
#define BD96801_BUCK_OCPL_STAT_MASK	BIT(1)
#define BD96801_BUCK_OCPN_STAT_MASK	BIT(2)
#define BD96801_BUCK_OVD_STAT_MASK	BIT(3)
#define BD96801_BUCK_UVD_STAT_MASK	BIT(4)
#define BD96801_BUCK_TW_CH_STAT_MASK	BIT(5)

#define BD96801_LDO_OCPH_STAT_MASK	BIT(0)
#define BD96801_LDO_OVD_STAT_MASK	BIT(3)
#define BD96801_LDO_UVD_STAT_MASK	BIT(4)

#endif