summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Shih <[email protected]>2026-04-16 16:23:05 +0800
committerDavid Lechner <[email protected]>2026-04-17 17:05:54 -0500
commit374cb8a28840e54f70463ab6829eb641ab6cdc9f (patch)
tree43dc28d14fa800bc0965628fdb492685806d70da
parentad3ea453d8eddd09d924b7fb8ae054ff8f290abb (diff)
clk: mediatek: add grandparent variable in mtk_find_parent_rate()
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 <[email protected]> Signed-off-by: Weijie Gao <[email protected]> Link: https://patch.msgid.link/726ccc71593f6c224c13142a0bd4a9f6f0f81445.1776326933.git.weijie.gao@mediatek.com Signed-off-by: David Lechner <[email protected]>
-rw-r--r--drivers/clk/mediatek/clk-mtk.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/drivers/clk/mediatek/clk-mtk.c b/drivers/clk/mediatek/clk-mtk.c
index d405eeab6f2..a74c039b9d1 100644
--- a/drivers/clk/mediatek/clk-mtk.c
+++ b/drivers/clk/mediatek/clk-mtk.c
@@ -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)