1/* 2 * linux/arch/arm/mach-pxa/mp900.c 3 * 4 * Support for the NEC MobilePro900/C platform 5 * 6 * Based on mach-pxa/gumstix.c 7 * 8 * 2007, 2008 Kristoffer Ericson <kristoffer.ericson@gmail.com> 9 * 2007, 2008 Michael Petchkovsky <mkpetch@internode.on.net> 10 * 11 * This program is free software; you can redistribute it and/or modify 12 * it under the terms of the GNU General Public License version 2 as 13 * published by the Free Software Foundation. 14 */ 15 16#include <linux/init.h> 17#include <linux/device.h> 18#include <linux/platform_device.h> 19#include <linux/types.h> 20#include <linux/usb/isp116x.h> 21 22#include <asm/mach-types.h> 23#include <asm/mach/arch.h> 24 25#include <mach/pxa25x.h> 26#include "generic.h" 27 28static void isp116x_pfm_delay(struct device *dev, int delay) 29{ 30 31 /* 400MHz PXA2 = 2.5ns / instruction */ 32 33 int cyc = delay / 10; 34 35 /* 4 Instructions = 4 x 2.5ns = 10ns */ 36 __asm__ volatile ("0:\n" 37 "subs %0, %1, #1\n" 38 "bge 0b\n" 39 :"=r" (cyc) 40 :"0"(cyc) 41 ); 42} 43 44static struct isp116x_platform_data isp116x_pfm_data = { 45 .remote_wakeup_enable = 1, 46 .delay = isp116x_pfm_delay, 47}; 48 49static struct resource isp116x_pfm_resources[] = { 50 [0] = { 51 .start = 0x0d000000, 52 .end = 0x0d000000 + 1, 53 .flags = IORESOURCE_MEM, 54 }, 55 [1] = { 56 .start = 0x0d000000 + 4, 57 .end = 0x0d000000 + 5, 58 .flags = IORESOURCE_MEM, 59 }, 60 [2] = { 61 .start = 61, 62 .end = 61, 63 .flags = IORESOURCE_IRQ, 64 }, 65}; 66 67static struct platform_device mp900c_dummy_device = { 68 .name = "mp900c_dummy", 69 .id = -1, 70}; 71 72static struct platform_device mp900c_usb = { 73 .name = "isp116x-hcd", 74 .num_resources = ARRAY_SIZE(isp116x_pfm_resources), 75 .resource = isp116x_pfm_resources, 76 .dev.platform_data = &isp116x_pfm_data, 77}; 78 79static struct platform_device *devices[] __initdata = { 80 &mp900c_dummy_device, 81 &mp900c_usb, 82}; 83 84static void __init mp900c_init(void) 85{ 86 printk(KERN_INFO "MobilePro 900/C machine init\n"); 87 pxa_set_ffuart_info(NULL); 88 pxa_set_btuart_info(NULL); 89 pxa_set_stuart_info(NULL); 90 platform_add_devices(devices, ARRAY_SIZE(devices)); 91} 92 93/* Maintainer - Michael Petchkovsky <mkpetch@internode.on.net> */ 94MACHINE_START(NEC_MP900, "MobilePro900/C") 95 .atag_offset = 0x220100, 96 .init_time = pxa_timer_init, 97 .map_io = pxa25x_map_io, 98 .nr_irqs = PXA_NR_IRQS, 99 .init_irq = pxa25x_init_irq, 100 .handle_irq = pxa25x_handle_irq, 101 .init_machine = mp900c_init, 102 .restart = pxa_restart, 103MACHINE_END 104 105