linux/arch/arm/mach-ixp4xx/avila-setup.c
<<
>>
Prefs
   1/*
   2 * arch/arm/mach-ixp4xx/avila-setup.c
   3 *
   4 * Gateworks Avila board-setup
   5 *
   6 * Author: Michael-Luke Jones <mlj28@cam.ac.uk>
   7 *
   8 * Based on ixdp-setup.c
   9 * Copyright (C) 2003-2005 MontaVista Software, Inc.
  10 *
  11 * Author: Deepak Saxena <dsaxena@plexity.net>
  12 */
  13
  14#include <linux/kernel.h>
  15#include <linux/init.h>
  16#include <linux/device.h>
  17#include <linux/serial.h>
  18#include <linux/tty.h>
  19#include <linux/serial_8250.h>
  20#include <linux/i2c-gpio.h>
  21#include <asm/types.h>
  22#include <asm/setup.h>
  23#include <asm/memory.h>
  24#include <mach/hardware.h>
  25#include <asm/mach-types.h>
  26#include <asm/irq.h>
  27#include <asm/mach/arch.h>
  28#include <asm/mach/flash.h>
  29
  30#define AVILA_SDA_PIN   7
  31#define AVILA_SCL_PIN   6
  32
  33static struct flash_platform_data avila_flash_data = {
  34        .map_name       = "cfi_probe",
  35        .width          = 2,
  36};
  37
  38static struct resource avila_flash_resource = {
  39        .flags          = IORESOURCE_MEM,
  40};
  41
  42static struct platform_device avila_flash = {
  43        .name           = "IXP4XX-Flash",
  44        .id             = 0,
  45        .dev            = {
  46                .platform_data = &avila_flash_data,
  47        },
  48        .num_resources  = 1,
  49        .resource       = &avila_flash_resource,
  50};
  51
  52static struct i2c_gpio_platform_data avila_i2c_gpio_data = {
  53        .sda_pin        = AVILA_SDA_PIN,
  54        .scl_pin        = AVILA_SCL_PIN,
  55};
  56
  57static struct platform_device avila_i2c_gpio = {
  58        .name           = "i2c-gpio",
  59        .id             = 0,
  60        .dev     = {
  61                .platform_data  = &avila_i2c_gpio_data,
  62        },
  63};
  64
  65static struct resource avila_uart_resources[] = {
  66        {
  67                .start          = IXP4XX_UART1_BASE_PHYS,
  68                .end            = IXP4XX_UART1_BASE_PHYS + 0x0fff,
  69                .flags          = IORESOURCE_MEM
  70        },
  71        {
  72                .start          = IXP4XX_UART2_BASE_PHYS,
  73                .end            = IXP4XX_UART2_BASE_PHYS + 0x0fff,
  74                .flags          = IORESOURCE_MEM
  75        }
  76};
  77
  78static struct plat_serial8250_port avila_uart_data[] = {
  79        {
  80                .mapbase        = IXP4XX_UART1_BASE_PHYS,
  81                .membase        = (char *)IXP4XX_UART1_BASE_VIRT + REG_OFFSET,
  82                .irq            = IRQ_IXP4XX_UART1,
  83                .flags          = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,
  84                .iotype         = UPIO_MEM,
  85                .regshift       = 2,
  86                .uartclk        = IXP4XX_UART_XTAL,
  87        },
  88        {
  89                .mapbase        = IXP4XX_UART2_BASE_PHYS,
  90                .membase        = (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET,
  91                .irq            = IRQ_IXP4XX_UART2,
  92                .flags          = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,
  93                .iotype         = UPIO_MEM,
  94                .regshift       = 2,
  95                .uartclk        = IXP4XX_UART_XTAL,
  96        },
  97        { },
  98};
  99
 100static struct platform_device avila_uart = {
 101        .name                   = "serial8250",
 102        .id                     = PLAT8250_DEV_PLATFORM,
 103        .dev.platform_data      = avila_uart_data,
 104        .num_resources          = 2,
 105        .resource               = avila_uart_resources
 106};
 107
 108static struct resource avila_pata_resources[] = {
 109        {
 110                .flags  = IORESOURCE_MEM
 111        },
 112        {
 113                .flags  = IORESOURCE_MEM,
 114        },
 115        {
 116                .name   = "intrq",
 117                .start  = IRQ_IXP4XX_GPIO12,
 118                .end    = IRQ_IXP4XX_GPIO12,
 119                .flags  = IORESOURCE_IRQ,
 120        },
 121};
 122
 123static struct ixp4xx_pata_data avila_pata_data = {
 124        .cs0_bits       = 0xbfff0043,
 125        .cs1_bits       = 0xbfff0043,
 126};
 127
 128static struct platform_device avila_pata = {
 129        .name                   = "pata_ixp4xx_cf",
 130        .id                     = 0,
 131        .dev.platform_data      = &avila_pata_data,
 132        .num_resources          = ARRAY_SIZE(avila_pata_resources),
 133        .resource               = avila_pata_resources,
 134};
 135
 136static struct platform_device *avila_devices[] __initdata = {
 137        &avila_i2c_gpio,
 138        &avila_flash,
 139        &avila_uart
 140};
 141
 142static void __init avila_init(void)
 143{
 144        ixp4xx_sys_init();
 145
 146        avila_flash_resource.start = IXP4XX_EXP_BUS_BASE(0);
 147        avila_flash_resource.end =
 148                IXP4XX_EXP_BUS_BASE(0) + ixp4xx_exp_bus_size - 1;
 149
 150        platform_add_devices(avila_devices, ARRAY_SIZE(avila_devices));
 151
 152        avila_pata_resources[0].start = IXP4XX_EXP_BUS_BASE(1);
 153        avila_pata_resources[0].end = IXP4XX_EXP_BUS_END(1);
 154
 155        avila_pata_resources[1].start = IXP4XX_EXP_BUS_BASE(2);
 156        avila_pata_resources[1].end = IXP4XX_EXP_BUS_END(2);
 157
 158        avila_pata_data.cs0_cfg = IXP4XX_EXP_CS1;
 159        avila_pata_data.cs1_cfg = IXP4XX_EXP_CS2;
 160
 161        platform_device_register(&avila_pata);
 162
 163}
 164
 165MACHINE_START(AVILA, "Gateworks Avila Network Platform")
 166        /* Maintainer: Deepak Saxena <dsaxena@plexity.net> */
 167        .map_io         = ixp4xx_map_io,
 168        .init_irq       = ixp4xx_init_irq,
 169        .timer          = &ixp4xx_timer,
 170        .boot_params    = 0x0100,
 171        .init_machine   = avila_init,
 172MACHINE_END
 173
 174 /*
 175  * Loft is functionally equivalent to Avila except that it has a
 176  * different number for the maximum PCI devices.  The MACHINE
 177  * structure below is identical to Avila except for the comment.
 178  */
 179#ifdef CONFIG_MACH_LOFT
 180MACHINE_START(LOFT, "Giant Shoulder Inc Loft board")
 181        /* Maintainer: Tom Billman <kernel@giantshoulderinc.com> */
 182        .map_io         = ixp4xx_map_io,
 183        .init_irq       = ixp4xx_init_irq,
 184        .timer          = &ixp4xx_timer,
 185        .boot_params    = 0x0100,
 186        .init_machine   = avila_init,
 187MACHINE_END
 188#endif
 189
 190