hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
....@@ -745,10 +745,12 @@
745745 do_div(vco, (nd * (no_a == 1 ? no_b : no_a) * no_d * 2));
746746 }
747747
748
- inno->pixclock = vco;
749
- dev_dbg(inno->dev, "%s rate %lu\n", __func__, inno->pixclock);
748
+ inno->pixclock = DIV_ROUND_CLOSEST((unsigned long)vco, 1000) * 1000;
750749
751
- return vco;
750
+ dev_dbg(inno->dev, "%s rate %lu vco %llu\n",
751
+ __func__, inno->pixclock, vco);
752
+
753
+ return inno->pixclock;
752754 }
753755
754756 static long inno_hdmi_phy_rk3328_clk_round_rate(struct clk_hw *hw,
....@@ -790,8 +792,8 @@
790792 RK3328_PRE_PLL_POWER_DOWN);
791793
792794 /* Configure pre-pll */
793
- inno_update_bits(inno, 0xa0, RK3228_PCLK_VCO_DIV_5_MASK,
794
- RK3228_PCLK_VCO_DIV_5(cfg->vco_div_5_en));
795
+ inno_update_bits(inno, 0xa0, RK3328_PCLK_VCO_DIV_5_MASK,
796
+ RK3328_PCLK_VCO_DIV_5(cfg->vco_div_5_en));
795797 inno_write(inno, 0xa1, RK3328_PRE_PLL_PRE_DIV(cfg->prediv));
796798
797799 val = RK3328_SPREAD_SPECTRUM_MOD_DISABLE;
....@@ -1021,9 +1023,10 @@
10211023
10221024 inno_write(inno, 0xac, RK3328_POST_PLL_FB_DIV_7_0(cfg->fbdiv));
10231025 if (cfg->postdiv == 1) {
1024
- inno_write(inno, 0xaa, RK3328_POST_PLL_REFCLK_SEL_TMDS);
10251026 inno_write(inno, 0xab, RK3328_POST_PLL_FB_DIV_8(cfg->fbdiv) |
10261027 RK3328_POST_PLL_PRE_DIV(cfg->prediv));
1028
+ inno_write(inno, 0xaa, RK3328_POST_PLL_REFCLK_SEL_TMDS |
1029
+ RK3328_POST_PLL_POWER_DOWN);
10271030 } else {
10281031 v = (cfg->postdiv / 2) - 1;
10291032 v &= RK3328_POST_PLL_POST_DIV_MASK;
....@@ -1031,7 +1034,8 @@
10311034 inno_write(inno, 0xab, RK3328_POST_PLL_FB_DIV_8(cfg->fbdiv) |
10321035 RK3328_POST_PLL_PRE_DIV(cfg->prediv));
10331036 inno_write(inno, 0xaa, RK3328_POST_PLL_POST_DIV_ENABLE |
1034
- RK3328_POST_PLL_REFCLK_SEL_TMDS);
1037
+ RK3328_POST_PLL_REFCLK_SEL_TMDS |
1038
+ RK3328_POST_PLL_POWER_DOWN);
10351039 }
10361040
10371041 for (v = 0; v < 14; v++)