summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--board/freescale/mx6q_sabresd/mx6q_sabresd.c27
-rw-r--r--board/freescale/mx6sl_arm2/mx6sl_arm2.c18
2 files changed, 45 insertions, 0 deletions
diff --git a/board/freescale/mx6q_sabresd/mx6q_sabresd.c b/board/freescale/mx6q_sabresd/mx6q_sabresd.c
index 274f0c8..c611dcb 100644
--- a/board/freescale/mx6q_sabresd/mx6q_sabresd.c
+++ b/board/freescale/mx6q_sabresd/mx6q_sabresd.c
@@ -694,6 +694,33 @@ void setup_pmic_voltages(void)
if (i2c_read(0x8, 0, 1, &value, 1))
printf("%s:i2c_read:error\n", __func__);
printf("Found PFUZE100! device id=%x\n", value);
+ if (value == 0x10) {
+ /*workaround ER1 of pfuze1.0: set all buck regulators
+ in PWM mode except SW1C*/
+ value = 0x6;
+ i2c_write(0x8, 0x23, 1, &value, 1);/*SW1AB*/
+
+ value = 0x6;
+ i2c_write(0x8, 0x38, 1, &value, 1);/*SW2*/
+
+ value = 0x6;
+ i2c_write(0x8, 0x3f, 1, &value, 1);/*SW3A*/
+
+ value = 0x6;
+ i2c_write(0x8, 0x46, 1, &value, 1);/*SW3B*/
+
+ value = 0x6;
+ i2c_write(0x8, 0x4d, 1, &value, 1);/*SW4*/
+ }
+ /*VDDCORE/VDDSOC default 1.375V is not enough, considering
+ pfuze tolerance and IR drop and ripple, need increase
+ to 1.425V for SabreSD*/
+ value = 0x2d;
+ i2c_write(0x8, 0x20, 1, &value, 1);
+
+ value = 0x2d;
+ i2c_write(0x8, 0x2e, 1, &value, 1);
+
#if CONFIG_MX6_INTER_LDO_BYPASS
/*VDDCORE 1.1V@800Mhz: SW1AB*/
value = 0x20;
diff --git a/board/freescale/mx6sl_arm2/mx6sl_arm2.c b/board/freescale/mx6sl_arm2/mx6sl_arm2.c
index e9a64fd..f14b2b6 100644
--- a/board/freescale/mx6sl_arm2/mx6sl_arm2.c
+++ b/board/freescale/mx6sl_arm2/mx6sl_arm2.c
@@ -959,6 +959,24 @@ void setup_pmic_voltages(void)
if (i2c_read(0x8, 0, 1, &value, 1))
printf("%s:i2c_read:error\n", __func__);
printf("Found PFUZE100! device id=%x\n", value);
+ if (value == 0x10) {
+ /*workaround ER1 of pfuze1.0: set all buck regulators
+ in PWM mode except SW1C*/
+ value = 0x6;
+ i2c_write(0x8, 0x23, 1, &value, 1);/*SW1AB*/
+
+ value = 0x6;
+ i2c_write(0x8, 0x38, 1, &value, 1);/*SW2*/
+
+ value = 0x6;
+ i2c_write(0x8, 0x3f, 1, &value, 1);/*SW3A*/
+
+ value = 0x6;
+ i2c_write(0x8, 0x46, 1, &value, 1);/*SW3B*/
+
+ value = 0x6;
+ i2c_write(0x8, 0x4d, 1, &value, 1);/*SW4*/
+ }
#if CONFIG_MX6_INTER_LDO_BYPASS
/*VDDCORE 1.1V@800Mhz: SW1AB*/
value = 0x20;