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 * Daniel Willerud <daniel.willerud@stericsson.com> for ST-Ericsson 9 */ 10 11#ifndef __LINUX_MFD_AB8500_REGULATOR_H 12#define __LINUX_MFD_AB8500_REGULATOR_H 13 14#include <linux/platform_device.h> 15 16/* AB8500 regulators */ 17enum ab8500_regulator_id { 18 AB8500_LDO_AUX1, 19 AB8500_LDO_AUX2, 20 AB8500_LDO_AUX3, 21 AB8500_LDO_INTCORE, 22 AB8500_LDO_TVOUT, 23 AB8500_LDO_AUDIO, 24 AB8500_LDO_ANAMIC1, 25 AB8500_LDO_ANAMIC2, 26 AB8500_LDO_DMIC, 27 AB8500_LDO_ANA, 28 AB8500_NUM_REGULATORS, 29}; 30 31/* AB8505 regulators */ 32enum ab8505_regulator_id { 33 AB8505_LDO_AUX1, 34 AB8505_LDO_AUX2, 35 AB8505_LDO_AUX3, 36 AB8505_LDO_AUX4, 37 AB8505_LDO_AUX5, 38 AB8505_LDO_AUX6, 39 AB8505_LDO_INTCORE, 40 AB8505_LDO_ADC, 41 AB8505_LDO_USB, 42 AB8505_LDO_AUDIO, 43 AB8505_LDO_ANAMIC1, 44 AB8505_LDO_ANAMIC2, 45 AB8505_LDO_AUX8, 46 AB8505_LDO_ANA, 47 AB8505_SYSCLKREQ_2, 48 AB8505_SYSCLKREQ_4, 49 AB8505_NUM_REGULATORS, 50}; 51 52/* AB9540 regulators */ 53enum ab9540_regulator_id { 54 AB9540_LDO_AUX1, 55 AB9540_LDO_AUX2, 56 AB9540_LDO_AUX3, 57 AB9540_LDO_AUX4, 58 AB9540_LDO_INTCORE, 59 AB9540_LDO_TVOUT, 60 AB9540_LDO_USB, 61 AB9540_LDO_AUDIO, 62 AB9540_LDO_ANAMIC1, 63 AB9540_LDO_ANAMIC2, 64 AB9540_LDO_DMIC, 65 AB9540_LDO_ANA, 66 AB9540_SYSCLKREQ_2, 67 AB9540_SYSCLKREQ_4, 68 AB9540_NUM_REGULATORS, 69}; 70 71/* AB8540 regulators */ 72enum ab8540_regulator_id { 73 AB8540_LDO_AUX1, 74 AB8540_LDO_AUX2, 75 AB8540_LDO_AUX3, 76 AB8540_LDO_AUX4, 77 AB8540_LDO_AUX5, 78 AB8540_LDO_AUX6, 79 AB8540_LDO_INTCORE, 80 AB8540_LDO_TVOUT, 81 AB8540_LDO_AUDIO, 82 AB8540_LDO_ANAMIC1, 83 AB8540_LDO_ANAMIC2, 84 AB8540_LDO_DMIC, 85 AB8540_LDO_ANA, 86 AB8540_LDO_SDIO, 87 AB8540_SYSCLKREQ_2, 88 AB8540_SYSCLKREQ_4, 89 AB8540_NUM_REGULATORS, 90}; 91 92/* AB8500, AB8505, and AB9540 register initialization */ 93struct ab8500_regulator_reg_init { 94 int id; 95 u8 mask; 96 u8 value; 97}; 98 99#define INIT_REGULATOR_REGISTER(_id, _mask, _value) \ 100 { \ 101 .id = _id, \ 102 .mask = _mask, \ 103 .value = _value, \ 104 } 105 106/* AB8500 registers */ 107enum ab8500_regulator_reg { 108 AB8500_REGUREQUESTCTRL2, 109 AB8500_REGUREQUESTCTRL3, 110 AB8500_REGUREQUESTCTRL4, 111 AB8500_REGUSYSCLKREQ1HPVALID1, 112 AB8500_REGUSYSCLKREQ1HPVALID2, 113 AB8500_REGUHWHPREQ1VALID1, 114 AB8500_REGUHWHPREQ1VALID2, 115 AB8500_REGUHWHPREQ2VALID1, 116 AB8500_REGUHWHPREQ2VALID2, 117 AB8500_REGUSWHPREQVALID1, 118 AB8500_REGUSWHPREQVALID2, 119 AB8500_REGUSYSCLKREQVALID1, 120 AB8500_REGUSYSCLKREQVALID2, 121 AB8500_REGUMISC1, 122 AB8500_VAUDIOSUPPLY, 123 AB8500_REGUCTRL1VAMIC, 124 AB8500_VPLLVANAREGU, 125 AB8500_VREFDDR, 126 AB8500_EXTSUPPLYREGU, 127 AB8500_VAUX12REGU, 128 AB8500_VRF1VAUX3REGU, 129 AB8500_VAUX1SEL, 130 AB8500_VAUX2SEL, 131 AB8500_VRF1VAUX3SEL, 132 AB8500_REGUCTRL2SPARE, 133 AB8500_REGUCTRLDISCH, 134 AB8500_REGUCTRLDISCH2, 135 AB8500_NUM_REGULATOR_REGISTERS, 136}; 137 138/* AB8505 registers */ 139enum ab8505_regulator_reg { 140 AB8505_REGUREQUESTCTRL1, 141 AB8505_REGUREQUESTCTRL2, 142 AB8505_REGUREQUESTCTRL3, 143 AB8505_REGUREQUESTCTRL4, 144 AB8505_REGUSYSCLKREQ1HPVALID1, 145 AB8505_REGUSYSCLKREQ1HPVALID2, 146 AB8505_REGUHWHPREQ1VALID1, 147 AB8505_REGUHWHPREQ1VALID2, 148 AB8505_REGUHWHPREQ2VALID1, 149 AB8505_REGUHWHPREQ2VALID2, 150 AB8505_REGUSWHPREQVALID1, 151 AB8505_REGUSWHPREQVALID2, 152 AB8505_REGUSYSCLKREQVALID1, 153 AB8505_REGUSYSCLKREQVALID2, 154 AB8505_REGUVAUX4REQVALID, 155 AB8505_REGUMISC1, 156 AB8505_VAUDIOSUPPLY, 157 AB8505_REGUCTRL1VAMIC, 158 AB8505_VSMPSAREGU, 159 AB8505_VSMPSBREGU, 160 AB8505_VSAFEREGU, /* NOTE! PRCMU register */ 161 AB8505_VPLLVANAREGU, 162 AB8505_EXTSUPPLYREGU, 163 AB8505_VAUX12REGU, 164 AB8505_VRF1VAUX3REGU, 165 AB8505_VSMPSASEL1, 166 AB8505_VSMPSASEL2, 167 AB8505_VSMPSASEL3, 168 AB8505_VSMPSBSEL1, 169 AB8505_VSMPSBSEL2, 170 AB8505_VSMPSBSEL3, 171 AB8505_VSAFESEL1, /* NOTE! PRCMU register */ 172 AB8505_VSAFESEL2, /* NOTE! PRCMU register */ 173 AB8505_VSAFESEL3, /* NOTE! PRCMU register */ 174 AB8505_VAUX1SEL, 175 AB8505_VAUX2SEL, 176 AB8505_VRF1VAUX3SEL, 177 AB8505_VAUX4REQCTRL, 178 AB8505_VAUX4REGU, 179 AB8505_VAUX4SEL, 180 AB8505_REGUCTRLDISCH, 181 AB8505_REGUCTRLDISCH2, 182 AB8505_REGUCTRLDISCH3, 183 AB8505_CTRLVAUX5, 184 AB8505_CTRLVAUX6, 185 AB8505_NUM_REGULATOR_REGISTERS, 186}; 187 188/* AB9540 registers */ 189enum ab9540_regulator_reg { 190 AB9540_REGUREQUESTCTRL1, 191 AB9540_REGUREQUESTCTRL2, 192 AB9540_REGUREQUESTCTRL3, 193 AB9540_REGUREQUESTCTRL4, 194 AB9540_REGUSYSCLKREQ1HPVALID1, 195 AB9540_REGUSYSCLKREQ1HPVALID2, 196 AB9540_REGUHWHPREQ1VALID1, 197 AB9540_REGUHWHPREQ1VALID2, 198 AB9540_REGUHWHPREQ2VALID1, 199 AB9540_REGUHWHPREQ2VALID2, 200 AB9540_REGUSWHPREQVALID1, 201 AB9540_REGUSWHPREQVALID2, 202 AB9540_REGUSYSCLKREQVALID1, 203 AB9540_REGUSYSCLKREQVALID2, 204 AB9540_REGUVAUX4REQVALID, 205 AB9540_REGUMISC1, 206 AB9540_VAUDIOSUPPLY, 207 AB9540_REGUCTRL1VAMIC, 208 AB9540_VSMPS1REGU, 209 AB9540_VSMPS2REGU, 210 AB9540_VSMPS3REGU, /* NOTE! PRCMU register */ 211 AB9540_VPLLVANAREGU, 212 AB9540_EXTSUPPLYREGU, 213 AB9540_VAUX12REGU, 214 AB9540_VRF1VAUX3REGU, 215 AB9540_VSMPS1SEL1, 216 AB9540_VSMPS1SEL2, 217 AB9540_VSMPS1SEL3, 218 AB9540_VSMPS2SEL1, 219 AB9540_VSMPS2SEL2, 220 AB9540_VSMPS2SEL3, 221 AB9540_VSMPS3SEL1, /* NOTE! PRCMU register */ 222 AB9540_VSMPS3SEL2, /* NOTE! PRCMU register */ 223 AB9540_VAUX1SEL, 224 AB9540_VAUX2SEL, 225 AB9540_VRF1VAUX3SEL, 226 AB9540_REGUCTRL2SPARE, 227 AB9540_VAUX4REQCTRL, 228 AB9540_VAUX4REGU, 229 AB9540_VAUX4SEL, 230 AB9540_REGUCTRLDISCH, 231 AB9540_REGUCTRLDISCH2, 232 AB9540_REGUCTRLDISCH3, 233 AB9540_NUM_REGULATOR_REGISTERS, 234}; 235 236/* AB8540 registers */ 237enum ab8540_regulator_reg { 238 AB8540_REGUREQUESTCTRL1, 239 AB8540_REGUREQUESTCTRL2, 240 AB8540_REGUREQUESTCTRL3, 241 AB8540_REGUREQUESTCTRL4, 242 AB8540_REGUSYSCLKREQ1HPVALID1, 243 AB8540_REGUSYSCLKREQ1HPVALID2, 244 AB8540_REGUHWHPREQ1VALID1, 245 AB8540_REGUHWHPREQ1VALID2, 246 AB8540_REGUHWHPREQ2VALID1, 247 AB8540_REGUHWHPREQ2VALID2, 248 AB8540_REGUSWHPREQVALID1, 249 AB8540_REGUSWHPREQVALID2, 250 AB8540_REGUSYSCLKREQVALID1, 251 AB8540_REGUSYSCLKREQVALID2, 252 AB8540_REGUVAUX4REQVALID, 253 AB8540_REGUVAUX5REQVALID, 254 AB8540_REGUVAUX6REQVALID, 255 AB8540_REGUVCLKBREQVALID, 256 AB8540_REGUVRF1REQVALID, 257 AB8540_REGUMISC1, 258 AB8540_VAUDIOSUPPLY, 259 AB8540_REGUCTRL1VAMIC, 260 AB8540_VHSIC, 261 AB8540_VSDIO, 262 AB8540_VSMPS1REGU, 263 AB8540_VSMPS2REGU, 264 AB8540_VSMPS3REGU, 265 AB8540_VPLLVANAREGU, 266 AB8540_EXTSUPPLYREGU, 267 AB8540_VAUX12REGU, 268 AB8540_VRF1VAUX3REGU, 269 AB8540_VSMPS1SEL1, 270 AB8540_VSMPS1SEL2, 271 AB8540_VSMPS1SEL3, 272 AB8540_VSMPS2SEL1, 273 AB8540_VSMPS2SEL2, 274 AB8540_VSMPS2SEL3, 275 AB8540_VSMPS3SEL1, 276 AB8540_VSMPS3SEL2, 277 AB8540_VAUX1SEL, 278 AB8540_VAUX2SEL, 279 AB8540_VRF1VAUX3SEL, 280 AB8540_REGUCTRL2SPARE, 281 AB8540_VAUX4REQCTRL, 282 AB8540_VAUX4REGU, 283 AB8540_VAUX4SEL, 284 AB8540_VAUX5REQCTRL, 285 AB8540_VAUX5REGU, 286 AB8540_VAUX5SEL, 287 AB8540_VAUX6REQCTRL, 288 AB8540_VAUX6REGU, 289 AB8540_VAUX6SEL, 290 AB8540_VCLKBREQCTRL, 291 AB8540_VCLKBREGU, 292 AB8540_VCLKBSEL, 293 AB8540_VRF1REQCTRL, 294 AB8540_REGUCTRLDISCH, 295 AB8540_REGUCTRLDISCH2, 296 AB8540_REGUCTRLDISCH3, 297 AB8540_REGUCTRLDISCH4, 298 AB8540_VSIMSYSCLKCTRL, 299 AB8540_VANAVPLLSEL, 300 AB8540_NUM_REGULATOR_REGISTERS, 301}; 302 303/* AB8500 external regulators */ 304struct ab8500_ext_regulator_cfg { 305 bool hwreq; /* requires hw mode or high power mode */ 306}; 307 308enum ab8500_ext_regulator_id { 309 AB8500_EXT_SUPPLY1, 310 AB8500_EXT_SUPPLY2, 311 AB8500_EXT_SUPPLY3, 312 AB8500_NUM_EXT_REGULATORS, 313}; 314 315/* AB8500 regulator platform data */ 316struct ab8500_regulator_platform_data { 317 int num_reg_init; 318 struct ab8500_regulator_reg_init *reg_init; 319 int num_regulator; 320 struct regulator_init_data *regulator; 321 int num_ext_regulator; 322 struct regulator_init_data *ext_regulator; 323}; 324 325#endif 326