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> 7 * Bengt Jonsson <bengt.g.jonsson@stericsson.com> 8 * 9 * MOP500 board specific initialization for regulators 10 */ 11 #include <linux/kernel.h> 12 #include <linux/regulator/machine.h> 13 #include <linux/regulator/ab8500.h> 14 #include "board-mop500-regulators.h" 15 16 /* 17 * TPS61052 regulator 18 */ 19 static struct regulator_consumer_supply tps61052_vaudio_consumers[] = { 20 /* 21 * Boost converter supply to raise voltage on audio speaker, this 22 * is actually connected to three pins, VInVhfL (left amplifier) 23 * VInVhfR (right amplifier) and VIntDClassInt - all three must 24 * be connected to the same voltage. 25 */ 26 REGULATOR_SUPPLY("vintdclassint", "ab8500-codec.0"), 27 }; 28 29 struct regulator_init_data tps61052_regulator = { 30 .constraints = { 31 .name = "vaudio-hf", 32 .min_uV = 4500000, 33 .max_uV = 4500000, 34 .valid_ops_mask = REGULATOR_CHANGE_STATUS, 35 }, 36 .num_consumer_supplies = ARRAY_SIZE(tps61052_vaudio_consumers), 37 .consumer_supplies = tps61052_vaudio_consumers, 38 }; 39 40 static struct regulator_consumer_supply ab8500_vaux1_consumers[] = { 41 /* External displays, connector on board 2v5 power supply */ 42 REGULATOR_SUPPLY("vaux12v5", "mcde.0"), 43 /* SFH7741 proximity sensor */ 44 REGULATOR_SUPPLY("vcc", "gpio-keys.0"), 45 /* BH1780GLS ambient light sensor */ 46 REGULATOR_SUPPLY("vcc", "2-0029"), 47 /* lsm303dlh accelerometer */ 48 REGULATOR_SUPPLY("vdd", "3-0018"), 49 /* lsm303dlh magnetometer */ 50 REGULATOR_SUPPLY("vdd", "3-001e"), 51 /* Rohm BU21013 Touchscreen devices */ 52 REGULATOR_SUPPLY("avdd", "3-005c"), 53 REGULATOR_SUPPLY("avdd", "3-005d"), 54 /* Synaptics RMI4 Touchscreen device */ 55 REGULATOR_SUPPLY("vdd", "3-004b"), 56 }; 57 58 static struct regulator_consumer_supply ab8500_vaux2_consumers[] = { 59 /* On-board eMMC power */ 60 REGULATOR_SUPPLY("vmmc", "sdi4"), 61 /* AB8500 audio codec */ 62 REGULATOR_SUPPLY("vcc-N2158", "ab8500-codec.0"), 63 }; 64 65 static struct regulator_consumer_supply ab8500_vaux3_consumers[] = { 66 /* External MMC slot power */ 67 REGULATOR_SUPPLY("vmmc", "sdi0"), 68 }; 69 70 static struct regulator_consumer_supply ab8500_vtvout_consumers[] = { 71 /* TV-out DENC supply */ 72 REGULATOR_SUPPLY("vtvout", "ab8500-denc.0"), 73 /* Internal general-purpose ADC */ 74 REGULATOR_SUPPLY("vddadc", "ab8500-gpadc.0"), 75 }; 76 77 static struct regulator_consumer_supply ab8500_vaud_consumers[] = { 78 /* AB8500 audio-codec main supply */ 79 REGULATOR_SUPPLY("vaud", "ab8500-codec.0"), 80 }; 81 82 static struct regulator_consumer_supply ab8500_vamic1_consumers[] = { 83 /* AB8500 audio-codec Mic1 supply */ 84 REGULATOR_SUPPLY("vamic1", "ab8500-codec.0"), 85 }; 86 87 static struct regulator_consumer_supply ab8500_vamic2_consumers[] = { 88 /* AB8500 audio-codec Mic2 supply */ 89 REGULATOR_SUPPLY("vamic2", "ab8500-codec.0"), 90 }; 91 92 static struct regulator_consumer_supply ab8500_vdmic_consumers[] = { 93 /* AB8500 audio-codec DMic supply */ 94 REGULATOR_SUPPLY("vdmic", "ab8500-codec.0"), 95 }; 96 97 static struct regulator_consumer_supply ab8500_vintcore_consumers[] = { 98 /* SoC core supply, no device */ 99 REGULATOR_SUPPLY("v-intcore", NULL), 100 /* USB Transceiver */ 101 REGULATOR_SUPPLY("vddulpivio18", "ab8500-usb.0"), 102 }; 103 104 static struct regulator_consumer_supply ab8500_vana_consumers[] = { 105 /* External displays, connector on board, 1v8 power supply */ 106 REGULATOR_SUPPLY("vsmps2", "mcde.0"), 107 }; 108 109 /* ab8500 regulator register initialization */ 110 struct ab8500_regulator_reg_init 111 ab8500_regulator_reg_init[AB8500_NUM_REGULATOR_REGISTERS] = { 112 /* 113 * VanaRequestCtrl = HP/LP depending on VxRequest 114 * VextSupply1RequestCtrl = HP/LP depending on VxRequest 115 */ 116 INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL2, 0x00), 117 /* 118 * VextSupply2RequestCtrl = HP/LP depending on VxRequest 119 * VextSupply3RequestCtrl = HP/LP depending on VxRequest 120 * Vaux1RequestCtrl = HP/LP depending on VxRequest 121 * Vaux2RequestCtrl = HP/LP depending on VxRequest 122 */ 123 INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL3, 0x00), 124 /* 125 * Vaux3RequestCtrl = HP/LP depending on VxRequest 126 * SwHPReq = Control through SWValid disabled 127 */ 128 INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL4, 0x00), 129 /* 130 * VanaSysClkReq1HPValid = disabled 131 * Vaux1SysClkReq1HPValid = disabled 132 * Vaux2SysClkReq1HPValid = disabled 133 * Vaux3SysClkReq1HPValid = disabled 134 */ 135 INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQ1HPVALID1, 0x00), 136 /* 137 * VextSupply1SysClkReq1HPValid = disabled 138 * VextSupply2SysClkReq1HPValid = disabled 139 * VextSupply3SysClkReq1HPValid = SysClkReq1 controlled 140 */ 141 INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQ1HPVALID2, 0x40), 142 /* 143 * VanaHwHPReq1Valid = disabled 144 * Vaux1HwHPreq1Valid = disabled 145 * Vaux2HwHPReq1Valid = disabled 146 * Vaux3HwHPReqValid = disabled 147 */ 148 INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ1VALID1, 0x00), 149 /* 150 * VextSupply1HwHPReq1Valid = disabled 151 * VextSupply2HwHPReq1Valid = disabled 152 * VextSupply3HwHPReq1Valid = disabled 153 */ 154 INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ1VALID2, 0x00), 155 /* 156 * VanaHwHPReq2Valid = disabled 157 * Vaux1HwHPReq2Valid = disabled 158 * Vaux2HwHPReq2Valid = disabled 159 * Vaux3HwHPReq2Valid = disabled 160 */ 161 INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ2VALID1, 0x00), 162 /* 163 * VextSupply1HwHPReq2Valid = disabled 164 * VextSupply2HwHPReq2Valid = disabled 165 * VextSupply3HwHPReq2Valid = HWReq2 controlled 166 */ 167 INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ2VALID2, 0x04), 168 /* 169 * VanaSwHPReqValid = disabled 170 * Vaux1SwHPReqValid = disabled 171 */ 172 INIT_REGULATOR_REGISTER(AB8500_REGUSWHPREQVALID1, 0x00), 173 /* 174 * Vaux2SwHPReqValid = disabled 175 * Vaux3SwHPReqValid = disabled 176 * VextSupply1SwHPReqValid = disabled 177 * VextSupply2SwHPReqValid = disabled 178 * VextSupply3SwHPReqValid = disabled 179 */ 180 INIT_REGULATOR_REGISTER(AB8500_REGUSWHPREQVALID2, 0x00), 181 /* 182 * SysClkReq2Valid1 = SysClkReq2 controlled 183 * SysClkReq3Valid1 = disabled 184 * SysClkReq4Valid1 = SysClkReq4 controlled 185 * SysClkReq5Valid1 = disabled 186 * SysClkReq6Valid1 = SysClkReq6 controlled 187 * SysClkReq7Valid1 = disabled 188 * SysClkReq8Valid1 = disabled 189 */ 190 INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQVALID1, 0x2a), 191 /* 192 * SysClkReq2Valid2 = disabled 193 * SysClkReq3Valid2 = disabled 194 * SysClkReq4Valid2 = disabled 195 * SysClkReq5Valid2 = disabled 196 * SysClkReq6Valid2 = SysClkReq6 controlled 197 * SysClkReq7Valid2 = disabled 198 * SysClkReq8Valid2 = disabled 199 */ 200 INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQVALID2, 0x20), 201 /* 202 * VTVoutEna = disabled 203 * Vintcore12Ena = disabled 204 * Vintcore12Sel = 1.25 V 205 * Vintcore12LP = inactive (HP) 206 * VTVoutLP = inactive (HP) 207 */ 208 INIT_REGULATOR_REGISTER(AB8500_REGUMISC1, 0x10), 209 /* 210 * VaudioEna = disabled 211 * VdmicEna = disabled 212 * Vamic1Ena = disabled 213 * Vamic2Ena = disabled 214 */ 215 INIT_REGULATOR_REGISTER(AB8500_VAUDIOSUPPLY, 0x00), 216 /* 217 * Vamic1_dzout = high-Z when Vamic1 is disabled 218 * Vamic2_dzout = high-Z when Vamic2 is disabled 219 */ 220 INIT_REGULATOR_REGISTER(AB8500_REGUCTRL1VAMIC, 0x00), 221 /* 222 * VPll = Hw controlled 223 * VanaRegu = force off 224 */ 225 INIT_REGULATOR_REGISTER(AB8500_VPLLVANAREGU, 0x02), 226 /* 227 * VrefDDREna = disabled 228 * VrefDDRSleepMode = inactive (no pulldown) 229 */ 230 INIT_REGULATOR_REGISTER(AB8500_VREFDDR, 0x00), 231 /* 232 * VextSupply1Regu = HW control 233 * VextSupply2Regu = HW control 234 * VextSupply3Regu = HW control 235 * ExtSupply2Bypass = ExtSupply12LPn ball is 0 when Ena is 0 236 * ExtSupply3Bypass = ExtSupply3LPn ball is 0 when Ena is 0 237 */ 238 INIT_REGULATOR_REGISTER(AB8500_EXTSUPPLYREGU, 0x2a), 239 /* 240 * Vaux1Regu = force HP 241 * Vaux2Regu = force off 242 */ 243 INIT_REGULATOR_REGISTER(AB8500_VAUX12REGU, 0x01), 244 /* 245 * Vaux3regu = force off 246 */ 247 INIT_REGULATOR_REGISTER(AB8500_VRF1VAUX3REGU, 0x00), 248 /* 249 * Vsmps1 = 1.15V 250 */ 251 INIT_REGULATOR_REGISTER(AB8500_VSMPS1SEL1, 0x24), 252 /* 253 * Vaux1Sel = 2.5 V 254 */ 255 INIT_REGULATOR_REGISTER(AB8500_VAUX1SEL, 0x08), 256 /* 257 * Vaux2Sel = 2.9 V 258 */ 259 INIT_REGULATOR_REGISTER(AB8500_VAUX2SEL, 0x0d), 260 /* 261 * Vaux3Sel = 2.91 V 262 */ 263 INIT_REGULATOR_REGISTER(AB8500_VRF1VAUX3SEL, 0x07), 264 /* 265 * VextSupply12LP = disabled (no LP) 266 */ 267 INIT_REGULATOR_REGISTER(AB8500_REGUCTRL2SPARE, 0x00), 268 /* 269 * Vaux1Disch = short discharge time 270 * Vaux2Disch = short discharge time 271 * Vaux3Disch = short discharge time 272 * Vintcore12Disch = short discharge time 273 * VTVoutDisch = short discharge time 274 * VaudioDisch = short discharge time 275 */ 276 INIT_REGULATOR_REGISTER(AB8500_REGUCTRLDISCH, 0x00), 277 /* 278 * VanaDisch = short discharge time 279 * VdmicPullDownEna = pulldown disabled when Vdmic is disabled 280 * VdmicDisch = short discharge time 281 */ 282 INIT_REGULATOR_REGISTER(AB8500_REGUCTRLDISCH2, 0x00), 283 }; 284 285 /* AB8500 regulators */ 286 struct regulator_init_data ab8500_regulators[AB8500_NUM_REGULATORS] = { 287 /* supplies to the display/camera */ 288 [AB8500_LDO_AUX1] = { 289 .constraints = { 290 .name = "V-DISPLAY", 291 .min_uV = 2500000, 292 .max_uV = 2900000, 293 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | 294 REGULATOR_CHANGE_STATUS, 295 .boot_on = 1, /* display is on at boot */ 296 /* 297 * This voltage cannot be disabled right now because 298 * it is somehow affecting the external MMC 299 * functionality, though that typically will use 300 * AUX3. 301 */ 302 .always_on = 1, 303 }, 304 .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux1_consumers), 305 .consumer_supplies = ab8500_vaux1_consumers, 306 }, 307 /* supplies to the on-board eMMC */ 308 [AB8500_LDO_AUX2] = { 309 .constraints = { 310 .name = "V-eMMC1", 311 .min_uV = 1100000, 312 .max_uV = 3300000, 313 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | 314 REGULATOR_CHANGE_STATUS, 315 }, 316 .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux2_consumers), 317 .consumer_supplies = ab8500_vaux2_consumers, 318 }, 319 /* supply for VAUX3, supplies to SDcard slots */ 320 [AB8500_LDO_AUX3] = { 321 .constraints = { 322 .name = "V-MMC-SD", 323 .min_uV = 1100000, 324 .max_uV = 3300000, 325 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | 326 REGULATOR_CHANGE_STATUS, 327 }, 328 .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux3_consumers), 329 .consumer_supplies = ab8500_vaux3_consumers, 330 }, 331 /* supply for tvout, gpadc, TVOUT LDO */ 332 [AB8500_LDO_TVOUT] = { 333 .constraints = { 334 .name = "V-TVOUT", 335 .valid_ops_mask = REGULATOR_CHANGE_STATUS, 336 }, 337 .num_consumer_supplies = ARRAY_SIZE(ab8500_vtvout_consumers), 338 .consumer_supplies = ab8500_vtvout_consumers, 339 }, 340 /* supply for ab8500-vaudio, VAUDIO LDO */ 341 [AB8500_LDO_AUDIO] = { 342 .constraints = { 343 .name = "V-AUD", 344 .valid_ops_mask = REGULATOR_CHANGE_STATUS, 345 }, 346 .num_consumer_supplies = ARRAY_SIZE(ab8500_vaud_consumers), 347 .consumer_supplies = ab8500_vaud_consumers, 348 }, 349 /* supply for v-anamic1 VAMic1-LDO */ 350 [AB8500_LDO_ANAMIC1] = { 351 .constraints = { 352 .name = "V-AMIC1", 353 .valid_ops_mask = REGULATOR_CHANGE_STATUS, 354 }, 355 .num_consumer_supplies = ARRAY_SIZE(ab8500_vamic1_consumers), 356 .consumer_supplies = ab8500_vamic1_consumers, 357 }, 358 /* supply for v-amic2, VAMIC2 LDO, reuse constants for AMIC1 */ 359 [AB8500_LDO_ANAMIC2] = { 360 .constraints = { 361 .name = "V-AMIC2", 362 .valid_ops_mask = REGULATOR_CHANGE_STATUS, 363 }, 364 .num_consumer_supplies = ARRAY_SIZE(ab8500_vamic2_consumers), 365 .consumer_supplies = ab8500_vamic2_consumers, 366 }, 367 /* supply for v-dmic, VDMIC LDO */ 368 [AB8500_LDO_DMIC] = { 369 .constraints = { 370 .name = "V-DMIC", 371 .valid_ops_mask = REGULATOR_CHANGE_STATUS, 372 }, 373 .num_consumer_supplies = ARRAY_SIZE(ab8500_vdmic_consumers), 374 .consumer_supplies = ab8500_vdmic_consumers, 375 }, 376 /* supply for v-intcore12, VINTCORE12 LDO */ 377 [AB8500_LDO_INTCORE] = { 378 .constraints = { 379 .name = "V-INTCORE", 380 .valid_ops_mask = REGULATOR_CHANGE_STATUS, 381 }, 382 .num_consumer_supplies = ARRAY_SIZE(ab8500_vintcore_consumers), 383 .consumer_supplies = ab8500_vintcore_consumers, 384 }, 385 /* supply for U8500 CSI/DSI, VANA LDO */ 386 [AB8500_LDO_ANA] = { 387 .constraints = { 388 .name = "V-CSI/DSI", 389 .valid_ops_mask = REGULATOR_CHANGE_STATUS, 390 }, 391 .num_consumer_supplies = ARRAY_SIZE(ab8500_vana_consumers), 392 .consumer_supplies = ab8500_vana_consumers, 393 }, 394 }; 395