[ARM] 5277/1: Add basic support for MobilePro 900/c
authorKristoffer Ericson <kristoffer.ericson@gmail.com>
Thu, 2 Oct 2008 19:15:35 +0000 (20:15 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Thu, 2 Oct 2008 21:56:05 +0000 (22:56 +0100)
This patch adds basic support for the Mobilepro
900/c mini-laptop. At present it won't do much
more than build and boot.

Signed-off-by: Kristoffer Ericson <Kristoffer.Ericson@gmail.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mach-pxa/Kconfig
arch/arm/mach-pxa/Makefile
arch/arm/mach-pxa/mp900.c [new file with mode: 0644]

index e8ee7ec..7238bb7 100644 (file)
@@ -49,6 +49,10 @@ config MACH_MAINSTONE
        select PXA27x
        select HAVE_PWM
 
+config MACH_MP900C
+       bool "Nec Mobilepro 900/c"
+       select PXA25x
+
 config ARCH_PXA_IDP
        bool "Accelent Xscale IDP"
        select PXA25x
index 99ecbe7..ac0e8e3 100644 (file)
@@ -25,6 +25,7 @@ obj-$(CONFIG_ARCH_GUMSTIX)    += gumstix.o
 obj-$(CONFIG_ARCH_LUBBOCK)     += lubbock.o
 obj-$(CONFIG_MACH_LOGICPD_PXA270) += lpd270.o
 obj-$(CONFIG_MACH_MAINSTONE)   += mainstone.o
+obj-$(CONFIG_MACH_MP900C)      += mp900.o
 obj-$(CONFIG_ARCH_PXA_IDP)     += idp.o
 obj-$(CONFIG_MACH_TRIZEPS4)    += trizeps4.o
 obj-$(CONFIG_MACH_COLIBRI)     += colibri.o
diff --git a/arch/arm/mach-pxa/mp900.c b/arch/arm/mach-pxa/mp900.c
new file mode 100644 (file)
index 0000000..8a73814
--- /dev/null
@@ -0,0 +1,100 @@
+/*
+ *  linux/arch/arm/mach-pxa/mp900.c
+ *
+ *  Support for the NEC MobilePro900/C platform
+ *
+ *  Based on mach-pxa/gumstix.c
+ *
+ *  2007, 2008 Kristoffer Ericson <kristoffer.ericson@gmail.com>
+ *  2007, 2008 Michael Petchkovsky <mkpetch@internode.on.net>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License version 2 as
+ *  published by the Free Software Foundation.
+ */
+
+#include <linux/init.h>
+#include <linux/device.h>
+#include <linux/platform_device.h>
+#include <linux/types.h>
+#include <linux/usb/isp116x.h>
+
+#include <mach/hardware.h>
+#include <mach/pxa-regs.h>
+#include <asm/mach-types.h>
+#include <asm/mach/arch.h>
+#include "generic.h"
+
+static void isp116x_pfm_delay(struct device *dev, int delay)
+{
+
+       /* 400Mhz PXA2 = 2.5ns / instruction */
+
+       int cyc = delay / 10;
+
+       /* 4 Instructions = 4 x 2.5ns = 10ns */
+       __asm__ volatile ("0:\n"
+               "subs %0, %1, #1\n"
+               "bge 0b\n"
+               :"=r" (cyc)
+               :"0"(cyc)
+       );
+}
+
+static struct isp116x_platform_data isp116x_pfm_data = {
+       .remote_wakeup_enable = 1,
+       .delay = isp116x_pfm_delay,
+};
+
+static struct resource isp116x_pfm_resources[] = {
+       [0] =   {
+               .start  = 0x0d000000,
+               .end    = 0x0d000000 + 1,
+               .flags  = IORESOURCE_MEM,
+               },
+       [1] =   {
+               .start  = 0x0d000000 + 4,
+               .end    = 0x0d000000 + 5,
+               .flags  = IORESOURCE_MEM,
+               },
+       [2] =   {
+               .start  = 61,
+               .end    = 61,
+               .flags  = IORESOURCE_IRQ,
+               },
+};
+
+static struct platform_device mp900c_dummy_device = {
+       .name           = "mp900c_dummy",
+       .id             = -1,
+};
+
+static struct platform_device mp900c_usb = {
+       .name           = "isp116x-hcd",
+       .num_resources  = ARRAY_SIZE(isp116x_pfm_resources),
+       .resource       = isp116x_pfm_resources,
+       .dev.platform_data = &isp116x_pfm_data,
+};
+
+static struct platform_device *devices[] __initdata = {
+       &mp900c_dummy_device,
+       &mp900c_usb,
+};
+
+static void __init mp900c_init(void)
+{
+       printk(KERN_INFO "MobilePro 900/C machine init\n");
+       platform_add_devices(devices, ARRAY_SIZE(devices));
+}
+
+/* Maintainer - Michael Petchkovsky <mkpetch@internode.on.net> */
+MACHINE_START(NEC_MP900, "MobilePro900/C")
+       .phys_io        = 0x40000000,
+       .boot_params    = 0xa0220100,
+       .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
+       .timer          = &pxa_timer,
+       .map_io         = pxa_map_io,
+       .init_irq       = pxa25x_init_irq,
+       .init_machine   = mp900c_init,
+MACHINE_END
+