h5000.c (4282B)
1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * Hardware definitions for HP iPAQ h5xxx Handheld Computers 4 * 5 * Copyright 2000-2003 Hewlett-Packard Company. 6 * Copyright 2002 Jamey Hicks <jamey.hicks@hp.com> 7 * Copyright 2004-2005 Phil Blundell <pb@handhelds.org> 8 * Copyright 2007-2008 Anton Vorontsov <cbouatmailru@gmail.com> 9 * 10 * COMPAQ COMPUTER CORPORATION MAKES NO WARRANTIES, EXPRESSED OR IMPLIED, 11 * AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS 12 * FITNESS FOR ANY PARTICULAR PURPOSE. 13 * 14 * Author: Jamey Hicks. 15 */ 16 17#include <linux/kernel.h> 18#include <linux/init.h> 19#include <linux/platform_device.h> 20#include <linux/mtd/mtd.h> 21#include <linux/mtd/partitions.h> 22#include <linux/mtd/physmap.h> 23 24#include <asm/mach-types.h> 25#include <asm/mach/arch.h> 26#include <asm/mach/map.h> 27#include <asm/irq.h> 28 29#include "pxa25x.h" 30#include "h5000.h" 31#include "udc.h" 32#include "smemc.h" 33 34#include "generic.h" 35 36/* 37 * Flash 38 */ 39 40static struct mtd_partition h5000_flash0_partitions[] = { 41 { 42 .name = "bootldr", 43 .size = 0x00040000, 44 .offset = 0, 45 .mask_flags = MTD_WRITEABLE, 46 }, 47 { 48 .name = "root", 49 .size = MTDPART_SIZ_FULL, 50 .offset = MTDPART_OFS_APPEND, 51 }, 52}; 53 54static struct mtd_partition h5000_flash1_partitions[] = { 55 { 56 .name = "second root", 57 .size = SZ_16M - 0x00040000, 58 .offset = 0, 59 }, 60 { 61 .name = "asset", 62 .size = MTDPART_SIZ_FULL, 63 .offset = MTDPART_OFS_APPEND, 64 .mask_flags = MTD_WRITEABLE, 65 }, 66}; 67 68static struct physmap_flash_data h5000_flash0_data = { 69 .width = 4, 70 .parts = h5000_flash0_partitions, 71 .nr_parts = ARRAY_SIZE(h5000_flash0_partitions), 72}; 73 74static struct physmap_flash_data h5000_flash1_data = { 75 .width = 4, 76 .parts = h5000_flash1_partitions, 77 .nr_parts = ARRAY_SIZE(h5000_flash1_partitions), 78}; 79 80static struct resource h5000_flash0_resources = { 81 .start = PXA_CS0_PHYS, 82 .end = PXA_CS0_PHYS + SZ_32M - 1, 83 .flags = IORESOURCE_MEM | IORESOURCE_MEM_32BIT, 84}; 85 86static struct resource h5000_flash1_resources = { 87 .start = PXA_CS0_PHYS + SZ_32M, 88 .end = PXA_CS0_PHYS + SZ_32M + SZ_16M - 1, 89 .flags = IORESOURCE_MEM | IORESOURCE_MEM_32BIT, 90}; 91 92static struct platform_device h5000_flash[] = { 93 { 94 .name = "physmap-flash", 95 .id = 0, 96 .resource = &h5000_flash0_resources, 97 .num_resources = 1, 98 .dev = { 99 .platform_data = &h5000_flash0_data, 100 }, 101 }, 102 { 103 .name = "physmap-flash", 104 .id = 1, 105 .resource = &h5000_flash1_resources, 106 .num_resources = 1, 107 .dev = { 108 .platform_data = &h5000_flash1_data, 109 }, 110 }, 111}; 112 113/* 114 * USB Device Controller 115 */ 116 117static struct pxa2xx_udc_mach_info h5000_udc_mach_info __initdata = { 118 .gpio_pullup = H5000_GPIO_USB_PULLUP, 119}; 120 121/* 122 * GPIO setup 123 */ 124 125static unsigned long h5000_pin_config[] __initdata = { 126 /* Crystal and Clock Signals */ 127 GPIO12_32KHz, 128 129 /* SDRAM and Static Memory I/O Signals */ 130 GPIO15_nCS_1, 131 GPIO78_nCS_2, 132 GPIO79_nCS_3, 133 GPIO80_nCS_4, 134 135 /* FFUART */ 136 GPIO34_FFUART_RXD, 137 GPIO35_FFUART_CTS, 138 GPIO36_FFUART_DCD, 139 GPIO37_FFUART_DSR, 140 GPIO38_FFUART_RI, 141 GPIO39_FFUART_TXD, 142 GPIO40_FFUART_DTR, 143 GPIO41_FFUART_RTS, 144 145 /* BTUART */ 146 GPIO42_BTUART_RXD, 147 GPIO43_BTUART_TXD, 148 GPIO44_BTUART_CTS, 149 GPIO45_BTUART_RTS, 150 151 /* SSP1 */ 152 GPIO23_SSP1_SCLK, 153 GPIO25_SSP1_TXD, 154 GPIO26_SSP1_RXD, 155 156 /* I2S */ 157 GPIO28_I2S_BITCLK_OUT, 158 GPIO29_I2S_SDATA_IN, 159 GPIO30_I2S_SDATA_OUT, 160 GPIO31_I2S_SYNC, 161 GPIO32_I2S_SYSCLK, 162}; 163 164/* 165 * Localbus setup: 166 * CS0: Flash; 167 * CS1: MediaQ chip, select 16-bit bus and vlio; 168 * CS5: SAMCOP. 169 */ 170 171static void fix_msc(void) 172{ 173 __raw_writel(0x129c24f2, MSC0); 174 __raw_writel(0x7ff424fa, MSC1); 175 __raw_writel(0x7ff47ff4, MSC2); 176 177 __raw_writel(__raw_readl(MDREFR) | 0x02080000, MDREFR); 178} 179 180/* 181 * Platform devices 182 */ 183 184static struct platform_device *devices[] __initdata = { 185 &h5000_flash[0], 186 &h5000_flash[1], 187}; 188 189static void __init h5000_init(void) 190{ 191 fix_msc(); 192 193 pxa2xx_mfp_config(ARRAY_AND_SIZE(h5000_pin_config)); 194 pxa_set_ffuart_info(NULL); 195 pxa_set_btuart_info(NULL); 196 pxa_set_stuart_info(NULL); 197 pxa_set_udc_info(&h5000_udc_mach_info); 198 platform_add_devices(ARRAY_AND_SIZE(devices)); 199} 200 201MACHINE_START(H5400, "HP iPAQ H5000") 202 .atag_offset = 0x100, 203 .map_io = pxa25x_map_io, 204 .nr_irqs = PXA_NR_IRQS, 205 .init_irq = pxa25x_init_irq, 206 .handle_irq = pxa25x_handle_irq, 207 .init_time = pxa_timer_init, 208 .init_machine = h5000_init, 209 .restart = pxa_restart, 210MACHINE_END