summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/plat-mxc/Makefile2
-rw-r--r--arch/arm/plat-mxc/io.c68
2 files changed, 69 insertions, 1 deletions
diff --git a/arch/arm/plat-mxc/Makefile b/arch/arm/plat-mxc/Makefile
index eed2fc287b7c..208cab211bbc 100644
--- a/arch/arm/plat-mxc/Makefile
+++ b/arch/arm/plat-mxc/Makefile
@@ -3,7 +3,7 @@
#
# Common support
-obj-y := gpio.o clock.o wdog.o snoop.o irq.o
+obj-y := gpio.o clock.o wdog.o snoop.o irq.o io.o
ifneq ($(CONFIG_ARCH_MX27),y)
obj-y += time.o cpu_common.o spba.o sdma/
diff --git a/arch/arm/plat-mxc/io.c b/arch/arm/plat-mxc/io.c
new file mode 100644
index 000000000000..ba6cc78055df
--- /dev/null
+++ b/arch/arm/plat-mxc/io.c
@@ -0,0 +1,68 @@
+/*
+ * MX27/MX31 custom ioremap implementation.
+ *
+ * Copyright 2007 Sony Corporation.
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; version 2 of the License.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+ * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <asm/hardware.h>
+#include <asm/io.h>
+
+void __iomem *__mxc_ioremap(unsigned long cookie, size_t size,
+ unsigned int mtype)
+{
+ unsigned long addr;
+ void __iomem *retval;
+
+ addr = IO_ADDRESS(cookie);
+
+#ifdef DEBUG
+ __print_symbol("%s ", __builtin_return_address(0));
+ printk("called %s(): ", __FUNCTION__);
+#endif
+
+ if (addr != 0xdeadbeef) {
+ retval = (void __iomem *)addr;
+#ifdef DEBUG
+ printk("0x%08lx -> 0x%p\n", cookie, retval);
+#endif
+ } else {
+ retval = __arm_ioremap(cookie, size, mtype);
+#ifdef DEBUG
+ printk("Not using static map: 0x%08lx -> 0x%p\n", cookie, retval);
+#endif
+ }
+
+ return retval;
+}
+EXPORT_SYMBOL(__mxc_ioremap);
+
+void __mxc_iounmap(void __iomem *addr)
+{
+ if (IS_STATIC_MAPPED((unsigned long)addr))
+ return;
+ __iounmap(addr);
+}
+EXPORT_SYMBOL(__mxc_iounmap);
+
+
+