aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/bcm27xx/patches-5.10/950-0457-drm-vc4-hdmi-Introduce-a-CEC-clock.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/bcm27xx/patches-5.10/950-0457-drm-vc4-hdmi-Introduce-a-CEC-clock.patch')
-rw-r--r--target/linux/bcm27xx/patches-5.10/950-0457-drm-vc4-hdmi-Introduce-a-CEC-clock.patch60
1 files changed, 60 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.10/950-0457-drm-vc4-hdmi-Introduce-a-CEC-clock.patch b/target/linux/bcm27xx/patches-5.10/950-0457-drm-vc4-hdmi-Introduce-a-CEC-clock.patch
new file mode 100644
index 0000000000..52117eec29
--- /dev/null
+++ b/target/linux/bcm27xx/patches-5.10/950-0457-drm-vc4-hdmi-Introduce-a-CEC-clock.patch
@@ -0,0 +1,60 @@
+From b4627f9f36d8af7cb7bf24d8c1daee8b48f12299 Mon Sep 17 00:00:00 2001
+From: Maxime Ripard <maxime@cerno.tech>
+Date: Mon, 11 Jan 2021 15:23:02 +0100
+Subject: [PATCH] drm/vc4: hdmi: Introduce a CEC clock
+
+While the BCM2835 had the CEC clock derived from the HSM clock, the
+BCM2711 has a dedicated parent clock for it.
+
+Let's introduce a separate clock for it so that we can handle both
+cases.
+
+Reviewed-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
+Signed-off-by: Maxime Ripard <maxime@cerno.tech>
+---
+ drivers/gpu/drm/vc4/vc4_hdmi.c | 9 ++++++++-
+ drivers/gpu/drm/vc4/vc4_hdmi.h | 1 +
+ 2 files changed, 9 insertions(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
++++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
+@@ -150,7 +150,7 @@ static void vc4_hdmi_cec_update_clk_div(
+ * Set the clock divider: the hsm_clock rate and this divider
+ * setting will give a 40 kHz CEC clock.
+ */
+- clk_cnt = clk_get_rate(vc4_hdmi->hsm_clock) / CEC_CLOCK_FREQ;
++ clk_cnt = clk_get_rate(vc4_hdmi->cec_clock) / CEC_CLOCK_FREQ;
+ value |= clk_cnt << VC4_HDMI_CEC_DIV_CLK_CNT_SHIFT;
+ HDMI_WRITE(HDMI_CEC_CNTRL_1, value);
+ }
+@@ -1866,6 +1866,7 @@ static int vc4_hdmi_init_resources(struc
+ return PTR_ERR(vc4_hdmi->hsm_clock);
+ }
+ vc4_hdmi->audio_clock = vc4_hdmi->hsm_clock;
++ vc4_hdmi->cec_clock = vc4_hdmi->hsm_clock;
+
+ return 0;
+ }
+@@ -1960,6 +1961,12 @@ static int vc5_hdmi_init_resources(struc
+ return PTR_ERR(vc4_hdmi->audio_clock);
+ }
+
++ vc4_hdmi->cec_clock = devm_clk_get(dev, "cec");
++ if (IS_ERR(vc4_hdmi->cec_clock)) {
++ DRM_ERROR("Failed to get CEC clock\n");
++ return PTR_ERR(vc4_hdmi->cec_clock);
++ }
++
+ vc4_hdmi->reset = devm_reset_control_get(dev, NULL);
+ if (IS_ERR(vc4_hdmi->reset)) {
+ DRM_ERROR("Failed to get HDMI reset line\n");
+--- a/drivers/gpu/drm/vc4/vc4_hdmi.h
++++ b/drivers/gpu/drm/vc4/vc4_hdmi.h
+@@ -154,6 +154,7 @@ struct vc4_hdmi {
+ bool cec_tx_ok;
+ bool cec_irq_was_rx;
+
++ struct clk *cec_clock;
+ struct clk *pixel_clock;
+ struct clk *hsm_clock;
+ struct clk *audio_clock;