summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Shih <[email protected]>2026-04-16 16:23:10 +0800
committerDavid Lechner <[email protected]>2026-04-17 17:04:56 -0500
commitad3ea453d8eddd09d924b7fb8ae054ff8f290abb (patch)
tree5a26f3a1ee9d852cf0bef03edf1fe807ef5b3804
parent5576522219d40ffeb7918dd04263f5d925df9d1d (diff)
clk: mediatek: fix parent rate lookup for fixed PLL clocks
The refactoring in commit 00d0ff7f81bf ("clk: mediatek: refactor parent rate lookup functions") introduced a regression where fixed PLL clocks using mtk_clk_fixed_pll_ops are not properly recognized as valid parents in the CLK_PARENT_APMIXED case. Fixed PLL clocks are implemented using mtk_clk_fixed_pll_ops instead of mtk_clk_apmixedsys_ops, but they can also serve as parent clocks in the APMIXED domain. The parent lookup function needs to check for both driver ops to properly resolve the parent clock device. Add mtk_clk_fixed_pll_ops checks alongside mtk_clk_apmixedsys_ops checks in mtk_find_parent_rate() to restore support for fixed PLL parent clocks. Fixes: 00d0ff7f81bf ("clk: mediatek: refactor parent rate lookup functions") Signed-off-by: Sam Shih <[email protected]> Signed-off-by: Weijie Gao <[email protected]> Link: https://patch.msgid.link/923e50db696d910803828cd26b0ca0fbbfe11570.1776326933.git.weijie.gao@mediatek.com Signed-off-by: David Lechner <[email protected]>
-rw-r--r--drivers/clk/mediatek/clk-mtk.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/clk/mediatek/clk-mtk.c b/drivers/clk/mediatek/clk-mtk.c
index 3557aeac3d5..d405eeab6f2 100644
--- a/drivers/clk/mediatek/clk-mtk.c
+++ b/drivers/clk/mediatek/clk-mtk.c
@@ -216,11 +216,14 @@ static ulong mtk_find_parent_rate(struct mtk_clk_priv *priv, struct clk *clk,
switch (flags & CLK_PARENT_MASK) {
case CLK_PARENT_APMIXED:
/* APMIXEDSYS can be parent or grandparent. */
- if (dev_get_driver_ops(clk->dev) == &mtk_clk_apmixedsys_ops)
+ if (dev_get_driver_ops(clk->dev) == &mtk_clk_apmixedsys_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)
+ 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)
+ 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;