
This patch is to implement pfuze_mode_init and pfuze_regulator_mode_set function, and add prototype in header file.
pfuze_mode_init is to set switching mode for all buck regulators to improve system efficiency. pfuze_regulator_mode_set is to set the regulator's mode according input parameter.
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.
Signed-off-by: Peng Fan Peng.Fan@freescale.com ---
Changes v2: implement one function mode for one regulator.
board/freescale/common/pfuze.c | 43 ++++++++++++++++++++++++++++++++++++++++++ board/freescale/common/pfuze.h | 2 ++ 2 files changed, 45 insertions(+)
diff --git a/board/freescale/common/pfuze.c b/board/freescale/common/pfuze.c index 2cd1794..f2fffc1 100644 --- a/board/freescale/common/pfuze.c +++ b/board/freescale/common/pfuze.c @@ -8,6 +8,49 @@ #include <power/pmic.h> #include <power/pfuze100_pmic.h>
+/* Set one switch regulator's mode */ +int pfuze_regulator_mode_set(struct pmic *p, u32 regulator, u32 mode) +{ + return pmic_reg_write(p, regulator, mode); +} + +/* Set all switch regulators' working mode */ +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 -1; + } + + ret = pfuze_regulator_mode_set(p, PFUZE100_SW1ABMODE, mode); + if (ret < 0) { + printf("Set SW1AB mode error!\n"); + return ret; + } + + for (i = 0; i < switch_num - 1; i++) { + ret = pfuze_regulator_mode_set(p, offset + i * 7, mode); + if (ret < 0) { + printf("Set switch%x mode error!\n", offset + i * 7); + return ret; + } + } + + return ret; +} + struct pmic *pfuze_common_init(unsigned char i2cbus) { struct pmic *p; diff --git a/board/freescale/common/pfuze.h b/board/freescale/common/pfuze.h index 7a4126c..7c316c6 100644 --- a/board/freescale/common/pfuze.h +++ b/board/freescale/common/pfuze.h @@ -8,5 +8,7 @@ #define __PFUZE_BOARD_HELPER__
struct pmic *pfuze_common_init(unsigned char i2cbus); +int pfuze_mode_init(struct pmic *p, u32 mode); +int pfuze_regulator_mode_set(struct pmic *p, u32 regulator, u32 mode);
#endif