From: Mark A. Greer <[email protected]>

The pinmux register base and setup can be different for different
SoCs so move the pinmux reg base, pinmux table (and its size) to
the SoC infrastructure.

Doing this allows the removal of the <soc>_init() routines,
davinci_mux_register(), and the calls to those routines.

Signed-off-by: Mark A. Greer <[email protected]>
---
 arch/arm/mach-davinci/board-dm355-evm.c     |    2 --
 arch/arm/mach-davinci/board-dm355-leopard.c |    2 --
 arch/arm/mach-davinci/board-dm644x-evm.c    |    2 --
 arch/arm/mach-davinci/board-dm646x-evm.c    |    2 --
 arch/arm/mach-davinci/board-sffsdr.c        |    2 --
 arch/arm/mach-davinci/dm355.c               |   10 +++++-----
 arch/arm/mach-davinci/dm644x.c              |   10 +++++-----
 arch/arm/mach-davinci/dm646x.c              |   10 +++++-----
 arch/arm/mach-davinci/include/mach/common.h |    3 +++
 arch/arm/mach-davinci/include/mach/dm355.h  |    2 --
 arch/arm/mach-davinci/include/mach/dm644x.h |    1 -
 arch/arm/mach-davinci/include/mach/dm646x.h |    1 -
 arch/arm/mach-davinci/include/mach/mux.h    |    6 ------
 arch/arm/mach-davinci/mux.c                 |   24 +++++++-----------------
 14 files changed, 25 insertions(+), 52 deletions(-)

diff --git a/arch/arm/mach-davinci/board-dm355-evm.c 
b/arch/arm/mach-davinci/board-dm355-evm.c
index f882028..d0c2714 100644
--- a/arch/arm/mach-davinci/board-dm355-evm.c
+++ b/arch/arm/mach-davinci/board-dm355-evm.c
@@ -195,8 +195,6 @@ static void __init dm355_evm_map_io(void)
        ret = davinci_common_init(&davinci_soc_info_dm355);
        if (ret)
                pr_err("SoC Initialization failed\n");
-       else
-               dm355_init();
 }
 
 static int dm355evm_mmc_get_cd(int module)
diff --git a/arch/arm/mach-davinci/board-dm355-leopard.c 
b/arch/arm/mach-davinci/board-dm355-leopard.c
index dedbe3a..db33ff2 100644
--- a/arch/arm/mach-davinci/board-dm355-leopard.c
+++ b/arch/arm/mach-davinci/board-dm355-leopard.c
@@ -194,8 +194,6 @@ static void __init dm355_leopard_map_io(void)
        ret = davinci_common_init(&davinci_soc_info_dm355);
        if (ret)
                pr_err("SoC Initialization failed\n");
-       else
-               dm355_init();
 }
 
 static int dm355leopard_mmc_get_cd(int module)
diff --git a/arch/arm/mach-davinci/board-dm644x-evm.c 
b/arch/arm/mach-davinci/board-dm644x-evm.c
index de3617c..d831258 100644
--- a/arch/arm/mach-davinci/board-dm644x-evm.c
+++ b/arch/arm/mach-davinci/board-dm644x-evm.c
@@ -604,8 +604,6 @@ davinci_evm_map_io(void)
        ret = davinci_common_init(&davinci_soc_info_dm644x);
        if (ret)
                pr_err("SoC Initialization failed\n");
-       else
-               dm644x_init();
 }
 
 static int davinci_phy_fixup(struct phy_device *phydev)
diff --git a/arch/arm/mach-davinci/board-dm646x-evm.c 
b/arch/arm/mach-davinci/board-dm646x-evm.c
index 30ce97c..b06d6c1 100644
--- a/arch/arm/mach-davinci/board-dm646x-evm.c
+++ b/arch/arm/mach-davinci/board-dm646x-evm.c
@@ -129,8 +129,6 @@ static void __init davinci_map_io(void)
        ret = davinci_common_init(&davinci_soc_info_dm646x);
        if (ret)
                pr_err("SoC Initialization failed\n");
-       else
-               dm646x_init();
 }
 
 static __init void evm_init(void)
diff --git a/arch/arm/mach-davinci/board-sffsdr.c 
b/arch/arm/mach-davinci/board-sffsdr.c
index 13e6cb5..1ed2810 100644
--- a/arch/arm/mach-davinci/board-sffsdr.c
+++ b/arch/arm/mach-davinci/board-sffsdr.c
@@ -161,8 +161,6 @@ static void __init davinci_sffsdr_map_io(void)
        ret = davinci_common_init(&davinci_soc_info_dm644x);
        if (ret)
                pr_err("SoC Initialization failed\n");
-       else
-               dm644x_init();
 }
 
 static __init void davinci_sffsdr_init(void)
diff --git a/arch/arm/mach-davinci/dm355.c b/arch/arm/mach-davinci/dm355.c
index a181990..866e108 100644
--- a/arch/arm/mach-davinci/dm355.c
+++ b/arch/arm/mach-davinci/dm355.c
@@ -436,6 +436,7 @@ void __init dm355_init_spi0(unsigned chipselect_mask,
  *                             reg  offset mask  mode
  */
 static const struct mux_config dm355_pins[] = {
+#ifdef CONFIG_DAVINCI_MUX
 MUX_CFG(DM355, MMCSD0,         4,   2,     1,    0,     false)
 
 MUX_CFG(DM355, SD1_CLK,        3,   6,     1,    1,     false)
@@ -466,6 +467,7 @@ INT_CFG(DM355,  INT_EDMA_TC1_ERR,     4,    1,    1,     
false)
 EVT_CFG(DM355,  EVT8_ASP1_TX,        0,    1,    0,     false)
 EVT_CFG(DM355,  EVT9_ASP1_RX,        1,    1,    0,     false)
 EVT_CFG(DM355,  EVT26_MMC0_RX,       2,    1,    0,     false)
+#endif
 };
 
 /*----------------------------------------------------------------------*/
@@ -558,13 +560,11 @@ struct davinci_soc_info davinci_soc_info_dm355 = {
        .cpu_clks               = dm355_clks,
        .psc_bases              = dm355_psc_bases,
        .psc_bases_num          = ARRAY_SIZE(dm355_psc_bases),
+       .pinmux_base            = IO_ADDRESS(DAVINCI_SYSTEM_MODULE_BASE),
+       .pinmux_pins            = dm355_pins,
+       .pinmux_pins_num        = ARRAY_SIZE(dm355_pins),
 };
 
-void __init dm355_init(void)
-{
-       davinci_mux_register(dm355_pins, ARRAY_SIZE(dm355_pins));;
-}
-
 static int __init dm355_init_devices(void)
 {
        if (!cpu_is_davinci_dm355())
diff --git a/arch/arm/mach-davinci/dm644x.c b/arch/arm/mach-davinci/dm644x.c
index 5bfc88e..be3aaa0 100644
--- a/arch/arm/mach-davinci/dm644x.c
+++ b/arch/arm/mach-davinci/dm644x.c
@@ -346,6 +346,7 @@ static struct platform_device dm644x_emac_device = {
  *                             reg  offset mask  mode
  */
 static const struct mux_config dm644x_pins[] = {
+#ifdef CONFIG_DAVINCI_MUX
 MUX_CFG(DM644X, HDIREN,                0,   16,    1,    1,     true)
 MUX_CFG(DM644X, ATAEN,         0,   17,    1,    1,     true)
 MUX_CFG(DM644X, ATAEN_DISABLE, 0,   17,    1,    0,     true)
@@ -386,6 +387,7 @@ MUX_CFG(DM644X, RGB666,             0,   22,    1,    1,    
 true)
 
 MUX_CFG(DM644X, LOEEN,         0,   24,    1,    1,     true)
 MUX_CFG(DM644X, LFLDEN,                0,   25,    1,    1,     false)
+#endif
 };
 
 /*----------------------------------------------------------------------*/
@@ -498,13 +500,11 @@ struct davinci_soc_info davinci_soc_info_dm644x = {
        .cpu_clks               = dm644x_clks,
        .psc_bases              = dm644x_psc_bases,
        .psc_bases_num          = ARRAY_SIZE(dm644x_psc_bases),
+       .pinmux_base            = IO_ADDRESS(DAVINCI_SYSTEM_MODULE_BASE),
+       .pinmux_pins            = dm644x_pins,
+       .pinmux_pins_num        = ARRAY_SIZE(dm644x_pins),
 };
 
-void __init dm644x_init(void)
-{
-       davinci_mux_register(dm644x_pins, ARRAY_SIZE(dm644x_pins));
-}
-
 static int __init dm644x_init_devices(void)
 {
        if (!cpu_is_davinci_dm644x())
diff --git a/arch/arm/mach-davinci/dm646x.c b/arch/arm/mach-davinci/dm646x.c
index 9358133..430cbb5 100644
--- a/arch/arm/mach-davinci/dm646x.c
+++ b/arch/arm/mach-davinci/dm646x.c
@@ -327,6 +327,7 @@ static struct platform_device dm646x_emac_device = {
  *                             reg  offset mask  mode
  */
 static const struct mux_config dm646x_pins[] = {
+#ifdef CONFIG_DAVINCI_MUX
 MUX_CFG(DM646X, ATAEN,         0,   0,     1,    1,     true)
 
 MUX_CFG(DM646X, AUDCK1,                0,   29,    1,    0,     false)
@@ -354,6 +355,7 @@ MUX_CFG(DM646X, PTSIMUX_PARALLEL,   0,   16,    3,    2,    
 true)
 MUX_CFG(DM646X, PTSOMUX_SERIAL,                0,   18,    3,    3,     true)
 
 MUX_CFG(DM646X, PTSIMUX_SERIAL,                0,   16,    3,    3,     true)
+#endif
 };
 
 /*----------------------------------------------------------------------*/
@@ -478,13 +480,11 @@ struct davinci_soc_info davinci_soc_info_dm646x = {
        .cpu_clks               = dm646x_clks,
        .psc_bases              = dm646x_psc_bases,
        .psc_bases_num          = ARRAY_SIZE(dm646x_psc_bases),
+       .pinmux_base            = IO_ADDRESS(DAVINCI_SYSTEM_MODULE_BASE),
+       .pinmux_pins            = dm646x_pins,
+       .pinmux_pins_num        = ARRAY_SIZE(dm646x_pins),
 };
 
-void __init dm646x_init(void)
-{
-       davinci_mux_register(dm646x_pins, ARRAY_SIZE(dm646x_pins));
-}
-
 static int __init dm646x_init_devices(void)
 {
        if (!cpu_is_davinci_dm646x())
diff --git a/arch/arm/mach-davinci/include/mach/common.h 
b/arch/arm/mach-davinci/include/mach/common.h
index 42b8072..8c529e4 100644
--- a/arch/arm/mach-davinci/include/mach/common.h
+++ b/arch/arm/mach-davinci/include/mach/common.h
@@ -36,6 +36,9 @@ struct davinci_soc_info {
        struct davinci_clk              *cpu_clks;
        void __iomem                    **psc_bases;
        unsigned long                   psc_bases_num;
+       void __iomem                    *pinmux_base;
+       const struct mux_config         *pinmux_pins;
+       unsigned long                   pinmux_pins_num;
 };
 
 extern struct davinci_soc_info *davinci_get_soc_info(void);
diff --git a/arch/arm/mach-davinci/include/mach/dm355.h 
b/arch/arm/mach-davinci/include/mach/dm355.h
index 60de381..edd7671 100644
--- a/arch/arm/mach-davinci/include/mach/dm355.h
+++ b/arch/arm/mach-davinci/include/mach/dm355.h
@@ -13,8 +13,6 @@
 
 #include <mach/hardware.h>
 
-void __init dm355_init(void);
-
 struct spi_board_info;
 extern struct davinci_soc_info davinci_soc_info_dm355;
 
diff --git a/arch/arm/mach-davinci/include/mach/dm644x.h 
b/arch/arm/mach-davinci/include/mach/dm644x.h
index 7bc0313..8be7c80 100644
--- a/arch/arm/mach-davinci/include/mach/dm644x.h
+++ b/arch/arm/mach-davinci/include/mach/dm644x.h
@@ -33,7 +33,6 @@
 #define DM644X_EMAC_MDIO_OFFSET                (0x4000)
 #define DM644X_EMAC_CNTRL_RAM_SIZE     (0x2000)
 
-void __init dm644x_init(void);
 void dm644x_init_emac(struct emac_platform_data *pdata);
 
 extern struct davinci_soc_info davinci_soc_info_dm644x;
diff --git a/arch/arm/mach-davinci/include/mach/dm646x.h 
b/arch/arm/mach-davinci/include/mach/dm646x.h
index 4541b4e..a69143b 100644
--- a/arch/arm/mach-davinci/include/mach/dm646x.h
+++ b/arch/arm/mach-davinci/include/mach/dm646x.h
@@ -22,7 +22,6 @@
 #define DM646X_EMAC_MDIO_OFFSET                (0x4000)
 #define DM646X_EMAC_CNTRL_RAM_SIZE     (0x2000)
 
-void __init dm646x_init(void);
 void dm646x_init_emac(struct emac_platform_data *pdata);
 
 extern struct davinci_soc_info davinci_soc_info_dm646x;
diff --git a/arch/arm/mach-davinci/include/mach/mux.h 
b/arch/arm/mach-davinci/include/mach/mux.h
index 557bebf..962eccf 100644
--- a/arch/arm/mach-davinci/include/mach/mux.h
+++ b/arch/arm/mach-davinci/include/mach/mux.h
@@ -170,15 +170,9 @@ enum davinci_dm355_index {
 
 #ifdef CONFIG_DAVINCI_MUX
 /* setup pin muxing */
-extern void davinci_mux_init(void);
-extern int davinci_mux_register(const struct mux_config *pins,
-                               unsigned long size);
 extern int davinci_cfg_reg(unsigned long reg_cfg);
 #else
 /* boot loader does it all (no warnings from CONFIG_DAVINCI_MUX_WARNINGS) */
-static inline void davinci_mux_init(void) {}
-static inline int davinci_mux_register(const struct mux_config *pins,
-                                      unsigned long size) { return 0; }
 static inline int davinci_cfg_reg(unsigned long reg_cfg) { return 0; }
 #endif
 
diff --git a/arch/arm/mach-davinci/mux.c b/arch/arm/mach-davinci/mux.c
index bbba0b2..c05a0bb 100644
--- a/arch/arm/mach-davinci/mux.c
+++ b/arch/arm/mach-davinci/mux.c
@@ -21,18 +21,7 @@
 
 #include <mach/hardware.h>
 #include <mach/mux.h>
-
-static const struct mux_config *mux_table;
-static unsigned long pin_table_sz;
-
-int __init davinci_mux_register(const struct mux_config *pins,
-                               unsigned long size)
-{
-       mux_table = pins;
-       pin_table_sz = size;
-
-       return 0;
-}
+#include <mach/common.h>
 
 /*
  * Sets the DAVINCI MUX register based on the table
@@ -40,23 +29,24 @@ int __init davinci_mux_register(const struct mux_config 
*pins,
 int __init_or_module davinci_cfg_reg(const unsigned long index)
 {
        static DEFINE_SPINLOCK(mux_spin_lock);
-       void __iomem *base = IO_ADDRESS(DAVINCI_SYSTEM_MODULE_BASE);
+       struct davinci_soc_info *soc_info = davinci_get_soc_info();
+       void __iomem *base = soc_info->pinmux_base;
        unsigned long flags;
        const struct mux_config *cfg;
        unsigned int reg_orig = 0, reg = 0;
        unsigned int mask, warn = 0;
 
-       if (!mux_table)
+       if (!soc_info->pinmux_pins)
                BUG();
 
-       if (index >= pin_table_sz) {
+       if (index >= soc_info->pinmux_pins_num) {
                printk(KERN_ERR "Invalid pin mux index: %lu (%lu)\n",
-                      index, pin_table_sz);
+                      index, soc_info->pinmux_pins_num);
                dump_stack();
                return -ENODEV;
        }
 
-       cfg = &mux_table[index];
+       cfg = &soc_info->pinmux_pins[index];
 
        if (cfg->name == NULL) {
                printk(KERN_ERR "No entry for the specified index\n");
-- 
1.6.0.3


_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to