forked from luck/tmp_suning_uos_patched
[SERIAL] Provide Cirrus EP93xx AMBA PL010 serial support.
Signed-off-by: Lennert Buytenhek <buytenh@wantstofly.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
fbb18a277a
commit
aee85fe8e8
@ -30,7 +30,9 @@
|
||||
#include <linux/time.h>
|
||||
#include <linux/timex.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/termios.h>
|
||||
#include <linux/amba/bus.h>
|
||||
#include <linux/amba/serial.h>
|
||||
|
||||
#include <asm/types.h>
|
||||
#include <asm/setup.h>
|
||||
@ -360,6 +362,68 @@ void __init ep93xx_init_irq(void)
|
||||
/*************************************************************************
|
||||
* EP93xx peripheral handling
|
||||
*************************************************************************/
|
||||
#define EP93XX_UART_MCR_OFFSET (0x0100)
|
||||
|
||||
static void ep93xx_uart_set_mctrl(struct amba_device *dev,
|
||||
void __iomem *base, unsigned int mctrl)
|
||||
{
|
||||
unsigned int mcr;
|
||||
|
||||
mcr = 0;
|
||||
if (!(mctrl & TIOCM_RTS))
|
||||
mcr |= 2;
|
||||
if (!(mctrl & TIOCM_DTR))
|
||||
mcr |= 1;
|
||||
|
||||
__raw_writel(mcr, base + EP93XX_UART_MCR_OFFSET);
|
||||
}
|
||||
|
||||
static struct amba_pl010_data ep93xx_uart_data = {
|
||||
.set_mctrl = ep93xx_uart_set_mctrl,
|
||||
};
|
||||
|
||||
static struct amba_device uart1_device = {
|
||||
.dev = {
|
||||
.bus_id = "apb:uart1",
|
||||
.platform_data = &ep93xx_uart_data,
|
||||
},
|
||||
.res = {
|
||||
.start = EP93XX_UART1_PHYS_BASE,
|
||||
.end = EP93XX_UART1_PHYS_BASE + 0x0fff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
.irq = { IRQ_EP93XX_UART1, NO_IRQ },
|
||||
.periphid = 0x00041010,
|
||||
};
|
||||
|
||||
static struct amba_device uart2_device = {
|
||||
.dev = {
|
||||
.bus_id = "apb:uart2",
|
||||
.platform_data = &ep93xx_uart_data,
|
||||
},
|
||||
.res = {
|
||||
.start = EP93XX_UART2_PHYS_BASE,
|
||||
.end = EP93XX_UART2_PHYS_BASE + 0x0fff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
.irq = { IRQ_EP93XX_UART2, NO_IRQ },
|
||||
.periphid = 0x00041010,
|
||||
};
|
||||
|
||||
static struct amba_device uart3_device = {
|
||||
.dev = {
|
||||
.bus_id = "apb:uart3",
|
||||
.platform_data = &ep93xx_uart_data,
|
||||
},
|
||||
.res = {
|
||||
.start = EP93XX_UART3_PHYS_BASE,
|
||||
.end = EP93XX_UART3_PHYS_BASE + 0x0fff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
.irq = { IRQ_EP93XX_UART3, NO_IRQ },
|
||||
.periphid = 0x00041010,
|
||||
};
|
||||
|
||||
void __init ep93xx_init_devices(void)
|
||||
{
|
||||
unsigned int v;
|
||||
@ -371,4 +435,8 @@ void __init ep93xx_init_devices(void)
|
||||
v &= ~EP93XX_SYSCON_DEVICE_CONFIG_CRUNCH_ENABLE;
|
||||
__raw_writel(0xaa, EP93XX_SYSCON_SWLOCK);
|
||||
__raw_writel(v, EP93XX_SYSCON_DEVICE_CONFIG);
|
||||
|
||||
amba_device_register(&uart1_device, &iomem_resource);
|
||||
amba_device_register(&uart2_device, &iomem_resource);
|
||||
amba_device_register(&uart3_device, &iomem_resource);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user