This matches how VPLL is configured under Linux and avoid weird
behaviors when VPLL is reconfigured under Linux.

Signed-off-by: Dang Huynh <danc...@riseup.net>
---
 drivers/clk/rockchip/clk_rk3568.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/clk/rockchip/clk_rk3568.c 
b/drivers/clk/rockchip/clk_rk3568.c
index 
533031caead6818fe41774c9efee969fdd428dbc..cd0e24d77dcc5ce69b75f23eb6d62582b452a986
 100644
--- a/drivers/clk/rockchip/clk_rk3568.c
+++ b/drivers/clk/rockchip/clk_rk3568.c
@@ -1820,7 +1820,11 @@ static ulong rk3568_dclk_vop_set_clk(struct 
rk3568_clk_priv *priv,
                             ((div - 1) << DCLK0_VOP_DIV_SHIFT));
                rk3568_pmu_pll_set_rate(priv, HPLL, div * rate);
        } else if (sel == DCLK_VOP_SEL_VPLL) {
-               div = DIV_ROUND_UP(RK3568_VOP_PLL_LIMIT_FREQ, rate);
+               if (priv->vpll_hz)
+                       div = DIV_ROUND_UP(priv->vpll_hz, rate);
+               else
+                       div = DIV_ROUND_UP(RK3568_VOP_PLL_LIMIT_FREQ, rate);
+
                rk_clrsetreg(&cru->clksel_con[conid],
                             DCLK0_VOP_DIV_MASK | DCLK0_VOP_SEL_MASK,
                             (DCLK_VOP_SEL_VPLL << DCLK0_VOP_SEL_SHIFT) |

-- 
2.49.0

Reply via email to