[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250309132959.19045-8-ansuelsmth@gmail.com>
Date: Sun, 9 Mar 2025 14:29:38 +0100
From: Christian Marangi <ansuelsmth@...il.com>
To: Michael Turquette <mturquette@...libre.com>,
Stephen Boyd <sboyd@...nel.org>,
Rob Herring <robh@...nel.org>,
Krzysztof Kozlowski <krzk+dt@...nel.org>,
Conor Dooley <conor+dt@...nel.org>,
Lee Jones <lee@...nel.org>,
Christian Marangi <ansuelsmth@...il.com>,
Vinod Koul <vkoul@...nel.org>,
Kishon Vijay Abraham I <kishon@...nel.org>,
Matthias Brugger <matthias.bgg@...il.com>,
AngeloGioacchino Del Regno <angelogioacchino.delregno@...labora.com>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
Lorenzo Bianconi <lorenzo@...nel.org>,
Daniel Danzberger <dd@...edd.com>,
Arnd Bergmann <arnd@...db.de>,
Linus Walleij <linus.walleij@...aro.org>,
Nikita Shubin <nikita.shubin@...uefel.me>,
Guo Ren <guoren@...nel.org>,
Yangyu Chen <cyy@...self.name>,
Ben Hutchings <ben@...adent.org.uk>,
Felix Fietkau <nbd@....name>,
linux-clk@...r.kernel.org,
devicetree@...r.kernel.org,
linux-kernel@...r.kernel.org,
linux-arm-kernel@...ts.infradead.org,
linux-phy@...ts.infradead.org,
linux-mediatek@...ts.infradead.org,
linux-usb@...r.kernel.org,
upstream@...oha.com
Subject: [PATCH 07/13] clk: en7523: support getting regmap from parent node for EN7581
Add support for getting clock regmap from parent node for Airoha EN7581.
This is needed to support new implementation with SCU (System Controller
Unit) as an MFD and clock-controller node as a child node of it.
In such implementation the register regmap is provided as a syscon from
the parent node.
Signed-off-by: Christian Marangi <ansuelsmth@...il.com>
---
drivers/clk/clk-en7523.c | 25 ++++++++++++++++---------
1 file changed, 16 insertions(+), 9 deletions(-)
diff --git a/drivers/clk/clk-en7523.c b/drivers/clk/clk-en7523.c
index 2a74bc8fed24..29cb7ccea29a 100644
--- a/drivers/clk/clk-en7523.c
+++ b/drivers/clk/clk-en7523.c
@@ -665,6 +665,7 @@ static int en7581_clk_hw_init(struct platform_device *pdev,
const struct en_clk_soc_data *soc_data,
struct clk_hw_onecell_data *clk_data)
{
+ struct device *dev = &pdev->dev;
struct regmap *map, *clk_map;
void __iomem *base;
@@ -672,22 +673,28 @@ static int en7581_clk_hw_init(struct platform_device *pdev,
if (IS_ERR(map))
return PTR_ERR(map);
- base = devm_platform_ioremap_resource(pdev, 0);
- if (IS_ERR(base))
- return PTR_ERR(base);
-
- clk_map = devm_regmap_init_mmio(&pdev->dev, base, &en7523_clk_regmap_config);
- if (IS_ERR(clk_map))
- return PTR_ERR(clk_map);
+ if (of_property_present(dev->of_node, "reg")) {
+ base = devm_platform_ioremap_resource(pdev, 0);
+ if (IS_ERR(base))
+ return PTR_ERR(base);
+
+ clk_map = devm_regmap_init_mmio(dev, base, &en7523_clk_regmap_config);
+ if (IS_ERR(clk_map))
+ return PTR_ERR(clk_map);
+ } else {
+ clk_map = device_node_to_regmap(dev->parent->of_node);
+ if (IS_ERR(clk_map))
+ return PTR_ERR(clk_map);
+ }
- en75xx_register_clocks(&pdev->dev, soc_data, clk_data, map, clk_map);
+ en75xx_register_clocks(dev, soc_data, clk_data, map, clk_map);
regmap_clear_bits(clk_map, REG_NP_SCU_SSTR,
REG_PCIE_XSI0_SEL_MASK | REG_PCIE_XSI1_SEL_MASK);
regmap_update_bits(clk_map, REG_NP_SCU_PCIC, REG_PCIE_CTRL,
FIELD_PREP(REG_PCIE_CTRL, 3));
- return en7581_reset_register(&pdev->dev, clk_map);
+ return en7581_reset_register(dev, clk_map);
}
static int en7523_clk_probe(struct platform_device *pdev)
--
2.48.1
Powered by blists - more mailing lists