i2c: fix vf610 support
authorAlbert ARIBAUD \(3ADEV\) <albert.aribaud@3adev.fr>
Fri, 19 Jun 2015 12:18:29 +0000 (14:18 +0200)
committerStefano Babic <sbabic@denx.de>
Fri, 10 Jul 2015 08:10:48 +0000 (10:10 +0200)
Add support in mxc_i2c driver, iomux_v3 and vf610 architecture for the four
I2C instances available in VF610.

Signed-off-by: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
arch/arm/include/asm/arch-vf610/crm_regs.h
arch/arm/include/asm/arch-vf610/imx-regs.h
arch/arm/include/asm/arch-vf610/iomux-vf610.h
arch/arm/include/asm/imx-common/iomux-v3.h
drivers/i2c/mxc_i2c.c

index fdb45e9954c4693abaa035e08db6af7fa2227e66..a46e396f1d9c16573d5339b6b9c59b5c4c6810bd 100644 (file)
@@ -207,6 +207,7 @@ struct anadig_reg {
 #define CCM_CCGR4_CCM_CTRL_MASK                        (0x3 << 22)
 #define CCM_CCGR4_GPC_CTRL_MASK                        (0x3 << 24)
 #define CCM_CCGR4_I2C0_CTRL_MASK               (0x3 << 12)
+#define CCM_CCGR4_I2C1_CTRL_MASK               (0x3 << 14)
 #define CCM_CCGR6_OCOTP_CTRL_MASK              (0x3 << 10)
 #define CCM_CCGR6_DSPI2_CTRL_MASK              (0x3 << 24)
 #define CCM_CCGR6_DSPI3_CTRL_MASK              (0x3 << 26)
@@ -216,6 +217,8 @@ struct anadig_reg {
 #define CCM_CCGR9_FEC0_CTRL_MASK               0x3
 #define CCM_CCGR9_FEC1_CTRL_MASK               (0x3 << 2)
 #define CCM_CCGR10_NFC_CTRL_MASK               0x3
+#define CCM_CCGR10_I2C2_CTRL_MASK              (0x3 << 12)
+#define CCM_CCGR10_I2C3_CTRL_MASK              (0x3 << 14)
 
 #define ANADIG_PLL7_CTRL_BYPASS         (1 << 16)
 #define ANADIG_PLL7_CTRL_ENABLE         (1 << 13)
index 7df3b1e3921730c6f8f56b34f4019b2a2894d56a..436698588c2e5f40b32f658beb59a2b41e2b5ee4 100644 (file)
@@ -75,6 +75,9 @@
 #define ESAI_FIFO_BASE_ADDR    (AIPS0_BASE_ADDR + 0x00063000)
 #define WDOG_BASE_ADDR         (AIPS0_BASE_ADDR + 0x00065000)
 #define I2C1_BASE_ADDR         (AIPS0_BASE_ADDR + 0x00066000)
+#define I2C2_BASE_ADDR         (AIPS0_BASE_ADDR + 0x00067000)
+#define I2C3_BASE_ADDR         (AIPS0_BASE_ADDR + 0x000E6000)
+#define I2C4_BASE_ADDR         (AIPS0_BASE_ADDR + 0x000E7000)
 #define WKUP_BASE_ADDR         (AIPS0_BASE_ADDR + 0x0006A000)
 #define CCM_BASE_ADDR          (AIPS0_BASE_ADDR + 0x0006B000)
 #define GPC_BASE_ADDR          (AIPS0_BASE_ADDR + 0x0006C000)
index 019307b2f9edad63b62c305dcf8e6e62c369b5dd..0e2bd5366cad3aeaab1338cbe2a02ddee107b1c4 100644 (file)
@@ -20,7 +20,8 @@
 #define VF610_DDR_PAD_CTRL_1   (PAD_CTL_DSE_25ohm | \
                                PAD_CTL_INPUT_DIFFERENTIAL)
 #define VF610_I2C_PAD_CTRL     (PAD_CTL_PUS_47K_UP | PAD_CTL_DSE_50ohm | \
-                               PAD_CTL_SPEED_HIGH | PAD_CTL_OBE_IBE_ENABLE)
+                               PAD_CTL_SPEED_HIGH | PAD_CTL_ODE | \
+                               PAD_CTL_OBE_IBE_ENABLE)
 #define VF610_NFC_IO_PAD_CTRL  (PAD_CTL_SPEED_MED | PAD_CTL_SRE | \
                                PAD_CTL_DSE_50ohm | PAD_CTL_PUS_47K_UP | \
                                PAD_CTL_OBE_IBE_ENABLE)
@@ -110,6 +111,8 @@ enum {
        VF610_PAD_PTA29__ESDHC1_DAT3            = IOMUX_PAD(0x004c, 0x004c, 5, __NA_, 0, VF610_SDHC_PAD_CTRL),
        VF610_PAD_PTB14__I2C0_SCL               = IOMUX_PAD(0x0090, 0x0090, 2, 0x033c, 1, VF610_I2C_PAD_CTRL),
        VF610_PAD_PTB15__I2C0_SDA               = IOMUX_PAD(0x0094, 0x0094, 2, 0x0340, 1, VF610_I2C_PAD_CTRL),
+       VF610_PAD_PTA22__I2C2_SCL               = IOMUX_PAD(0x0030, 0x0030, 6, 0x034c, 0, VF610_I2C_PAD_CTRL),
+       VF610_PAD_PTA23__I2C2_SDA               = IOMUX_PAD(0x0034, 0x0034, 6, 0x0350, 0, VF610_I2C_PAD_CTRL),
        VF610_PAD_PTD31__NF_IO15                = IOMUX_PAD(0x00fc, 0x00fc, 2, __NA_, 0, VF610_NFC_IO_PAD_CTRL),
        VF610_PAD_PTD31__GPIO_63                = IOMUX_PAD(0x00fc, 0x00fc, 0, __NA_, 0, VF610_GPIO_PAD_CTRL),
        VF610_PAD_PTD30__NF_IO14                = IOMUX_PAD(0x0100, 0x0100, 2, __NA_, 0, VF610_NFC_IO_PAD_CTRL),
@@ -146,10 +149,10 @@ enum {
        VF610_PAD_PTD12__GPIO_91                = IOMUX_PAD(0x016c, 0x016c, 0, __NA_, 0, VF610_GPIO_PAD_CTRL),
        VF610_PAD_PTD13__GPIO_92                = IOMUX_PAD(0x0170, 0x0170, 0, __NA_, 0, VF610_GPIO_PAD_CTRL),
        VF610_PAD_PTD22__NF_IO6                 = IOMUX_PAD(0x0120, 0x0120, 2, __NA_, 0, VF610_NFC_IO_PAD_CTRL),
-       VF610_PAD_PTD21__NF_IO5                 = IOMUX_PAD(0x0124, 0x0124, 2, __NA_, 0, VF610_NFC_IO_PAD_CTRL), 
-       VF610_PAD_PTD20__NF_IO4                 = IOMUX_PAD(0x0128, 0x0128, 2, __NA_, 0, VF610_NFC_IO_PAD_CTRL), 
+       VF610_PAD_PTD21__NF_IO5                 = IOMUX_PAD(0x0124, 0x0124, 2, __NA_, 0, VF610_NFC_IO_PAD_CTRL),
+       VF610_PAD_PTD20__NF_IO4                 = IOMUX_PAD(0x0128, 0x0128, 2, __NA_, 0, VF610_NFC_IO_PAD_CTRL),
        VF610_PAD_PTD19__NF_IO3                 = IOMUX_PAD(0x012c, 0x012c, 2, __NA_, 0, VF610_NFC_IO_PAD_CTRL),
-       VF610_PAD_PTD18__NF_IO2                 = IOMUX_PAD(0x0130, 0x0130, 2, __NA_, 0, VF610_NFC_IO_PAD_CTRL), 
+       VF610_PAD_PTD18__NF_IO2                 = IOMUX_PAD(0x0130, 0x0130, 2, __NA_, 0, VF610_NFC_IO_PAD_CTRL),
        VF610_PAD_PTD17__NF_IO1                 = IOMUX_PAD(0x0134, 0x0134, 2, __NA_, 0, VF610_NFC_IO_PAD_CTRL),
        VF610_PAD_PTD16__NF_IO0                 = IOMUX_PAD(0x0138, 0x0138, 2, __NA_, 0, VF610_NFC_IO_PAD_CTRL),
        VF610_PAD_PTB24__NF_WE_B                = IOMUX_PAD(0x0178, 0x0178, 5, __NA_, 0, VF610_NFC_CN_PAD_CTRL),
index 258101949a616f6f4a5c581c4edbfc5dc2f0ac8f..5cde90f7ad69de23e6446461a11571e66338f0ea 100644 (file)
@@ -127,6 +127,8 @@ typedef u64 iomux_v3_cfg_t;
 
 #define PAD_CTL_SRE            (1 << 11)
 
+#define PAD_CTL_ODE            (1 << 10)
+
 #define PAD_CTL_DSE_150ohm     (1 << 6)
 #define PAD_CTL_DSE_50ohm      (3 << 6)
 #define PAD_CTL_DSE_25ohm      (6 << 6)
index b3c50aaf3091a1f0454dfb4c311a3b07c95d18a8..f1056e21a2c82dbc053eef99d9e53cec496dcd3a 100644 (file)
@@ -523,7 +523,8 @@ static int bus_i2c_write(struct mxc_i2c_bus *i2c_bus, u8 chip, u32 addr,
 #endif
 
 static struct mxc_i2c_bus mxc_i2c_buses[] = {
-#if defined(CONFIG_LS102XA) || defined(CONFIG_FSL_LSCH3)
+#if defined(CONFIG_LS102XA) || defined(CONFIG_FSL_LSCH3) || \
+               defined(CONFIG_VF610)
        { 0, I2C1_BASE_ADDR, I2C_QUIRK_FLAG },
        { 1, I2C2_BASE_ADDR, I2C_QUIRK_FLAG },
        { 2, I2C3_BASE_ADDR, I2C_QUIRK_FLAG },