[PATCH 10/32] clk: mediatek: Add PLL support to common probe/remove helpers
Akari Tsuyukusa
akkun11.open at gmail.com
Mon Aug 3 07:16:37 PDT 2026
Extend __mtk_clk_simple_probe() and __mtk_clk_simple_remove() to
support PLLs. This reduces boilerplate code in apmixedsys drivers.
Signed-off-by: Akari Tsuyukusa <akkun11.open at gmail.com>
---
drivers/clk/mediatek/clk-mtk.c | 19 ++++++++++++++++---
drivers/clk/mediatek/clk-mtk.h | 3 +++
2 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/drivers/clk/mediatek/clk-mtk.c b/drivers/clk/mediatek/clk-mtk.c
index 8148c21e6099..c3369a04cdec 100644
--- a/drivers/clk/mediatek/clk-mtk.c
+++ b/drivers/clk/mediatek/clk-mtk.c
@@ -20,6 +20,7 @@
#include "clk-gate.h"
#include "clk-mux.h"
#include "clk-cpumux.h"
+#include "clk-pll.h"
const struct mtk_gate_regs cg_regs_dummy = { 0, 0, 0 };
EXPORT_SYMBOL_GPL(cg_regs_dummy);
@@ -486,7 +487,7 @@ static int __mtk_clk_simple_probe(struct platform_device *pdev,
}
/* Composite and divider clocks needs us to pass iomem pointer */
- if (mcd->composite_clks || mcd->divider_clks) {
+ if (mcd->composite_clks || mcd->divider_clks || mcd->plls) {
if (!mcd->shared_io)
base = devm_platform_ioremap_resource(pdev, 0);
else
@@ -514,7 +515,7 @@ static int __mtk_clk_simple_probe(struct platform_device *pdev,
num_clks = mcd->num_clks + mcd->num_composite_clks;
num_clks += mcd->num_fixed_clks + mcd->num_factor_clks;
num_clks += mcd->num_mux_clks + mcd->num_divider_clks;
- num_clks += mcd->num_cpumuxes;
+ num_clks += mcd->num_cpumuxes + mcd->num_plls;
clk_data = mtk_alloc_clk_data(num_clks);
if (!clk_data) {
@@ -522,11 +523,18 @@ static int __mtk_clk_simple_probe(struct platform_device *pdev,
goto free_base;
}
+ if (mcd->plls) {
+ r = mtk_clk_register_plls(&pdev->dev, mcd->plls,
+ mcd->num_plls, clk_data);
+ if (r)
+ goto free_data;
+ }
+
if (mcd->fixed_clks) {
r = mtk_clk_register_fixed_clks(mcd->fixed_clks,
mcd->num_fixed_clks, clk_data);
if (r)
- goto free_data;
+ goto unregister_plls;
}
if (mcd->factor_clks) {
@@ -630,6 +638,9 @@ static int __mtk_clk_simple_probe(struct platform_device *pdev,
if (mcd->fixed_clks)
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);
free_data:
mtk_free_clk_data(clk_data);
free_base:
@@ -668,6 +679,8 @@ 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);
mtk_free_clk_data(clk_data);
}
diff --git a/drivers/clk/mediatek/clk-mtk.h b/drivers/clk/mediatek/clk-mtk.h
index 02fab4b166f2..b6504b3e77ed 100644
--- a/drivers/clk/mediatek/clk-mtk.h
+++ b/drivers/clk/mediatek/clk-mtk.h
@@ -23,6 +23,7 @@
#define MTK_WAIT_HWV_DONE_US 30
struct platform_device;
+struct mtk_pll_data;
/*
* We need the clock IDs to start from zero but to maintain devicetree
@@ -254,6 +255,8 @@ struct mtk_clk_desc {
size_t num_mux_clks;
const struct mtk_composite *cpumuxes;
size_t num_cpumuxes;
+ const struct mtk_pll_data *plls;
+ size_t num_plls;
const struct mtk_clk_rst_desc *rst_desc;
spinlock_t *clk_lock;
bool shared_io;
--
2.55.0
More information about the linux-arm-kernel
mailing list