[PATCH 12/32] clk: mediatek: Add pllfh support to common probe/remove helpers
Akari Tsuyukusa <[email protected]> Mon, 3 Aug 2026 23:16:39 +0900
| Newsgroups | org.kernel.vger.linux-clk,org.infradead.lists.linux-arm-kernel,org.infradead.lists.linux-mediatek,org.kernel.vger.linux-kernel,org.kernel.vger.netdev,org.kernel.vger.stable |
|---|---|
| Message-ID | <[email protected]> |
Extend __mtk_clk_simple_probe() and __mtk_clk_simple_remove() to support pll freqhoppings. This reduces boilerplate code in apmixedsys drivers with pllfh support. Signed-off-by: Akari Tsuyukusa <[email protected]> --- drivers/clk/mediatek/clk-mtk.c | 44 ++++++++++++++++++++++++++++++---- drivers/clk/mediatek/clk-mtk.h | 6 +++++ 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/drivers/clk/mediatek/clk-mtk.c b/drivers/clk/mediatek/clk-mtk.c index 71d70b5a9990..e80ae497fadd 100644 --- a/drivers/clk/mediatek/clk-mtk.c +++ b/drivers/clk/mediatek/clk-mtk.c @@ -23,6 +23,10 @@ #include "clk-cpumux.h" #include "clk-pll.h" +#if IS_ENABLED(CONFIG_COMMON_CLK_MEDIATEK_FHCTL) +#include "clk-fhctl.h" +#endif + const struct mtk_gate_regs cg_regs_dummy = { 0, 0, 0 }; EXPORT_SYMBOL_GPL(cg_regs_dummy); @@ -525,8 +529,19 @@ static int __mtk_clk_simple_probe(struct platform_device *pdev, } if (mcd->plls) { - r = mtk_clk_register_plls(&pdev->dev, mcd->plls, + if (mcd->fhctl_node) { +#if IS_ENABLED(CONFIG_COMMON_CLK_MEDIATEK_FHCTL) + fhctl_parse_dt(mcd->fhctl_node, mcd->pllfhs, + mcd->num_pllfhs); + r = mtk_clk_register_pllfhs(&pdev->dev, mcd->plls, + mcd->num_plls, mcd->pllfhs, + mcd->num_pllfhs, clk_data); +#endif + } else { + r = mtk_clk_register_plls(&pdev->dev, mcd->plls, mcd->num_plls, clk_data); + } + if (r) goto free_data; } @@ -646,8 +661,17 @@ static int __mtk_clk_simple_probe(struct platform_device *pdev, mtk_clk_unregister_fixed_clks(mcd->fixed_clks, mcd->num_fixed_clks, clk_data); unregister_plls: - if (mcd->plls) - mtk_clk_unregister_plls(mcd->plls, mcd->num_plls, clk_data); + if (mcd->plls) { + if (mcd->fhctl_node) +#if IS_ENABLED(CONFIG_COMMON_CLK_MEDIATEK_FHCTL) + mtk_clk_unregister_pllfhs(mcd->plls, mcd->num_plls, + mcd->pllfhs, mcd->num_pllfhs, + clk_data); +#endif + else + mtk_clk_unregister_plls(mcd->plls, mcd->num_plls, + clk_data); + } free_data: mtk_free_clk_data(clk_data); free_base: @@ -686,8 +710,18 @@ static void __mtk_clk_simple_remove(struct platform_device *pdev, if (mcd->fixed_clks) mtk_clk_unregister_fixed_clks(mcd->fixed_clks, mcd->num_fixed_clks, clk_data); - if (mcd->plls) - mtk_clk_unregister_plls(mcd->plls, mcd->num_plls, clk_data); + if (mcd->plls) { + if (mcd->fhctl_node) +#if IS_ENABLED(CONFIG_COMMON_CLK_MEDIATEK_FHCTL) + mtk_clk_unregister_pllfhs(mcd->plls, mcd->num_plls, + mcd->pllfhs, mcd->num_pllfhs, + clk_data); +#endif + else + mtk_clk_unregister_plls(mcd->plls, mcd->num_plls, + clk_data); + } + mtk_free_clk_data(clk_data); } diff --git a/drivers/clk/mediatek/clk-mtk.h b/drivers/clk/mediatek/clk-mtk.h index 11939e3e0b38..4e959ec68da0 100644 --- a/drivers/clk/mediatek/clk-mtk.h +++ b/drivers/clk/mediatek/clk-mtk.h @@ -15,6 +15,8 @@ #include "reset.h" +#include "clk-fhctl.h" + #define MAX_MUX_GATE_BIT 31 #define INVALID_MUX_GATE_BIT (MAX_MUX_GATE_BIT + 1) @@ -266,6 +268,10 @@ struct mtk_clk_desc { bool need_runtime_pm; bool populate_children; + + const u8 *fhctl_node; + struct mtk_pllfh_data *pllfhs; + size_t num_pllfhs; }; int mtk_clk_pdev_probe(struct platform_device *pdev); -- 2.55.0