Skip to contentSkip to conversation

pmic:pfuze support buck regulator mode switch

PATCH New Peng Fan 3 participants 10 messages Jan 27, 2015 – Feb 11, 2015

lore
Share & tools
lore

Peng Fan

author
#0 lore raw

v5 cover pmic:pfuze support buck regulator mode switch

This patch set is to support buck regulator can
working in different switching modes. To improve
system efficiency the buck regulators can operate
in different switching modes.

patch 1/3 is to add related bit definitions and registers. patch 2/3 is to implement the switching mode init function. patch 3/3 is to add related mode init function in board code.

mx6slevk board is not included in this patch set, since power and i2c interface are not implemented for it. These patches are at:
https://patchwork.ozlabs.org/patch/426961/
https://patchwork.ozlabs.org/patch/426962/
https://patchwork.ozlabs.org/patch/426963/

Added "Acked-by: Przemyslaw Marczak <[email protected]>" in this patch set. Added "Reviewed-by: Stefano Babic <[email protected]>" for patch 1/3. There is no major changes for this patch version. Only defined a macro SWITCH_SIZE to replace the constant in patch 2/3.

Peng Fan (3):
pmic:pfuz100 add switch mode and more registers
pmic:pfuze implement pmic_mode_init
imx:mx6 set normal APS and standby PFM mode

 board/freescale/common/pfuze.c                | 37 ++++++++++++++++++
 board/freescale/common/pfuze.h                |  1 +
 board/freescale/mx6qsabreauto/mx6qsabreauto.c |  6 +++
 board/freescale/mx6sabresd/mx6sabresd.c       |  6 ++-
 board/freescale/mx6sxsabresd/mx6sxsabresd.c   |  6 ++-
 include/power/pfuze100_pmic.h                 | 55 +++++++++++++++++++++++++++
 6 files changed, 109 insertions(+), 2 deletions(-)
Signature · 1 line
1.8.4
author
#1 lore raw

PATCH v5 1/3 pmic:pfuz100 add switch mode and more registers

Add more pfuze register offset.
And switch mode definition.
Add a macro SWITCH_SIZE

---

Changes v5:
add "Acked-by: Przemyslaw Marczak <[email protected]>" and
"Reviewed-by: Stefano Babic <[email protected]>"
define a SWITCH_SIZE macro to replace constant in patch 2/3

Changes v4:
none

Changes v3:
none

Changes v2:
none

 include/power/pfuze100_pmic.h | 55 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 55 insertions(+)
include/power/pfuze100_pmic.h +55 -0
index 1118489..41aa3c4 100644
@@ -16,14 +16,34 @@ enum {
 
 	PFUZE100_SW1ABVOL	= 0x20,
 	PFUZE100_SW1ABSTBY	= 0x21,
+	PFUZE100_SW1ABOFF	= 0x22,
+	PFUZE100_SW1ABMODE	= 0x23,
 	PUZE_100_SW1ABCONF	= 0x24,
 	PFUZE100_SW1CVOL	= 0x2e,
 	PFUZE100_SW1CSTBY	= 0x2f,
+	PFUZE100_SW1COFF	= 0x30,
+	PFUZE100_SW1CMODE	= 0x31,
 	PFUZE100_SW1CCONF	= 0x32,
 	PFUZE100_SW2VOL		= 0x35,
+	PFUZE100_SW2STBY	= 0x36,
+	PFUZE100_SW2OFF		= 0x37,
+	PFUZE100_SW2MODE	= 0x38,
+	PFUZE100_SW2CONF	= 0x39,
 	PFUZE100_SW3AVOL	= 0x3c,
+	PFUZE100_SW3ASTBY	= 0x3D,
+	PFUZE100_SW3AOFF	= 0x3E,
+	PFUZE100_SW3AMODE	= 0x3F,
+	PFUZE100_SW3ACONF	= 0x40,
 	PFUZE100_SW3BVOL	= 0x43,
+	PFUZE100_SW3BSTBY	= 0x44,
+	PFUZE100_SW3BOFF	= 0x45,
+	PFUZE100_SW3BMODE	= 0x46,
+	PFUZE100_SW3BCONF	= 0x47,
 	PFUZE100_SW4VOL		= 0x4a,
+	PFUZE100_SW4STBY	= 0x4b,
+	PFUZE100_SW4OFF		= 0x4c,
+	PFUZE100_SW4MODE	= 0x4d,
+	PFUZE100_SW4CONF	= 0x4e,
 	PFUZE100_SWBSTCON1	= 0x66,
 	PFUZE100_VREFDDRCON	= 0x6a,
 	PFUZE100_VSNVSVOL	= 0x6b,
@@ -177,5 +197,40 @@ enum {
 #define SWBST_MODE_AUTO	(2 << 2)
 #define SWBST_MODE_APS	(2 << 3)
 
+/*
+ * Regulator Mode Control
+ *
+ * OFF: The regulator is switched off and the output voltage is discharged.
+ * PFM: In this mode, the regulator is always in PFM mode, which is useful
+ *     @light loads for optimized efficiency.
+ * PWM: In this mode, the regulator is always in PWM mode operation
+ *	regardless of load conditions.
+ * APS: In this mode, the regulator moves automatically between pulse
+ *	skipping mode and PWM mode depending on load conditions.
+ *
+ * SWxMODE[3:0]
+ * Normal Mode  |  Standby Mode	|      value
+ *   OFF		OFF		0x0
+ *   PWM		OFF		0x1
+ *   PFM		OFF		0x3
+ *   APS		OFF		0x4
+ *   PWM		PWM		0x5
+ *   PWM		APS		0x6
+ *   APS		APS		0x8
+ *   APS		PFM		0xc
+ *   PWM		PFM		0xd
+ */
+#define OFF_OFF		0x0
+#define PWM_OFF		0x1
+#define PFM_OFF		0x3
+#define APS_OFF		0x4
+#define PWM_PWM		0x5
+#define PWM_APS		0x6
+#define APS_APS		0x8
+#define APS_PFM		0xc
+#define PWM_PFM		0xd
+
+#define SWITCH_SIZE	0x7
+
 int power_pfuze100_init(unsigned char bus);
 #endif
Signature · 1 line
1.8.4
#2 lore raw

PATCH v5 1/3 pmic:pfuz100 add switch mode and more registers

Quoted 8 lines · Peng Fan

Add more pfuze register offset.
And switch mode definition.
Add a macro SWITCH_SIZE

---

Applied to u-boot-imx, thanks !

Best regards,
Stefano Babic

Signature · 5 lines
=====================================================================
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
=====================================================================
author
#3 lore raw

PATCH v5 2/3 pmic:pfuze implement pmic_mode_init

In reply to Peng Fan

This patch is to implement pmic_mode_init function, and add prototype in header file.

This function is to set switching mode for pmic buck regulators to improve system efficiency.

Mode:
OFF: The regulator is switched off and the output voltage is discharged.
PFM: In this mode, the regulator is always in PFM mode, which
is useful at light loads for optimized efficiency.
PWM: In this mode, the regulator is always in PWM mode operation
regardless of load conditions.
APS: In this mode, the regulator moves automatically between
pulse skipping mode and PWM mode depending on load conditions.

---

Changes v5:
Add Acked-by: Przemyslaw Marczak <[email protected]>
replace the constant 7 using macro SWITCH_SIZE which defined in header file. Include "errno.h" to avoid compile error.

Changes v4:
Take Fabio's comments, fix return value using -EINVAL when error.

Changes v3:
delete the new feature, it is fine to use the original v1 patch version

Changes v2:
implement new feature to configure one regulator

 board/freescale/common/pfuze.c | 38 ++++++++++++++++++++++++++++++++++++++
 board/freescale/common/pfuze.h |  1 +
 2 files changed, 39 insertions(+)
board/freescale/common/pfuze.c +38 -0
index 2cd1794..4980bf7 100644
@@ -5,9 +5,47 @@
  */
 
 #include <common.h>
+#include <errno.h>
 #include <power/pmic.h>
 #include <power/pfuze100_pmic.h>
 
+int pfuze_mode_init(struct pmic *p, u32 mode)
+{
+	unsigned char offset, i, switch_num;
+	u32 id, ret;
+
+	pmic_reg_read(p, PFUZE100_DEVICEID, &id);
+	id = id & 0xf;
+
+	if (id == 0) {
+		switch_num = 6;
+		offset = PFUZE100_SW1CMODE;
+	} else if (id == 1) {
+		switch_num = 4;
+		offset = PFUZE100_SW2MODE;
+	} else {
+		printf("Not supported, id=%d\n", id);
+		return -EINVAL;
+	}
+
+	ret = pmic_reg_write(p, PFUZE100_SW1ABMODE, mode);
+	if (ret < 0) {
+		printf("Set SW1AB mode error!\n");
+		return ret;
+	}
+
+	for (i = 0; i < switch_num - 1; i++) {
+		ret = pmic_reg_write(p, offset + i * SWITCH_SIZE, mode);
+		if (ret < 0) {
+			printf("Set switch 0x%x mode error!\n",
+			       offset + i * SWITCH_SIZE);
+			return ret;
+		}
+	}
+
+	return ret;
+}
+
 struct pmic *pfuze_common_init(unsigned char i2cbus)
 {
 	struct pmic *p;
board/freescale/common/pfuze.h +1 -0
index 7a4126c..53cfc99 100644
@@ -8,5 +8,6 @@
 #define __PFUZE_BOARD_HELPER__
 
 struct pmic *pfuze_common_init(unsigned char i2cbus);
+int pfuze_mode_init(struct pmic *p, u32 mode);
 
 #endif
Signature · 1 line
1.8.4
#4 lore raw

PATCH v5 2/3 pmic:pfuze implement pmic_mode_init

Quoted 15 lines · Peng Fan

This patch is to implement pmic_mode_init function, and add prototype in header file.

This function is to set switching mode for pmic buck regulators to improve system efficiency.

Mode:
OFF: The regulator is switched off and the output voltage is discharged.
PFM: In this mode, the regulator is always in PFM mode, which
is useful at light loads for optimized efficiency.
PWM: In this mode, the regulator is always in PWM mode operation
regardless of load conditions.
APS: In this mode, the regulator moves automatically between
pulse skipping mode and PWM mode depending on load conditions.

Quoted 3 lines

---

Applied to u-boot-imx, thanks !

Best regards,
Stefano Babic

Signature · 5 lines
=====================================================================
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
=====================================================================
#5 lore raw

PATCH v5 2/3 pmic:pfuze implement pmic_mode_init

Hi, Stefano

Quoted 16 lines · Stefano Babic
Quoted 15 lines · Peng Fan

This patch is to implement pmic_mode_init function, and add prototype in header file.

This function is to set switching mode for pmic buck regulators to improve system efficiency.

Mode:
OFF: The regulator is switched off and the output voltage is discharged.
PFM: In this mode, the regulator is always in PFM mode, which
is useful at light loads for optimized efficiency.
PWM: In this mode, the regulator is always in PWM mode operation
regardless of load conditions.
APS: In this mode, the regulator moves automatically between
pulse skipping mode and PWM mode depending on load conditions.

Quoted 4 lines
Quoted 3 lines

---

Applied to u-boot-imx, thanks !

I did not see this patch applied to u-boot-imx, I saw only patch 1/3 is applied. Do you miss this one?

Quoted 6 lines

Best regards,
Stefano Babic

Regards,
Peng.

#6 lore raw

PATCH v5 2/3 pmic:pfuze implement pmic_mode_init

Hi Peng,

Quoted 19 lines · Peng Fan

Hi, Stefano

Quoted 16 lines · Stefano Babic
Quoted 15 lines · Peng Fan

This patch is to implement pmic_mode_init function, and add prototype in header file.

This function is to set switching mode for pmic buck regulators to improve system efficiency.

Mode:
OFF: The regulator is switched off and the output voltage is discharged.
PFM: In this mode, the regulator is always in PFM mode, which
is useful at light loads for optimized efficiency.
PWM: In this mode, the regulator is always in PWM mode operation
regardless of load conditions.
APS: In this mode, the regulator moves automatically between
pulse skipping mode and PWM mode depending on load conditions.

Quoted 7 lines
Quoted 4 lines
Quoted 3 lines

---

Applied to u-boot-imx, thanks !

I did not see this patch applied to u-boot-imx, I saw only patch 1/3 is applied. Do you miss this one?

Quoted 1 line

I see. I have applied only patches that are assigned to me (in patchwork), in this case only Patch 1/3. Patch 2 and 3 were still assigned to Przemyslaw (but we have his ACK). I assign the patches to me and I will apply them.

However, something bad happened. No idea how it could happen, but applying patch1/3, the define for SWITCH_SIZE disappeared - see in file. I cannot find a valid reason for that. I fix it myself, and I start rebuilding to check breakage before pushing on the server.

Best regards,
Stefano Babic

Signature · 5 lines
=====================================================================
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
=====================================================================
author
#7 lore raw

PATCH v5 3/3 imx:mx6 set normal APS and standby PFM mode

In reply to Peng Fan

To normal mode, use APS switching mode.
To standy mode, use PFM switching mode.

---

Changes v5:
Add Acked-by: Przemyslaw Marczak <[email protected]>

Changes v4:
none

Changes v3:
Following Fabio's comments, correct return value

Changes v2:
none

 board/freescale/mx6qsabreauto/mx6qsabreauto.c | 6 ++++++
 board/freescale/mx6sabresd/mx6sabresd.c       | 6 +++++-
 board/freescale/mx6sxsabresd/mx6sxsabresd.c   | 6 +++++-
 3 files changed, 16 insertions(+), 2 deletions(-)
board/freescale/mx6qsabreauto/mx6qsabreauto.c +6 -0
index 59387ff..b12e74e 100644
@@ -29,6 +29,7 @@
 #include <asm/arch/crm_regs.h>
 #include <pca953x.h>
 #include <power/pmic.h>
+#include <power/pfuze100_pmic.h>
 #include "../common/pfuze.h"
 
 DECLARE_GLOBAL_DATA_PTR;
@@ -515,11 +516,16 @@ int board_spi_cs_gpio(unsigned bus, unsigned cs)
 int power_init_board(void)
 {
 	struct pmic *p;
+	unsigned int ret;
 
 	p = pfuze_common_init(I2C_PMIC);
 	if (!p)
 		return -ENODEV;
 
+	ret = pfuze_mode_init(p, APS_PFM);
+	if (ret < 0)
+		return ret;
+
 	return 0;
 }
 
board/freescale/mx6sabresd/mx6sabresd.c +5 -1
index 2f7198d..bb2dd96 100644
@@ -631,12 +631,16 @@ int board_init(void)
 int power_init_board(void)
 {
 	struct pmic *p;
-	unsigned int reg;
+	unsigned int reg, ret;
 
 	p = pfuze_common_init(I2C_PMIC);
 	if (!p)
 		return -ENODEV;
 
+	ret = pfuze_mode_init(p, APS_PFM);
+	if (ret < 0)
+		return ret;
+
 	/* Increase VGEN3 from 2.5 to 2.8V */
 	pmic_reg_read(p, PFUZE100_VGEN3VOL, &reg);
 	reg &= ~LDO_VOL_MASK;
board/freescale/mx6sxsabresd/mx6sxsabresd.c +5 -1
index a2c9aae..2ff960e 100644
@@ -199,12 +199,16 @@ static struct i2c_pads_info i2c_pad_info1 = {
 int power_init_board(void)
 {
 	struct pmic *p;
-	unsigned int reg;
+	unsigned int reg, ret;
 
 	p = pfuze_common_init(I2C_PMIC);
 	if (!p)
 		return -ENODEV;
 
+	ret = pfuze_mode_init(p, APS_PFM);
+	if (ret < 0)
+		return ret;
+
 	/* Enable power of VGEN5 3V3, needed for SD3 */
 	pmic_reg_read(p, PFUZE100_VGEN5VOL, &reg);
 	reg &= ~LDO_VOL_MASK;
Signature · 1 line
1.8.4
#8 lore raw

PATCH v5 3/3 imx:mx6 set normal APS and standby PFM mode

Quoted 6 lines · Peng Fan

To normal mode, use APS switching mode.
To standy mode, use PFM switching mode.

---

Applied to u-boot-imx, thanks !

Best regards,
Stefano Babic

Signature · 5 lines
=====================================================================
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
=====================================================================
#9 lore raw

PATCH v5 3/3 imx:mx6 set normal APS and standby PFM mode

Hi, Stefano

Quoted 8 lines · Stefano Babic
Quoted 6 lines · Peng Fan

To normal mode, use APS switching mode.
To standy mode, use PFM switching mode.

---

Applied to u-boot-imx, thanks !

Did you miss this patch? I also did not see this one applied.

Quoted 6 lines

Best regards,
Stefano Babic

Regards,
Peng.