diff options
Diffstat (limited to 'drivers/tty/serial/fsl_lpuart.c')
| -rw-r--r-- | drivers/tty/serial/fsl_lpuart.c | 40 | 
1 files changed, 17 insertions, 23 deletions
| diff --git a/drivers/tty/serial/fsl_lpuart.c b/drivers/tty/serial/fsl_lpuart.c index 849c1f9991ce..f0252184291e 100644 --- a/drivers/tty/serial/fsl_lpuart.c +++ b/drivers/tty/serial/fsl_lpuart.c @@ -1276,7 +1276,6 @@ static void rx_dma_timer_init(struct lpuart_port *sport)  static int lpuart_startup(struct uart_port *port)  {  	struct lpuart_port *sport = container_of(port, struct lpuart_port, port); -	int ret;  	unsigned long flags;  	unsigned char temp; @@ -1291,11 +1290,6 @@ static int lpuart_startup(struct uart_port *port)  	sport->rxfifo_size = 0x1 << (((temp >> UARTPFIFO_RXSIZE_OFF) &  		UARTPFIFO_FIFOSIZE_MASK) + 1); -	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); @@ -1333,7 +1327,6 @@ static int lpuart_startup(struct uart_port *port)  static int lpuart32_startup(struct uart_port *port)  {  	struct lpuart_port *sport = container_of(port, struct lpuart_port, port); -	int ret;  	unsigned long flags;  	unsigned long temp; @@ -1346,11 +1339,6 @@ static int lpuart32_startup(struct uart_port *port)  	sport->rxfifo_size = 0x1 << (((temp >> UARTFIFO_RXSIZE_OFF) &  		UARTFIFO_FIFOSIZE_MASK) - 1); -	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); @@ -1380,8 +1368,6 @@ static void lpuart_shutdown(struct uart_port *port)  	spin_unlock_irqrestore(&port->lock, flags); -	devm_free_irq(port->dev, port->irq, sport); -  	if (sport->lpuart_dma_rx_use) {  		del_timer_sync(&sport->lpuart_timer);  		lpuart_dma_rx_free(&sport->port); @@ -1400,7 +1386,6 @@ static void lpuart_shutdown(struct uart_port *port)  static void lpuart32_shutdown(struct uart_port *port)  { -	struct lpuart_port *sport = container_of(port, struct lpuart_port, port);  	unsigned long temp;  	unsigned long flags; @@ -1413,8 +1398,6 @@ static void lpuart32_shutdown(struct uart_port *port)  	lpuart32_write(port, temp, UARTCTRL);  	spin_unlock_irqrestore(&port->lock, flags); - -	devm_free_irq(port->dev, port->irq, sport);  }  static void @@ -2212,16 +2195,22 @@ static int lpuart_probe(struct platform_device *pdev)  	platform_set_drvdata(pdev, &sport->port); -	if (lpuart_is_32(sport)) +	if (lpuart_is_32(sport)) {  		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->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) @@ -2240,6 +2229,11 @@ static int lpuart_probe(struct platform_device *pdev)  	}  	return 0; + +failed_attach_port: +failed_irq_request: +	clk_disable_unprepare(sport->clk); +	return ret;  }  static int lpuart_remove(struct platform_device *pdev) |