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