]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
clk: rockchip: Add CLK_SET_RATE_PARENT to the HDMI reference clock on rk3568
authorSascha Hauer <s.hauer@pengutronix.de>
Wed, 26 Jan 2022 14:55:47 +0000 (15:55 +0100)
committerHeiko Stuebner <heiko@sntech.de>
Tue, 8 Feb 2022 11:56:34 +0000 (12:56 +0100)
On the rk3568 we have this (simplified) situation:

 .--------.     .-----.    .---------.
-| hpll   |--.--| /n  |----|dclk_vop0|-
 `--------´  |  `-----´    `---------´
             |  .-----.    .---------.
             `--| /m  |----|dclk_vop1|-
             |  `-----´    `---------´
             |             .---------.
             `-------------|hdmi_ref |-
                           `---------´

For the HDMI to work the HDMI reference clock needs to be the same as the
pixel clock which means the dividers have be set to one. The last patch removed
the CLK_SET_RATE_PARENT flag from the pixel clocks which means the hpll is not
changed on pixel clock changes. In order to allow the HDMI controller to
set a suitable PLL rate we now add the CLK_SET_RATE_PARENT flag to the
HDMI reference clock. With this the flow becomes:

1) HDMI controller driver sets the rate to its pixel clock which means
   hpll is set to the pixel clock
2) VOP2 driver sets dclk_vop[012] to the pixel clock. As this can't change
   the hpll clock anymore this means only the divider is adjusted to the
   desired value of dividing by one.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Link: https://lore.kernel.org/r/20220126145549.617165-26-s.hauer@pengutronix.de
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
drivers/clk/rockchip/clk-rk3568.c

index 7687c62d1fa84e1a2f276e0c13bd7e777e0cec5f..63dfbeeeb06d9297276ed37eca4f6277bca188a8 100644 (file)
@@ -1568,7 +1568,7 @@ static struct rockchip_clk_branch rk3568_clk_pmu_branches[] __initdata = {
                        RK3568_PMU_CLKGATE_CON(2), 14, GFLAGS),
        GATE(XIN_OSC0_EDPPHY_G, "xin_osc0_edpphy_g", "xin24m", 0,
                        RK3568_PMU_CLKGATE_CON(2), 15, GFLAGS),
-       MUX(CLK_HDMI_REF, "clk_hdmi_ref", clk_hdmi_ref_p, 0,
+       MUX(CLK_HDMI_REF, "clk_hdmi_ref", clk_hdmi_ref_p, CLK_SET_RATE_PARENT,
                        RK3568_PMU_CLKSEL_CON(8), 7, 1, MFLAGS),
 };