diff mbox

[3/3] OMAP: UART: convert to use omap_device layer

Message ID 57834.192.168.10.88.1260537832.squirrel@dbdmail.itg.ti.com (mailing list archive)
State Not Applicable
Delegated to: Paul Walmsley
Headers show

Commit Message

Govindraj.R Dec. 11, 2009, 1:23 p.m. UTC
None
diff mbox

Patch

diff --git a/arch/arm/mach-omap2/serial.c b/arch/arm/mach-omap2/serial.c
index c067416..cbe1f76 100644
--- a/arch/arm/mach-omap2/serial.c
+++ b/arch/arm/mach-omap2/serial.c
@@ -249,10 +249,18 @@  static inline void omap_uart_smart_idle_enable(struct omap_uart_state *p,

 	sysc = omap_hwmod_read_sysc(p->oh);
 	sysc &= ~SYSC_SIDLEMODE_MASK;
-	if (enable)
-		sysc |= 0x2 << SYSC_SIDLEMODE_SHIFT;
-	else
+	if (enable) {
+		/**
+		 * Errata 2.15: [UART]:Cannot Acknowledge Idle Requests
+		 * in Smartidle Mode When Configured for DMA Operations.
+		 */
+		if (p->dma_enabled)
+			sysc |= 0x0 << SYSC_SIDLEMODE_SHIFT;
+		else
+			sysc |= 0x2 << SYSC_SIDLEMODE_SHIFT;
+	} else {
 		sysc |= 0x1 << SYSC_SIDLEMODE_SHIFT;
+	}
 	omap_hwmod_write_sysc(sysc, p->oh);
 }

@@ -540,14 +548,17 @@  void __init omap_serial_early_init(void)
 void __init omap_serial_init(void)
 {
 	struct omap_uart_state *uart;
+	char *name;

 	list_for_each_entry(uart, &uart_list, node) {
 		struct omap_hwmod *oh = uart->oh;
 		struct omap_device *od;
 		void *pdata = NULL;
 		u32 pdata_size = 0;
+
+		uart->dma_enabled = 0;
 #ifdef CONFIG_SERIAL_8250_CONSOLE
-		char *name = "serial8250";
+		name = "serial8250";
 		struct plat_serial8250_port ports[2] = {
 			{},
 			{.flags = 0},
@@ -578,14 +589,20 @@  void __init omap_serial_init(void)
 		pdata_size = 2 * sizeof(struct plat_serial8250_port);
 #endif
 #ifdef CONFIG_SERIAL_OMAP_CONSOLE
-		struct uart_port_info p;
-		char *name = "omap-hsuart";
+		struct omap_uart_port_info omap_up;
+		name = "omap-hsuart";
+
+		omap_up.dma_enabled = 0;
+		uart->dma_enabled =  omap_up.dma_enabled;

-		p.dma_enabled = 0;
-		p.uartclk = OMAP24XX_BASE_BAUD * 16;
+		omap_up.uartclk = OMAP24XX_BASE_BAUD * 16;
+		omap_up.mapbase = oh->slaves[0]->addr->pa_start;
+		omap_up.membase = oh->_rt_va;
+		omap_up.irqflags = IRQF_SHARED;
+		omap_up.flags = UPF_BOOT_AUTOCONF | UPF_SHARE_IRQ;

-		pdata = &p;
-		pdata_size = sizeof(struct uart_port_info);
+		pdata = &omap_up;
+		pdata_size = sizeof(struct omap_uart_port_info);
 #endif

 		if (WARN_ON(!oh))