[U-Boot] [PATCH 2/4] imx: mx6slevk: Add PMIC Pfuze support

Przemyslaw Marczak p.marczak at samsung.com
Tue Nov 4 16:56:53 CET 2014


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 <B37916 at freescale.com>
> ---
>   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 <mmc.h>
>   #include <netdev.h>
>   #include <i2c.h>
> +#include <power/pmic.h>
> +#include <power/pfuze100_pmic.h>
>
>   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, &reg);
> +	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);
> +	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);
> +	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);
> +	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);
> +	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.

> +
>   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.

> +
>   /* allow to overwrite serial and ethaddr */
>   #define CONFIG_ENV_OVERWRITE
>   #define CONFIG_CONS_INDEX		1
>

Thank you,
-- 
Przemyslaw Marczak
Samsung R&D Institute Poland
Samsung Electronics
p.marczak at samsung.com


More information about the U-Boot mailing list