]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/vc4: hdmi: Prevent clock unbalance
authorMaxime Ripard <maxime@cerno.tech>
Fri, 7 May 2021 15:05:09 +0000 (17:05 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 19 Jul 2021 08:01:16 +0000 (10:01 +0200)
commit 5b006000423667ef0f55721fc93e477b31f22d28 upstream.

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
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/gpu/drm/vc4/vc4_hdmi.c

index 23e7cfd987bb069e4d73d7a43128a13c4d5fc9da..188b74c9e9fff0e418ffa06faa036733e618016a 100644 (file)
@@ -2012,6 +2012,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);