ARM: OMAP2+: UART: Remove context_save and move context restore to driver

Remove context save function from serial.c and move context restore
function to omap-serial. Remove all regs stored in omap_uart_state
for contex_save/restore, reg read write funcs used in context_save/restore,
io_addresses populated for read/write funcs.

Clock gating mechanism was done in serial.c and had no info on uart state
thus we needed context save and restore in serial.c
With runtime conversion and clock gating done within uart driver
context restore can be done from regs value available from uart_omap_port
structure.

Signed-off-by: Govindraj.R <[email protected]>
Acked-by: Greg Kroah-Hartman <[email protected]> (for drivers/tty changes)
Signed-off-by: Kevin Hilman <[email protected]>
This commit is contained in:
Govindraj.R 2011-11-07 18:56:12 +05:30 • committed by Kevin Hilman
commit 9f9ac1e84a
2 changed files with 24 additions and 118 deletions

View file

@ -1408,6 +1408,25 @@ static int serial_omap_remove(struct platform_device *dev)
return 0;
}
static void serial_omap_restore_context(struct uart_omap_port *up)
{
serial_out(up, UART_OMAP_MDR1, UART_OMAP_MDR1_DISABLE);
serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); /* Config B mode */
serial_out(up, UART_EFR, UART_EFR_ECB);
serial_out(up, UART_LCR, 0x0); /* Operational mode */
serial_out(up, UART_IER, 0x0);
serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); /* Config B mode */
serial_out(up, UART_LCR, 0x0); /* Operational mode */
serial_out(up, UART_IER, up->ier);
serial_out(up, UART_FCR, up->fcr);
serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A);
serial_out(up, UART_MCR, up->mcr);
serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); /* Config B mode */
serial_out(up, UART_EFR, up->efr);
serial_out(up, UART_LCR, up->lcr);
serial_out(up, UART_OMAP_MDR1, UART_OMAP_MDR1_16X_MODE);
}
#ifdef CONFIG_PM_RUNTIME
static int serial_omap_runtime_suspend(struct device *dev)
{
@ -1416,6 +1435,11 @@ static int serial_omap_runtime_suspend(struct device *dev)
static int serial_omap_runtime_resume(struct device *dev)
{
struct uart_omap_port *up = dev_get_drvdata(dev);
if (up)
serial_omap_restore_context(up);
return 0;
}
#endif