]> git.openfabrics.org - ~shefty/rdma-dev.git/commitdiff
iomux-v3: Allow for a runtime base address
authorSascha Hauer <s.hauer@pengutronix.de>
Thu, 4 Jun 2009 09:16:22 +0000 (11:16 +0200)
committerSascha Hauer <s.hauer@pengutronix.de>
Fri, 14 Aug 2009 10:40:41 +0000 (12:40 +0200)
also, check for a valid pad_ctrl_ofs before changing the
pad control register.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
arch/arm/mach-mx3/mm.c
arch/arm/plat-mxc/include/mach/iomux-v3.h
arch/arm/plat-mxc/iomux-v3.c

index c327172159c0e2c8206d917e1be570dab59b3fda..ad5a1122d765ad238143314cbae59e593c7b09bc 100644 (file)
@@ -30,6 +30,7 @@
 
 #include <mach/common.h>
 #include <mach/hardware.h>
+#include <mach/iomux-v3.h>
 
 /*!
  * @file mm.c
@@ -83,6 +84,7 @@ void __init mx31_map_io(void)
 void __init mx35_map_io(void)
 {
        mxc_set_cpu_type(MXC_CPU_MX35);
+       mxc_iomux_v3_init(IO_ADDRESS(IOMUXC_BASE_ADDR));
        mxc_arch_reset_init(IO_ADDRESS(WDOG_BASE_ADDR));
 
        iotable_init(mxc_io_desc, ARRAY_SIZE(mxc_io_desc));
index cd06df9370cb74f42505b57793fa0f8d1f04e91a..a0fa402654689662bd6616268de83bc455b305e7 100644 (file)
@@ -113,5 +113,10 @@ void mxc_iomux_v3_release_pad(struct pad_desc *pad);
  */
 void mxc_iomux_v3_release_multiple_pads(struct pad_desc *pad_list, int count);
 
+/*
+ * Initialise the iomux controller
+ */
+void mxc_iomux_v3_init(void __iomem *iomux_v3_base);
+
 #endif /* __MACH_IOMUX_V3_H__*/
 
index 77a078f9513f80e6c3f9ec5af749ca5de7128168..851ca99bf1b1f58f22fd4db9833a2e8ef1f9e13d 100644 (file)
@@ -29,7 +29,7 @@
 #include <asm/mach/map.h>
 #include <mach/iomux-v3.h>
 
-#define IOMUX_BASE     IO_ADDRESS(IOMUXC_BASE_ADDR)
+static void __iomem *base;
 
 static unsigned long iomux_v3_pad_alloc_map[0x200 / BITS_PER_LONG];
 
@@ -45,14 +45,14 @@ int mxc_iomux_v3_setup_pad(struct pad_desc *pad)
        if (test_and_set_bit(pad_ofs >> 2, iomux_v3_pad_alloc_map))
                return -EBUSY;
        if (pad->mux_ctrl_ofs)
-               __raw_writel(pad->mux_mode, IOMUX_BASE + pad->mux_ctrl_ofs);
+               __raw_writel(pad->mux_mode, base + pad->mux_ctrl_ofs);
 
        if (pad->select_input_ofs)
                __raw_writel(pad->select_input,
-                               IOMUX_BASE + pad->select_input_ofs);
+                               base + pad->select_input_ofs);
 
-       if (!(pad->pad_ctrl & NO_PAD_CTRL))
-               __raw_writel(pad->pad_ctrl, IOMUX_BASE + pad->pad_ctrl_ofs);
+       if (!(pad->pad_ctrl & NO_PAD_CTRL) && pad->pad_ctrl_ofs)
+               __raw_writel(pad->pad_ctrl, base + pad->pad_ctrl_ofs);
        return 0;
 }
 EXPORT_SYMBOL(mxc_iomux_v3_setup_pad);
@@ -96,3 +96,8 @@ void mxc_iomux_v3_release_multiple_pads(struct pad_desc *pad_list, int count)
        }
 }
 EXPORT_SYMBOL(mxc_iomux_v3_release_multiple_pads);
+
+void mxc_iomux_v3_init(void __iomem *iomux_v3_base)
+{
+       base = iomux_v3_base;
+}