linux/arch/arm/mach-pxa/h5000.c
<<
>>
Prefs
   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 <mach/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
 211