mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
2.2 KiB
101 lines
2.2 KiB
// SPDX-License-Identifier: GPL-2.0-only |
|
/* |
|
* linux/arch/arm/mach-pxa/mp900.c |
|
* |
|
* Support for the NEC MobilePro900/C platform |
|
* |
|
* Based on mach-pxa/gumstix.c |
|
* |
|
* 2007, 2008 Kristoffer Ericson <[email protected]> |
|
* 2007, 2008 Michael Petchkovsky <[email protected]> |
|
*/ |
|
|
|
#include <linux/init.h> |
|
#include <linux/device.h> |
|
#include <linux/platform_device.h> |
|
#include <linux/types.h> |
|
#include <linux/usb/isp116x.h> |
|
|
|
#include <asm/mach-types.h> |
|
#include <asm/mach/arch.h> |
|
|
|
#include "pxa25x.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"); |
|
pxa_set_ffuart_info(NULL); |
|
pxa_set_btuart_info(NULL); |
|
pxa_set_stuart_info(NULL); |
|
platform_add_devices(devices, ARRAY_SIZE(devices)); |
|
} |
|
|
|
/* Maintainer - Michael Petchkovsky <[email protected]> */ |
|
MACHINE_START(NEC_MP900, "MobilePro900/C") |
|
.atag_offset = 0x220100, |
|
.init_time = pxa_timer_init, |
|
.map_io = pxa25x_map_io, |
|
.nr_irqs = PXA_NR_IRQS, |
|
.init_irq = pxa25x_init_irq, |
|
.handle_irq = pxa25x_handle_irq, |
|
.init_machine = mp900c_init, |
|
.restart = pxa_restart, |
|
MACHINE_END |
|
|
|
|