592a3f3994c041f6506679242452ea6effb926aa
[firefly-linux-kernel-4.4.55.git] / include / linux / regulator / ab8500.h
1 /*
2  * Copyright (C) ST-Ericsson SA 2010
3  *
4  * License Terms: GNU General Public License v2
5  *
6  * Authors: Sundar Iyer <sundar.iyer@stericsson.com> for ST-Ericsson
7  *          Bengt Jonsson <bengt.g.jonsson@stericsson.com> for ST-Ericsson
8  */
9
10 #ifndef __LINUX_MFD_AB8500_REGULATOR_H
11 #define __LINUX_MFD_AB8500_REGULATOR_H
12
13 #include <linux/platform_device.h>
14
15 /* AB8500 regulators */
16 enum ab8500_regulator_id {
17         AB8500_LDO_AUX1,
18         AB8500_LDO_AUX2,
19         AB8500_LDO_AUX3,
20         AB8500_LDO_INTCORE,
21         AB8500_LDO_TVOUT,
22         AB8500_LDO_AUDIO,
23         AB8500_LDO_ANAMIC1,
24         AB8500_LDO_ANAMIC2,
25         AB8500_LDO_DMIC,
26         AB8500_LDO_ANA,
27         AB8500_NUM_REGULATORS,
28 };
29
30 /* AB9450 regulators */
31 enum ab9540_regulator_id {
32         AB9540_LDO_AUX1,
33         AB9540_LDO_AUX2,
34         AB9540_LDO_AUX3,
35         AB9540_LDO_AUX4,
36         AB9540_LDO_INTCORE,
37         AB9540_LDO_TVOUT,
38         AB9540_LDO_USB,
39         AB9540_LDO_AUDIO,
40         AB9540_LDO_ANAMIC1,
41         AB9540_LDO_ANAMIC2,
42         AB9540_LDO_DMIC,
43         AB9540_LDO_ANA,
44         AB9540_SYSCLKREQ_2,
45         AB9540_SYSCLKREQ_4,
46         AB9540_NUM_REGULATORS,
47 };
48
49 /* AB8500 and AB9540 register initialization */
50 struct ab8500_regulator_reg_init {
51         int id;
52         u8 mask;
53         u8 value;
54 };
55
56 #define INIT_REGULATOR_REGISTER(_id, _mask, _value)     \
57         {                                               \
58                 .id = _id,                              \
59                 .mask = _mask,                          \
60                 .value = _value,                        \
61         }
62
63 /* AB8500 registers */
64 enum ab8500_regulator_reg {
65         AB8500_REGUREQUESTCTRL2,
66         AB8500_REGUREQUESTCTRL3,
67         AB8500_REGUREQUESTCTRL4,
68         AB8500_REGUSYSCLKREQ1HPVALID1,
69         AB8500_REGUSYSCLKREQ1HPVALID2,
70         AB8500_REGUHWHPREQ1VALID1,
71         AB8500_REGUHWHPREQ1VALID2,
72         AB8500_REGUHWHPREQ2VALID1,
73         AB8500_REGUHWHPREQ2VALID2,
74         AB8500_REGUSWHPREQVALID1,
75         AB8500_REGUSWHPREQVALID2,
76         AB8500_REGUSYSCLKREQVALID1,
77         AB8500_REGUSYSCLKREQVALID2,
78         AB8500_REGUMISC1,
79         AB8500_VAUDIOSUPPLY,
80         AB8500_REGUCTRL1VAMIC,
81         AB8500_VPLLVANAREGU,
82         AB8500_VREFDDR,
83         AB8500_EXTSUPPLYREGU,
84         AB8500_VAUX12REGU,
85         AB8500_VRF1VAUX3REGU,
86         AB8500_VAUX1SEL,
87         AB8500_VAUX2SEL,
88         AB8500_VRF1VAUX3SEL,
89         AB8500_REGUCTRL2SPARE,
90         AB8500_REGUCTRLDISCH,
91         AB8500_REGUCTRLDISCH2,
92         AB8500_NUM_REGULATOR_REGISTERS,
93 };
94
95
96 /* AB9540 registers */
97 enum ab9540_regulator_reg {
98         AB9540_REGUREQUESTCTRL1,
99         AB9540_REGUREQUESTCTRL2,
100         AB9540_REGUREQUESTCTRL3,
101         AB9540_REGUREQUESTCTRL4,
102         AB9540_REGUSYSCLKREQ1HPVALID1,
103         AB9540_REGUSYSCLKREQ1HPVALID2,
104         AB9540_REGUHWHPREQ1VALID1,
105         AB9540_REGUHWHPREQ1VALID2,
106         AB9540_REGUHWHPREQ2VALID1,
107         AB9540_REGUHWHPREQ2VALID2,
108         AB9540_REGUSWHPREQVALID1,
109         AB9540_REGUSWHPREQVALID2,
110         AB9540_REGUSYSCLKREQVALID1,
111         AB9540_REGUSYSCLKREQVALID2,
112         AB9540_REGUVAUX4REQVALID,
113         AB9540_REGUMISC1,
114         AB9540_VAUDIOSUPPLY,
115         AB9540_REGUCTRL1VAMIC,
116         AB9540_VSMPS1REGU,
117         AB9540_VSMPS2REGU,
118         AB9540_VSMPS3REGU, /* NOTE! PRCMU register */
119         AB9540_VPLLVANAREGU,
120         AB9540_EXTSUPPLYREGU,
121         AB9540_VAUX12REGU,
122         AB9540_VRF1VAUX3REGU,
123         AB9540_VSMPS1SEL1,
124         AB9540_VSMPS1SEL2,
125         AB9540_VSMPS1SEL3,
126         AB9540_VSMPS2SEL1,
127         AB9540_VSMPS2SEL2,
128         AB9540_VSMPS2SEL3,
129         AB9540_VSMPS3SEL1, /* NOTE! PRCMU register */
130         AB9540_VSMPS3SEL2, /* NOTE! PRCMU register */
131         AB9540_VAUX1SEL,
132         AB9540_VAUX2SEL,
133         AB9540_VRF1VAUX3SEL,
134         AB9540_REGUCTRL2SPARE,
135         AB9540_VAUX4REQCTRL,
136         AB9540_VAUX4REGU,
137         AB9540_VAUX4SEL,
138         AB9540_REGUCTRLDISCH,
139         AB9540_REGUCTRLDISCH2,
140         AB9540_REGUCTRLDISCH3,
141         AB9540_NUM_REGULATOR_REGISTERS,
142 };
143
144 /* AB8500 external regulators */
145 struct ab8500_ext_regulator_cfg {
146         bool hwreq; /* requires hw mode or high power mode */
147 };
148
149 enum ab8500_ext_regulator_id {
150         AB8500_EXT_SUPPLY1,
151         AB8500_EXT_SUPPLY2,
152         AB8500_EXT_SUPPLY3,
153         AB8500_NUM_EXT_REGULATORS,
154 };
155
156 /* AB8500 regulator platform data */
157 struct ab8500_regulator_platform_data {
158         int num_reg_init;
159         struct ab8500_regulator_reg_init *reg_init;
160         int num_regulator;
161         struct regulator_init_data *regulator;
162         int num_ext_regulator;
163         struct regulator_init_data *ext_regulator;
164 };
165
166 /* AB8500 external regulator functions (internal) */
167 #ifdef CONFIG_REGULATOR_AB8500_EXT
168 int ab8500_ext_regulator_init(struct platform_device *pdev);
169 int ab8500_ext_regulator_exit(struct platform_device *pdev);
170 #else
171 inline int ab8500_ext_regulator_init(struct platform_device *pdev)
172 {
173         return 0;
174 }
175 inline int ab8500_ext_regulator_exit(struct platform_device *pdev)
176 {
177         return 0;
178 }
179 #endif
180
181 #ifdef CONFIG_REGULATOR_AB8500_DEBUG
182 int ab8500_regulator_debug_init(struct platform_device *pdev);
183 int ab8500_regulator_debug_exit(struct platform_device *pdev);
184 #else
185 static inline int ab8500_regulator_debug_init(struct platform_device *pdev)
186 {
187         return 0;
188 }
189 static inline int ab8500_regulator_debug_exit(struct platform_device *pdev)
190 {
191         return 0;
192 }
193 #endif
194
195 #endif