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]>
---
 drivers/tty/serial/ucc_uart.c | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/drivers/tty/serial/ucc_uart.c b/drivers/tty/serial/ucc_uart.c
index 6b7dcbbacd13..c3c83a59dcce 100644
--- a/drivers/tty/serial/ucc_uart.c
+++ b/drivers/tty/serial/ucc_uart.c
@@ -1238,6 +1238,7 @@ 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;
 
        /*
@@ -1247,6 +1248,10 @@ static int ucc_uart_probe(struct platform_device *ofdev)
        if (ret)
                return ret;
 
+       irq = platform_get_irq(ofdev, 0);
+       if (irq < 0)
+               return irq;
+
        qe_port = kzalloc_obj(struct uart_qe_port);
        if (!qe_port) {
                dev_err(&ofdev->dev, "can't allocate QE port structure\n");
@@ -1338,13 +1343,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