warp: Add MAX77696 support
authorFabio Estevam <fabio.estevam@freescale.com>
Tue, 21 Jul 2015 22:48:41 +0000 (19:48 -0300)
committerStefano Babic <sbabic@denx.de>
Sun, 26 Jul 2015 10:12:04 +0000 (12:12 +0200)
Warp has a MAX77696 PMIC connected via I2C1 bus.

Add support for it.

Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
board/warp/warp.c
include/configs/warp.h

index 21ac5e7d7413a5a49a3015f04af8e7185b67b44d..49dfdb67174aaa99972ddba6a0de7c35f125fa06 100644 (file)
 #include <asm/arch/sys_proto.h>
 #include <asm/gpio.h>
 #include <asm/imx-common/iomux-v3.h>
+#include <asm/imx-common/mxc_i2c.h>
 #include <asm/io.h>
 #include <linux/sizes.h>
 #include <common.h>
 #include <watchdog.h>
 #include <fsl_esdhc.h>
+#include <i2c.h>
 #include <mmc.h>
 #include <usb.h>
+#include <power/pmic.h>
+#include <power/max77696_pmic.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -35,6 +39,11 @@ DECLARE_GLOBAL_DATA_PTR;
        PAD_CTL_SRE_FAST  | PAD_CTL_HYS | \
        PAD_CTL_LVE)
 
+#define I2C_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE |              \
+                     PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \
+                     PAD_CTL_DSE_40ohm | PAD_CTL_HYS |         \
+                     PAD_CTL_ODE | PAD_CTL_SRE_FAST)
+
 int dram_init(void)
 {
        gd->ram_size = get_ram_size((void *)PHYS_SDRAM, PHYS_SDRAM_SIZE);
@@ -88,6 +97,45 @@ int board_usb_phy_mode(int port)
        return USB_INIT_DEVICE;
 }
 
+/* I2C1 for PMIC */
+#define I2C_PMIC       0
+#define PC     MUX_PAD_CTRL(I2C_PAD_CTRL)
+struct i2c_pads_info i2c_pad_info1 = {
+       .sda = {
+               .i2c_mode = MX6_PAD_I2C1_SDA__I2C1_SDA | PC,
+               .gpio_mode = MX6_PAD_I2C1_SDA__GPIO_3_13 | PC,
+               .gp = IMX_GPIO_NR(3, 13),
+       },
+       .scl = {
+               .i2c_mode = MX6_PAD_I2C1_SCL__I2C1_SCL | PC,
+               .gpio_mode = MX6_PAD_I2C1_SCL__GPIO_3_12 | PC,
+               .gp = IMX_GPIO_NR(3, 12),
+       },
+};
+
+int power_init_board(void)
+{
+       struct pmic *p;
+       int ret;
+       unsigned int reg;
+
+       ret = power_max77696_init(I2C_PMIC);
+       if (ret)
+               return ret;
+
+       p = pmic_get("MAX77696");
+       if (!p)
+               return -EINVAL;
+
+       ret = pmic_reg_read(p, CID, &reg);
+       if (ret)
+               return ret;
+
+       printf("PMIC:  MAX77696 detected, rev=0x%x\n", reg);
+
+       return pmic_probe(p);
+}
+
 int board_early_init_f(void)
 {
        setup_iomux_uart();
@@ -99,6 +147,8 @@ int board_init(void)
        /* address of boot parameters */
        gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
 
+       setup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info1);
+
        return 0;
 }
 
index 2331767b13aef25e0ad8be59a578cd352b7406b0..d5c3215099b486572d45534ca2b8055b682feb92 100644 (file)
 #define CONFIG_SYS_DFU_DATA_BUF_SIZE SZ_16M
 #define DFU_DEFAULT_POLL_TIMEOUT 300
 
+/* 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_MAX77696
+
 #define CONFIG_EXTRA_ENV_SETTINGS \
        "script=boot.scr\0" \
        "image=zImage\0" \