| Edwin Peer | 1f3b536 | 2010-02-05 18:31:48 +0200 | [diff] [blame] | 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 */ | 
 | 37 | static struct pata_platform_info pata_platform_data = { | 
 | 38 | 	.ioport_shift = 1 | 
 | 39 | }; | 
 | 40 |  | 
 | 41 | static 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 |  | 
 | 59 | static 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 |  | 
 | 69 | static 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) | 
 | 80 | static 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 |  | 
 | 122 | static struct platform_device ti16c752_device = { | 
 | 123 | 	.name = "serial8250", | 
 | 124 | 	.id = PLAT8250_DEV_PLATFORM, | 
 | 125 | 	.dev = { | 
 | 126 | 		.platform_data = ti16c752_platform_data | 
 | 127 | 	} | 
 | 128 | }; | 
 | 129 |  | 
 | 130 | static void __init capc7117_uarts_init(void) | 
 | 131 | { | 
 | 132 | 	platform_device_register(&ti16c752_device); | 
 | 133 | } | 
 | 134 |  | 
 | 135 | static 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 |  | 
 | 149 | MACHINE_START(CAPC7117, | 
 | 150 | 	      "Embedian CAPC-7117 evaluation kit based on the MXM-8x10 CoM") | 
| Edwin Peer | 1f3b536 | 2010-02-05 18:31:48 +0200 | [diff] [blame] | 151 | 	.boot_params = 0xa0000100, | 
| Marek Vasut | 851982c | 2010-10-11 02:20:19 +0200 | [diff] [blame] | 152 | 	.map_io = pxa3xx_map_io, | 
| Edwin Peer | 1f3b536 | 2010-02-05 18:31:48 +0200 | [diff] [blame] | 153 | 	.init_irq = pxa3xx_init_irq, | 
 | 154 | 	.timer = &pxa_timer, | 
 | 155 | 	.init_machine = capc7117_init | 
 | 156 | MACHINE_END |