aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/tty/serial/omap-serial.c
diff options
context:
space:
mode:
authorGovindraj.R <govindraj.raja@ti.com>2013-07-05 11:25:59 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-07-26 18:53:34 -0400
commitf64ffda60e2c9b69ff2125e90cfca234b2eece2b (patch)
treec32fd500c3c3f8203362370f3c27eb11e9c30a02 /drivers/tty/serial/omap-serial.c
parent972ce08578e0db8663740faea420699c01729f41 (diff)
OMAP2+: UART: enable tx wakeup bit for wer reg
wer has TX wakeup bit available enable the same by populating the necessary tx wakeup flag for the applicable module ip blocks and use the same while configuaring wer reg. Also wer is not context restored, restore wer when context is lost. Cc: Paul Walmsley <paul@pwsan.com> Cc: Felipe Balbi <balbi@ti.com> Cc: Kevin Hilman <kevin.hilman@linaro.org> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> (for drivers/tty changes) Signed-off-by: Govindraj.R <govindraj.raja@ti.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/tty/serial/omap-serial.c')
-rw-r--r--drivers/tty/serial/omap-serial.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c
index eacb0def3d96..33c758e09d86 100644
--- a/drivers/tty/serial/omap-serial.c
+++ b/drivers/tty/serial/omap-serial.c
@@ -51,6 +51,11 @@
51#define OMAP_UART_REV_52 0x0502 51#define OMAP_UART_REV_52 0x0502
52#define OMAP_UART_REV_63 0x0603 52#define OMAP_UART_REV_63 0x0603
53 53
54#define OMAP_UART_TX_WAKEUP_EN BIT(7)
55
56/* Feature flags */
57#define OMAP_UART_WER_HAS_TX_WAKEUP BIT(0)
58
54#define UART_ERRATA_i202_MDR1_ACCESS BIT(0) 59#define UART_ERRATA_i202_MDR1_ACCESS BIT(0)
55#define UART_ERRATA_i291_DMA_FORCEIDLE BIT(1) 60#define UART_ERRATA_i291_DMA_FORCEIDLE BIT(1)
56 61
@@ -136,6 +141,7 @@ struct uart_omap_port {
136 unsigned char dlh; 141 unsigned char dlh;
137 unsigned char mdr1; 142 unsigned char mdr1;
138 unsigned char scr; 143 unsigned char scr;
144 unsigned char wer;
139 145
140 int use_dma; 146 int use_dma;
141 /* 147 /*
@@ -150,6 +156,7 @@ struct uart_omap_port {
150 int context_loss_cnt; 156 int context_loss_cnt;
151 u32 errata; 157 u32 errata;
152 u8 wakeups_enabled; 158 u8 wakeups_enabled;
159 u32 features;
153 160
154 int DTR_gpio; 161 int DTR_gpio;
155 int DTR_inverted; 162 int DTR_inverted;
@@ -681,7 +688,11 @@ static int serial_omap_startup(struct uart_port *port)
681 serial_out(up, UART_IER, up->ier); 688 serial_out(up, UART_IER, up->ier);
682 689
683 /* Enable module level wake up */ 690 /* Enable module level wake up */
684 serial_out(up, UART_OMAP_WER, OMAP_UART_WER_MOD_WKUP); 691 up->wer = OMAP_UART_WER_MOD_WKUP;
692 if (up->features & OMAP_UART_WER_HAS_TX_WAKEUP)
693 up->wer |= OMAP_UART_TX_WAKEUP_EN;
694
695 serial_out(up, UART_OMAP_WER, up->wer);
685 696
686 pm_runtime_mark_last_busy(up->dev); 697 pm_runtime_mark_last_busy(up->dev);
687 pm_runtime_put_autosuspend(up->dev); 698 pm_runtime_put_autosuspend(up->dev);
@@ -1371,9 +1382,11 @@ static void omap_serial_fill_features_erratas(struct uart_omap_port *up)
1371 case OMAP_UART_REV_52: 1382 case OMAP_UART_REV_52:
1372 up->errata |= (UART_ERRATA_i202_MDR1_ACCESS | 1383 up->errata |= (UART_ERRATA_i202_MDR1_ACCESS |
1373 UART_ERRATA_i291_DMA_FORCEIDLE); 1384 UART_ERRATA_i291_DMA_FORCEIDLE);
1385 up->features |= OMAP_UART_WER_HAS_TX_WAKEUP;
1374 break; 1386 break;
1375 case OMAP_UART_REV_63: 1387 case OMAP_UART_REV_63:
1376 up->errata |= UART_ERRATA_i202_MDR1_ACCESS; 1388 up->errata |= UART_ERRATA_i202_MDR1_ACCESS;
1389 up->features |= OMAP_UART_WER_HAS_TX_WAKEUP;
1377 break; 1390 break;
1378 default: 1391 default:
1379 break; 1392 break;
@@ -1600,6 +1613,7 @@ static void serial_omap_restore_context(struct uart_omap_port *up)
1600 serial_omap_mdr1_errataset(up, up->mdr1); 1613 serial_omap_mdr1_errataset(up, up->mdr1);
1601 else 1614 else
1602 serial_out(up, UART_OMAP_MDR1, up->mdr1); 1615 serial_out(up, UART_OMAP_MDR1, up->mdr1);
1616 serial_out(up, UART_OMAP_WER, up->wer);
1603} 1617}
1604 1618
1605static int serial_omap_runtime_suspend(struct device *dev) 1619static int serial_omap_runtime_suspend(struct device *dev)