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