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
