static void alchemy_8250_pm(struct uart_port *port, unsigned int state, unsigned int old_state) { switch (state) { case 0: if ((__raw_readl(port->membase + UART_MOD_CNTRL) & 3) != 3) { /* power-on sequence as suggested in the databooks */ __raw_writel(0, port->membase + UART_MOD_CNTRL); wmb(); __raw_writel(1, port->membase + UART_MOD_CNTRL); wmb(); } __raw_writel(3, port->membase + UART_MOD_CNTRL); /* full on */ wmb(); serial8250_do_pm(port, state, old_state); break; case 3: /* power off */ serial8250_do_pm(port, state, old_state); __raw_writel(0, port->membase + UART_MOD_CNTRL); wmb(); break; default: serial8250_do_pm(port, state, old_state); break; } }
static void alchemy_8250_pm(struct uart_port *port, unsigned int state, unsigned int old_state) { #ifdef CONFIG_SERIAL_8250 switch (state) { case 0: alchemy_uart_enable(CPHYSADDR(port->membase)); serial8250_do_pm(port, state, old_state); break; case 3: /* power off */ serial8250_do_pm(port, state, old_state); alchemy_uart_disable(CPHYSADDR(port->membase)); break; default: serial8250_do_pm(port, state, old_state); break; } #endif }
static void dw8250_do_pm(struct uart_port *port, unsigned int state, unsigned int old) { if (!state) pm_runtime_get_sync(port->dev); serial8250_do_pm(port, state, old); if (state) pm_runtime_put_sync_suspend(port->dev); }