lkml.org 
[lkml]   [2022]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.16 0908/1039] drm/vc4: hdmi: Make sure the device is powered with CEC
    Date
    From: Maxime Ripard <maxime@cerno.tech>

    commit 20b0dfa86bef0e80b41b0e5ac38b92f23b6f27f9 upstream.

    Similarly to what we encountered with the detect hook with DRM, nothing
    actually prevents any of the CEC callback from being run while the HDMI
    output is disabled.

    However, this is an issue since any register access to the controller
    when it's powered down will result in a silent hang.

    Let's make sure we run the runtime_pm hooks when the CEC adapter is
    opened and closed by the userspace to avoid that issue.

    Fixes: 15b4511a4af6 ("drm/vc4: add HDMI CEC support")
    Reviewed-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
    Signed-off-by: Maxime Ripard <maxime@cerno.tech>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210819135931.895976-6-maxime@cerno.tech
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/gpu/drm/vc4/vc4_hdmi.c | 10 +++++++++-
    1 file changed, 9 insertions(+), 1 deletion(-)

    --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
    +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
    @@ -1736,8 +1736,14 @@ static int vc4_hdmi_cec_adap_enable(stru
    struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
    /* clock period in microseconds */
    const u32 usecs = 1000000 / CEC_CLOCK_FREQ;
    - u32 val = HDMI_READ(HDMI_CEC_CNTRL_5);
    + u32 val;
    + int ret;

    + ret = pm_runtime_resume_and_get(&vc4_hdmi->pdev->dev);
    + if (ret)
    + return ret;
    +
    + val = HDMI_READ(HDMI_CEC_CNTRL_5);
    val &= ~(VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET |
    VC4_HDMI_CEC_CNT_TO_4700_US_MASK |
    VC4_HDMI_CEC_CNT_TO_4500_US_MASK);
    @@ -1883,6 +1889,8 @@ static int vc4_hdmi_cec_init(struct vc4_
    if (ret < 0)
    goto err_remove_handlers;

    + pm_runtime_put(&vc4_hdmi->pdev->dev);
    +
    return 0;

    err_remove_handlers:

    \
     
     \ /
      Last update: 2022-01-25 04:09    [W:2.874 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site