diff options
| author | Ben Dooks <ben-linux@org.rmk.(none)> | 2005-01-18 13:10:37 +0000 |
|---|---|---|
| committer | Russell King <rmk@flint.arm.linux.org.uk> | 2005-01-18 13:10:37 +0000 |
| commit | fe79db8ad37f90d779b6923132470973ab37ae43 (patch) | |
| tree | 3438630556e0afeaba02637252362ba024ff4421 | |
| parent | a1b6035ae3847836f5c008fefb0a2e27b7aa97ad (diff) | |
[ARM PATCH] 2414/1: VR1000 - add serial platform device
Patch from Ben Dooks
Serial platfrom device to add ttyS0..ttyS4 to the
system.
Signed-off-by: Ben Dooks
Signed-off-by: Russell King
| -rw-r--r-- | arch/arm/mach-s3c2410/mach-vr1000.c | 71 |
1 files changed, 70 insertions, 1 deletions
diff --git a/arch/arm/mach-s3c2410/mach-vr1000.c b/arch/arm/mach-s3c2410/mach-vr1000.c index 3ff3cc140cf3..7cff1c44adae 100644 --- a/arch/arm/mach-s3c2410/mach-vr1000.c +++ b/arch/arm/mach-s3c2410/mach-vr1000.c @@ -1,6 +1,6 @@ /* linux/arch/arm/mach-s3c2410/mach-vr1000.c * - * Copyright (c) 2003,2004 Simtec Electronics + * Copyright (c) 2003-2005 Simtec Electronics * Ben Dooks <ben@simtec.co.uk> * * Machine support for Thorcom VR1000 board. Designed for Thorcom by @@ -18,9 +18,11 @@ * 05-Apr-2004 BJD Copied to make mach-vr1000.c * 18-Oct-2004 BJD Updated board struct * 04-Nov-2004 BJD Clock and serial configuration update + * * 04-Jan-2005 BJD Updated uart init call * 10-Jan-2005 BJD Removed include of s3c2410.h * 14-Jan-2005 BJD Added clock init + * 15-Jan-2005 BJD Add serial port device definition */ #include <linux/kernel.h> @@ -30,12 +32,19 @@ #include <linux/timer.h> #include <linux/init.h> +#include <linux/serial.h> +#include <linux/tty.h> +#include <linux/serial_8250.h> +#include <linux/serial_reg.h> + #include <asm/mach/arch.h> #include <asm/mach/map.h> #include <asm/mach/irq.h> #include <asm/arch/bast-map.h> #include <asm/arch/vr1000-map.h> +#include <asm/arch/vr1000-irq.h> +#include <asm/arch/vr1000-cpld.h> #include <asm/hardware.h> #include <asm/io.h> @@ -69,6 +78,10 @@ static struct map_desc vr1000_iodesc[] __initdata = { { S3C2410_VA_ISA_BYTE, PA_CS2(BAST_PA_ISAIO), SZ_16M, MT_DEVICE }, { S3C2410_VA_ISA_WORD, PA_CS3(BAST_PA_ISAIO), SZ_16M, MT_DEVICE }, + /* serial ports */ + + { VR1000_VA_SERIAL, VR1000_PA_SERIAL, SZ_1M, MT_DEVICE }, + /* we could possibly compress the next set down into a set of smaller tables * pagetables, but that would mean using an L2 section, and it still means * we cannot actually feed the same register to an LDR due to 16K spacing @@ -166,12 +179,68 @@ static struct s3c2410_uartcfg vr1000_uartcfgs[] = { } }; +/* definitions for the vr1000 extra 16550 serial ports */ + +#define VR1000_BAUDBASE (3692307) + +#define VR1000_SERIAL_MEMBASE(x) ((void __iomem *)VR1000_VA_SERIAL + 0x80 + ((x) << 5)) +#define VR1000_SERIAL_MAPBASE(x) (VR1000_PA_SERIAL + 0x80 + ((x) << 5)) + +static struct plat_serial8250_port serial_platform_data[] = { + [0] = { + .membase = VR1000_SERIAL_MEMBASE(0), + .mapbase = VR1000_SERIAL_MAPBASE(0), + .irq = IRQ_VR1000_SERIAL + 0, + .flags = UPF_BOOT_AUTOCONF, + .iotype = UPIO_MEM, + .regshift = 0, + .uartclk = VR1000_BAUDBASE, + }, + [1] = { + .membase = VR1000_SERIAL_MEMBASE(1), + .mapbase = VR1000_SERIAL_MAPBASE(1), + .irq = IRQ_VR1000_SERIAL + 1, + .flags = UPF_BOOT_AUTOCONF, + .iotype = UPIO_MEM, + .regshift = 0, + .uartclk = VR1000_BAUDBASE, + }, + [2] = { + .membase = VR1000_SERIAL_MEMBASE(2), + .mapbase = VR1000_SERIAL_MAPBASE(2), + .irq = IRQ_VR1000_SERIAL + 2, + .flags = UPF_BOOT_AUTOCONF, + .iotype = UPIO_MEM, + .regshift = 0, + .uartclk = VR1000_BAUDBASE, + }, + [3] = { + .membase = VR1000_SERIAL_MEMBASE(3), + .mapbase = VR1000_SERIAL_MAPBASE(3), + .irq = IRQ_VR1000_SERIAL + 3, + .flags = UPF_BOOT_AUTOCONF, + .iotype = UPIO_MEM, + .regshift = 0, + .uartclk = VR1000_BAUDBASE, + }, + { }, +}; + +static struct platform_device serial_device = { + .name = "serial8250", + .id = 0, + .dev = { + .platform_data = serial_platform_data, + }, +}; + static struct platform_device *vr1000_devices[] __initdata = { &s3c_device_usb, &s3c_device_lcd, &s3c_device_wdt, &s3c_device_i2c, &s3c_device_iis, + &serial_device, }; static struct clk *vr1000_clocks[] = { |
