[PATCH 12/32] clk: mediatek: Add pllfh support to common probe/remove helpers
Akari Tsuyukusa
akkun11.open at gmail.com
Mon Aug 3 07:16:39 PDT 2026
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 <akkun11.open at gmail.com>
---
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
More information about the linux-arm-kernel
mailing list