Avoid calling irq_dispose_mapping() by letting the platform_device
machinery handle it. Also enable possibility of handling -EPROBE_DEFER
and other errors. Handle before any allocation or anything to avoid
dealing with gotos.

Assisted-by: LLM
Signed-off-by: Rosen Penev <[email protected]>
---
 v2: move platform_get_irq() earlier.
 drivers/tty/serial/ucc_uart.c | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/drivers/tty/serial/ucc_uart.c b/drivers/tty/serial/ucc_uart.c
index 6b7dcbbacd13..96e3c9534de7 100644
--- a/drivers/tty/serial/ucc_uart.c
+++ b/drivers/tty/serial/ucc_uart.c
@@ -26,7 +26,6 @@
 #include <linux/io.h>
 #include <linux/of.h>
 #include <linux/of_address.h>
-#include <linux/of_irq.h>
 #include <linux/dma-mapping.h>
 
 #include <soc/fsl/qe/ucc_slow.h>
@@ -1238,8 +1237,13 @@ static int ucc_uart_probe(struct platform_device *ofdev)
        struct uart_qe_port *qe_port = NULL;
        struct resource res;
        u32 val;
+       int irq;
        int ret;
 
+       irq = platform_get_irq(ofdev, 0);
+       if (irq < 0)
+               return irq;
+
        /*
         * Determine if we need Soft-UART mode
         */
@@ -1338,13 +1342,7 @@ static int ucc_uart_probe(struct platform_device *ofdev)
                goto out_free;
        }
 
-       qe_port->port.irq = irq_of_parse_and_map(np, 0);
-       if (qe_port->port.irq == 0) {
-               dev_err(&ofdev->dev, "could not map IRQ for UCC%u\n",
-                      qe_port->ucc_num + 1);
-               ret = -EINVAL;
-               goto out_free;
-       }
+       qe_port->port.irq = irq;
 
        /*
         * Newer device trees have an "fsl,qe" compatible property for the QE
-- 
2.55.0


Reply via email to