All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stefano Babic <sbabic@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH] mx6sabred: Add PFUZE100 PMIC support
Date: Mon, 05 May 2014 16:29:01 +0200	[thread overview]
Message-ID: <5367A02D.5080809@denx.de> (raw)
In-Reply-To: <1399230898-25722-1-git-send-email-festevam@gmail.com>

Hi Fabio,

just a minor question:

On 04/05/2014 21:14, Fabio Estevam wrote:
> From: Fabio Estevam <fabio.estevam@freescale.com>
> 
> mx6sabresd boards have a PFUZE100 PMIC connected to I2C2 bus.
> 
> Add support for it.
> 
> Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
> ---
>  board/freescale/mx6sabresd/mx6sabresd.c | 83 +++++++++++++++++++++++++++++++++
>  include/configs/mx6sabresd.h            | 14 ++++++
>  include/power/pfuze100_pmic.h           |  4 ++
>  3 files changed, 101 insertions(+)
> 
> diff --git a/board/freescale/mx6sabresd/mx6sabresd.c b/board/freescale/mx6sabresd/mx6sabresd.c
> index 3e314da..9e35711 100644
> --- a/board/freescale/mx6sabresd/mx6sabresd.c
> +++ b/board/freescale/mx6sabresd/mx6sabresd.c
> @@ -12,6 +12,7 @@
>  #include <asm/arch/mx6-pins.h>
>  #include <asm/errno.h>
>  #include <asm/gpio.h>
> +#include <asm/imx-common/mxc_i2c.h>
>  #include <asm/imx-common/iomux-v3.h>
>  #include <asm/imx-common/boot_mode.h>
>  #include <asm/imx-common/video.h>
> @@ -23,6 +24,9 @@
>  #include <asm/arch/crm_regs.h>
>  #include <asm/io.h>
>  #include <asm/arch/sys_proto.h>
> +#include <i2c.h>
> +#include <power/pmic.h>
> +#include <power/pfuze100_pmic.h>
>  DECLARE_GLOBAL_DATA_PTR;
>  
>  #define UART_PAD_CTRL  (PAD_CTL_PUS_100K_UP |			\
> @@ -39,6 +43,14 @@ DECLARE_GLOBAL_DATA_PTR;
>  #define SPI_PAD_CTRL (PAD_CTL_HYS | PAD_CTL_SPEED_MED | \
>  		      PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST)
>  
> +#define I2C_PAD_CTRL  (PAD_CTL_PUS_100K_UP |			\
> +	PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | PAD_CTL_HYS |	\
> +	PAD_CTL_ODE | PAD_CTL_SRE_FAST)
> +
> +#define I2C_PMIC	1
> +
> +#define I2C_PAD MUX_PAD_CTRL(I2C_PAD_CTRL)
> +
>  int dram_init(void)
>  {
>  	gd->ram_size = get_ram_size((void *)PHYS_SDRAM, PHYS_SDRAM_SIZE);
> @@ -129,6 +141,19 @@ iomux_v3_cfg_t const ecspi1_pads[] = {
>  	MX6_PAD_KEY_ROW1__GPIO4_IO09 | MUX_PAD_CTRL(NO_PAD_CTRL),
>  };
>  
> +static struct i2c_pads_info i2c_pad_info1 = {
> +	.scl = {
> +		.i2c_mode = MX6_PAD_KEY_COL3__I2C2_SCL | I2C_PAD,
> +		.gpio_mode = MX6_PAD_KEY_COL3__GPIO4_IO12 | I2C_PAD,
> +		.gp = IMX_GPIO_NR(4, 12)
> +	},
> +	.sda = {
> +		.i2c_mode = MX6_PAD_KEY_ROW3__I2C2_SDA | I2C_PAD,
> +		.gpio_mode = MX6_PAD_KEY_ROW3__GPIO4_IO13 | I2C_PAD,
> +		.gp = IMX_GPIO_NR(4, 13)
> +	}
> +};
> +
>  static void setup_spi(void)
>  {
>  	imx_iomux_v3_setup_multiple_pads(ecspi1_pads, ARRAY_SIZE(ecspi1_pads));
> @@ -426,6 +451,64 @@ int board_init(void)
>  #ifdef CONFIG_MXC_SPI
>  	setup_spi();
>  #endif
> +	setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info1);
> +
> +	return 0;
> +}
> +
> +int misc_init_r(void)
> +{

Do we need misc_init ? Why not to use power_init_board() ? It is already
defined as weak.

OT: I confess I am quite losing which functions are already foreseen.
Most of them have the prefix board_, and they are easier to find.
However, power_init_board() does not follow the same rule.

> +	struct pmic *p;
> +	int ret;
> +	unsigned int reg;
> +
> +	ret = pmic_init(I2C_PMIC);
> +	if (ret)
> +		return ret;
> +
> +	p = pmic_get("PFUZE100_PMIC");
> +	ret = pmic_probe(p);
> +	if (ret)
> +		return ret;
> +
> +	pmic_reg_read(p, PFUZE100_DEVICEID, &reg);
> +	printf("PMIC:  PFUZE100 ID=0x%02x\n", reg);
> +
> +	/* Increase VGEN3 from 2.5 to 2.8V */
> +	pmic_reg_read(p, PFUZE100_VGEN3VOL, &reg);
> +	reg &= ~0xf;
> +	reg |= 0xa;
> +	pmic_reg_write(p, PFUZE100_VGEN3VOL, reg);
> +
> +	/* Increase VGEN5 from 2.8 to 3V */
> +	pmic_reg_read(p, PFUZE100_VGEN5VOL, &reg);
> +	reg &= ~0xf;
> +	reg |= 0xc;
> +	pmic_reg_write(p, PFUZE100_VGEN5VOL, 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;
>  }
> diff --git a/include/configs/mx6sabresd.h b/include/configs/mx6sabresd.h
> index 0fa6573..fe846e6 100644
> --- a/include/configs/mx6sabresd.h
> +++ b/include/configs/mx6sabresd.h
> @@ -25,6 +25,8 @@
>  
>  #define CONFIG_SUPPORT_EMMC_BOOT /* eMMC specific */
>  
> +#define CONFIG_MISC_INIT_R
> +
>  #include "mx6sabre_common.h"
>  
>  #define CONFIG_SYS_FSL_USDHC_NUM	3
> @@ -59,4 +61,16 @@
>  #define CONFIG_PCIE_IMX_POWER_GPIO	IMX_GPIO_NR(3, 19)
>  #endif
>  
> +/* I2C Configs */
> +#define CONFIG_CMD_I2C
> +#define CONFIG_SYS_I2C
> +#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
> +
>  #endif                         /* __MX6QSABRESD_CONFIG_H */
> diff --git a/include/power/pfuze100_pmic.h b/include/power/pfuze100_pmic.h
> index 2a9032a..8968678 100644
> --- a/include/power/pfuze100_pmic.h
> +++ b/include/power/pfuze100_pmic.h
> @@ -15,7 +15,11 @@ enum {
>  	PFUZE100_FABID		= 0x04,
>  
>  	PFUZE100_SW1ABVOL	= 0x20,
> +	PFUZE100_SW1ABSTBY	= 0x21,
> +	PUZE_100_SW1ABCONF	= 0x24,
>  	PFUZE100_SW1CVOL	= 0x2e,
> +	PFUZE100_SW1CSTBY	= 0x2f,
> +	PFUZE100_SW1CCONF	= 0x32,
>  	PFUZE100_SW2VOL		= 0x35,
>  	PFUZE100_SW3AVOL	= 0x3c,
>  	PFUZE100_SW3BVOL	= 0x43,
> 

Best regards,
Stefano Babic

-- 
=====================================================================
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
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
=====================================================================

  parent reply	other threads:[~2014-05-05 14:29 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-04 19:14 [U-Boot] [PATCH] mx6sabred: Add PFUZE100 PMIC support Fabio Estevam
2014-05-05 14:00 ` Otavio Salvador
2014-05-05 14:04   ` Fabio Estevam
2014-05-05 14:29 ` Stefano Babic [this message]
2014-05-05 15:32   ` Tim Harvey
2014-05-05 15:56     ` Fabio Estevam
2014-05-05 16:08       ` Fabio Estevam
2014-05-06  8:07         ` Stefano Babic
2014-05-06 13:22           ` Fabio Estevam

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5367A02D.5080809@denx.de \
    --to=sbabic@denx.de \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.