diff options
| author | Anirudh Ghayal <aghayal@codeaurora.org> | 2016-02-10 23:45:08 +0530 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 21:20:30 -0700 |
| commit | 5f4e7073d9753c4ce6cd30289d41c131e431d20b (patch) | |
| tree | 233374340a711ab873e442eb9f90126ac5fba00b /drivers/regulator | |
| parent | 87c74153a89fda70de35af95ef42c9c1872fe40d (diff) | |
regulator: msm-gfx-ldo: Add LDO initial configuration
Add LDO initial configuration for msmtitanium.
CRs-Fixed: 975536
Change-Id: If3dea4c4422a1b11b4922b95a99c5e2fe3418a26
Signed-off-by: Anirudh Ghayal <aghayal@codeaurora.org>
Diffstat (limited to 'drivers/regulator')
| -rw-r--r-- | drivers/regulator/msm_gfx_ldo.c | 41 |
1 files changed, 30 insertions, 11 deletions
diff --git a/drivers/regulator/msm_gfx_ldo.c b/drivers/regulator/msm_gfx_ldo.c index 1851051d4310..fe139cc0108b 100644 --- a/drivers/regulator/msm_gfx_ldo.c +++ b/drivers/regulator/msm_gfx_ldo.c @@ -28,6 +28,11 @@ #include <linux/slab.h> #include <linux/uaccess.h> +#define LDO_ATEST_REG 0x0 +#define LDO_CFG0_REG 0x4 +#define LDO_CFG1_REG 0x8 +#define LDO_CFG2_REG 0xC + #define LDO_VREF_TEST_CFG 0x14 #define ENABLE_LDO_STATUS_BIT (BIT(8) | BIT(12)) #define LDO_AUTOBYPASS_BIT BIT(20) @@ -89,6 +94,11 @@ struct fuse_param { unsigned bit_end; }; +struct ldo_config { + u32 offset; + u32 value; +}; + struct msm_gfx_ldo { struct device *dev; struct regulator_desc rdesc; @@ -111,6 +121,7 @@ struct msm_gfx_ldo { const struct fuse_param **init_volt_param; bool ldo_enable; bool ldo_bypass_fuse_enable; + struct ldo_config *ldo_init_config; void __iomem *efuse_base; phys_addr_t efuse_addr; @@ -125,6 +136,15 @@ struct msm_gfx_ldo { }; #define MSMTITANIUM_LDO_FUSE_CORNERS 3 +#define LDO_MAX_OFFSET 0xFFFF +static struct ldo_config msmtitanium_ldo_config[] = { + {LDO_ATEST_REG, 0x00000203}, + {LDO_CFG0_REG, 0x05008600}, + {LDO_CFG1_REG, 0x0}, + {LDO_CFG2_REG, 0x0000C3FC}, + {LDO_VREF_TEST_CFG, 0x004B1102}, + {LDO_MAX_OFFSET, LDO_MAX_OFFSET}, +}; static struct fuse_param msmtitanium_ldo_enable_param[] = { {65, 10, 10}, @@ -888,7 +908,7 @@ static int msm_gfx_ldo_init(struct platform_device *pdev, { struct resource *res; u32 len, ctl; - int rc; + int rc, i = 0; res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "ldo_addr"); if (!res || !res->start) { @@ -920,16 +940,14 @@ static int msm_gfx_ldo_init(struct platform_device *pdev, ctl &= ~LDO_CLAMP_IO_BIT; writel_relaxed(ctl, ldo_vreg->ldo_base + PWRSWITCH_CTRL_REG); - /* enable ldo status routing */ - ctl = readl_relaxed(ldo_vreg->ldo_base + LDO_VREF_TEST_CFG); - ctl |= ENABLE_LDO_STATUS_BIT; - writel_relaxed(ctl, ldo_vreg->ldo_base + LDO_VREF_TEST_CFG); - - /* enable auto-bypass */ - ctl = readl_relaxed(ldo_vreg->ldo_base + LDO_VREF_TEST_CFG); - ctl |= LDO_AUTOBYPASS_BIT; - writel_relaxed(ctl, ldo_vreg->ldo_base + LDO_VREF_TEST_CFG); - + i = 0; + while (ldo_vreg->ldo_init_config && + ldo_vreg->ldo_init_config[i].offset != LDO_MAX_OFFSET) { + writel_relaxed(ldo_vreg->ldo_init_config[i].value, + ldo_vreg->ldo_base + + ldo_vreg->ldo_init_config[i].offset); + i++; + } /* complete the writes */ mb(); @@ -1056,6 +1074,7 @@ static int msm_gfx_ldo_target_init(struct msm_gfx_ldo *ldo_vreg) ldo_vreg->init_volt_param[i] = msmtitanium_init_voltage_param[i]; + ldo_vreg->ldo_init_config = msmtitanium_ldo_config; ldo_vreg->ref_volt = msmtitanium_fuse_ref_volt; ldo_vreg->ldo_enable_param = msmtitanium_ldo_enable_param; ldo_vreg->ldo_bypass_fuse_enable = true; |
