]> git.karo-electronics.de Git - karo-tx-uboot.git/blobdiff - board/warp/warp.c
karo: fdt: fix panel-dpi support
[karo-tx-uboot.git] / board / warp / warp.c
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;
 }