Commit 28187f2c authored by Lennert Buytenhek's avatar Lennert Buytenhek Committed by Russell King
Browse files

[PATCH] ARM: 2793/1: platform serial support for ixp2000



Patch from Lennert Buytenhek

This patch converts the ixp2000 serial port over to a platform
serial device.

Signed-off-by: default avatarLennert Buytenhek <buytenh@wantstofly.org>
Signed-off-by: default avatarDeepak Saxena <dsaxena@plexity.net>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent f179bc77
Loading
Loading
Loading
Loading
+40 −15
Original line number Diff line number Diff line
@@ -23,7 +23,7 @@
#include <linux/serial.h>
#include <linux/tty.h>
#include <linux/bitops.h>
#include <linux/serial_core.h>
#include <linux/serial_8250.h>
#include <linux/mm.h>

#include <asm/types.h>
@@ -125,19 +125,6 @@ static struct map_desc ixp2000_io_desc[] __initdata = {
	}
};

static struct uart_port ixp2000_serial_port = {
	.membase	= (char *)(IXP2000_UART_VIRT_BASE + 3),
	.mapbase	= IXP2000_UART_PHYS_BASE + 3,
	.irq		= IRQ_IXP2000_UART,
	.flags		= UPF_SKIP_TEST,
	.iotype		= UPIO_MEM,
	.regshift	= 2,
	.uartclk	= 50000000,
	.line		= 0,
	.type		= PORT_XSCALE,
	.fifosize	= 16
};

void __init ixp2000_map_io(void)
{
	extern unsigned int processor_id;
@@ -157,12 +144,50 @@ void __init ixp2000_map_io(void)
	}

	iotable_init(ixp2000_io_desc, ARRAY_SIZE(ixp2000_io_desc));
	early_serial_setup(&ixp2000_serial_port);

	/* Set slowport to 8-bit mode.  */
	ixp2000_reg_write(IXP2000_SLOWPORT_FRM, 1);
}


/*************************************************************************
 * Serial port support for IXP2000
 *************************************************************************/
static struct plat_serial8250_port ixp2000_serial_port[] = {
	{
		.mapbase	= IXP2000_UART_PHYS_BASE,
		.membase	= (char *)(IXP2000_UART_VIRT_BASE + 3),
		.irq		= IRQ_IXP2000_UART,
		.flags		= UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,
		.iotype		= UPIO_MEM,
		.regshift	= 2,
		.uartclk	= 50000000,
	},
	{ },
};

static struct resource ixp2000_uart_resource = {
	.start		= IXP2000_UART_PHYS_BASE,
	.end		= IXP2000_UART_PHYS_BASE + 0xffff,
	.flags		= IORESOURCE_MEM,
};

static struct platform_device ixp2000_serial_device = {
	.name		= "serial8250",
	.id		= 0,
	.dev		= {
		.platform_data		= ixp2000_serial_port,
	},
	.num_resources	= 1,
	.resource	= &ixp2000_uart_resource,
};

void __init ixp2000_uart_init(void)
{
	platform_device_register(&ixp2000_serial_device);
}


/*************************************************************************
 * Timer-tick functions for IXP2000
 *************************************************************************/
+1 −0
Original line number Diff line number Diff line
@@ -219,6 +219,7 @@ static struct platform_device *enp2611_devices[] __initdata = {
static void __init enp2611_init_machine(void)
{
	platform_add_devices(enp2611_devices, ARRAY_SIZE(enp2611_devices));
	ixp2000_uart_init();
}


+1 −0
Original line number Diff line number Diff line
@@ -303,5 +303,6 @@ void __init ixdp2x00_init_machine(void)
	gpio_line_config(IXDP2X00_GPIO_I2C_ENABLE, GPIO_OUT);

	platform_add_devices(ixdp2x00_devices, ARRAY_SIZE(ixdp2x00_devices));
	ixp2000_uart_init();
}
+1 −0
Original line number Diff line number Diff line
@@ -370,6 +370,7 @@ static void __init ixdp2x01_init_machine(void)
		((*IXDP2X01_CPLD_FLASH_REG & IXDP2X01_CPLD_FLASH_BANK_MASK) + 1);

	platform_add_devices(ixdp2x01_devices, ARRAY_SIZE(ixdp2x01_devices));
	ixp2000_uart_init();
}


+1 −0
Original line number Diff line number Diff line
@@ -115,6 +115,7 @@ static inline unsigned int ixp2000_is_pcimaster(void)
}

void ixp2000_map_io(void);
void ixp2000_uart_init(void);
void ixp2000_init_irq(void);
void ixp2000_init_time(unsigned long);
unsigned long ixp2000_gettimeoffset(void);