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_early = ixp4xx_init_early, 169 .init_irq = ixp4xx_init_irq, 170 .init_time = ixp4xx_timer_init, 171 .atag_offset = 0x100, 172 .init_machine = avila_init, 173#if defined(CONFIG_PCI) 174 .dma_zone_size = SZ_64M, 175#endif 176 .restart = ixp4xx_restart, 177MACHINE_END 178 179 /* 180 * Loft is functionally equivalent to Avila except that it has a 181 * different number for the maximum PCI devices. The MACHINE 182 * structure below is identical to Avila except for the comment. 183 */ 184#ifdef CONFIG_MACH_LOFT 185MACHINE_START(LOFT, "Giant Shoulder Inc Loft board") 186 /* Maintainer: Tom Billman <kernel@giantshoulderinc.com> */ 187 .map_io = ixp4xx_map_io, 188 .init_early = ixp4xx_init_early, 189 .init_irq = ixp4xx_init_irq, 190 .init_time = ixp4xx_timer_init, 191 .atag_offset = 0x100, 192 .init_machine = avila_init, 193#if defined(CONFIG_PCI) 194 .dma_zone_size = SZ_64M, 195#endif 196 .restart = ixp4xx_restart, 197MACHINE_END 198#endif 199 200