| // SPDX-License-Identifier: GPL-2.0-only | 
 | /* | 
 |  * 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 <[email protected]> | 
 |  *             rewrite to align with latest kernel | 
 |  * | 
 |  * 2010-01-09: Edwin Peer <[email protected]> | 
 |  *             Hennie van der Merwe <[email protected]> | 
 |  *             rework for upstream merge | 
 |  */ | 
 |  | 
 | #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 |