lkml.org 
[lkml]   [2022]   [Jun]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.18 378/879] drm/bridge: it6505: Send DPCD SET_POWER to downstream
    Date
    From: Pin-Yen Lin <treapking@chromium.org>

    [ Upstream commit 46ca7da7f1e8592af6059419176dd58c10dcdb5b ]

    Send DPCD SET_POWER command to downstream in .atomic_disable to make the
    downstream monitor enter the power down mode, so the device suspend won't
    be affected.

    Fixes: b5c84a9edcd418 ("drm/bridge: add it6505 driver")
    Signed-off-by: Pin-Yen Lin <treapking@chromium.org>
    Signed-off-by: Robert Foss <robert.foss@linaro.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20220425134424.1150965-1-treapking@chromium.org
    Reviewed-by: Robert Foss <robert.foss@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/gpu/drm/bridge/ite-it6505.c | 29 ++++++++++++++++++-----------
    1 file changed, 18 insertions(+), 11 deletions(-)

    diff --git a/drivers/gpu/drm/bridge/ite-it6505.c b/drivers/gpu/drm/bridge/ite-it6505.c
    index f2f101220ade..c54664677172 100644
    --- a/drivers/gpu/drm/bridge/ite-it6505.c
    +++ b/drivers/gpu/drm/bridge/ite-it6505.c
    @@ -737,8 +737,9 @@ static int it6505_drm_dp_link_probe(struct drm_dp_aux *aux,
    return 0;
    }

    -static int it6505_drm_dp_link_power_up(struct drm_dp_aux *aux,
    - struct it6505_drm_dp_link *link)
    +static int it6505_drm_dp_link_set_power(struct drm_dp_aux *aux,
    + struct it6505_drm_dp_link *link,
    + u8 mode)
    {
    u8 value;
    int err;
    @@ -752,18 +753,20 @@ static int it6505_drm_dp_link_power_up(struct drm_dp_aux *aux,
    return err;

    value &= ~DP_SET_POWER_MASK;
    - value |= DP_SET_POWER_D0;
    + value |= mode;

    err = drm_dp_dpcd_writeb(aux, DP_SET_POWER, value);
    if (err < 0)
    return err;

    - /*
    - * According to the DP 1.1 specification, a "Sink Device must exit the
    - * power saving state within 1 ms" (Section 2.5.3.1, Table 5-52, "Sink
    - * Control Field" (register 0x600).
    - */
    - usleep_range(1000, 2000);
    + if (mode == DP_SET_POWER_D0) {
    + /*
    + * According to the DP 1.1 specification, a "Sink Device must
    + * exit the power saving state within 1 ms" (Section 2.5.3.1,
    + * Table 5-52, "Sink Control Field" (register 0x600).
    + */
    + usleep_range(1000, 2000);
    + }

    return 0;
    }
    @@ -2624,7 +2627,8 @@ static enum drm_connector_status it6505_detect(struct it6505 *it6505)
    if (it6505_get_sink_hpd_status(it6505)) {
    it6505_aux_on(it6505);
    it6505_drm_dp_link_probe(&it6505->aux, &it6505->link);
    - it6505_drm_dp_link_power_up(&it6505->aux, &it6505->link);
    + it6505_drm_dp_link_set_power(&it6505->aux, &it6505->link,
    + DP_SET_POWER_D0);
    it6505->auto_train_retry = AUTO_TRAIN_RETRY;

    if (it6505->dpcd[0] == 0) {
    @@ -2960,8 +2964,11 @@ static void it6505_bridge_atomic_disable(struct drm_bridge *bridge,

    DRM_DEV_DEBUG_DRIVER(dev, "start");

    - if (it6505->powered)
    + if (it6505->powered) {
    it6505_video_disable(it6505);
    + it6505_drm_dp_link_set_power(&it6505->aux, &it6505->link,
    + DP_SET_POWER_D3);
    + }
    }

    static enum drm_connector_status
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-06-08 02:19    [W:3.070 / U:0.108 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site