52117eec2906e18f3488047a1ba81d2fc181259e
[openwrt/staging/chunkeey.git] / target / linux / bcm27xx / patches-5.10 / 950-0457-drm-vc4-hdmi-Introduce-a-CEC-clock.patch
1 From b4627f9f36d8af7cb7bf24d8c1daee8b48f12299 Mon Sep 17 00:00:00 2001
2 From: Maxime Ripard <maxime@cerno.tech>
3 Date: Mon, 11 Jan 2021 15:23:02 +0100
4 Subject: [PATCH] drm/vc4: hdmi: Introduce a CEC clock
5
6 While the BCM2835 had the CEC clock derived from the HSM clock, the
7 BCM2711 has a dedicated parent clock for it.
8
9 Let's introduce a separate clock for it so that we can handle both
10 cases.
11
12 Reviewed-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
13 Signed-off-by: Maxime Ripard <maxime@cerno.tech>
14 ---
15 drivers/gpu/drm/vc4/vc4_hdmi.c | 9 ++++++++-
16 drivers/gpu/drm/vc4/vc4_hdmi.h | 1 +
17 2 files changed, 9 insertions(+), 1 deletion(-)
18
19 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
20 +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
21 @@ -150,7 +150,7 @@ static void vc4_hdmi_cec_update_clk_div(
22 * Set the clock divider: the hsm_clock rate and this divider
23 * setting will give a 40 kHz CEC clock.
24 */
25 - clk_cnt = clk_get_rate(vc4_hdmi->hsm_clock) / CEC_CLOCK_FREQ;
26 + clk_cnt = clk_get_rate(vc4_hdmi->cec_clock) / CEC_CLOCK_FREQ;
27 value |= clk_cnt << VC4_HDMI_CEC_DIV_CLK_CNT_SHIFT;
28 HDMI_WRITE(HDMI_CEC_CNTRL_1, value);
29 }
30 @@ -1866,6 +1866,7 @@ static int vc4_hdmi_init_resources(struc
31 return PTR_ERR(vc4_hdmi->hsm_clock);
32 }
33 vc4_hdmi->audio_clock = vc4_hdmi->hsm_clock;
34 + vc4_hdmi->cec_clock = vc4_hdmi->hsm_clock;
35
36 return 0;
37 }
38 @@ -1960,6 +1961,12 @@ static int vc5_hdmi_init_resources(struc
39 return PTR_ERR(vc4_hdmi->audio_clock);
40 }
41
42 + vc4_hdmi->cec_clock = devm_clk_get(dev, "cec");
43 + if (IS_ERR(vc4_hdmi->cec_clock)) {
44 + DRM_ERROR("Failed to get CEC clock\n");
45 + return PTR_ERR(vc4_hdmi->cec_clock);
46 + }
47 +
48 vc4_hdmi->reset = devm_reset_control_get(dev, NULL);
49 if (IS_ERR(vc4_hdmi->reset)) {
50 DRM_ERROR("Failed to get HDMI reset line\n");
51 --- a/drivers/gpu/drm/vc4/vc4_hdmi.h
52 +++ b/drivers/gpu/drm/vc4/vc4_hdmi.h
53 @@ -154,6 +154,7 @@ struct vc4_hdmi {
54 bool cec_tx_ok;
55 bool cec_irq_was_rx;
56
57 + struct clk *cec_clock;
58 struct clk *pixel_clock;
59 struct clk *hsm_clock;
60 struct clk *audio_clock;