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 <redacted>
---
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