1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /* Copyright (C) 2024 ROHM Semiconductors */
3 
4 #ifndef __MFD_BD96801_H__
5 #define __MFD_BD96801_H__
6 
7 #define BD96801_REG_SSCG_CTRL		0x09
8 #define BD96801_REG_SHD_INTB            0x20
9 #define BD96801_LDO5_VOL_LVL_REG	0x2c
10 #define BD96801_LDO6_VOL_LVL_REG	0x2d
11 #define BD96801_LDO7_VOL_LVL_REG	0x2e
12 #define BD96801_REG_BUCK_OVP		0x30
13 #define BD96801_REG_BUCK_OVD		0x35
14 #define BD96801_REG_LDO_OVP		0x31
15 #define BD96801_REG_LDO_OVD		0x36
16 #define BD96801_REG_BOOT_OVERTIME	0x3a
17 #define BD96801_REG_WD_TMO		0x40
18 #define BD96801_REG_WD_CONF		0x41
19 #define BD96801_REG_WD_FEED		0x42
20 #define BD96801_REG_WD_FAILCOUNT	0x43
21 #define BD96801_REG_WD_ASK		0x46
22 #define BD96801_REG_WD_STATUS		0x4a
23 #define BD96801_REG_PMIC_STATE		0x4f
24 #define BD96801_REG_EXT_STATE		0x50
25 
26 #define BD96801_STATE_STBY		0x09
27 
28 #define BD96801_LOCK_REG		0x04
29 #define BD96801_UNLOCK			0x9d
30 #define BD96801_LOCK			0x00
31 
32 /* IRQ register area */
33 #define BD96801_REG_INT_MAIN		0x51
34 
35 /*
36  * The BD96801 has two physical IRQ lines, INTB and ERRB.
37  *
38  * The 'main status register' is located at 0x51.
39  * The ERRB status registers are located at 0x52 ... 0x5B
40  * INTB status registers are at range 0x5c ... 0x63
41  */
42 #define BD96801_REG_INT_SYS_ERRB1	0x52
43 #define BD96801_REG_INT_SYS_INTB	0x5c
44 #define BD96801_REG_INT_LDO7_INTB	0x63
45 
46 /* MASK registers */
47 #define BD96801_REG_MASK_SYS_INTB	0x73
48 #define BD96801_REG_MASK_SYS_ERRB	0x69
49 
50 #define BD96801_MAX_REGISTER		0x7a
51 
52 #define BD96801_OTP_ERR_MASK		BIT(0)
53 #define BD96801_DBIST_ERR_MASK		BIT(1)
54 #define BD96801_EEP_ERR_MASK		BIT(2)
55 #define BD96801_ABIST_ERR_MASK		BIT(3)
56 #define BD96801_PRSTB_ERR_MASK		BIT(4)
57 #define BD96801_DRMOS1_ERR_MASK		BIT(5)
58 #define BD96801_DRMOS2_ERR_MASK		BIT(6)
59 #define BD96801_SLAVE_ERR_MASK		BIT(7)
60 #define BD96801_VREF_ERR_MASK		BIT(0)
61 #define BD96801_TSD_ERR_MASK		BIT(1)
62 #define BD96801_UVLO_ERR_MASK		BIT(2)
63 #define BD96801_OVLO_ERR_MASK		BIT(3)
64 #define BD96801_OSC_ERR_MASK		BIT(4)
65 #define BD96801_PON_ERR_MASK		BIT(5)
66 #define BD96801_POFF_ERR_MASK		BIT(6)
67 #define BD96801_CMD_SHDN_ERR_MASK	BIT(7)
68 #define BD96801_INT_PRSTB_WDT_ERR_MASK	BIT(0)
69 #define BD96801_INT_CHIP_IF_ERR_MASK	BIT(3)
70 #define BD96801_INT_SHDN_ERR_MASK	BIT(7)
71 #define BD96801_OUT_PVIN_ERR_MASK	BIT(0)
72 #define BD96801_OUT_OVP_ERR_MASK	BIT(1)
73 #define BD96801_OUT_UVP_ERR_MASK	BIT(2)
74 #define BD96801_OUT_SHDN_ERR_MASK	BIT(7)
75 
76 /* ERRB IRQs */
77 enum {
78 	/* Reg 0x52, 0x53, 0x54 - ERRB system IRQs */
79 	BD96801_OTP_ERR_STAT,
80 	BD96801_DBIST_ERR_STAT,
81 	BD96801_EEP_ERR_STAT,
82 	BD96801_ABIST_ERR_STAT,
83 	BD96801_PRSTB_ERR_STAT,
84 	BD96801_DRMOS1_ERR_STAT,
85 	BD96801_DRMOS2_ERR_STAT,
86 	BD96801_SLAVE_ERR_STAT,
87 	BD96801_VREF_ERR_STAT,
88 	BD96801_TSD_ERR_STAT,
89 	BD96801_UVLO_ERR_STAT,
90 	BD96801_OVLO_ERR_STAT,
91 	BD96801_OSC_ERR_STAT,
92 	BD96801_PON_ERR_STAT,
93 	BD96801_POFF_ERR_STAT,
94 	BD96801_CMD_SHDN_ERR_STAT,
95 	BD96801_INT_PRSTB_WDT_ERR,
96 	BD96801_INT_CHIP_IF_ERR,
97 	BD96801_INT_SHDN_ERR_STAT,
98 
99 	/* Reg 0x55 BUCK1 ERR IRQs */
100 	BD96801_BUCK1_PVIN_ERR_STAT,
101 	BD96801_BUCK1_OVP_ERR_STAT,
102 	BD96801_BUCK1_UVP_ERR_STAT,
103 	BD96801_BUCK1_SHDN_ERR_STAT,
104 
105 	/* Reg 0x56 BUCK2 ERR IRQs */
106 	BD96801_BUCK2_PVIN_ERR_STAT,
107 	BD96801_BUCK2_OVP_ERR_STAT,
108 	BD96801_BUCK2_UVP_ERR_STAT,
109 	BD96801_BUCK2_SHDN_ERR_STAT,
110 
111 	/* Reg 0x57 BUCK3 ERR IRQs */
112 	BD96801_BUCK3_PVIN_ERR_STAT,
113 	BD96801_BUCK3_OVP_ERR_STAT,
114 	BD96801_BUCK3_UVP_ERR_STAT,
115 	BD96801_BUCK3_SHDN_ERR_STAT,
116 
117 	/* Reg 0x58 BUCK4 ERR IRQs */
118 	BD96801_BUCK4_PVIN_ERR_STAT,
119 	BD96801_BUCK4_OVP_ERR_STAT,
120 	BD96801_BUCK4_UVP_ERR_STAT,
121 	BD96801_BUCK4_SHDN_ERR_STAT,
122 
123 	/* Reg 0x59 LDO5 ERR IRQs */
124 	BD96801_LDO5_PVIN_ERR_STAT,
125 	BD96801_LDO5_OVP_ERR_STAT,
126 	BD96801_LDO5_UVP_ERR_STAT,
127 	BD96801_LDO5_SHDN_ERR_STAT,
128 
129 	/* Reg 0x5a LDO6 ERR IRQs */
130 	BD96801_LDO6_PVIN_ERR_STAT,
131 	BD96801_LDO6_OVP_ERR_STAT,
132 	BD96801_LDO6_UVP_ERR_STAT,
133 	BD96801_LDO6_SHDN_ERR_STAT,
134 
135 	/* Reg 0x5b LDO7 ERR IRQs */
136 	BD96801_LDO7_PVIN_ERR_STAT,
137 	BD96801_LDO7_OVP_ERR_STAT,
138 	BD96801_LDO7_UVP_ERR_STAT,
139 	BD96801_LDO7_SHDN_ERR_STAT,
140 };
141 
142 /* INTB IRQs */
143 enum {
144 	/* Reg 0x5c (System INTB) */
145 	BD96801_TW_STAT,
146 	BD96801_WDT_ERR_STAT,
147 	BD96801_I2C_ERR_STAT,
148 	BD96801_CHIP_IF_ERR_STAT,
149 
150 	/* Reg 0x5d (BUCK1 INTB) */
151 	BD96801_BUCK1_OCPH_STAT,
152 	BD96801_BUCK1_OCPL_STAT,
153 	BD96801_BUCK1_OCPN_STAT,
154 	BD96801_BUCK1_OVD_STAT,
155 	BD96801_BUCK1_UVD_STAT,
156 	BD96801_BUCK1_TW_CH_STAT,
157 
158 	/* Reg 0x5e (BUCK2 INTB) */
159 	BD96801_BUCK2_OCPH_STAT,
160 	BD96801_BUCK2_OCPL_STAT,
161 	BD96801_BUCK2_OCPN_STAT,
162 	BD96801_BUCK2_OVD_STAT,
163 	BD96801_BUCK2_UVD_STAT,
164 	BD96801_BUCK2_TW_CH_STAT,
165 
166 	/* Reg 0x5f (BUCK3 INTB)*/
167 	BD96801_BUCK3_OCPH_STAT,
168 	BD96801_BUCK3_OCPL_STAT,
169 	BD96801_BUCK3_OCPN_STAT,
170 	BD96801_BUCK3_OVD_STAT,
171 	BD96801_BUCK3_UVD_STAT,
172 	BD96801_BUCK3_TW_CH_STAT,
173 
174 	/* Reg 0x60 (BUCK4 INTB)*/
175 	BD96801_BUCK4_OCPH_STAT,
176 	BD96801_BUCK4_OCPL_STAT,
177 	BD96801_BUCK4_OCPN_STAT,
178 	BD96801_BUCK4_OVD_STAT,
179 	BD96801_BUCK4_UVD_STAT,
180 	BD96801_BUCK4_TW_CH_STAT,
181 
182 	/* Reg 0x61 (LDO5 INTB) */
183 	BD96801_LDO5_OCPH_STAT, /* bit [0] */
184 	BD96801_LDO5_OVD_STAT,	/* bit [3] */
185 	BD96801_LDO5_UVD_STAT,  /* bit [4] */
186 
187 	/* Reg 0x62 (LDO6 INTB) */
188 	BD96801_LDO6_OCPH_STAT, /* bit [0] */
189 	BD96801_LDO6_OVD_STAT,	/* bit [3] */
190 	BD96801_LDO6_UVD_STAT,  /* bit [4] */
191 
192 	/* Reg 0x63 (LDO7 INTB) */
193 	BD96801_LDO7_OCPH_STAT, /* bit [0] */
194 	BD96801_LDO7_OVD_STAT,	/* bit [3] */
195 	BD96801_LDO7_UVD_STAT,  /* bit [4] */
196 };
197 
198 /* IRQ MASKs */
199 #define BD96801_TW_STAT_MASK		BIT(0)
200 #define BD96801_WDT_ERR_STAT_MASK	BIT(1)
201 #define BD96801_I2C_ERR_STAT_MASK	BIT(2)
202 #define BD96801_CHIP_IF_ERR_STAT_MASK	BIT(3)
203 
204 #define BD96801_BUCK_OCPH_STAT_MASK	BIT(0)
205 #define BD96801_BUCK_OCPL_STAT_MASK	BIT(1)
206 #define BD96801_BUCK_OCPN_STAT_MASK	BIT(2)
207 #define BD96801_BUCK_OVD_STAT_MASK	BIT(3)
208 #define BD96801_BUCK_UVD_STAT_MASK	BIT(4)
209 #define BD96801_BUCK_TW_CH_STAT_MASK	BIT(5)
210 
211 #define BD96801_LDO_OCPH_STAT_MASK	BIT(0)
212 #define BD96801_LDO_OVD_STAT_MASK	BIT(3)
213 #define BD96801_LDO_UVD_STAT_MASK	BIT(4)
214 
215 #endif
216