summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gong <b38343@freescale.com>2014-09-17 14:46:13 +0800
committerRobin Gong <b38343@freescale.com>2014-09-30 11:55:43 +0800
commite28661b64230b913978ea1090d7d744cc34ea1a7 (patch)
tree67f9e259e945b2228121154457a4397078fac3c9
parent54ce83204fc1d52819dc5fc6b2c7d3e050df6158 (diff)
downloadu-boot-imx-e28661b64230b913978ea1090d7d744cc34ea1a7.zip
u-boot-imx-e28661b64230b913978ea1090d7d744cc34ea1a7.tar.gz
u-boot-imx-e28661b64230b913978ea1090d7d744cc34ea1a7.tar.bz2
MLK-9640 ARM: imx6sx: enable ldo-bypass on mx6sxsabresd board
enable ldo-bypass check on all mx6sxsabresd boards. Signed-off-by: Robin Gong <b38343@freescale.com>
-rw-r--r--arch/arm/cpu/armv7/mx6/soc.c2
-rw-r--r--board/freescale/mx6sx_17x17_arm2/mx6sx_17x17_arm2.c41
-rw-r--r--board/freescale/mx6sx_19x19_arm2/mx6sx_19x19_arm2.c41
-rw-r--r--board/freescale/mx6sxsabresd/mx6sxsabresd.c41
4 files changed, 109 insertions, 16 deletions
diff --git a/arch/arm/cpu/armv7/mx6/soc.c b/arch/arm/cpu/armv7/mx6/soc.c
index aab2582..d7c109e 100644
--- a/arch/arm/cpu/armv7/mx6/soc.c
+++ b/arch/arm/cpu/armv7/mx6/soc.c
@@ -912,7 +912,7 @@ void prep_anatop_bypass(void)
*/
if (!arm_orig_podf)
set_arm_freq_400M(true);
-#ifndef CONFIG_MX6DL
+#if !defined(CONFIG_MX6DL) && !defined(CONFIG_MX6SX)
set_ldo_voltage(LDO_ARM, 975);
#else
set_ldo_voltage(LDO_ARM, 1150);
diff --git a/board/freescale/mx6sx_17x17_arm2/mx6sx_17x17_arm2.c b/board/freescale/mx6sx_17x17_arm2/mx6sx_17x17_arm2.c
index d1fdafc..cbb632a 100644
--- a/board/freescale/mx6sx_17x17_arm2/mx6sx_17x17_arm2.c
+++ b/board/freescale/mx6sx_17x17_arm2/mx6sx_17x17_arm2.c
@@ -715,32 +715,63 @@ static int setup_pmic_voltages(void)
void ldo_mode_set(int ldo_bypass)
{
unsigned char value;
+ int is_400M;
+ u32 vddarm;
/* swith to ldo_bypass mode */
if (ldo_bypass) {
- /* decrease VDDARM to 1.15V */
+ prep_anatop_bypass();
+ /* decrease VDDARM to 1.275V */
if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABVOL, 1, &value, 1)) {
printf("Read SW1AB error!\n");
return;
}
value &= ~0x3f;
- value |= PFUZE100_SW1ABC_SETP(11500);
+ value |= PFUZE100_SW1ABC_SETP(12750);
if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABVOL, 1, &value, 1)) {
printf("Set SW1AB error!\n");
return;
}
- /* increase VDDSOC to 1.15V */
+ /* decrease VDDSOC to 1.3V */
if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CVOL, 1, &value, 1)) {
printf("Read SW1C error!\n");
return;
}
value &= ~0x3f;
- value |= PFUZE100_SW1ABC_SETP(11500);
+ value |= PFUZE100_SW1ABC_SETP(13000);
if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CVOL, 1, &value, 1)) {
printf("Set SW1C error!\n");
return;
}
- set_anatop_bypass(1);
+ is_400M = set_anatop_bypass(1);
+ if (is_400M)
+ vddarm = PFUZE100_SW1ABC_SETP(10750);
+ else
+ vddarm = PFUZE100_SW1ABC_SETP(11750);
+
+ if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABVOL, 1, &value, 1)) {
+ printf("Read SW1AB error!\n");
+ return;
+ }
+ value &= ~0x3f;
+ value |= vddarm;
+ if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABVOL, 1, &value, 1)) {
+ printf("Set SW1AB error!\n");
+ return;
+ }
+
+ if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CVOL, 1, &value, 1)) {
+ printf("Read SW1C error!\n");
+ return;
+ }
+ value &= ~0x3f;
+ value |= PFUZE100_SW1ABC_SETP(11750);
+ if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CVOL, 1, &value, 1)) {
+ printf("Set SW1C error!\n");
+ return;
+ }
+
+ finish_anatop_bypass();
printf("switch to ldo_bypass mode!\n");
}
diff --git a/board/freescale/mx6sx_19x19_arm2/mx6sx_19x19_arm2.c b/board/freescale/mx6sx_19x19_arm2/mx6sx_19x19_arm2.c
index 2d5c8fc..1ad19a2 100644
--- a/board/freescale/mx6sx_19x19_arm2/mx6sx_19x19_arm2.c
+++ b/board/freescale/mx6sx_19x19_arm2/mx6sx_19x19_arm2.c
@@ -759,32 +759,63 @@ static int setup_pmic_voltages(void)
void ldo_mode_set(int ldo_bypass)
{
unsigned char value;
+ int is_400M;
+ u32 vddarm;
/* swith to ldo_bypass mode */
if (ldo_bypass) {
- /* decrease VDDARM to 1.15V */
+ prep_anatop_bypass();
+ /* decrease VDDARM to 1.275V */
if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABVOL, 1, &value, 1)) {
printf("Read SW1AB error!\n");
return;
}
value &= ~0x3f;
- value |= PFUZE100_SW1ABC_SETP(11500);
+ value |= PFUZE100_SW1ABC_SETP(12750);
if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABVOL, 1, &value, 1)) {
printf("Set SW1AB error!\n");
return;
}
- /* increase VDDSOC to 1.15V */
+ /* decrease VDDSOC to 1.3V */
if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CVOL, 1, &value, 1)) {
printf("Read SW1C error!\n");
return;
}
value &= ~0x3f;
- value |= PFUZE100_SW1ABC_SETP(11500);
+ value |= PFUZE100_SW1ABC_SETP(13000);
if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CVOL, 1, &value, 1)) {
printf("Set SW1C error!\n");
return;
}
- set_anatop_bypass(1);
+ is_400M = set_anatop_bypass(1);
+ if (is_400M)
+ vddarm = PFUZE100_SW1ABC_SETP(10750);
+ else
+ vddarm = PFUZE100_SW1ABC_SETP(11750);
+
+ if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABVOL, 1, &value, 1)) {
+ printf("Read SW1AB error!\n");
+ return;
+ }
+ value &= ~0x3f;
+ value |= vddarm;
+ if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABVOL, 1, &value, 1)) {
+ printf("Set SW1AB error!\n");
+ return;
+ }
+
+ if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CVOL, 1, &value, 1)) {
+ printf("Read SW1C error!\n");
+ return;
+ }
+ value &= ~0x3f;
+ value |= PFUZE100_SW1ABC_SETP(11750);
+ if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CVOL, 1, &value, 1)) {
+ printf("Set SW1C error!\n");
+ return;
+ }
+
+ finish_anatop_bypass();
printf("switch to ldo_bypass mode!\n");
}
diff --git a/board/freescale/mx6sxsabresd/mx6sxsabresd.c b/board/freescale/mx6sxsabresd/mx6sxsabresd.c
index a6552de..5d9a225 100644
--- a/board/freescale/mx6sxsabresd/mx6sxsabresd.c
+++ b/board/freescale/mx6sxsabresd/mx6sxsabresd.c
@@ -776,32 +776,63 @@ static int setup_pmic_voltages(void)
void ldo_mode_set(int ldo_bypass)
{
unsigned char value;
+ int is_400M;
+ u32 vddarm;
/* switch to ldo_bypass mode */
if (ldo_bypass) {
- /* decrease VDDARM to 1.15V */
+ prep_anatop_bypass();
+ /* decrease VDDARM to 1.275V */
if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABVOL, 1, &value, 1)) {
printf("Read SW1AB error!\n");
return;
}
value &= ~0x3f;
- value |= PFUZE100_SW1ABC_SETP(11500);
+ value |= PFUZE100_SW1ABC_SETP(12750);
if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABVOL, 1, &value, 1)) {
printf("Set SW1AB error!\n");
return;
}
- /* increase VDDSOC to 1.15V */
+ /* decrease VDDSOC to 1.3V */
if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CVOL, 1, &value, 1)) {
printf("Read SW1C error!\n");
return;
}
value &= ~0x3f;
- value |= PFUZE100_SW1ABC_SETP(11500);
+ value |= PFUZE100_SW1ABC_SETP(13000);
if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CVOL, 1, &value, 1)) {
printf("Set SW1C error!\n");
return;
}
- set_anatop_bypass(1);
+ is_400M = set_anatop_bypass(1);
+ if (is_400M)
+ vddarm = PFUZE100_SW1ABC_SETP(10750);
+ else
+ vddarm = PFUZE100_SW1ABC_SETP(11750);
+
+ if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABVOL, 1, &value, 1)) {
+ printf("Read SW1AB error!\n");
+ return;
+ }
+ value &= ~0x3f;
+ value |= vddarm;
+ if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABVOL, 1, &value, 1)) {
+ printf("Set SW1AB error!\n");
+ return;
+ }
+
+ if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CVOL, 1, &value, 1)) {
+ printf("Read SW1C error!\n");
+ return;
+ }
+ value &= ~0x3f;
+ value |= PFUZE100_SW1ABC_SETP(11750);
+ if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CVOL, 1, &value, 1)) {
+ printf("Set SW1C error!\n");
+ return;
+ }
+
+ finish_anatop_bypass();
printf("switch to ldo_bypass mode!\n");
}