]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
clk: mediatek: add grandparent variable in mtk_find_parent_rate()
authorSam Shih <sam.shih@mediatek.com>
Thu, 16 Apr 2026 08:23:05 +0000 (16:23 +0800)
committerDavid Lechner <dlechner@baylibre.com>
Fri, 17 Apr 2026 22:05:54 +0000 (17:05 -0500)
Add grandparent device variable in mtk_find_parent_rate() to allow
the grandparent device being reused instead of calling
dev_get_parent(priv->parent) multiple times.

Signed-off-by: Sam Shih <sam.shih@mediatek.com>
Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
Link: https://patch.msgid.link/726ccc71593f6c224c13142a0bd4a9f6f0f81445.1776326933.git.weijie.gao@mediatek.com
Signed-off-by: David Lechner <dlechner@baylibre.com>
drivers/clk/mediatek/clk-mtk.c

index d405eeab6f2d9e4bef4aa6517cccaeb136357030..a74c039b9d1228928eabc779b6ef33df5b0ffedc 100644 (file)
@@ -217,17 +217,20 @@ static ulong mtk_find_parent_rate(struct mtk_clk_priv *priv, struct clk *clk,
        case CLK_PARENT_APMIXED:
                /* APMIXEDSYS can be parent or grandparent. */
                if (dev_get_driver_ops(clk->dev) == &mtk_clk_apmixedsys_ops ||
-                   dev_get_driver_ops(clk->dev) == &mtk_clk_fixed_pll_ops)
+                   dev_get_driver_ops(clk->dev) == &mtk_clk_fixed_pll_ops) {
                        parent_dev = clk->dev;
-               else if (dev_get_driver_ops(priv->parent) == &mtk_clk_apmixedsys_ops ||
-                        dev_get_driver_ops(priv->parent) == &mtk_clk_fixed_pll_ops)
+               else if (dev_get_driver_ops(priv->parent) == &mtk_clk_apmixedsys_ops ||
+                          dev_get_driver_ops(priv->parent) == &mtk_clk_fixed_pll_ops) {
                        parent_dev = priv->parent;
-               else if (dev_get_driver_ops(dev_get_parent(priv->parent)) == &mtk_clk_apmixedsys_ops ||
-                        dev_get_driver_ops(dev_get_parent(priv->parent)) == &mtk_clk_fixed_pll_ops)
-                       parent_dev = dev_get_parent(priv->parent);
-               else
-                       return -EINVAL;
-
+               } else {
+                       struct udevice *grandparent_dev = dev_get_parent(priv->parent);
+
+                       if (dev_get_driver_ops(grandparent_dev) == &mtk_clk_apmixedsys_ops ||
+                           dev_get_driver_ops(grandparent_dev) == &mtk_clk_fixed_pll_ops)
+                               parent_dev = grandparent_dev;
+                       else
+                               return -EINVAL;
+               }
                break;
        case CLK_PARENT_TOPCKGEN:
                if (dev_get_driver_ops(clk->dev) == &mtk_clk_topckgen_ops)