static int aspeed_vuart_startup(struct uart_port *uart_port) { struct uart_8250_port *uart_8250_port = up_to_u8250p(uart_port); struct aspeed_vuart *vuart = uart_8250_port->port.private_data; int rc; rc = serial8250_do_startup(uart_port); if (rc) return rc; aspeed_vuart_set_host_tx_discard(vuart, false); return 0; }
static int omap_8250_startup(struct uart_port *port) { struct uart_8250_port *up = container_of(port, struct uart_8250_port, port); struct omap8250_priv *priv = port->private_data; int ret; if (priv->wakeirq) { ret = request_irq(priv->wakeirq, omap_wake_irq, port->irqflags, "uart wakeup irq", port); if (ret) return ret; disable_irq(priv->wakeirq); } pm_runtime_get_sync(port->dev); ret = serial8250_do_startup(port); if (ret) goto err; #ifdef CONFIG_PM_RUNTIME up->capabilities |= UART_CAP_RPM; #endif /* Enable module level wake up */ priv->wer = OMAP_UART_WER_MOD_WKUP; if (priv->habit & OMAP_UART_WER_HAS_TX_WAKEUP) priv->wer |= OMAP_UART_TX_WAKEUP_EN; serial_out(up, UART_OMAP_WER, priv->wer); if (up->dma) up->dma->rx_dma(up, 0); pm_runtime_mark_last_busy(port->dev); pm_runtime_put_autosuspend(port->dev); return 0; err: pm_runtime_mark_last_busy(port->dev); pm_runtime_put_autosuspend(port->dev); if (priv->wakeirq) free_irq(priv->wakeirq, port); return ret; }
static int mtk8250_startup(struct uart_port *port) { #ifdef CONFIG_SERIAL_8250_DMA struct uart_8250_port *up = up_to_u8250p(port); struct mtk8250_data *data = port->private_data; /* disable DMA for console */ if (uart_console(port)) up->dma = NULL; if (up->dma) { data->rx_status = DMA_RX_START; uart_circ_clear(&port->state->xmit); } #endif memset(&port->icount, 0, sizeof(port->icount)); return serial8250_do_startup(port); }