[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20251024083301.25845-4-angelogioacchino.delregno@collabora.com>
Date: Fri, 24 Oct 2025 10:32:57 +0200
From: AngeloGioacchino Del Regno <angelogioacchino.delregno@...labora.com>
To: sboyd@...nel.org
Cc: mturquette@...libre.com,
robh@...nel.org,
krzk+dt@...nel.org,
conor+dt@...nel.org,
matthias.bgg@...il.com,
angelogioacchino.delregno@...labora.com,
laura.nao@...labora.com,
nfraprado@...labora.com,
wenst@...omium.org,
y.oudjana@...tonmail.com,
linux-clk@...r.kernel.org,
devicetree@...r.kernel.org,
linux-kernel@...r.kernel.org,
linux-arm-kernel@...ts.infradead.org,
linux-mediatek@...ts.infradead.org,
kernel@...labora.com
Subject: [PATCH v1 3/7] clk: mediatek: clk-mtk: Split and rename __mtk_clk_simple_probe()
In preparation for adding support to register clock controllers
that are not reachable over MMIO but rather over a different bus,
especially SPMI (for PMIC clocks!), split out the current private
__mtk_clk_simple_probe() function in two, make it accept a handle
to regmap in and call it mtk_clk_simple_probe_internal().
The new function is not static, but its symbol is *not* exported:
this is done on purpose, because this is supposed to be usable
only by clock registration helpers inside of clk/mediatek, and
only ones built inside of the same module as clk-mtk, as will be
done in a later change.
Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@...labora.com>
---
drivers/clk/mediatek/clk-mtk.c | 58 ++++++++++++++++++++++++----------
drivers/clk/mediatek/clk-mtk.h | 5 +++
2 files changed, 46 insertions(+), 17 deletions(-)
diff --git a/drivers/clk/mediatek/clk-mtk.c b/drivers/clk/mediatek/clk-mtk.c
index 19cd27941747..93c7e28ffb5f 100644
--- a/drivers/clk/mediatek/clk-mtk.c
+++ b/drivers/clk/mediatek/clk-mtk.c
@@ -2,6 +2,8 @@
/*
* Copyright (c) 2014 MediaTek Inc.
* Author: James Liao <jamesjj.liao@...iatek.com>
+ * Copyright (c) 2025 Collabora Ltd
+ * AngeloGioacchino Del Regno <angelogioacchino.delregno@...labora.com>
*/
#include <linux/bitops.h>
@@ -14,6 +16,7 @@
#include <linux/of_address.h>
#include <linux/platform_device.h>
#include <linux/pm_runtime.h>
+#include <linux/regmap.h>
#include <linux/slab.h>
#include "clk-mtk.h"
@@ -464,26 +467,15 @@ void mtk_clk_unregister_dividers(const struct mtk_clk_divider *mcds, int num,
}
EXPORT_SYMBOL_GPL(mtk_clk_unregister_dividers);
-static int __mtk_clk_simple_probe(struct platform_device *pdev,
- struct device_node *node)
+int mtk_clk_simple_probe_internal(struct platform_device *pdev,
+ struct device_node *node,
+ const struct mtk_clk_desc *mcd,
+ struct regmap *regmap)
{
- const struct platform_device_id *id;
- const struct mtk_clk_desc *mcd;
struct clk_hw_onecell_data *clk_data;
void __iomem *base = NULL;
int num_clks, r;
- mcd = device_get_match_data(&pdev->dev);
- if (!mcd) {
- /* Clock driver wasn't registered from devicetree */
- id = platform_get_device_id(pdev);
- if (id)
- mcd = (const struct mtk_clk_desc *)id->driver_data;
-
- if (!mcd)
- return -EINVAL;
- }
-
/* Composite and divider clocks needs us to pass iomem pointer */
if (mcd->composite_clks || mcd->divider_clks) {
if (!mcd->shared_io)
@@ -653,20 +645,52 @@ static void __mtk_clk_simple_remove(struct platform_device *pdev,
mtk_free_clk_data(clk_data);
}
+static int mtk_clk_get_desc(struct platform_device *pdev, const struct mtk_clk_desc **d)
+{
+ const struct platform_device_id *id;
+ const struct mtk_clk_desc *mcd;
+
+ mcd = device_get_match_data(&pdev->dev);
+ if (!mcd) {
+ /* Clock driver wasn't registered from devicetree */
+ id = platform_get_device_id(pdev);
+ if (id)
+ mcd = (const struct mtk_clk_desc *)id->driver_data;
+
+ if (!mcd)
+ return -EINVAL;
+ }
+ *d = mcd;
+
+ return 0;
+}
+
int mtk_clk_pdev_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
struct device_node *node = dev->parent->of_node;
+ const struct mtk_clk_desc *mcd;
+ int ret;
- return __mtk_clk_simple_probe(pdev, node);
+ ret = mtk_clk_get_desc(pdev, &mcd);
+ if (ret)
+ return ret;
+
+ return mtk_clk_simple_probe_internal(pdev, node, mcd, NULL);
}
EXPORT_SYMBOL_GPL(mtk_clk_pdev_probe);
int mtk_clk_simple_probe(struct platform_device *pdev)
{
struct device_node *node = pdev->dev.of_node;
+ const struct mtk_clk_desc *mcd;
+ int ret;
+
+ ret = mtk_clk_get_desc(pdev, &mcd);
+ if (ret)
+ return ret;
- return __mtk_clk_simple_probe(pdev, node);
+ return mtk_clk_simple_probe_internal(pdev, node, mcd, NULL);
}
EXPORT_SYMBOL_GPL(mtk_clk_simple_probe);
diff --git a/drivers/clk/mediatek/clk-mtk.h b/drivers/clk/mediatek/clk-mtk.h
index 5417b9264e6d..945fd3ee79ca 100644
--- a/drivers/clk/mediatek/clk-mtk.h
+++ b/drivers/clk/mediatek/clk-mtk.h
@@ -262,6 +262,11 @@ struct mtk_clk_desc {
bool need_runtime_pm;
};
+int mtk_clk_simple_probe_internal(struct platform_device *pdev,
+ struct device_node *node,
+ const struct mtk_clk_desc *mcd,
+ struct regmap *regmap);
+
int mtk_clk_pdev_probe(struct platform_device *pdev);
void mtk_clk_pdev_remove(struct platform_device *pdev);
int mtk_clk_simple_probe(struct platform_device *pdev);
--
2.51.1
Powered by blists - more mailing lists