Skip to content

Commit f5de954

Browse files
bijudasKAGA-KOKO
authored andcommitted
irqchip/renesas-rzv2h: Simplify rzv2h_icu_init()
Use devm_add_action_or_reset() for calling put_device in error path of rzv2h_icu_init() to simplify the code by using the recently added devm_* helpers. Signed-off-by: Biju Das <[email protected]> Signed-off-by: Thomas Gleixner <[email protected]> Reviewed-by: Geert Uytterhoeven <[email protected]> Reviewed-by: Philipp Zabel <[email protected]> Link: https://lore.kernel.org/all/[email protected]
1 parent c56cab0 commit f5de954

File tree

1 file changed

+19
-18
lines changed

1 file changed

+19
-18
lines changed

drivers/irqchip/irq-renesas-rzv2h.c

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,11 @@ static int rzv2h_icu_parse_interrupts(struct rzv2h_icu_priv *priv, struct device
419419
return 0;
420420
}
421421

422+
static void rzv2h_icu_put_device(void *data)
423+
{
424+
put_device(data);
425+
}
426+
422427
static int rzv2h_icu_init(struct device_node *node, struct device_node *parent)
423428
{
424429
struct irq_domain *irq_domain, *parent_domain;
@@ -431,41 +436,39 @@ static int rzv2h_icu_init(struct device_node *node, struct device_node *parent)
431436
if (!pdev)
432437
return -ENODEV;
433438

439+
ret = devm_add_action_or_reset(&pdev->dev, rzv2h_icu_put_device,
440+
&pdev->dev);
441+
if (ret < 0)
442+
return ret;
443+
434444
parent_domain = irq_find_host(parent);
435445
if (!parent_domain) {
436446
dev_err(&pdev->dev, "cannot find parent domain\n");
437-
ret = -ENODEV;
438-
goto put_dev;
447+
return -ENODEV;
439448
}
440449

441450
rzv2h_icu_data = devm_kzalloc(&pdev->dev, sizeof(*rzv2h_icu_data), GFP_KERNEL);
442-
if (!rzv2h_icu_data) {
443-
ret = -ENOMEM;
444-
goto put_dev;
445-
}
451+
if (!rzv2h_icu_data)
452+
return -ENOMEM;
446453

447454
rzv2h_icu_data->base = devm_of_iomap(&pdev->dev, pdev->dev.of_node, 0, NULL);
448-
if (IS_ERR(rzv2h_icu_data->base)) {
449-
ret = PTR_ERR(rzv2h_icu_data->base);
450-
goto put_dev;
451-
}
455+
if (IS_ERR(rzv2h_icu_data->base))
456+
return PTR_ERR(rzv2h_icu_data->base);
452457

453458
ret = rzv2h_icu_parse_interrupts(rzv2h_icu_data, node);
454459
if (ret) {
455460
dev_err(&pdev->dev, "cannot parse interrupts: %d\n", ret);
456-
goto put_dev;
461+
return ret;
457462
}
458463

459464
resetn = devm_reset_control_get_exclusive(&pdev->dev, NULL);
460-
if (IS_ERR(resetn)) {
461-
ret = PTR_ERR(resetn);
462-
goto put_dev;
463-
}
465+
if (IS_ERR(resetn))
466+
return PTR_ERR(resetn);
464467

465468
ret = reset_control_deassert(resetn);
466469
if (ret) {
467470
dev_err(&pdev->dev, "failed to deassert resetn pin, %d\n", ret);
468-
goto put_dev;
471+
return ret;
469472
}
470473

471474
pm_runtime_enable(&pdev->dev);
@@ -496,8 +499,6 @@ static int rzv2h_icu_init(struct device_node *node, struct device_node *parent)
496499
pm_disable:
497500
pm_runtime_disable(&pdev->dev);
498501
reset_control_assert(resetn);
499-
put_dev:
500-
put_device(&pdev->dev);
501502

502503
return ret;
503504
}

0 commit comments

Comments
 (0)