From mboxrd@z Thu Jan 1 00:00:00 1970 From: Li Ye-B37916 Date: Wed, 5 Nov 2014 16:33:07 +0800 Subject: [U-Boot] [PATCH 2/4] imx: mx6slevk: Add PMIC Pfuze support In-Reply-To: <5458F745.5000909@samsung.com> References: <1410340097-19804-1-git-send-email-B37916@freescale.com> <1410340097-19804-2-git-send-email-B37916@freescale.com> <5458F745.5000909@samsung.com> Message-ID: <5459E0C3.5010207@freescale.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi Przemyslaw, On 11/4/2014 11:56 PM, Przemyslaw Marczak wrote: > Hello Ye Li, > > On 09/10/2014 11:08 AM, Ye.Li wrote: >> Initialize the Pfuze on I2C1 at board late init. The mx6slevk board >> has Pfuze100 or Pfuze200, print the chip type by parsing the ID. >> >> Signed-off-by: Ye.Li >> --- >> board/freescale/mx6slevk/mx6slevk.c | 57 +++++++++++++++++++++++++++++++++++ >> include/configs/mx6slevk.h | 7 ++++ >> 2 files changed, 64 insertions(+), 0 deletions(-) >> >> diff --git a/board/freescale/mx6slevk/mx6slevk.c b/board/freescale/mx6slevk/mx6slevk.c >> index fedd5c3..8b6a79c 100644 >> --- a/board/freescale/mx6slevk/mx6slevk.c >> +++ b/board/freescale/mx6slevk/mx6slevk.c >> @@ -21,6 +21,8 @@ >> #include >> #include >> #include >> +#include >> +#include >> >> DECLARE_GLOBAL_DATA_PTR; >> >> @@ -48,6 +50,8 @@ DECLARE_GLOBAL_DATA_PTR; >> >> #define PC MUX_PAD_CTRL(I2C_PAD_CTRL) >> >> +#define I2C_PMIC 0 >> + >> /* I2C1 for PMIC */ >> struct i2c_pads_info i2c_pad_info0 = { >> .sda = { >> @@ -191,6 +195,59 @@ int board_init(void) >> return 0; >> } >> >> +static int pfuze_init(void) >> +{ >> + struct pmic *p; >> + int ret; >> + unsigned int reg; >> + >> + ret = power_pfuze100_init(I2C_PMIC); >> + if (ret) >> + return ret; >> + >> + p = pmic_get("PFUZE100"); >> + ret = pmic_probe(p); >> + if (ret) >> + return ret; >> + >> + pmic_reg_read(p, PFUZE100_DEVICEID, ®); >> + printf("PMIC: PFUZE%s ID=0x%02x\n", >> + ((reg & 0xf) == 0) ? "100" : "200", reg); >> + >> + /* Set SW1AB stanby volage to 0.975V */ >> + pmic_reg_read(p, PFUZE100_SW1ABSTBY, ®); >> + reg &= ~0x3f; >> + reg |= 0x1b; >> + pmic_reg_write(p, PFUZE100_SW1ABSTBY, reg); >> + >> + /* Set SW1AB/VDDARM step ramp up time from 16us to 4us/25mV */ >> + pmic_reg_read(p, PUZE_100_SW1ABCONF, ®); >> + reg &= ~0xc0; >> + reg |= 0x40; >> + pmic_reg_write(p, PUZE_100_SW1ABCONF, reg); >> + >> + /* Set SW1C standby voltage to 0.975V */ >> + pmic_reg_read(p, PFUZE100_SW1CSTBY, ®); >> + reg &= ~0x3f; >> + reg |= 0x1b; >> + pmic_reg_write(p, PFUZE100_SW1CSTBY, reg); >> + >> + /* Set SW1C/VDDSOC step ramp up time from 16us to 4us/25mV */ >> + pmic_reg_read(p, PFUZE100_SW1CCONF, ®); >> + reg &= ~0xc0; >> + reg |= 0x40; >> + pmic_reg_write(p, PFUZE100_SW1CCONF, reg); >> + >> + return 0; >> +} >> + >> +int board_late_init(void) >> +{ >> + pfuze_init(); >> + >> + return 0; >> +} > > Why not use power_init_board()? > It's dedicated and called at common/board_r.c. > Good suggestion, will change to use the power_init_board in v2. >> + >> u32 get_board_rev(void) >> { >> return get_cpu_rev(); >> diff --git a/include/configs/mx6slevk.h b/include/configs/mx6slevk.h >> index bf5066f..09d0896 100644 >> --- a/include/configs/mx6slevk.h >> +++ b/include/configs/mx6slevk.h >> @@ -30,6 +30,7 @@ >> #define CONFIG_SYS_MALLOC_LEN (3 * SZ_1M) >> >> #define CONFIG_BOARD_EARLY_INIT_F >> +#define CONFIG_BOARD_LATE_INIT >> #define CONFIG_MXC_GPIO >> >> #define CONFIG_MXC_UART >> @@ -66,6 +67,12 @@ >> #define CONFIG_SYS_I2C_MXC >> #define CONFIG_SYS_I2C_SPEED 100000 >> >> +/* PMIC */ >> +#define CONFIG_POWER >> +#define CONFIG_POWER_I2C >> +#define CONFIG_POWER_PFUZE100 >> +#define CONFIG_POWER_PFUZE100_I2C_ADDR 0x08 > > I assume that the I2C addr is const, if yes then it should be moved to the PFUZE100 header. > It is not const. The default I2C address is 0x08. But it can be programmed from 0x08 to 0x0F by setting OTP_I2C_ADDR register. >> + >> /* allow to overwrite serial and ethaddr */ >> #define CONFIG_ENV_OVERWRITE >> #define CONFIG_CONS_INDEX 1 >> > > Thank you, Best regards, Ye Li