]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
clk: amlogic: aoclk: use clkc-utils syscon probe
authorJerome Brunet <jbrunet@baylibre.com>
Mon, 25 Aug 2025 14:26:29 +0000 (16:26 +0200)
committerJerome Brunet <jbrunet@baylibre.com>
Thu, 4 Sep 2025 16:27:12 +0000 (18:27 +0200)
The clock related part of aoclk probe function duplicates what
the clkc-utils syscon helper does. Factorize this to have a single path to
maintain.

Link: https://lore.kernel.org/r/20250825-meson-clk-cleanup-24-v2-4-0f402f01e117@baylibre.com
Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
drivers/clk/meson/axg-aoclk.c
drivers/clk/meson/g12a-aoclk.c
drivers/clk/meson/gxbb-aoclk.c
drivers/clk/meson/meson-aoclk.c
drivers/clk/meson/meson-aoclk.h

index a0c58dc8e950a05c340c3427af4f6ff7661fa84e..efc33fd18c197df233d537e5f8244a376d4d0924 100644 (file)
@@ -300,16 +300,18 @@ static const struct meson_aoclk_data axg_ao_clkc_data = {
        .reset_reg      = AO_RTI_GEN_CNTL_REG0,
        .num_reset      = ARRAY_SIZE(axg_ao_reset),
        .reset          = axg_ao_reset,
-       .hw_clks        = {
-               .hws    = axg_ao_hw_clks,
-               .num    = ARRAY_SIZE(axg_ao_hw_clks),
+       .clkc_data      = {
+               .hw_clks = {
+                       .hws    = axg_ao_hw_clks,
+                       .num    = ARRAY_SIZE(axg_ao_hw_clks),
+               },
        },
 };
 
 static const struct of_device_id axg_ao_clkc_match_table[] = {
        {
                .compatible     = "amlogic,meson-axg-aoclkc",
-               .data           = &axg_ao_clkc_data,
+               .data           = &axg_ao_clkc_data.clkc_data,
        },
        { }
 };
index 3eaf1db16f45a0adf0acd901ed7ae1f51a9c8dc1..872a7b800bb86bdf1ead56c3eec7e47f30637dbd 100644 (file)
@@ -424,16 +424,18 @@ static const struct meson_aoclk_data g12a_ao_clkc_data = {
        .reset_reg      = AO_RTI_GEN_CNTL_REG0,
        .num_reset      = ARRAY_SIZE(g12a_ao_reset),
        .reset          = g12a_ao_reset,
-       .hw_clks        = {
-               .hws    = g12a_ao_hw_clks,
-               .num    = ARRAY_SIZE(g12a_ao_hw_clks),
+       .clkc_data = {
+               .hw_clks = {
+                       .hws    = g12a_ao_hw_clks,
+                       .num    = ARRAY_SIZE(g12a_ao_hw_clks),
+               },
        },
 };
 
 static const struct of_device_id g12a_ao_clkc_match_table[] = {
        {
                .compatible     = "amlogic,meson-g12a-aoclkc",
-               .data           = &g12a_ao_clkc_data,
+               .data           = &g12a_ao_clkc_data.clkc_data,
        },
        { }
 };
index 11b11fa7791eb1903938c0d3ee46121a23b94a46..ce8d2e9e071759ab8b8aa8619ad7400f1513c319 100644 (file)
@@ -258,16 +258,18 @@ static const struct meson_aoclk_data gxbb_ao_clkc_data = {
        .reset_reg      = AO_RTI_GEN_CNTL_REG0,
        .num_reset      = ARRAY_SIZE(gxbb_ao_reset),
        .reset          = gxbb_ao_reset,
-       .hw_clks        = {
-               .hws    = gxbb_ao_hw_clks,
-               .num    = ARRAY_SIZE(gxbb_ao_hw_clks),
+       .clkc_data      = {
+               .hw_clks = {
+                       .hws    = gxbb_ao_hw_clks,
+                       .num    = ARRAY_SIZE(gxbb_ao_hw_clks),
+               },
        },
 };
 
 static const struct of_device_id gxbb_ao_clkc_match_table[] = {
        {
                .compatible     = "amlogic,meson-gx-aoclkc",
-               .data           = &gxbb_ao_clkc_data,
+               .data           = &gxbb_ao_clkc_data.clkc_data,
        },
        { }
 };
index 894c02fda072ddd0733165d5f60efe1d0da2388d..8f6bdea181197cc647398bd607d8b004ac81f747 100644 (file)
@@ -37,15 +37,23 @@ static const struct reset_control_ops meson_aoclk_reset_ops = {
 int meson_aoclkc_probe(struct platform_device *pdev)
 {
        struct meson_aoclk_reset_controller *rstc;
-       struct meson_aoclk_data *data;
+       const struct meson_clkc_data *clkc_data;
+       const struct meson_aoclk_data *data;
        struct device *dev = &pdev->dev;
        struct device_node *np;
        struct regmap *regmap;
-       int ret, clkid;
+       int ret;
 
-       data = (struct meson_aoclk_data *) of_device_get_match_data(dev);
-       if (!data)
-               return -ENODEV;
+       clkc_data = of_device_get_match_data(dev);
+       if (!clkc_data)
+               return -EINVAL;
+
+       ret = meson_clkc_syscon_probe(pdev);
+       if (ret)
+               return ret;
+
+       data = container_of(clkc_data, struct meson_aoclk_data,
+                           clkc_data);
 
        rstc = devm_kzalloc(dev, sizeof(*rstc), GFP_KERNEL);
        if (!rstc)
@@ -71,19 +79,7 @@ int meson_aoclkc_probe(struct platform_device *pdev)
                return ret;
        }
 
-       /* Register all clks */
-       for (clkid = 0; clkid < data->hw_clks.num; clkid++) {
-               if (!data->hw_clks.hws[clkid])
-                       continue;
-
-               ret = devm_clk_hw_register(dev, data->hw_clks.hws[clkid]);
-               if (ret) {
-                       dev_err(dev, "Clock registration failed\n");
-                       return ret;
-               }
-       }
-
-       return devm_of_clk_add_hw_provider(dev, meson_clk_hw_get, (void *)&data->hw_clks);
+       return 0;
 }
 EXPORT_SYMBOL_NS_GPL(meson_aoclkc_probe, "CLK_MESON");
 
index ea5fc61308af14c63489b7c72410d9d981d8745b..2c83e73d3a7753c2094d2acc7c75b524edb5bb9e 100644 (file)
 #include "meson-clkc-utils.h"
 
 struct meson_aoclk_data {
+       const struct meson_clkc_data            clkc_data;
        const unsigned int                      reset_reg;
        const int                               num_reset;
        const unsigned int                      *reset;
-       struct meson_clk_hw_data                hw_clks;
 };
 
 struct meson_aoclk_reset_controller {