>>-----Original Message----- >>From: linux-omap-owner@xxxxxxxxxxxxxxx [mailto:linux-omap-owner@xxxxxxxxxxxxxxx] On Behalf Of >>Govindraj.R >>Sent: Friday, June 04, 2010 7:14 PM >>To: linux-omap@xxxxxxxxxxxxxxx >>Cc: Kevin Hilman; Aguirre, Sergio >>Subject: [pm-wip/uart][PATCH 2/4] OMAP3: serial: Fix uart4 handling for 3630 >> >>This patch makes the following: >> - Adds missing wakeup padding register handling. >> - Fixes a hardcode to use PER module ONLY on UART3. >> - Muxmode usage needed for uart4 for 3630 for padconf >> wakeup on rx line. >> >>Cc: Kevin Hilman <khilman@xxxxxxxxxxxxxxxxxxx> >>Signed-off-by: Sergio Aguirre <saaguirre@xxxxxx> >>Signed-off-by: Govindraj.R <govindraj.raja@xxxxxx> >>--- >> arch/arm/mach-omap2/serial.c | 30 +++++++++++++++++++++++++++++- >> 1 files changed, 29 insertions(+), 1 deletions(-) >> >>diff --git a/arch/arm/mach-omap2/serial.c b/arch/arm/mach-omap2/serial.c >>index da9fee6..70a9089 100644 >>--- a/arch/arm/mach-omap2/serial.c >>+++ b/arch/arm/mach-omap2/serial.c >>@@ -42,6 +42,7 @@ >> #include "prm.h" >> #include "pm.h" >> #include "cm.h" >>+#include "mux.h" >> #include "prm-regbits-34xx.h" >> >> #define UART_OMAP_NO_EMPTY_FIFO_READ_IP_REV 0x52 >>@@ -68,6 +69,7 @@ struct omap_uart_state { >> u32 wk_mask; >> u32 padconf; >> u32 dma_enabled; >>+ u16 muxmode; >> >> struct clk *ick; >> struct clk *fck; >>@@ -229,8 +231,20 @@ static inline void omap_uart_disable_clocks(struct omap_uart_state *uart) >> omap_device_idle(uart->pdev); >> } >> >>+static inline void omap_uart_setmux_mode(struct omap_uart_state *uart) >>+{ >>+ u16 w = omap_ctrl_readw(uart->padconf); >>+ w &= ~0x7; >>+ w |= OMAP_MUX_MODE2; Why it is hard coded to MUX_MODE2? Should it not be w |= uart->muxmode? Regards Thara >>+ omap_ctrl_writew(w, uart->padconf); >>+} >>+ >> static void omap_uart_enable_wakeup(struct omap_uart_state *uart) >> { >>+ /* Set appropriate muxmode */ >>+ if (uart->muxmode && uart->padconf) >>+ omap_uart_setmux_mode(uart); >>+ >> /* Set wake-enable bit */ >> if (uart->wk_en && uart->wk_mask) { >> u32 v = __raw_readl(uart->wk_en); >>@@ -248,6 +262,10 @@ static void omap_uart_enable_wakeup(struct omap_uart_state *uart) >> >> static void omap_uart_disable_wakeup(struct omap_uart_state *uart) >> { >>+ /* Set appropriate muxmode */ >>+ if (uart->muxmode && uart->padconf) >>+ omap_uart_setmux_mode(uart); >>+ >> /* Clear wake-enable bit */ >> if (uart->wk_en && uart->wk_mask) { >> u32 v = __raw_readl(uart->wk_en); >>@@ -338,6 +356,9 @@ void omap_uart_resume_idle(int num) >> if (num == uart->num) { >> omap_uart_enable_clocks(uart); >> >>+ if (uart->muxmode && uart->padconf) >>+ omap_uart_setmux_mode(uart); >>+ >> /* Check for IO pad wakeup */ >> if (cpu_is_omap34xx() && uart->padconf) { >> u16 p = omap_ctrl_readw(uart->padconf); >>@@ -416,9 +437,10 @@ static void omap_uart_idle_init(struct omap_uart_state *uart) >> omap_uart_smart_idle_enable(uart, 0); >> >> if (cpu_is_omap34xx()) { >>- u32 mod = (uart->num == 2) ? OMAP3430_PER_MOD : CORE_MOD; >>+ u32 mod = (uart->num > 1) ? OMAP3430_PER_MOD : CORE_MOD; >> u32 wk_mask = 0; >> u32 padconf = 0; >>+ u16 muxmode = 0; >> >> uart->wk_en = OMAP34XX_PRM_REGADDR(mod, PM_WKEN1); >> uart->wk_st = OMAP34XX_PRM_REGADDR(mod, PM_WKST1); >>@@ -435,9 +457,15 @@ static void omap_uart_idle_init(struct omap_uart_state *uart) >> wk_mask = OMAP3430_ST_UART3_MASK; >> padconf = 0x19e; >> break; >>+ case 3: >>+ wk_mask = OMAP3630_ST_UART4_MASK; >>+ padconf = 0x0d2; >>+ muxmode = OMAP_MUX_MODE2; >>+ break; >> } >> uart->wk_mask = wk_mask; >> uart->padconf = padconf; >>+ uart->muxmode = muxmode; >> } else if (cpu_is_omap24xx()) { >> u32 wk_mask = 0; >> >>-- >>1.6.3.3 >> >> >> >> >>-- >>To unsubscribe from this list: send the line "unsubscribe linux-omap" in >>the body of a message to majordomo@xxxxxxxxxxxxxxx >>More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html