All of the imx8m[nmpq] use the same clk_ops functions so move them
to a common file.

Signed-off-by: Angus Ainslie <an...@akkea.ca>
---
 drivers/clk/imx/Makefile     |   8 +--
 drivers/clk/imx/clk-imx8m.c  | 108 +++++++++++++++++++++++++++++++++++
 drivers/clk/imx/clk-imx8m.h  |  12 ++++
 drivers/clk/imx/clk-imx8mm.c |  89 +----------------------------
 drivers/clk/imx/clk-imx8mn.c |  89 +----------------------------
 drivers/clk/imx/clk-imx8mp.c |  91 +----------------------------
 drivers/clk/imx/clk-imx8mq.c |  91 +----------------------------
 7 files changed, 132 insertions(+), 356 deletions(-)
 create mode 100644 drivers/clk/imx/clk-imx8m.c
 create mode 100644 drivers/clk/imx/clk-imx8m.h

diff --git a/drivers/clk/imx/Makefile b/drivers/clk/imx/Makefile
index c5766901f2b..09030f1ded2 100644
--- a/drivers/clk/imx/Makefile
+++ b/drivers/clk/imx/Makefile
@@ -11,13 +11,13 @@ obj-$(CONFIG_IMX8QXP) += clk-imx8qxp.o
 obj-$(CONFIG_IMX8QM) += clk-imx8qm.o
 endif
 obj-$(CONFIG_$(SPL_TPL_)CLK_IMX8MM) += clk-imx8mm.o clk-pll14xx.o \
-                               clk-composite-8m.o
+                               clk-composite-8m.o clk-imx8m.o
 obj-$(CONFIG_$(SPL_TPL_)CLK_IMX8MN) += clk-imx8mn.o clk-pll14xx.o \
-                               clk-composite-8m.o
+                               clk-composite-8m.o clk-imx8m.o
 obj-$(CONFIG_$(SPL_TPL_)CLK_IMX8MP) += clk-imx8mp.o clk-pll14xx.o \
-                               clk-composite-8m.o
+                               clk-composite-8m.o clk-imx8m.o
 obj-$(CONFIG_$(SPL_TPL_)CLK_IMX8MQ) += clk-imx8mq.o clk-pll14xx.o \
-                               clk-composite-8m.o
+                               clk-composite-8m.o clk-imx8m.o
 
 obj-$(CONFIG_$(SPL_TPL_)CLK_IMXRT1020) += clk-imxrt1020.o
 obj-$(CONFIG_$(SPL_TPL_)CLK_IMXRT1050) += clk-imxrt1050.o
diff --git a/drivers/clk/imx/clk-imx8m.c b/drivers/clk/imx/clk-imx8m.c
new file mode 100644
index 00000000000..d3e9f8aaee0
--- /dev/null
+++ b/drivers/clk/imx/clk-imx8m.c
@@ -0,0 +1,108 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2018 NXP
+ * Copyright 2022 Purism SPC
+ * Peng Fan <peng....@nxp.com>
+ */
+
+#include <common.h>
+#include <clk-uclass.h>
+#include <dm.h>
+#include <log.h>
+#include <malloc.h>
+#include <asm/arch/clock.h>
+#include <misc.h>
+
+#include "clk-imx8m.h"
+
+ulong imx8m_clk_get_rate(struct clk *clk)
+{
+       struct clk *c;
+       int ret;
+
+       debug("%s(#%lu)\n", __func__, clk->id);
+
+       ret = clk_get_by_id(clk->id, &c);
+       if (ret)
+               return ret;
+
+       return clk_get_rate(c);
+}
+EXPORT_SYMBOL_GPL(imx8m_clk_get_rate);
+
+ulong imx8m_clk_set_rate(struct clk *clk, unsigned long rate)
+{
+       struct clk *c;
+       int ret;
+
+       debug("%s(#%lu), rate: %lu\n", __func__, clk->id, rate);
+
+       ret = clk_get_by_id(clk->id, &c);
+       if (ret)
+               return ret;
+
+       return clk_set_rate(c, rate);
+}
+EXPORT_SYMBOL_GPL(imx8m_clk_set_rate);
+
+static int __imx8m_clk_enable(struct clk *clk, bool enable)
+{
+       struct clk *c;
+       int ret;
+
+       debug("%s(#%lu) en: %d\n", __func__, clk->id, enable);
+
+       ret = clk_get_by_id(clk->id, &c);
+       if (ret)
+               return ret;
+
+       if (enable)
+               ret = clk_enable(c);
+       else
+               ret = clk_disable(c);
+
+       return ret;
+}
+
+int imx8m_clk_disable(struct clk *clk)
+{
+       return __imx8m_clk_enable(clk, 0);
+}
+EXPORT_SYMBOL_GPL(imx8m_clk_disable);
+
+int imx8m_clk_enable(struct clk *clk)
+{
+       return __imx8m_clk_enable(clk, 1);
+}
+EXPORT_SYMBOL_GPL(imx8m_clk_enable);
+
+int imx8m_clk_set_parent(struct clk *clk, struct clk *parent)
+{
+       struct clk *c, *cp;
+       int ret;
+
+       debug("%s(#%lu), parent: %lu\n", __func__, clk->id, parent->id);
+
+       ret = clk_get_by_id(clk->id, &c);
+       if (ret)
+               return ret;
+
+       ret = clk_get_by_id(parent->id, &cp);
+       if (ret)
+               return ret;
+
+       ret = clk_set_parent(c, cp);
+       c->dev->parent = cp->dev;
+
+       return ret;
+}
+EXPORT_SYMBOL_GPL(imx8m_clk_set_parent);
+
+struct clk_ops imx8m_clk_ops = {
+       .set_rate = imx8m_clk_set_rate,
+       .get_rate = imx8m_clk_get_rate,
+       .enable = imx8m_clk_enable,
+       .disable = imx8m_clk_disable,
+       .set_parent = imx8m_clk_set_parent,
+};
+EXPORT_SYMBOL_GPL(imx8m_clk_ops);
diff --git a/drivers/clk/imx/clk-imx8m.h b/drivers/clk/imx/clk-imx8m.h
new file mode 100644
index 00000000000..7c0892e148d
--- /dev/null
+++ b/drivers/clk/imx/clk-imx8m.h
@@ -0,0 +1,12 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright 2022 Purism SPC
+ */
+
+extern ulong imx8m_clk_get_rate(struct clk *clk);
+extern ulong imx8m_clk_set_rate(struct clk *clk, unsigned long rate);
+extern int imx8m_clk_disable(struct clk *clk);
+extern int imx8m_clk_enable(struct clk *clk);
+extern int imx8m_clk_set_parent(struct clk *clk, struct clk *parent);
+
+extern struct clk_ops imx8m_clk_ops;
diff --git a/drivers/clk/imx/clk-imx8mm.c b/drivers/clk/imx/clk-imx8mm.c
index ab8f9b4d6b9..fb3e4e7d0df 100644
--- a/drivers/clk/imx/clk-imx8mm.c
+++ b/drivers/clk/imx/clk-imx8mm.c
@@ -14,6 +14,7 @@
 #include <dt-bindings/clock/imx8mm-clock.h>
 
 #include "clk.h"
+#include "clk-imx8m.h"
 
 static const char *pll_ref_sels[] = { "clock-osc-24m", "dummy", "dummy", 
"dummy", };
 static const char *dram_pll_bypass_sels[] = {"dram_pll", "dram_pll_ref_sel", };
@@ -90,92 +91,6 @@ static const char *imx8mm_ecspi2_sels[] = {"clock-osc-24m", 
"sys_pll2_200m", "sy
 static const char *imx8mm_ecspi3_sels[] = {"clock-osc-24m", "sys_pll2_200m", 
"sys_pll1_40m", "sys_pll1_160m",
                                           "sys_pll1_800m", "sys_pll3_out", 
"sys_pll2_250m", "audio_pll2_out", };
 
-static ulong imx8mm_clk_get_rate(struct clk *clk)
-{
-       struct clk *c;
-       int ret;
-
-       debug("%s(#%lu)\n", __func__, clk->id);
-
-       ret = clk_get_by_id(clk->id, &c);
-       if (ret)
-               return ret;
-
-       return clk_get_rate(c);
-}
-
-static ulong imx8mm_clk_set_rate(struct clk *clk, unsigned long rate)
-{
-       struct clk *c;
-       int ret;
-
-       debug("%s(#%lu), rate: %lu\n", __func__, clk->id, rate);
-
-       ret = clk_get_by_id(clk->id, &c);
-       if (ret)
-               return ret;
-
-       return clk_set_rate(c, rate);
-}
-
-static int __imx8mm_clk_enable(struct clk *clk, bool enable)
-{
-       struct clk *c;
-       int ret;
-
-       debug("%s(#%lu) en: %d\n", __func__, clk->id, enable);
-
-       ret = clk_get_by_id(clk->id, &c);
-       if (ret)
-               return ret;
-
-       if (enable)
-               ret = clk_enable(c);
-       else
-               ret = clk_disable(c);
-
-       return ret;
-}
-
-static int imx8mm_clk_disable(struct clk *clk)
-{
-       return __imx8mm_clk_enable(clk, 0);
-}
-
-static int imx8mm_clk_enable(struct clk *clk)
-{
-       return __imx8mm_clk_enable(clk, 1);
-}
-
-static int imx8mm_clk_set_parent(struct clk *clk, struct clk *parent)
-{
-       struct clk *c, *cp;
-       int ret;
-
-       debug("%s(#%lu), parent: %lu\n", __func__, clk->id, parent->id);
-
-       ret = clk_get_by_id(clk->id, &c);
-       if (ret)
-               return ret;
-
-       ret = clk_get_by_id(parent->id, &cp);
-       if (ret)
-               return ret;
-
-       ret = clk_set_parent(c, cp);
-       c->dev->parent = cp->dev;
-
-       return ret;
-}
-
-static struct clk_ops imx8mm_clk_ops = {
-       .set_rate = imx8mm_clk_set_rate,
-       .get_rate = imx8mm_clk_get_rate,
-       .enable = imx8mm_clk_enable,
-       .disable = imx8mm_clk_disable,
-       .set_parent = imx8mm_clk_set_parent,
-};
-
 static int imx8mm_clk_probe(struct udevice *dev)
 {
        void __iomem *base;
@@ -420,7 +335,7 @@ U_BOOT_DRIVER(imx8mm_clk) = {
        .name = "clk_imx8mm",
        .id = UCLASS_CLK,
        .of_match = imx8mm_clk_ids,
-       .ops = &imx8mm_clk_ops,
+       .ops = &imx8m_clk_ops,
        .probe = imx8mm_clk_probe,
        .flags = DM_FLAG_PRE_RELOC,
 };
diff --git a/drivers/clk/imx/clk-imx8mn.c b/drivers/clk/imx/clk-imx8mn.c
index c3d60ad057c..08fdcf5d86d 100644
--- a/drivers/clk/imx/clk-imx8mn.c
+++ b/drivers/clk/imx/clk-imx8mn.c
@@ -14,6 +14,7 @@
 #include <dt-bindings/clock/imx8mn-clock.h>
 
 #include "clk.h"
+#include "clk-imx8m.h"
 
 static const char *pll_ref_sels[] = { "clock-osc-24m", "dummy", "dummy", 
"dummy", };
 static const char *dram_pll_bypass_sels[] = {"dram_pll", "dram_pll_ref_sel", };
@@ -98,92 +99,6 @@ static const char * const imx8mn_usb_phy_sels[] = 
{"clock-osc-24m", "sys_pll1_10
                                                "sys_pll2_100m", 
"sys_pll2_200m", "clk_ext2",
                                                "clk_ext3", "audio_pll2_out", };
 
-static ulong imx8mn_clk_get_rate(struct clk *clk)
-{
-       struct clk *c;
-       int ret;
-
-       debug("%s(#%lu)\n", __func__, clk->id);
-
-       ret = clk_get_by_id(clk->id, &c);
-       if (ret)
-               return ret;
-
-       return clk_get_rate(c);
-}
-
-static ulong imx8mn_clk_set_rate(struct clk *clk, unsigned long rate)
-{
-       struct clk *c;
-       int ret;
-
-       debug("%s(#%lu), rate: %lu\n", __func__, clk->id, rate);
-
-       ret = clk_get_by_id(clk->id, &c);
-       if (ret)
-               return ret;
-
-       return clk_set_rate(c, rate);
-}
-
-static int __imx8mn_clk_enable(struct clk *clk, bool enable)
-{
-       struct clk *c;
-       int ret;
-
-       debug("%s(#%lu) en: %d\n", __func__, clk->id, enable);
-
-       ret = clk_get_by_id(clk->id, &c);
-       if (ret)
-               return ret;
-
-       if (enable)
-               ret = clk_enable(c);
-       else
-               ret = clk_disable(c);
-
-       return ret;
-}
-
-static int imx8mn_clk_disable(struct clk *clk)
-{
-       return __imx8mn_clk_enable(clk, 0);
-}
-
-static int imx8mn_clk_enable(struct clk *clk)
-{
-       return __imx8mn_clk_enable(clk, 1);
-}
-
-static int imx8mn_clk_set_parent(struct clk *clk, struct clk *parent)
-{
-       struct clk *c, *cp;
-       int ret;
-
-       debug("%s(#%lu), parent: %lu\n", __func__, clk->id, parent->id);
-
-       ret = clk_get_by_id(clk->id, &c);
-       if (ret)
-               return ret;
-
-       ret = clk_get_by_id(parent->id, &cp);
-       if (ret)
-               return ret;
-
-       ret = clk_set_parent(c, cp);
-       c->dev->parent = cp->dev;
-
-       return ret;
-}
-
-static struct clk_ops imx8mn_clk_ops = {
-       .set_rate = imx8mn_clk_set_rate,
-       .get_rate = imx8mn_clk_get_rate,
-       .enable = imx8mn_clk_enable,
-       .disable = imx8mn_clk_disable,
-       .set_parent = imx8mn_clk_set_parent,
-};
-
 static int imx8mn_clk_probe(struct udevice *dev)
 {
        void __iomem *base;
@@ -431,7 +346,7 @@ U_BOOT_DRIVER(imx8mn_clk) = {
        .name = "clk_imx8mn",
        .id = UCLASS_CLK,
        .of_match = imx8mn_clk_ids,
-       .ops = &imx8mn_clk_ops,
+       .ops = &imx8m_clk_ops,
        .probe = imx8mn_clk_probe,
        .flags = DM_FLAG_PRE_RELOC,
 };
diff --git a/drivers/clk/imx/clk-imx8mp.c b/drivers/clk/imx/clk-imx8mp.c
index 5ccb969da3b..00c0fbcbcb2 100644
--- a/drivers/clk/imx/clk-imx8mp.c
+++ b/drivers/clk/imx/clk-imx8mp.c
@@ -14,6 +14,7 @@
 #include <dt-bindings/clock/imx8mp-clock.h>
 
 #include "clk.h"
+#include "clk-imx8m.h"
 
 static const char *pll_ref_sels[] = { "clock-osc-24m", "dummy", "dummy", 
"dummy", };
 static const char *dram_pll_bypass_sels[] = {"dram_pll", "dram_pll_ref_sel", };
@@ -136,94 +137,6 @@ static const char *imx8mp_enet_phy_ref_sels[] = 
{"clock-osc-24m", "sys_pll2_50m"
 
 static const char *imx8mp_dram_core_sels[] = {"dram_pll_out", "dram_alt_root", 
};
 
-
-static ulong imx8mp_clk_get_rate(struct clk *clk)
-{
-       struct clk *c;
-       int ret;
-
-       debug("%s(#%lu)\n", __func__, clk->id);
-
-       ret = clk_get_by_id(clk->id, &c);
-       if (ret)
-               return ret;
-
-       return clk_get_rate(c);
-}
-
-static ulong imx8mp_clk_set_rate(struct clk *clk, unsigned long rate)
-{
-       struct clk *c;
-       int ret;
-
-       debug("%s(#%lu), rate: %lu\n", __func__, clk->id, rate);
-
-       ret = clk_get_by_id(clk->id, &c);
-       if (ret)
-               return ret;
-
-       return clk_set_rate(c, rate);
-}
-
-static int __imx8mp_clk_enable(struct clk *clk, bool enable)
-{
-       struct clk *c;
-       int ret;
-
-       debug("%s(#%lu) en: %d\n", __func__, clk->id, enable);
-
-       ret = clk_get_by_id(clk->id, &c);
-       if (ret)
-               return ret;
-
-       if (enable)
-               ret = clk_enable(c);
-       else
-               ret = clk_disable(c);
-
-       return ret;
-}
-
-static int imx8mp_clk_disable(struct clk *clk)
-{
-       return __imx8mp_clk_enable(clk, 0);
-}
-
-static int imx8mp_clk_enable(struct clk *clk)
-{
-       return __imx8mp_clk_enable(clk, 1);
-}
-
-static int imx8mp_clk_set_parent(struct clk *clk, struct clk *parent)
-{
-       struct clk *c, *cp;
-       int ret;
-
-       debug("%s(#%lu), parent: %lu\n", __func__, clk->id, parent->id);
-
-       ret = clk_get_by_id(clk->id, &c);
-       if (ret)
-               return ret;
-
-       ret = clk_get_by_id(parent->id, &cp);
-       if (ret)
-               return ret;
-
-       ret = clk_set_parent(c, cp);
-
-       c->dev->parent = cp->dev;
-
-       return ret;
-}
-
-static struct clk_ops imx8mp_clk_ops = {
-       .set_rate = imx8mp_clk_set_rate,
-       .get_rate = imx8mp_clk_get_rate,
-       .enable = imx8mp_clk_enable,
-       .disable = imx8mp_clk_disable,
-       .set_parent = imx8mp_clk_set_parent,
-};
-
 static int imx8mp_clk_probe(struct udevice *dev)
 {
        void __iomem *base;
@@ -364,7 +277,7 @@ U_BOOT_DRIVER(imx8mp_clk) = {
        .name = "clk_imx8mp",
        .id = UCLASS_CLK,
        .of_match = imx8mp_clk_ids,
-       .ops = &imx8mp_clk_ops,
+       .ops = &imx8m_clk_ops,
        .probe = imx8mp_clk_probe,
        .flags = DM_FLAG_PRE_RELOC,
 };
diff --git a/drivers/clk/imx/clk-imx8mq.c b/drivers/clk/imx/clk-imx8mq.c
index e753613f6c3..c3b685dbaab 100644
--- a/drivers/clk/imx/clk-imx8mq.c
+++ b/drivers/clk/imx/clk-imx8mq.c
@@ -15,6 +15,7 @@
 #include <dt-bindings/clock/imx8mq-clock.h>
 
 #include "clk.h"
+#include "clk-imx8m.h"
 
 static const char *pll_ref_sels[] = { "clock-osc-25m", "clock-osc-27m", 
"clock-phy-27m", "dummy", };
 static const char *arm_pll_bypass_sels[] = {"arm_pll", "arm_pll_ref_sel", };
@@ -117,94 +118,6 @@ static const char *pllout_monitor_sels[] = 
{"clock-osc-25m", "clock-osc-27m", "c
                                            "sys_pll2_out_monitor", 
"sys_pll3_out_monitor",
                                            "dummy", "dram_pll_out_monitor", };
 
-static ulong imx8mq_clk_get_rate(struct clk *clk)
-{
-       struct clk *c;
-       int ret;
-
-       debug("%s(#%lu)\n", __func__, clk->id);
-
-       ret = clk_get_by_id(clk->id, &c);
-       if (ret)
-               return ret;
-
-       return clk_get_rate(c);
-}
-
-static ulong imx8mq_clk_set_rate(struct clk *clk, unsigned long rate)
-{
-       struct clk *c;
-       int ret;
-
-       debug("%s(#%lu), rate: %lu\n", __func__, clk->id, rate);
-
-       ret = clk_get_by_id(clk->id, &c);
-       if (ret)
-               return ret;
-
-       return clk_set_rate(c, rate);
-}
-
-static int __imx8mq_clk_enable(struct clk *clk, bool enable)
-{
-       struct clk *c;
-       int ret;
-
-       debug("%s(#%lu) en: %d\n", __func__, clk->id, enable);
-
-       ret = clk_get_by_id(clk->id, &c);
-       if (ret) {
-               debug("%s: clk_get_by_id failed\n", __func__);
-               return ret;
-       }
-
-       if (enable)
-               ret = clk_enable(c);
-       else
-               ret = clk_disable(c);
-
-       return ret;
-}
-
-static int imx8mq_clk_disable(struct clk *clk)
-{
-       return __imx8mq_clk_enable(clk, 0);
-}
-
-static int imx8mq_clk_enable(struct clk *clk)
-{
-       return __imx8mq_clk_enable(clk, 1);
-}
-
-static int imx8mq_clk_set_parent(struct clk *clk, struct clk *parent)
-{
-       struct clk *c, *cp;
-       int ret;
-
-       debug("%s(#%lu), parent: %lu\n", __func__, clk->id, parent->id);
-
-       ret = clk_get_by_id(clk->id, &c);
-       if (ret)
-               return ret;
-
-       ret = clk_get_by_id(parent->id, &cp);
-       if (ret)
-               return ret;
-
-       ret = clk_set_parent(c, cp);
-       c->dev->parent = cp->dev;
-
-       return ret;
-}
-
-static struct clk_ops imx8mq_clk_ops = {
-       .set_rate = imx8mq_clk_set_rate,
-       .get_rate = imx8mq_clk_get_rate,
-       .enable = imx8mq_clk_enable,
-       .disable = imx8mq_clk_disable,
-       .set_parent = imx8mq_clk_set_parent,
-};
-
 static int imx8mq_clk_probe(struct udevice *dev)
 {
        void __iomem *base;
@@ -522,7 +435,7 @@ U_BOOT_DRIVER(imx8mq_clk) = {
        .name = "clk_imx8mq",
        .id = UCLASS_CLK,
        .of_match = imx8mq_clk_ids,
-       .ops = &imx8mq_clk_ops,
+       .ops = &imx8m_clk_ops,
        .probe = imx8mq_clk_probe,
        .flags = DM_FLAG_PRE_RELOC,
 };
-- 
2.25.1

Reply via email to