cacb29d17a389cb0a6352ccbf30db54d4dc1015e
[openwrt/staging/dangole.git] /
1 From ea4d08578d2e002ce01a2f6913c78fbff8195985 Mon Sep 17 00:00:00 2001
2 From: Maxime Ripard <maxime@cerno.tech>
3 Date: Tue, 29 Jun 2021 11:41:57 +0200
4 Subject: [PATCH] drm/vc4: hdmi: Make sure the device is powered with
5 CEC
6
7 Similarly to what we encountered with the detect hook with DRM, nothing
8 actually prevents any of the CEC callback from being run while the HDMI
9 output is disabled.
10
11 However, this is an issue since any register access to the controller
12 when it's powered down will result in a silent hang.
13
14 Let's make sure we run the runtime_pm hooks when the CEC adapter is
15 opened and closed by the userspace to avoid that issue.
16
17 Fixes: 15b4511a4af6 ("drm/vc4: add HDMI CEC support")
18 Signed-off-by: Maxime Ripard <maxime@cerno.tech>
19 ---
20 drivers/gpu/drm/vc4/vc4_hdmi.c | 7 +++++++
21 1 file changed, 7 insertions(+)
22
23 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
24 +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
25 @@ -1761,6 +1761,11 @@ static int vc4_hdmi_cec_enable(struct ce
26 /* clock period in microseconds */
27 const u32 usecs = 1000000 / CEC_CLOCK_FREQ;
28 u32 val = HDMI_READ(HDMI_CEC_CNTRL_5);
29 + int ret;
30 +
31 + ret = pm_runtime_resume_and_get(&vc4_hdmi->pdev->dev);
32 + if (ret)
33 + return ret;
34
35 val &= ~(VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET |
36 VC4_HDMI_CEC_CNT_TO_4700_US_MASK |
37 @@ -1804,6 +1809,8 @@ static int vc4_hdmi_cec_disable(struct c
38 HDMI_WRITE(HDMI_CEC_CNTRL_5, HDMI_READ(HDMI_CEC_CNTRL_5) |
39 VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET);
40
41 + pm_runtime_put(&vc4_hdmi->pdev->dev);
42 +
43 return 0;
44 }
45