drm/vc4: hdmi: Prevent clock unbalance
authorMaxime Ripard <maxime@cerno.tech>
Fri, 7 May 2021 15:05:09 +0000 (17:05 +0200)
committerMaxime Ripard <maxime@cerno.tech>
Mon, 24 May 2021 12:42:22 +0000 (14:42 +0200)
Since we fixed the hooks to disable the encoder at boot, we now have an
unbalanced clk_disable call at boot since we never enabled them in the
first place.

Let's mimic the state of the hardware and enable the clocks at boot if
the controller is enabled to get the use-count right.

Cc: <stable@vger.kernel.org> # v5.10+
Fixes: 09c438139b8f ("drm/vc4: hdmi: Implement finer-grained hooks")
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
Reviewed-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210507150515.257424-7-maxime@cerno.tech
drivers/gpu/drm/vc4/vc4_hdmi.c

index c27b287d2053eafdb84936a76f8630d6df4cd08f..df9bf85edbea590889ddd9ae659e9dea0c864c3a 100644 (file)
@@ -2051,6 +2051,14 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data)
        if (vc4_hdmi->variant->reset)
                vc4_hdmi->variant->reset(vc4_hdmi);
 
+       if ((of_device_is_compatible(dev->of_node, "brcm,bcm2711-hdmi0") ||
+            of_device_is_compatible(dev->of_node, "brcm,bcm2711-hdmi1")) &&
+           HDMI_READ(HDMI_VID_CTL) & VC4_HD_VID_CTL_ENABLE) {
+               clk_prepare_enable(vc4_hdmi->pixel_clock);
+               clk_prepare_enable(vc4_hdmi->hsm_clock);
+               clk_prepare_enable(vc4_hdmi->pixel_bvb_clock);
+       }
+
        pm_runtime_enable(dev);
 
        drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_TMDS);