diff options
| -rw-r--r-- | arch/arm/mach-ep93xx/core.c | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/arch/arm/mach-ep93xx/core.c b/arch/arm/mach-ep93xx/core.c index 865427bfad7e..2d892e4daa07 100644 --- a/arch/arm/mach-ep93xx/core.c +++ b/arch/arm/mach-ep93xx/core.c | |||
| @@ -30,7 +30,9 @@ | |||
| 30 | #include <linux/time.h> | 30 | #include <linux/time.h> |
| 31 | #include <linux/timex.h> | 31 | #include <linux/timex.h> |
| 32 | #include <linux/delay.h> | 32 | #include <linux/delay.h> |
| 33 | #include <linux/termios.h> | ||
| 33 | #include <linux/amba/bus.h> | 34 | #include <linux/amba/bus.h> |
| 35 | #include <linux/amba/serial.h> | ||
| 34 | 36 | ||
| 35 | #include <asm/types.h> | 37 | #include <asm/types.h> |
| 36 | #include <asm/setup.h> | 38 | #include <asm/setup.h> |
| @@ -360,6 +362,68 @@ void __init ep93xx_init_irq(void) | |||
| 360 | /************************************************************************* | 362 | /************************************************************************* |
| 361 | * EP93xx peripheral handling | 363 | * EP93xx peripheral handling |
| 362 | *************************************************************************/ | 364 | *************************************************************************/ |
| 365 | #define EP93XX_UART_MCR_OFFSET (0x0100) | ||
| 366 | |||
| 367 | static void ep93xx_uart_set_mctrl(struct amba_device *dev, | ||
| 368 | void __iomem *base, unsigned int mctrl) | ||
| 369 | { | ||
| 370 | unsigned int mcr; | ||
| 371 | |||
| 372 | mcr = 0; | ||
| 373 | if (!(mctrl & TIOCM_RTS)) | ||
| 374 | mcr |= 2; | ||
| 375 | if (!(mctrl & TIOCM_DTR)) | ||
| 376 | mcr |= 1; | ||
| 377 | |||
| 378 | __raw_writel(mcr, base + EP93XX_UART_MCR_OFFSET); | ||
| 379 | } | ||
| 380 | |||
| 381 | static struct amba_pl010_data ep93xx_uart_data = { | ||
| 382 | .set_mctrl = ep93xx_uart_set_mctrl, | ||
| 383 | }; | ||
| 384 | |||
| 385 | static struct amba_device uart1_device = { | ||
| 386 | .dev = { | ||
| 387 | .bus_id = "apb:uart1", | ||
| 388 | .platform_data = &ep93xx_uart_data, | ||
| 389 | }, | ||
| 390 | .res = { | ||
| 391 | .start = EP93XX_UART1_PHYS_BASE, | ||
| 392 | .end = EP93XX_UART1_PHYS_BASE + 0x0fff, | ||
| 393 | .flags = IORESOURCE_MEM, | ||
| 394 | }, | ||
| 395 | .irq = { IRQ_EP93XX_UART1, NO_IRQ }, | ||
| 396 | .periphid = 0x00041010, | ||
| 397 | }; | ||
| 398 | |||
| 399 | static struct amba_device uart2_device = { | ||
| 400 | .dev = { | ||
| 401 | .bus_id = "apb:uart2", | ||
| 402 | .platform_data = &ep93xx_uart_data, | ||
| 403 | }, | ||
| 404 | .res = { | ||
| 405 | .start = EP93XX_UART2_PHYS_BASE, | ||
| 406 | .end = EP93XX_UART2_PHYS_BASE + 0x0fff, | ||
| 407 | .flags = IORESOURCE_MEM, | ||
| 408 | }, | ||
| 409 | .irq = { IRQ_EP93XX_UART2, NO_IRQ }, | ||
| 410 | .periphid = 0x00041010, | ||
| 411 | }; | ||
| 412 | |||
| 413 | static struct amba_device uart3_device = { | ||
| 414 | .dev = { | ||
| 415 | .bus_id = "apb:uart3", | ||
| 416 | .platform_data = &ep93xx_uart_data, | ||
| 417 | }, | ||
| 418 | .res = { | ||
| 419 | .start = EP93XX_UART3_PHYS_BASE, | ||
| 420 | .end = EP93XX_UART3_PHYS_BASE + 0x0fff, | ||
| 421 | .flags = IORESOURCE_MEM, | ||
| 422 | }, | ||
| 423 | .irq = { IRQ_EP93XX_UART3, NO_IRQ }, | ||
| 424 | .periphid = 0x00041010, | ||
| 425 | }; | ||
| 426 | |||
| 363 | void __init ep93xx_init_devices(void) | 427 | void __init ep93xx_init_devices(void) |
| 364 | { | 428 | { |
| 365 | unsigned int v; | 429 | unsigned int v; |
| @@ -371,4 +435,8 @@ void __init ep93xx_init_devices(void) | |||
| 371 | v &= ~EP93XX_SYSCON_DEVICE_CONFIG_CRUNCH_ENABLE; | 435 | v &= ~EP93XX_SYSCON_DEVICE_CONFIG_CRUNCH_ENABLE; |
| 372 | __raw_writel(0xaa, EP93XX_SYSCON_SWLOCK); | 436 | __raw_writel(0xaa, EP93XX_SYSCON_SWLOCK); |
| 373 | __raw_writel(v, EP93XX_SYSCON_DEVICE_CONFIG); | 437 | __raw_writel(v, EP93XX_SYSCON_DEVICE_CONFIG); |
| 438 | |||
| 439 | amba_device_register(&uart1_device, &iomem_resource); | ||
| 440 | amba_device_register(&uart2_device, &iomem_resource); | ||
| 441 | amba_device_register(&uart3_device, &iomem_resource); | ||
| 374 | } | 442 | } |
