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 0148/1039] drm/dp: Dont read back backlight mode in drm_edp_backlight_enable()
    Date
    From: Lyude Paul <lyude@redhat.com>

    [ Upstream commit 646596485e1ed2182adf293dfd5aec4a96c46330 ]

    As it turns out, apparently some machines will actually leave additional
    backlight functionality like dynamic backlight control on before the OS
    loads. Currently we don't take care to disable unsupported features when
    writing back the backlight mode, which can lead to some rather strange
    looking behavior when adjusting the backlight.

    So, let's fix this by just not reading back the current backlight mode on
    initial enable. I don't think there should really be any downsides to this,
    and this will ensure we don't leave any unsupported functionality enabled.

    This should fix at least one (but not all) of the issues seen with DPCD
    backlight support on fi-bdw-samus

    v5:
    * Just avoid reading back DPCD register - Doug Anderson

    Signed-off-by: Lyude Paul <lyude@redhat.com>
    Fixes: 867cf9cd73c3 ("drm/dp: Extract i915's eDP backlight code into DRM helpers")
    Reviewed-by: Douglas Anderson <dianders@chromium.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20211105183342.130810-4-lyude@redhat.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/gpu/drm/drm_dp_helper.c | 40 ++++++++++-----------------------
    1 file changed, 12 insertions(+), 28 deletions(-)

    diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c
    index 4d0d1e8e51fa7..db7db839e42d1 100644
    --- a/drivers/gpu/drm/drm_dp_helper.c
    +++ b/drivers/gpu/drm/drm_dp_helper.c
    @@ -3246,27 +3246,13 @@ int drm_edp_backlight_enable(struct drm_dp_aux *aux, const struct drm_edp_backli
    const u16 level)
    {
    int ret;
    - u8 dpcd_buf, new_dpcd_buf;
    + u8 dpcd_buf = DP_EDP_BACKLIGHT_CONTROL_MODE_DPCD;

    - ret = drm_dp_dpcd_readb(aux, DP_EDP_BACKLIGHT_MODE_SET_REGISTER, &dpcd_buf);
    - if (ret != 1) {
    - drm_dbg_kms(aux->drm_dev,
    - "%s: Failed to read backlight mode: %d\n", aux->name, ret);
    - return ret < 0 ? ret : -EIO;
    - }
    -
    - new_dpcd_buf = dpcd_buf;
    -
    - if ((dpcd_buf & DP_EDP_BACKLIGHT_CONTROL_MODE_MASK) != DP_EDP_BACKLIGHT_CONTROL_MODE_DPCD) {
    - new_dpcd_buf &= ~DP_EDP_BACKLIGHT_CONTROL_MODE_MASK;
    - new_dpcd_buf |= DP_EDP_BACKLIGHT_CONTROL_MODE_DPCD;
    -
    - if (bl->pwmgen_bit_count) {
    - ret = drm_dp_dpcd_writeb(aux, DP_EDP_PWMGEN_BIT_COUNT, bl->pwmgen_bit_count);
    - if (ret != 1)
    - drm_dbg_kms(aux->drm_dev, "%s: Failed to write aux pwmgen bit count: %d\n",
    - aux->name, ret);
    - }
    + if (bl->pwmgen_bit_count) {
    + ret = drm_dp_dpcd_writeb(aux, DP_EDP_PWMGEN_BIT_COUNT, bl->pwmgen_bit_count);
    + if (ret != 1)
    + drm_dbg_kms(aux->drm_dev, "%s: Failed to write aux pwmgen bit count: %d\n",
    + aux->name, ret);
    }

    if (bl->pwm_freq_pre_divider) {
    @@ -3276,16 +3262,14 @@ int drm_edp_backlight_enable(struct drm_dp_aux *aux, const struct drm_edp_backli
    "%s: Failed to write aux backlight frequency: %d\n",
    aux->name, ret);
    else
    - new_dpcd_buf |= DP_EDP_BACKLIGHT_FREQ_AUX_SET_ENABLE;
    + dpcd_buf |= DP_EDP_BACKLIGHT_FREQ_AUX_SET_ENABLE;
    }

    - if (new_dpcd_buf != dpcd_buf) {
    - ret = drm_dp_dpcd_writeb(aux, DP_EDP_BACKLIGHT_MODE_SET_REGISTER, new_dpcd_buf);
    - if (ret != 1) {
    - drm_dbg_kms(aux->drm_dev, "%s: Failed to write aux backlight mode: %d\n",
    - aux->name, ret);
    - return ret < 0 ? ret : -EIO;
    - }
    + ret = drm_dp_dpcd_writeb(aux, DP_EDP_BACKLIGHT_MODE_SET_REGISTER, dpcd_buf);
    + if (ret != 1) {
    + drm_dbg_kms(aux->drm_dev, "%s: Failed to write aux backlight mode: %d\n",
    + aux->name, ret);
    + return ret < 0 ? ret : -EIO;
    }

    ret = drm_edp_backlight_set_level(aux, bl, level);
    --
    2.34.1


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