Skip to content

Commit 2fa9fd6

Browse files
bijudasgeertu
authored andcommitted
clk: renesas: rzg2l: Add multi clock PM support
Add multi clock PM support for cpg driver. Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com> Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> Link: https://lore.kernel.org/r/20210626081344.5783-2-biju.das.jz@bp.renesas.com Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
1 parent e73f0f0 commit 2fa9fd6

1 file changed

Lines changed: 29 additions & 22 deletions

File tree

drivers/clk/renesas/renesas-rzg2l-cpg.c

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -594,42 +594,49 @@ static int rzg2l_cpg_attach_dev(struct generic_pm_domain *unused, struct device
594594
{
595595
struct device_node *np = dev->of_node;
596596
struct of_phandle_args clkspec;
597+
bool once = true;
597598
struct clk *clk;
598599
int error;
599600
int i = 0;
600601

601602
while (!of_parse_phandle_with_args(np, "clocks", "#clock-cells", i,
602603
&clkspec)) {
603-
if (rzg2l_cpg_is_pm_clk(&clkspec))
604-
goto found;
605-
606-
of_node_put(clkspec.np);
604+
if (rzg2l_cpg_is_pm_clk(&clkspec)) {
605+
if (once) {
606+
once = false;
607+
error = pm_clk_create(dev);
608+
if (error) {
609+
of_node_put(clkspec.np);
610+
goto err;
611+
}
612+
}
613+
clk = of_clk_get_from_provider(&clkspec);
614+
of_node_put(clkspec.np);
615+
if (IS_ERR(clk)) {
616+
error = PTR_ERR(clk);
617+
goto fail_destroy;
618+
}
619+
620+
error = pm_clk_add_clk(dev, clk);
621+
if (error) {
622+
dev_err(dev, "pm_clk_add_clk failed %d\n",
623+
error);
624+
goto fail_put;
625+
}
626+
} else {
627+
of_node_put(clkspec.np);
628+
}
607629
i++;
608630
}
609631

610632
return 0;
611633

612-
found:
613-
clk = of_clk_get_from_provider(&clkspec);
614-
of_node_put(clkspec.np);
615-
616-
if (IS_ERR(clk))
617-
return PTR_ERR(clk);
618-
619-
error = pm_clk_create(dev);
620-
if (error)
621-
goto fail_put;
622-
623-
error = pm_clk_add_clk(dev, clk);
624-
if (error)
625-
goto fail_destroy;
626-
627-
return 0;
634+
fail_put:
635+
clk_put(clk);
628636

629637
fail_destroy:
630638
pm_clk_destroy(dev);
631-
fail_put:
632-
clk_put(clk);
639+
err:
633640
return error;
634641
}
635642

0 commit comments

Comments
 (0)