]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
clk: mediatek: add support for gate ID at offset
authorChristian Marangi <ansuelsmth@gmail.com>
Fri, 28 Jun 2024 17:40:49 +0000 (19:40 +0200)
committerTom Rini <trini@konsulko.com>
Thu, 1 Aug 2024 21:32:18 +0000 (15:32 -0600)
Add support to clk_gate ops to reference the clk ID at an offset by
using the just introduced gates_offs value from the unified muxes +
gates implementation.

Gate clock that doesn't have gates_offs set won't be affected as the
offset will simply be 0 and won't be offset of any value.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
drivers/clk/mediatek/clk-mtk.c

index 986e73542d83c5898627f0efb1e04643665b5dc0..1d5ae8f236f37e4ce96fc333cbcfb5f7bb878b56 100644 (file)
@@ -530,8 +530,12 @@ static int mtk_gate_enable(void __iomem *base, const struct mtk_gate *gate)
 static int mtk_clk_gate_enable(struct clk *clk)
 {
        struct mtk_cg_priv *priv = dev_get_priv(clk->dev);
-       const struct mtk_gate *gate = &priv->gates[clk->id];
+       const struct mtk_gate *gate;
+
+       if (clk->id < priv->tree->gates_offs)
+               return -EINVAL;
 
+       gate = &priv->gates[clk->id - priv->tree->gates_offs];
        return mtk_gate_enable(priv->base, gate);
 }
 
@@ -576,8 +580,12 @@ static int mtk_gate_disable(void __iomem *base, const struct mtk_gate *gate)
 static int mtk_clk_gate_disable(struct clk *clk)
 {
        struct mtk_cg_priv *priv = dev_get_priv(clk->dev);
-       const struct mtk_gate *gate = &priv->gates[clk->id];
+       const struct mtk_gate *gate;
 
+       if (clk->id < priv->tree->gates_offs)
+               return -EINVAL;
+
+       gate = &priv->gates[clk->id - priv->tree->gates_offs];
        return mtk_gate_disable(priv->base, gate);
 }
 
@@ -597,8 +605,12 @@ static int mtk_clk_infrasys_disable(struct clk *clk)
 static ulong mtk_clk_gate_get_rate(struct clk *clk)
 {
        struct mtk_cg_priv *priv = dev_get_priv(clk->dev);
-       const struct mtk_gate *gate = &priv->gates[clk->id];
+       const struct mtk_gate *gate;
+
+       if (clk->id < priv->tree->gates_offs)
+               return -EINVAL;
 
+       gate = &priv->gates[clk->id - priv->tree->gates_offs];
        /*
         * Assume xtal_rate to be declared if some gates have
         * XTAL as parent