2010-09-15 10:50:59 +01:00
/*
* Copyright ( C ) ST - Ericsson SA 2010
*
* License Terms : GNU General Public License v2
*
2010-12-10 11:08:48 +01:00
* Authors : Sundar Iyer < sundar . iyer @ stericsson . com >
* Bengt Jonsson < bengt . g . jonsson @ stericsson . com >
2010-09-15 10:50:59 +01:00
*
* MOP500 board specific initialization for regulators
*/
# include <linux/kernel.h>
# include <linux/regulator/machine.h>
2010-12-10 11:08:48 +01:00
# include <linux/regulator/ab8500.h>
2010-12-02 17:10:14 +01:00
# include "board-mop500-regulators.h"
2011-03-07 11:48:15 +01:00
/*
* TPS61052 regulator
*/
static struct regulator_consumer_supply tps61052_vaudio_consumers [ ] = {
/*
* Boost converter supply to raise voltage on audio speaker , this
* is actually connected to three pins , VInVhfL ( left amplifier )
* VInVhfR ( right amplifier ) and VIntDClassInt - all three must
* be connected to the same voltage .
*/
REGULATOR_SUPPLY ( " vintdclassint " , " ab8500-codec.0 " ) ,
} ;
struct regulator_init_data tps61052_regulator = {
. constraints = {
. name = " vaudio-hf " ,
. min_uV = 4500000 ,
. max_uV = 4500000 ,
. valid_ops_mask = REGULATOR_CHANGE_STATUS ,
} ,
. num_consumer_supplies = ARRAY_SIZE ( tps61052_vaudio_consumers ) ,
. consumer_supplies = tps61052_vaudio_consumers ,
} ;
2010-12-02 17:10:14 +01:00
static struct regulator_consumer_supply ab8500_vaux1_consumers [ ] = {
/* External displays, connector on board 2v5 power supply */
REGULATOR_SUPPLY ( " vaux12v5 " , " mcde.0 " ) ,
/* SFH7741 proximity sensor */
REGULATOR_SUPPLY ( " vcc " , " gpio-keys.0 " ) ,
/* BH1780GLS ambient light sensor */
REGULATOR_SUPPLY ( " vcc " , " 2-0029 " ) ,
/* lsm303dlh accelerometer */
REGULATOR_SUPPLY ( " vdd " , " 3-0018 " ) ,
/* lsm303dlh magnetometer */
REGULATOR_SUPPLY ( " vdd " , " 3-001e " ) ,
/* Rohm BU21013 Touchscreen devices */
REGULATOR_SUPPLY ( " avdd " , " 3-005c " ) ,
REGULATOR_SUPPLY ( " avdd " , " 3-005d " ) ,
/* Synaptics RMI4 Touchscreen device */
REGULATOR_SUPPLY ( " vdd " , " 3-004b " ) ,
} ;
static struct regulator_consumer_supply ab8500_vaux2_consumers [ ] = {
/* On-board eMMC power */
REGULATOR_SUPPLY ( " vmmc " , " sdi4 " ) ,
/* AB8500 audio codec */
REGULATOR_SUPPLY ( " vcc-N2158 " , " ab8500-codec.0 " ) ,
} ;
static struct regulator_consumer_supply ab8500_vaux3_consumers [ ] = {
/* External MMC slot power */
REGULATOR_SUPPLY ( " vmmc " , " sdi0 " ) ,
} ;
static struct regulator_consumer_supply ab8500_vtvout_consumers [ ] = {
/* TV-out DENC supply */
REGULATOR_SUPPLY ( " vtvout " , " ab8500-denc.0 " ) ,
/* Internal general-purpose ADC */
REGULATOR_SUPPLY ( " vddadc " , " ab8500-gpadc.0 " ) ,
} ;
static struct regulator_consumer_supply ab8500_vintcore_consumers [ ] = {
/* SoC core supply, no device */
REGULATOR_SUPPLY ( " v-intcore " , NULL ) ,
2011-06-23 11:39:20 -07:00
/* USB Transceiver */
2010-12-02 17:10:14 +01:00
REGULATOR_SUPPLY ( " vddulpivio18 " , " ab8500-usb.0 " ) ,
} ;
static struct regulator_consumer_supply ab8500_vana_consumers [ ] = {
/* External displays, connector on board, 1v8 power supply */
REGULATOR_SUPPLY ( " vsmps2 " , " mcde.0 " ) ,
} ;
2010-09-15 10:50:59 +01:00
2011-03-09 13:34:17 +01:00
/* ab8500 regulator register initialization */
struct ab8500_regulator_reg_init
ab8500_regulator_reg_init [ AB8500_NUM_REGULATOR_REGISTERS ] = {
/*
* VanaRequestCtrl = HP / LP depending on VxRequest
* VextSupply1RequestCtrl = HP / LP depending on VxRequest
*/
INIT_REGULATOR_REGISTER ( AB8500_REGUREQUESTCTRL2 , 0x00 ) ,
/*
* VextSupply2RequestCtrl = HP / LP depending on VxRequest
* VextSupply3RequestCtrl = HP / LP depending on VxRequest
* Vaux1RequestCtrl = HP / LP depending on VxRequest
* Vaux2RequestCtrl = HP / LP depending on VxRequest
*/
INIT_REGULATOR_REGISTER ( AB8500_REGUREQUESTCTRL3 , 0x00 ) ,
/*
* Vaux3RequestCtrl = HP / LP depending on VxRequest
* SwHPReq = Control through SWValid disabled
*/
INIT_REGULATOR_REGISTER ( AB8500_REGUREQUESTCTRL4 , 0x00 ) ,
/*
* VanaSysClkReq1HPValid = disabled
* Vaux1SysClkReq1HPValid = disabled
* Vaux2SysClkReq1HPValid = disabled
* Vaux3SysClkReq1HPValid = disabled
*/
INIT_REGULATOR_REGISTER ( AB8500_REGUSYSCLKREQ1HPVALID1 , 0x00 ) ,
/*
* VextSupply1SysClkReq1HPValid = disabled
* VextSupply2SysClkReq1HPValid = disabled
* VextSupply3SysClkReq1HPValid = SysClkReq1 controlled
*/
INIT_REGULATOR_REGISTER ( AB8500_REGUSYSCLKREQ1HPVALID2 , 0x40 ) ,
/*
* VanaHwHPReq1Valid = disabled
* Vaux1HwHPreq1Valid = disabled
* Vaux2HwHPReq1Valid = disabled
* Vaux3HwHPReqValid = disabled
*/
INIT_REGULATOR_REGISTER ( AB8500_REGUHWHPREQ1VALID1 , 0x00 ) ,
/*
* VextSupply1HwHPReq1Valid = disabled
* VextSupply2HwHPReq1Valid = disabled
* VextSupply3HwHPReq1Valid = disabled
*/
INIT_REGULATOR_REGISTER ( AB8500_REGUHWHPREQ1VALID2 , 0x00 ) ,
/*
* VanaHwHPReq2Valid = disabled
* Vaux1HwHPReq2Valid = disabled
* Vaux2HwHPReq2Valid = disabled
* Vaux3HwHPReq2Valid = disabled
*/
INIT_REGULATOR_REGISTER ( AB8500_REGUHWHPREQ2VALID1 , 0x00 ) ,
/*
* VextSupply1HwHPReq2Valid = disabled
* VextSupply2HwHPReq2Valid = disabled
* VextSupply3HwHPReq2Valid = HWReq2 controlled
*/
INIT_REGULATOR_REGISTER ( AB8500_REGUHWHPREQ2VALID2 , 0x04 ) ,
/*
* VanaSwHPReqValid = disabled
* Vaux1SwHPReqValid = disabled
*/
INIT_REGULATOR_REGISTER ( AB8500_REGUSWHPREQVALID1 , 0x00 ) ,
/*
* Vaux2SwHPReqValid = disabled
* Vaux3SwHPReqValid = disabled
* VextSupply1SwHPReqValid = disabled
* VextSupply2SwHPReqValid = disabled
* VextSupply3SwHPReqValid = disabled
*/
INIT_REGULATOR_REGISTER ( AB8500_REGUSWHPREQVALID2 , 0x00 ) ,
/*
* SysClkReq2Valid1 = SysClkReq2 controlled
* SysClkReq3Valid1 = disabled
* SysClkReq4Valid1 = SysClkReq4 controlled
* SysClkReq5Valid1 = disabled
* SysClkReq6Valid1 = SysClkReq6 controlled
* SysClkReq7Valid1 = disabled
* SysClkReq8Valid1 = disabled
*/
INIT_REGULATOR_REGISTER ( AB8500_REGUSYSCLKREQVALID1 , 0x2a ) ,
/*
* SysClkReq2Valid2 = disabled
* SysClkReq3Valid2 = disabled
* SysClkReq4Valid2 = disabled
* SysClkReq5Valid2 = disabled
* SysClkReq6Valid2 = SysClkReq6 controlled
* SysClkReq7Valid2 = disabled
* SysClkReq8Valid2 = disabled
*/
INIT_REGULATOR_REGISTER ( AB8500_REGUSYSCLKREQVALID2 , 0x20 ) ,
/*
* VTVoutEna = disabled
* Vintcore12Ena = disabled
* Vintcore12Sel = 1.25 V
* Vintcore12LP = inactive ( HP )
* VTVoutLP = inactive ( HP )
*/
INIT_REGULATOR_REGISTER ( AB8500_REGUMISC1 , 0x10 ) ,
/*
* VaudioEna = disabled
* VdmicEna = disabled
* Vamic1Ena = disabled
* Vamic2Ena = disabled
*/
INIT_REGULATOR_REGISTER ( AB8500_VAUDIOSUPPLY , 0x00 ) ,
/*
* Vamic1_dzout = high - Z when Vamic1 is disabled
* Vamic2_dzout = high - Z when Vamic2 is disabled
*/
INIT_REGULATOR_REGISTER ( AB8500_REGUCTRL1VAMIC , 0x00 ) ,
/*
* VPll = Hw controlled
* VanaRegu = force off
*/
INIT_REGULATOR_REGISTER ( AB8500_VPLLVANAREGU , 0x02 ) ,
/*
* VrefDDREna = disabled
* VrefDDRSleepMode = inactive ( no pulldown )
*/
INIT_REGULATOR_REGISTER ( AB8500_VREFDDR , 0x00 ) ,
/*
* VextSupply1Regu = HW control
* VextSupply2Regu = HW control
* VextSupply3Regu = HW control
* ExtSupply2Bypass = ExtSupply12LPn ball is 0 when Ena is 0
* ExtSupply3Bypass = ExtSupply3LPn ball is 0 when Ena is 0
*/
INIT_REGULATOR_REGISTER ( AB8500_EXTSUPPLYREGU , 0x2a ) ,
/*
* Vaux1Regu = force HP
* Vaux2Regu = force off
*/
INIT_REGULATOR_REGISTER ( AB8500_VAUX12REGU , 0x01 ) ,
/*
* Vaux3regu = force off
*/
INIT_REGULATOR_REGISTER ( AB8500_VRF1VAUX3REGU , 0x00 ) ,
/*
* Vsmps1 = 1.15 V
*/
INIT_REGULATOR_REGISTER ( AB8500_VSMPS1SEL1 , 0x24 ) ,
/*
* Vaux1Sel = 2.5 V
*/
INIT_REGULATOR_REGISTER ( AB8500_VAUX1SEL , 0x08 ) ,
/*
* Vaux2Sel = 2.9 V
*/
INIT_REGULATOR_REGISTER ( AB8500_VAUX2SEL , 0x0d ) ,
/*
* Vaux3Sel = 2.91 V
*/
INIT_REGULATOR_REGISTER ( AB8500_VRF1VAUX3SEL , 0x07 ) ,
/*
* VextSupply12LP = disabled ( no LP )
*/
INIT_REGULATOR_REGISTER ( AB8500_REGUCTRL2SPARE , 0x00 ) ,
/*
* Vaux1Disch = short discharge time
* Vaux2Disch = short discharge time
* Vaux3Disch = short discharge time
* Vintcore12Disch = short discharge time
* VTVoutDisch = short discharge time
* VaudioDisch = short discharge time
*/
INIT_REGULATOR_REGISTER ( AB8500_REGUCTRLDISCH , 0x00 ) ,
/*
* VanaDisch = short discharge time
* VdmicPullDownEna = pulldown disabled when Vdmic is disabled
* VdmicDisch = short discharge time
*/
INIT_REGULATOR_REGISTER ( AB8500_REGUCTRLDISCH2 , 0x00 ) ,
} ;
2010-12-10 11:08:48 +01:00
/* AB8500 regulators */
struct regulator_init_data ab8500_regulators [ AB8500_NUM_REGULATORS ] = {
/* supplies to the display/camera */
[ AB8500_LDO_AUX1 ] = {
. constraints = {
. name = " V-DISPLAY " ,
. min_uV = 2500000 ,
. max_uV = 2900000 ,
. valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
REGULATOR_CHANGE_STATUS ,
2011-04-04 10:44:51 +02:00
. boot_on = 1 , /* display is on at boot */
/*
* This voltage cannot be disabled right now because
* it is somehow affecting the external MMC
* functionality , though that typically will use
* AUX3 .
*/
. always_on = 1 ,
2010-12-10 11:08:48 +01:00
} ,
2010-12-02 17:10:14 +01:00
. num_consumer_supplies = ARRAY_SIZE ( ab8500_vaux1_consumers ) ,
. consumer_supplies = ab8500_vaux1_consumers ,
2010-09-15 10:50:59 +01:00
} ,
2010-12-10 11:08:48 +01:00
/* supplies to the on-board eMMC */
[ AB8500_LDO_AUX2 ] = {
. constraints = {
. name = " V-eMMC1 " ,
. min_uV = 1100000 ,
. max_uV = 3300000 ,
. valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
REGULATOR_CHANGE_STATUS ,
} ,
2010-12-02 17:10:14 +01:00
. num_consumer_supplies = ARRAY_SIZE ( ab8500_vaux2_consumers ) ,
. consumer_supplies = ab8500_vaux2_consumers ,
2010-09-15 10:50:59 +01:00
} ,
2010-12-10 11:08:48 +01:00
/* supply for VAUX3, supplies to SDcard slots */
[ AB8500_LDO_AUX3 ] = {
. constraints = {
. name = " V-MMC-SD " ,
. min_uV = 1100000 ,
. max_uV = 3300000 ,
. valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
REGULATOR_CHANGE_STATUS ,
} ,
2010-12-02 17:10:14 +01:00
. num_consumer_supplies = ARRAY_SIZE ( ab8500_vaux3_consumers ) ,
. consumer_supplies = ab8500_vaux3_consumers ,
2010-09-15 10:50:59 +01:00
} ,
2010-12-10 11:08:48 +01:00
/* supply for tvout, gpadc, TVOUT LDO */
[ AB8500_LDO_TVOUT ] = {
. constraints = {
. name = " V-TVOUT " ,
. valid_ops_mask = REGULATOR_CHANGE_STATUS ,
} ,
2010-12-02 17:10:14 +01:00
. num_consumer_supplies = ARRAY_SIZE ( ab8500_vtvout_consumers ) ,
. consumer_supplies = ab8500_vtvout_consumers ,
2010-09-15 10:50:59 +01:00
} ,
2010-12-10 11:08:48 +01:00
/* supply for ab8500-vaudio, VAUDIO LDO */
[ AB8500_LDO_AUDIO ] = {
. constraints = {
. name = " V-AUD " ,
. valid_ops_mask = REGULATOR_CHANGE_STATUS ,
} ,
2010-09-15 10:50:59 +01:00
} ,
2010-12-10 11:08:48 +01:00
/* supply for v-anamic1 VAMic1-LDO */
[ AB8500_LDO_ANAMIC1 ] = {
. constraints = {
. name = " V-AMIC1 " ,
. valid_ops_mask = REGULATOR_CHANGE_STATUS ,
} ,
2010-09-15 10:50:59 +01:00
} ,
2010-12-10 11:08:48 +01:00
/* supply for v-amic2, VAMIC2 LDO, reuse constants for AMIC1 */
[ AB8500_LDO_ANAMIC2 ] = {
. constraints = {
. name = " V-AMIC2 " ,
. valid_ops_mask = REGULATOR_CHANGE_STATUS ,
} ,
2010-09-15 10:50:59 +01:00
} ,
2010-12-10 11:08:48 +01:00
/* supply for v-dmic, VDMIC LDO */
[ AB8500_LDO_DMIC ] = {
. constraints = {
. name = " V-DMIC " ,
. valid_ops_mask = REGULATOR_CHANGE_STATUS ,
} ,
2010-09-15 10:50:59 +01:00
} ,
2010-12-10 11:08:48 +01:00
/* supply for v-intcore12, VINTCORE12 LDO */
[ AB8500_LDO_INTCORE ] = {
. constraints = {
. name = " V-INTCORE " ,
. valid_ops_mask = REGULATOR_CHANGE_STATUS ,
} ,
2010-12-02 17:10:14 +01:00
. num_consumer_supplies = ARRAY_SIZE ( ab8500_vintcore_consumers ) ,
. consumer_supplies = ab8500_vintcore_consumers ,
2010-09-15 10:50:59 +01:00
} ,
2010-12-10 11:08:48 +01:00
/* supply for U8500 CSI/DSI, VANA LDO */
[ AB8500_LDO_ANA ] = {
. constraints = {
. name = " V-CSI/DSI " ,
. valid_ops_mask = REGULATOR_CHANGE_STATUS ,
} ,
2010-12-02 17:10:14 +01:00
. num_consumer_supplies = ARRAY_SIZE ( ab8500_vana_consumers ) ,
. consumer_supplies = ab8500_vana_consumers ,
2010-09-15 10:50:59 +01:00
} ,
} ;