11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * arch/arm/mach-ixp4xx/gtwx5715-setup.c 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 46cbdc8c5357276307a77deeada3f04626ff17da6Simon Arlott * Gemtek GTWX5715 (Linksys WRV54G) board setup 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 2004 George T. Joseph 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Derived from Coyote 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This program is free software; you can redistribute it and/or 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * modify it under the terms of the GNU General Public License 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * as published by the Free Software Foundation; either version 2 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * of the License, or (at your option) any later version. 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This program is distributed in the hope that it will be useful, 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * but WITHOUT ANY WARRANTY; without even the implied warranty of 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * GNU General Public License for more details. 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * You should have received a copy of the GNU General Public License 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * along with this program; if not, write to the Free Software 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/init.h> 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/device.h> 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/serial.h> 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/tty.h> 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/serial_8250.h> 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/types.h> 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/setup.h> 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/memory.h> 33a09e64fbc0094e3073dbb09c3b4bfe4ab669244bRussell King#include <mach/hardware.h> 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/irq.h> 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/mach-types.h> 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/mach/arch.h> 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/mach/flash.h> 38a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa 39a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa/* GPIO 5,6,7 and 12 are hard wired to the Kendin KS8995M Switch 40a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa and operate as an SPI type interface. The details of the interface 41a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa are available on Kendin/Micrel's web site. */ 42a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa 43a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa#define GTWX5715_KSSPI_SELECT 5 44a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa#define GTWX5715_KSSPI_TXD 6 45a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa#define GTWX5715_KSSPI_CLOCK 7 46a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa#define GTWX5715_KSSPI_RXD 12 47a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa 48a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa/* The "reset" button is wired to GPIO 3. 49a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa The GPIO is brought "low" when the button is pushed. */ 50a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa 51a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa#define GTWX5715_BUTTON_GPIO 3 52a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa 53a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa/* Board Label Front Label 54a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa LED1 Power 55a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa LED2 Wireless-G 56a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa LED3 not populated but could be 57a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa LED4 Internet 58a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa LED5 - LED8 Controlled by KS8995M Switch 59a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa LED9 DMZ */ 60a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa 61a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa#define GTWX5715_LED1_GPIO 2 62a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa#define GTWX5715_LED2_GPIO 9 63a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa#define GTWX5715_LED3_GPIO 8 64a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa#define GTWX5715_LED4_GPIO 1 65a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa#define GTWX5715_LED9_GPIO 4 661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Xscale UART registers are 32 bits wide with only the least 691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * significant 8 bits having any meaning. From a configuration 701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * perspective, this means 2 things... 711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Setting .regshift = 2 so that the standard 16550 registers 731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * line up on every 4th byte. 741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Shifting the register start virtual address +3 bytes when 761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * compiled big-endian. Since register writes are done on a 771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * single byte basis, if the shift isn't done the driver will 781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * write the value into the most significant byte of the register, 791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * which is ignored, instead of the least significant. 801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef __ARMEB__ 831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define REG_OFFSET 3 841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define REG_OFFSET 0 861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Only the second or "console" uart is connected on the gtwx5715. 901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic struct resource gtwx5715_uart_resources[] = { 931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds { 941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .start = IXP4XX_UART2_BASE_PHYS, 951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .end = IXP4XX_UART2_BASE_PHYS + 0x0fff, 961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .flags = IORESOURCE_MEM, 971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds }, 981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds { 991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .start = IRQ_IXP4XX_UART2, 1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .end = IRQ_IXP4XX_UART2, 1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .flags = IORESOURCE_IRQ, 1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds }, 1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds { }, 1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic struct plat_serial8250_port gtwx5715_uart_platform_data[] = { 1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds { 1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .mapbase = IXP4XX_UART2_BASE_PHYS, 1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .membase = (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET, 1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .irq = IRQ_IXP4XX_UART2, 1128c741ed74d121dbc97c9fb7f9a66c768d4c547c4Deepak Saxena .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, 1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .iotype = UPIO_MEM, 1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .regshift = 2, 1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .uartclk = IXP4XX_UART_XTAL, 1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds }, 1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds { }, 1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic struct platform_device gtwx5715_uart_device = { 1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .name = "serial8250", 1226df29debb7fc04ac3f92038c57437f40bab4e72dRussell King .id = PLAT8250_DEV_PLATFORM, 1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .dev = { 1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .platform_data = gtwx5715_uart_platform_data, 1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds }, 1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .num_resources = 2, 1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .resource = gtwx5715_uart_resources, 1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic struct flash_platform_data gtwx5715_flash_data = { 1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .map_name = "cfi_probe", 1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .width = 2, 1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1354c756f4e954186630f6ee91a4da9a4b39fe3618dMartin Michlmayrstatic struct resource gtwx5715_flash_resource = { 1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .flags = IORESOURCE_MEM, 1374c756f4e954186630f6ee91a4da9a4b39fe3618dMartin Michlmayr}; 1381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic struct platform_device gtwx5715_flash = { 1401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .name = "IXP4XX-Flash", 1411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .id = 0, 1421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .dev = { 1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .platform_data = >wx5715_flash_data, 1441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds }, 1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .num_resources = 1, 1461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .resource = >wx5715_flash_resource, 1471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic struct platform_device *gtwx5715_devices[] __initdata = { 1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds >wx5715_uart_device, 1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds >wx5715_flash, 1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void __init gtwx5715_init(void) 1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 15654e269ead6e672325866037b0617a72edd1396b9Deepak Saxena ixp4xx_sys_init(); 15754e269ead6e672325866037b0617a72edd1396b9Deepak Saxena 15854e269ead6e672325866037b0617a72edd1396b9Deepak Saxena gtwx5715_flash_resource.start = IXP4XX_EXP_BUS_BASE(0); 15954e269ead6e672325866037b0617a72edd1396b9Deepak Saxena gtwx5715_flash_resource.end = IXP4XX_EXP_BUS_BASE(0) + SZ_8M - 1; 16054e269ead6e672325866037b0617a72edd1396b9Deepak Saxena 1611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds platform_add_devices(gtwx5715_devices, ARRAY_SIZE(gtwx5715_devices)); 1621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 1631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsMACHINE_START(GTWX5715, "Gemtek GTWX5715 (Linksys WRV54G)") 166e9dea0c65d2de6981356c055781fb99d7191b14eRussell King /* Maintainer: George Joseph */ 167e605ecd7c8a38f65759c938a235a1b84f41a744eDeepak Saxena .map_io = ixp4xx_map_io, 168f449588c65e23637aef59cae2ea7b6b2b1b767ecRob Herring .init_early = ixp4xx_init_early, 169e9dea0c65d2de6981356c055781fb99d7191b14eRussell King .init_irq = ixp4xx_init_irq, 170e9dea0c65d2de6981356c055781fb99d7191b14eRussell King .timer = &ixp4xx_timer, 171e022c729da8d14e381c04264b07e11d9009d44edNicolas Pitre .atag_offset = 0x100, 172e9dea0c65d2de6981356c055781fb99d7191b14eRussell King .init_machine = gtwx5715_init, 1737553ee777b513c3bc8f45bb9fc75fb1bbc584ba1Nicolas Pitre#if defined(CONFIG_PCI) 1747553ee777b513c3bc8f45bb9fc75fb1bbc584ba1Nicolas Pitre .dma_zone_size = SZ_64M, 1757553ee777b513c3bc8f45bb9fc75fb1bbc584ba1Nicolas Pitre#endif 176d1b860fbb2b0d25a5ccd8165ea4db2914b0820f5Russell King .restart = ixp4xx_restart, 1771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsMACHINE_END 1781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 180