} else
sport->lpuart_dma_tx_use = false;
- ret = devm_request_irq(port->dev, port->irq, lpuart_int, 0,
- DRIVER_NAME, sport);
- if (ret)
- return ret;
-
spin_lock_irqsave(&sport->port.lock, flags);
lpuart_setup_watermark(sport);
} else
sport->lpuart_dma_tx_use = false;
- ret = devm_request_irq(port->dev, port->irq, lpuart32_int, 0,
- DRIVER_NAME, sport);
- if (ret)
- return ret;
-
spin_lock_irqsave(&sport->port.lock, flags);
lpuart32_setup_watermark(sport);
spin_unlock_irqrestore(&port->lock, flags);
- devm_free_irq(port->dev, port->irq, sport);
-
if (sport->lpuart_dma_rx_use) {
ret = wait_event_interruptible_timeout(sport->dma_wait,
!sport->dma_rx_in_progress, msecs_to_jiffies(1));
spin_unlock_irqrestore(&port->lock, flags);
- devm_free_irq(port->dev, port->irq, sport);
-
if (sport->lpuart_dma_rx_use) {
ret = wait_event_interruptible_timeout(sport->dma_wait,
!sport->dma_rx_in_progress, msecs_to_jiffies(1));
platform_set_drvdata(pdev, &sport->port);
- if (sport->lpuart32)
+ if (sport->lpuart32) {
lpuart_reg.cons = LPUART32_CONSOLE;
- else
+ ret = devm_request_irq(&pdev->dev, sport->port.irq, lpuart32_int, 0,
+ DRIVER_NAME, sport);
+ } else {
lpuart_reg.cons = LPUART_CONSOLE;
+ ret = devm_request_irq(&pdev->dev, sport->port.irq, lpuart_int, 0,
+ DRIVER_NAME, sport);
+ }
+
+ if (ret)
+ goto failed_irq_request;
ret = uart_add_one_port(&lpuart_reg, &sport->port);
- if (ret) {
- clk_disable_unprepare(sport->per_clk);
- clk_disable_unprepare(sport->ipg_clk);
- return ret;
- }
+ if (ret)
+ goto failed_attach_port;
sport->dma_tx_chan = dma_request_slave_channel(sport->port.dev, "tx");
if (!sport->dma_tx_chan)
writeb(UARTMODEM_TXRTSE, sport->port.membase + UARTMODEM);
}
+failed_attach_port:
+failed_irq_request:
clk_disable_unprepare(sport->per_clk);
clk_disable_unprepare(sport->ipg_clk);
- return 0;
+ return ret;
}
static int lpuart_remove(struct platform_device *pdev)