1/* 2 * linux/arch/arm/mach-pxa/capc7117.c 3 * 4 * Support for the Embedian CAPC-7117 Evaluation Kit 5 * based on the Embedian MXM-8x10 Computer on Module 6 * 7 * Copyright (C) 2009 Embedian Inc. 8 * Copyright (C) 2009 TMT Services & Supplies (Pty) Ltd. 9 * 10 * 2007-09-04: eric miao <eric.y.miao@gmail.com> 11 * rewrite to align with latest kernel 12 * 13 * 2010-01-09: Edwin Peer <epeer@tmtservices.co.za> 14 * Hennie van der Merwe <hvdmerwe@tmtservices.co.za> 15 * rework for upstream merge 16 * 17 * This program is free software; you can redistribute it and/or modify 18 * it under the terms of the GNU General Public License version 2 as 19 * published by the Free Software Foundation. 20 */ 21 22#include <linux/irq.h> 23#include <linux/platform_device.h> 24#include <linux/ata_platform.h> 25#include <linux/serial_8250.h> 26#include <linux/gpio.h> 27 28#include <asm/mach-types.h> 29#include <asm/mach/arch.h> 30 31#include <mach/pxa320.h> 32#include <mach/mxm8x10.h> 33 34#include "generic.h" 35 36/* IDE (PATA) Support */ 37static struct pata_platform_info pata_platform_data = { 38 .ioport_shift = 1 39}; 40 41static struct resource capc7117_ide_resources[] = { 42 [0] = { 43 .start = 0x11000020, 44 .end = 0x1100003f, 45 .flags = IORESOURCE_MEM 46 }, 47 [1] = { 48 .start = 0x1100001c, 49 .end = 0x1100001c, 50 .flags = IORESOURCE_MEM 51 }, 52 [2] = { 53 .start = gpio_to_irq(mfp_to_gpio(MFP_PIN_GPIO76)), 54 .end = gpio_to_irq(mfp_to_gpio(MFP_PIN_GPIO76)), 55 .flags = IORESOURCE_IRQ | IRQF_TRIGGER_RISING 56 } 57}; 58 59static struct platform_device capc7117_ide_device = { 60 .name = "pata_platform", 61 .num_resources = ARRAY_SIZE(capc7117_ide_resources), 62 .resource = capc7117_ide_resources, 63 .dev = { 64 .platform_data = &pata_platform_data, 65 .coherent_dma_mask = ~0 /* grumble */ 66 } 67}; 68 69static void __init capc7117_ide_init(void) 70{ 71 platform_device_register(&capc7117_ide_device); 72} 73 74/* TI16C752 UART support */ 75#define TI16C752_FLAGS (UPF_BOOT_AUTOCONF | \ 76 UPF_IOREMAP | \ 77 UPF_BUGGY_UART | \ 78 UPF_SKIP_TEST) 79#define TI16C752_UARTCLK (22118400) 80static struct plat_serial8250_port ti16c752_platform_data[] = { 81 [0] = { 82 .mapbase = 0x14000000, 83 .irq = gpio_to_irq(mfp_to_gpio(MFP_PIN_GPIO78)), 84 .irqflags = IRQF_TRIGGER_RISING, 85 .flags = TI16C752_FLAGS, 86 .iotype = UPIO_MEM, 87 .regshift = 1, 88 .uartclk = TI16C752_UARTCLK 89 }, 90 [1] = { 91 .mapbase = 0x14000040, 92 .irq = gpio_to_irq(mfp_to_gpio(MFP_PIN_GPIO79)), 93 .irqflags = IRQF_TRIGGER_RISING, 94 .flags = TI16C752_FLAGS, 95 .iotype = UPIO_MEM, 96 .regshift = 1, 97 .uartclk = TI16C752_UARTCLK 98 }, 99 [2] = { 100 .mapbase = 0x14000080, 101 .irq = gpio_to_irq(mfp_to_gpio(MFP_PIN_GPIO80)), 102 .irqflags = IRQF_TRIGGER_RISING, 103 .flags = TI16C752_FLAGS, 104 .iotype = UPIO_MEM, 105 .regshift = 1, 106 .uartclk = TI16C752_UARTCLK 107 }, 108 [3] = { 109 .mapbase = 0x140000c0, 110 .irq = gpio_to_irq(mfp_to_gpio(MFP_PIN_GPIO81)), 111 .irqflags = IRQF_TRIGGER_RISING, 112 .flags = TI16C752_FLAGS, 113 .iotype = UPIO_MEM, 114 .regshift = 1, 115 .uartclk = TI16C752_UARTCLK 116 }, 117 [4] = { 118 /* end of array */ 119 } 120}; 121 122static struct platform_device ti16c752_device = { 123 .name = "serial8250", 124 .id = PLAT8250_DEV_PLATFORM, 125 .dev = { 126 .platform_data = ti16c752_platform_data 127 } 128}; 129 130static void __init capc7117_uarts_init(void) 131{ 132 platform_device_register(&ti16c752_device); 133} 134 135static void __init capc7117_init(void) 136{ 137 /* Init CoM */ 138 mxm_8x10_barebones_init(); 139 140 /* Init evaluation board peripherals */ 141 mxm_8x10_ac97_init(); 142 mxm_8x10_usb_host_init(); 143 mxm_8x10_mmc_init(); 144 145 capc7117_uarts_init(); 146 capc7117_ide_init(); 147} 148 149MACHINE_START(CAPC7117, 150 "Embedian CAPC-7117 evaluation kit based on the MXM-8x10 CoM") 151 .phys_io = 0x40000000, 152 .boot_params = 0xa0000100, 153 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, 154 .map_io = pxa_map_io, 155 .init_irq = pxa3xx_init_irq, 156 .timer = &pxa_timer, 157 .init_machine = capc7117_init 158MACHINE_END 159