diff options
author | Christian Hemp <c.hemp@phytec.de> | 2013-07-05 15:51:14 +0200 |
---|---|---|
committer | Justin Waters <justin.waters@timesys.com> | 2013-11-07 12:19:34 -0500 |
commit | 643171d7a3a8cb3e213e94170e409cafa38322a9 (patch) | |
tree | ced296783706798b18d7167662dace4d4e1d5b73 | |
parent | c592b5a835329df9eee445f3766536de1675da72 (diff) |
da9063: phyflex-i.MX6: Add default LDO bypass mode
If didn't set the param ldo_active param in command line we use LDO_MODE_BYPASS
Signed-off-by: Christian Hemp <c.hemp@phytec.de>
-rw-r--r-- | arch/arm/mach-mx6/board-mx6q_phytec-pmic.c | 51 |
1 files changed, 31 insertions, 20 deletions
diff --git a/arch/arm/mach-mx6/board-mx6q_phytec-pmic.c b/arch/arm/mach-mx6/board-mx6q_phytec-pmic.c index 9073a4931576..b6f863692774 100644 --- a/arch/arm/mach-mx6/board-mx6q_phytec-pmic.c +++ b/arch/arm/mach-mx6/board-mx6q_phytec-pmic.c @@ -35,6 +35,7 @@ #include <linux/mfd/da9063/registers.h> #include <mach/irqs.h> #include <mach/gpio.h> +#include <mach/system.h> #include <linux/io.h> #include "crm_regs.h" @@ -42,6 +43,7 @@ #include "cpu_op-mx6.h" extern struct cpu_op *(*get_cpu_op)(int *op); +extern u32 enable_ldo_mode; struct da9063_pdata da9063_data; @@ -330,30 +332,39 @@ struct da9063_regulators_pdata da9063_regulators = { static int da9063_init(struct da9063 *da9063) { + int ret; -#ifdef CONFIG_MX6_INTER_LDO_BYPASS - u32 reg; + if (enable_ldo_mode == LDO_MODE_DEFAULT) + enable_ldo_mode = LDO_MODE_BYPASSED; - /* Enable bypass for arm and soc internal LDO's. VDDPU isn't - * controlled by PMIC so leave PU LDO at default 1.3V */ - reg = __raw_readl(ANADIG_REG_CORE); - reg |= BF_ANADIG_REG_CORE_REG0_TRG(0x1f); // turn off ARM LDO - reg |= BF_ANADIG_REG_CORE_REG1_TRG(0x18); // set 1.3V for PU LDO - reg |= BF_ANADIG_REG_CORE_REG2_TRG(0x1f); // turn off SOC LDO - __raw_writel(reg, ANADIG_REG_CORE); -#else - // ANATOP regulators - struct regulator *cpu_regulator = regulator_get(NULL, "cpu_vddgp"); - struct regulator *soc_regulator = regulator_get(NULL, "cpu_vddsoc"); - struct regulator *pu_regulator = regulator_get(NULL, "cpu_vddvpu"); - // Set to maximum possible voltage values - regulator_set_voltage(cpu_regulator, 1300000, 1300000); - regulator_set_voltage(soc_regulator, 1300000, 1300000); - regulator_set_voltage(pu_regulator, 1300000, 1300000); -#endif - + if (enable_ldo_mode == LDO_MODE_BYPASSED) { + /* VDDARM_IN 1.3V */ + ret = da9063_reg_write(da9063,DA9063_REG_VBCORE1_A,0x64); + if (ret) + goto err; + + /* VDDSOC_IN 1.3V */ + ret = da9063_reg_write(da9063,DA9063_REG_VBCORE2_A,0x64); + if (ret) + goto err; + } else if (enable_ldo_mode != LDO_MODE_BYPASSED) { + /* VDDARM_IN 1.38V */ + ret = da9063_reg_write(da9063,DA9063_REG_VBCORE1_A,0x6C); + if (ret) + goto err; + + /* VDDSOC_IN 1.38V */ + ret = da9063_reg_write(da9063,DA9063_REG_VBCORE2_A,0x6C); + if (ret) + goto err; + }; + return 0; + +err: + printk(KERN_ERR "DA9063 init error!\n"); + return -1; } struct da9063_pdata da9063_data = { |