|  | /* | 
|  | * linux/arch/arm/mach-pxa/capc7117.c | 
|  | * | 
|  | * Support for the Embedian CAPC-7117 Evaluation Kit | 
|  | * based on the Embedian MXM-8x10 Computer on Module | 
|  | * | 
|  | * Copyright (C) 2009 Embedian Inc. | 
|  | * Copyright (C) 2009 TMT Services & Supplies (Pty) Ltd. | 
|  | * | 
|  | * 2007-09-04: eric miao <eric.y.miao@gmail.com> | 
|  | *             rewrite to align with latest kernel | 
|  | * | 
|  | * 2010-01-09: Edwin Peer <epeer@tmtservices.co.za> | 
|  | *             Hennie van der Merwe <hvdmerwe@tmtservices.co.za> | 
|  | *             rework for upstream merge | 
|  | * | 
|  | * 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/irq.h> | 
|  | #include <linux/platform_device.h> | 
|  | #include <linux/ata_platform.h> | 
|  | #include <linux/serial_8250.h> | 
|  | #include <linux/gpio.h> | 
|  | #include <linux/regulator/machine.h> | 
|  |  | 
|  | #include <asm/mach-types.h> | 
|  | #include <asm/mach/arch.h> | 
|  |  | 
|  | #include "pxa320.h" | 
|  | #include "mxm8x10.h" | 
|  |  | 
|  | #include "generic.h" | 
|  |  | 
|  | /* IDE (PATA) Support */ | 
|  | static struct pata_platform_info pata_platform_data = { | 
|  | .ioport_shift = 1 | 
|  | }; | 
|  |  | 
|  | static struct resource capc7117_ide_resources[] = { | 
|  | [0] = { | 
|  | .start = 0x11000020, | 
|  | .end = 0x1100003f, | 
|  | .flags = IORESOURCE_MEM | 
|  | }, | 
|  | [1] = { | 
|  | .start = 0x1100001c, | 
|  | .end = 0x1100001c, | 
|  | .flags = IORESOURCE_MEM | 
|  | }, | 
|  | [2] = { | 
|  | .start = PXA_GPIO_TO_IRQ(mfp_to_gpio(MFP_PIN_GPIO76)), | 
|  | .end = PXA_GPIO_TO_IRQ(mfp_to_gpio(MFP_PIN_GPIO76)), | 
|  | .flags = IORESOURCE_IRQ | IRQF_TRIGGER_RISING | 
|  | } | 
|  | }; | 
|  |  | 
|  | static struct platform_device capc7117_ide_device = { | 
|  | .name = "pata_platform", | 
|  | .num_resources = ARRAY_SIZE(capc7117_ide_resources), | 
|  | .resource = capc7117_ide_resources, | 
|  | .dev = { | 
|  | .platform_data = &pata_platform_data, | 
|  | .coherent_dma_mask = ~0		/* grumble */ | 
|  | } | 
|  | }; | 
|  |  | 
|  | static void __init capc7117_ide_init(void) | 
|  | { | 
|  | platform_device_register(&capc7117_ide_device); | 
|  | } | 
|  |  | 
|  | /* TI16C752 UART support */ | 
|  | #define	TI16C752_FLAGS		(UPF_BOOT_AUTOCONF | \ | 
|  | UPF_IOREMAP | \ | 
|  | UPF_BUGGY_UART | \ | 
|  | UPF_SKIP_TEST) | 
|  | #define	TI16C752_UARTCLK	(22118400) | 
|  | static struct plat_serial8250_port ti16c752_platform_data[] = { | 
|  | [0] = { | 
|  | .mapbase = 0x14000000, | 
|  | .irq = PXA_GPIO_TO_IRQ(mfp_to_gpio(MFP_PIN_GPIO78)), | 
|  | .irqflags = IRQF_TRIGGER_RISING, | 
|  | .flags = TI16C752_FLAGS, | 
|  | .iotype = UPIO_MEM, | 
|  | .regshift = 1, | 
|  | .uartclk = TI16C752_UARTCLK | 
|  | }, | 
|  | [1] = { | 
|  | .mapbase = 0x14000040, | 
|  | .irq = PXA_GPIO_TO_IRQ(mfp_to_gpio(MFP_PIN_GPIO79)), | 
|  | .irqflags = IRQF_TRIGGER_RISING, | 
|  | .flags = TI16C752_FLAGS, | 
|  | .iotype = UPIO_MEM, | 
|  | .regshift = 1, | 
|  | .uartclk = TI16C752_UARTCLK | 
|  | }, | 
|  | [2] = { | 
|  | .mapbase = 0x14000080, | 
|  | .irq = PXA_GPIO_TO_IRQ(mfp_to_gpio(MFP_PIN_GPIO80)), | 
|  | .irqflags = IRQF_TRIGGER_RISING, | 
|  | .flags = TI16C752_FLAGS, | 
|  | .iotype = UPIO_MEM, | 
|  | .regshift = 1, | 
|  | .uartclk = TI16C752_UARTCLK | 
|  | }, | 
|  | [3] = { | 
|  | .mapbase = 0x140000c0, | 
|  | .irq = PXA_GPIO_TO_IRQ(mfp_to_gpio(MFP_PIN_GPIO81)), | 
|  | .irqflags = IRQF_TRIGGER_RISING, | 
|  | .flags = TI16C752_FLAGS, | 
|  | .iotype = UPIO_MEM, | 
|  | .regshift = 1, | 
|  | .uartclk = TI16C752_UARTCLK | 
|  | }, | 
|  | [4] = { | 
|  | /* end of array */ | 
|  | } | 
|  | }; | 
|  |  | 
|  | static struct platform_device ti16c752_device = { | 
|  | .name = "serial8250", | 
|  | .id = PLAT8250_DEV_PLATFORM, | 
|  | .dev = { | 
|  | .platform_data = ti16c752_platform_data | 
|  | } | 
|  | }; | 
|  |  | 
|  | static void __init capc7117_uarts_init(void) | 
|  | { | 
|  | platform_device_register(&ti16c752_device); | 
|  | } | 
|  |  | 
|  | static void __init capc7117_init(void) | 
|  | { | 
|  | /* Init CoM */ | 
|  | mxm_8x10_barebones_init(); | 
|  |  | 
|  | /* Init evaluation board peripherals */ | 
|  | mxm_8x10_ac97_init(); | 
|  | mxm_8x10_usb_host_init(); | 
|  | mxm_8x10_mmc_init(); | 
|  |  | 
|  | capc7117_uarts_init(); | 
|  | capc7117_ide_init(); | 
|  |  | 
|  | regulator_has_full_constraints(); | 
|  | } | 
|  |  | 
|  | MACHINE_START(CAPC7117, | 
|  | "Embedian CAPC-7117 evaluation kit based on the MXM-8x10 CoM") | 
|  | .atag_offset = 0x100, | 
|  | .map_io = pxa3xx_map_io, | 
|  | .nr_irqs = PXA_NR_IRQS, | 
|  | .init_irq = pxa3xx_init_irq, | 
|  | .handle_irq = pxa3xx_handle_irq, | 
|  | .init_time	= pxa_timer_init, | 
|  | .init_machine = capc7117_init, | 
|  | .restart	= pxa_restart, | 
|  | MACHINE_END |