| /* | 
 |  * Hardware definitions for HP iPAQ h5xxx Handheld Computers | 
 |  * | 
 |  * Copyright 2000-2003  Hewlett-Packard Company. | 
 |  * Copyright 2002       Jamey Hicks <jamey.hicks@hp.com> | 
 |  * Copyright 2004-2005  Phil Blundell <pb@handhelds.org> | 
 |  * Copyright 2007-2008  Anton Vorontsov <cbouatmailru@gmail.com> | 
 |  * | 
 |  * This program is free software; you can redistribute it and/or modify | 
 |  * it under the terms of the GNU General Public License as published by | 
 |  * the Free Software Foundation; either version 2 of the License, or | 
 |  * (at your option) any later version. | 
 |  * | 
 |  * COMPAQ COMPUTER CORPORATION MAKES NO WARRANTIES, EXPRESSED OR IMPLIED, | 
 |  * AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS | 
 |  * FITNESS FOR ANY PARTICULAR PURPOSE. | 
 |  * | 
 |  * Author: Jamey Hicks. | 
 |  */ | 
 |  | 
 | #include <linux/kernel.h> | 
 | #include <linux/init.h> | 
 | #include <linux/platform_device.h> | 
 | #include <linux/mtd/mtd.h> | 
 | #include <linux/mtd/partitions.h> | 
 | #include <linux/mtd/physmap.h> | 
 |  | 
 | #include <asm/mach-types.h> | 
 | #include <asm/mach/arch.h> | 
 | #include <asm/mach/map.h> | 
 | #include <asm/irq.h> | 
 |  | 
 | #include "pxa25x.h" | 
 | #include "h5000.h" | 
 | #include "udc.h" | 
 | #include <mach/smemc.h> | 
 |  | 
 | #include "generic.h" | 
 |  | 
 | /* | 
 |  * Flash | 
 |  */ | 
 |  | 
 | static struct mtd_partition h5000_flash0_partitions[] = { | 
 | 	{ | 
 | 		.name = "bootldr", | 
 | 		.size = 0x00040000, | 
 | 		.offset = 0, | 
 | 		.mask_flags = MTD_WRITEABLE, | 
 | 	}, | 
 | 	{ | 
 | 		.name = "root", | 
 | 		.size = MTDPART_SIZ_FULL, | 
 | 		.offset = MTDPART_OFS_APPEND, | 
 | 	}, | 
 | }; | 
 |  | 
 | static struct mtd_partition h5000_flash1_partitions[] = { | 
 | 	{ | 
 | 		.name = "second root", | 
 | 		.size = SZ_16M - 0x00040000, | 
 | 		.offset = 0, | 
 | 	}, | 
 | 	{ | 
 | 		.name = "asset", | 
 | 		.size = MTDPART_SIZ_FULL, | 
 | 		.offset = MTDPART_OFS_APPEND, | 
 | 		.mask_flags = MTD_WRITEABLE, | 
 | 	}, | 
 | }; | 
 |  | 
 | static struct physmap_flash_data h5000_flash0_data = { | 
 | 	.width = 4, | 
 | 	.parts = h5000_flash0_partitions, | 
 | 	.nr_parts = ARRAY_SIZE(h5000_flash0_partitions), | 
 | }; | 
 |  | 
 | static struct physmap_flash_data h5000_flash1_data = { | 
 | 	.width = 4, | 
 | 	.parts = h5000_flash1_partitions, | 
 | 	.nr_parts = ARRAY_SIZE(h5000_flash1_partitions), | 
 | }; | 
 |  | 
 | static struct resource h5000_flash0_resources = { | 
 | 	.start = PXA_CS0_PHYS, | 
 | 	.end = PXA_CS0_PHYS + SZ_32M - 1, | 
 | 	.flags = IORESOURCE_MEM | IORESOURCE_MEM_32BIT, | 
 | }; | 
 |  | 
 | static struct resource h5000_flash1_resources = { | 
 | 	.start = PXA_CS0_PHYS + SZ_32M, | 
 | 	.end = PXA_CS0_PHYS + SZ_32M + SZ_16M - 1, | 
 | 	.flags = IORESOURCE_MEM | IORESOURCE_MEM_32BIT, | 
 | }; | 
 |  | 
 | static struct platform_device h5000_flash[] = { | 
 | 	{ | 
 | 		.name = "physmap-flash", | 
 | 		.id = 0, | 
 | 		.resource = &h5000_flash0_resources, | 
 | 		.num_resources = 1, | 
 | 		.dev = { | 
 | 			.platform_data = &h5000_flash0_data, | 
 | 		}, | 
 | 	}, | 
 | 	{ | 
 | 		.name = "physmap-flash", | 
 | 		.id = 1, | 
 | 		.resource = &h5000_flash1_resources, | 
 | 		.num_resources = 1, | 
 | 		.dev = { | 
 | 			.platform_data = &h5000_flash1_data, | 
 | 		}, | 
 | 	}, | 
 | }; | 
 |  | 
 | /* | 
 |  * USB Device Controller | 
 |  */ | 
 |  | 
 | static struct pxa2xx_udc_mach_info h5000_udc_mach_info __initdata = { | 
 | 	.gpio_pullup = H5000_GPIO_USB_PULLUP, | 
 | }; | 
 |  | 
 | /* | 
 |  * GPIO setup | 
 |  */ | 
 |  | 
 | static unsigned long h5000_pin_config[] __initdata = { | 
 | 	/* Crystal and Clock Signals */ | 
 | 	GPIO12_32KHz, | 
 |  | 
 | 	/* SDRAM and Static Memory I/O Signals */ | 
 | 	GPIO15_nCS_1, | 
 | 	GPIO78_nCS_2, | 
 | 	GPIO79_nCS_3, | 
 | 	GPIO80_nCS_4, | 
 |  | 
 | 	/* FFUART */ | 
 | 	GPIO34_FFUART_RXD, | 
 | 	GPIO35_FFUART_CTS, | 
 | 	GPIO36_FFUART_DCD, | 
 | 	GPIO37_FFUART_DSR, | 
 | 	GPIO38_FFUART_RI, | 
 | 	GPIO39_FFUART_TXD, | 
 | 	GPIO40_FFUART_DTR, | 
 | 	GPIO41_FFUART_RTS, | 
 |  | 
 | 	/* BTUART */ | 
 | 	GPIO42_BTUART_RXD, | 
 | 	GPIO43_BTUART_TXD, | 
 | 	GPIO44_BTUART_CTS, | 
 | 	GPIO45_BTUART_RTS, | 
 |  | 
 | 	/* SSP1 */ | 
 | 	GPIO23_SSP1_SCLK, | 
 | 	GPIO25_SSP1_TXD, | 
 | 	GPIO26_SSP1_RXD, | 
 |  | 
 | 	/* I2S */ | 
 | 	GPIO28_I2S_BITCLK_OUT, | 
 | 	GPIO29_I2S_SDATA_IN, | 
 | 	GPIO30_I2S_SDATA_OUT, | 
 | 	GPIO31_I2S_SYNC, | 
 | 	GPIO32_I2S_SYSCLK, | 
 | }; | 
 |  | 
 | /* | 
 |  * Localbus setup: | 
 |  * CS0: Flash; | 
 |  * CS1: MediaQ chip, select 16-bit bus and vlio; | 
 |  * CS5: SAMCOP. | 
 |  */ | 
 |  | 
 | static void fix_msc(void) | 
 | { | 
 | 	__raw_writel(0x129c24f2, MSC0); | 
 | 	__raw_writel(0x7ff424fa, MSC1); | 
 | 	__raw_writel(0x7ff47ff4, MSC2); | 
 |  | 
 | 	__raw_writel(__raw_readl(MDREFR) | 0x02080000, MDREFR); | 
 | } | 
 |  | 
 | /* | 
 |  * Platform devices | 
 |  */ | 
 |  | 
 | static struct platform_device *devices[] __initdata = { | 
 | 	&h5000_flash[0], | 
 | 	&h5000_flash[1], | 
 | }; | 
 |  | 
 | static void __init h5000_init(void) | 
 | { | 
 | 	fix_msc(); | 
 |  | 
 | 	pxa2xx_mfp_config(ARRAY_AND_SIZE(h5000_pin_config)); | 
 | 	pxa_set_ffuart_info(NULL); | 
 | 	pxa_set_btuart_info(NULL); | 
 | 	pxa_set_stuart_info(NULL); | 
 | 	pxa_set_udc_info(&h5000_udc_mach_info); | 
 | 	platform_add_devices(ARRAY_AND_SIZE(devices)); | 
 | } | 
 |  | 
 | MACHINE_START(H5400, "HP iPAQ H5000") | 
 | 	.atag_offset = 0x100, | 
 | 	.map_io = pxa25x_map_io, | 
 | 	.nr_irqs = PXA_NR_IRQS, | 
 | 	.init_irq = pxa25x_init_irq, | 
 | 	.handle_irq = pxa25x_handle_irq, | 
 | 	.init_time	= pxa_timer_init, | 
 | 	.init_machine = h5000_init, | 
 | 	.restart	= pxa_restart, | 
 | MACHINE_END |