From: Perr Yuan <pyuan@redhat.com>
To: Lyude Paul <lyude@redhat.com>, intel-gfx@lists.freedesktop.org
Cc: David Airlie <airlied@linux.ie>,
linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org
Subject: Re: [v2] drm/i915: Assume 100% brightness when not in DPCD control mode
Date: Mon, 23 Dec 2019 02:17:54 -0500 [thread overview]
Message-ID: <690de0cf-362b-c826-e607-e12fc403aca9@redhat.com> (raw)
In-Reply-To: <20191203224236.230930-1-lyude@redhat.com>
On 12/3/19 5:42 PM, Lyude Paul wrote:
> Currently we always determine the initial panel brightness level by
> simply reading the value from DP_EDP_BACKLIGHT_BRIGHTNESS_MSB/LSB. This
> seems wrong though, because if the panel is not currently in DPCD
> control mode there's not really any reason why there would be any
> brightness value programmed in the first place.
>
> This appears to be the case on the Lenovo ThinkPad X1 Extreme 2nd
> Generation, where the default value in these registers is always 0 on
> boot despite the fact the panel runs at max brightness by default.
> Getting the initial brightness value correct here is important as well,
> since the panel on this laptop doesn't behave well if it's ever put into
> DPCD control mode while the brightness level is programmed to 0.
>
> So, let's fix this by checking what the current backlight control mode
> is before reading the brightness level. If it's in DPCD control mode, we
> return the programmed brightness level. Otherwise we assume 100%
> brightness and return the highest possible brightness level. This also
> prevents us from accidentally programming a brightness level of 0.
>
> This is one of the many fixes that gets backlight controls working on
> the ThinkPad X1 Extreme 2nd Generation with optional 4K AMOLED screen.
>
> Changes since v1:
> * s/DP_EDP_DISPLAY_CONTROL_REGISTER/DP_EDP_BACKLIGHT_MODE_SET_REGISTER/
> - Jani
>
> Signed-off-by: Lyude Paul <lyude@redhat.com>
> ---
> .../drm/i915/display/intel_dp_aux_backlight.c | 17 +++++++++++++++++
> 1 file changed, 17 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c b/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
> index fad470553cf9..4d467e7d29eb 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
> @@ -59,8 +59,25 @@ static u32 intel_dp_aux_get_backlight(struct intel_connector *connector)
> {
> struct intel_dp *intel_dp = enc_to_intel_dp(&connector->encoder->base);
> u8 read_val[2] = { 0x0 };
> + u8 mode_reg;
> u16 level = 0;
>
> + if (drm_dp_dpcd_readb(&intel_dp->aux,
> + DP_EDP_BACKLIGHT_MODE_SET_REGISTER,
> + &mode_reg) != 1) {
> + DRM_DEBUG_KMS("Failed to read the DPCD register 0x%x\n",
> + DP_EDP_BACKLIGHT_MODE_SET_REGISTER);
> + return 0;
> + }
> +
> + /*
> + * If we're not in DPCD control mode yet, the programmed brightness
> + * value is meaningless and we should assume max brightness
> + */
> + if ((mode_reg & DP_EDP_BACKLIGHT_CONTROL_MODE_MASK) !=
> + DP_EDP_BACKLIGHT_CONTROL_MODE_DPCD)
> + return connector->panel.backlight.max;
> +
> if (drm_dp_dpcd_read(&intel_dp->aux, DP_EDP_BACKLIGHT_BRIGHTNESS_MSB,
> &read_val, sizeof(read_val)) < 0) {
> DRM_DEBUG_KMS("Failed to read DPCD register 0x%x\n",
>
Tested-by:Perry Yuan <pyuan@redhat.com>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
WARNING: multiple messages have this Message-ID (diff)
From: Perr Yuan <pyuan@redhat.com>
To: Lyude Paul <lyude@redhat.com>, intel-gfx@lists.freedesktop.org
Cc: David Airlie <airlied@linux.ie>,
linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org
Subject: Re: [Intel-gfx] [v2] drm/i915: Assume 100% brightness when not in DPCD control mode
Date: Mon, 23 Dec 2019 02:17:54 -0500 [thread overview]
Message-ID: <690de0cf-362b-c826-e607-e12fc403aca9@redhat.com> (raw)
In-Reply-To: <20191203224236.230930-1-lyude@redhat.com>
On 12/3/19 5:42 PM, Lyude Paul wrote:
> Currently we always determine the initial panel brightness level by
> simply reading the value from DP_EDP_BACKLIGHT_BRIGHTNESS_MSB/LSB. This
> seems wrong though, because if the panel is not currently in DPCD
> control mode there's not really any reason why there would be any
> brightness value programmed in the first place.
>
> This appears to be the case on the Lenovo ThinkPad X1 Extreme 2nd
> Generation, where the default value in these registers is always 0 on
> boot despite the fact the panel runs at max brightness by default.
> Getting the initial brightness value correct here is important as well,
> since the panel on this laptop doesn't behave well if it's ever put into
> DPCD control mode while the brightness level is programmed to 0.
>
> So, let's fix this by checking what the current backlight control mode
> is before reading the brightness level. If it's in DPCD control mode, we
> return the programmed brightness level. Otherwise we assume 100%
> brightness and return the highest possible brightness level. This also
> prevents us from accidentally programming a brightness level of 0.
>
> This is one of the many fixes that gets backlight controls working on
> the ThinkPad X1 Extreme 2nd Generation with optional 4K AMOLED screen.
>
> Changes since v1:
> * s/DP_EDP_DISPLAY_CONTROL_REGISTER/DP_EDP_BACKLIGHT_MODE_SET_REGISTER/
> - Jani
>
> Signed-off-by: Lyude Paul <lyude@redhat.com>
> ---
> .../drm/i915/display/intel_dp_aux_backlight.c | 17 +++++++++++++++++
> 1 file changed, 17 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c b/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
> index fad470553cf9..4d467e7d29eb 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
> @@ -59,8 +59,25 @@ static u32 intel_dp_aux_get_backlight(struct intel_connector *connector)
> {
> struct intel_dp *intel_dp = enc_to_intel_dp(&connector->encoder->base);
> u8 read_val[2] = { 0x0 };
> + u8 mode_reg;
> u16 level = 0;
>
> + if (drm_dp_dpcd_readb(&intel_dp->aux,
> + DP_EDP_BACKLIGHT_MODE_SET_REGISTER,
> + &mode_reg) != 1) {
> + DRM_DEBUG_KMS("Failed to read the DPCD register 0x%x\n",
> + DP_EDP_BACKLIGHT_MODE_SET_REGISTER);
> + return 0;
> + }
> +
> + /*
> + * If we're not in DPCD control mode yet, the programmed brightness
> + * value is meaningless and we should assume max brightness
> + */
> + if ((mode_reg & DP_EDP_BACKLIGHT_CONTROL_MODE_MASK) !=
> + DP_EDP_BACKLIGHT_CONTROL_MODE_DPCD)
> + return connector->panel.backlight.max;
> +
> if (drm_dp_dpcd_read(&intel_dp->aux, DP_EDP_BACKLIGHT_BRIGHTNESS_MSB,
> &read_val, sizeof(read_val)) < 0) {
> DRM_DEBUG_KMS("Failed to read DPCD register 0x%x\n",
>
Tested-by:Perry Yuan <pyuan@redhat.com>
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
WARNING: multiple messages have this Message-ID (diff)
From: Perr Yuan <pyuan@redhat.com>
To: Lyude Paul <lyude@redhat.com>, intel-gfx@lists.freedesktop.org
Cc: David Airlie <airlied@linux.ie>,
linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org
Subject: Re: [v2] drm/i915: Assume 100% brightness when not in DPCD control mode
Date: Mon, 23 Dec 2019 02:17:54 -0500 [thread overview]
Message-ID: <690de0cf-362b-c826-e607-e12fc403aca9@redhat.com> (raw)
In-Reply-To: <20191203224236.230930-1-lyude@redhat.com>
On 12/3/19 5:42 PM, Lyude Paul wrote:
> Currently we always determine the initial panel brightness level by
> simply reading the value from DP_EDP_BACKLIGHT_BRIGHTNESS_MSB/LSB. This
> seems wrong though, because if the panel is not currently in DPCD
> control mode there's not really any reason why there would be any
> brightness value programmed in the first place.
>
> This appears to be the case on the Lenovo ThinkPad X1 Extreme 2nd
> Generation, where the default value in these registers is always 0 on
> boot despite the fact the panel runs at max brightness by default.
> Getting the initial brightness value correct here is important as well,
> since the panel on this laptop doesn't behave well if it's ever put into
> DPCD control mode while the brightness level is programmed to 0.
>
> So, let's fix this by checking what the current backlight control mode
> is before reading the brightness level. If it's in DPCD control mode, we
> return the programmed brightness level. Otherwise we assume 100%
> brightness and return the highest possible brightness level. This also
> prevents us from accidentally programming a brightness level of 0.
>
> This is one of the many fixes that gets backlight controls working on
> the ThinkPad X1 Extreme 2nd Generation with optional 4K AMOLED screen.
>
> Changes since v1:
> * s/DP_EDP_DISPLAY_CONTROL_REGISTER/DP_EDP_BACKLIGHT_MODE_SET_REGISTER/
> - Jani
>
> Signed-off-by: Lyude Paul <lyude@redhat.com>
> ---
> .../drm/i915/display/intel_dp_aux_backlight.c | 17 +++++++++++++++++
> 1 file changed, 17 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c b/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
> index fad470553cf9..4d467e7d29eb 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
> @@ -59,8 +59,25 @@ static u32 intel_dp_aux_get_backlight(struct intel_connector *connector)
> {
> struct intel_dp *intel_dp = enc_to_intel_dp(&connector->encoder->base);
> u8 read_val[2] = { 0x0 };
> + u8 mode_reg;
> u16 level = 0;
>
> + if (drm_dp_dpcd_readb(&intel_dp->aux,
> + DP_EDP_BACKLIGHT_MODE_SET_REGISTER,
> + &mode_reg) != 1) {
> + DRM_DEBUG_KMS("Failed to read the DPCD register 0x%x\n",
> + DP_EDP_BACKLIGHT_MODE_SET_REGISTER);
> + return 0;
> + }
> +
> + /*
> + * If we're not in DPCD control mode yet, the programmed brightness
> + * value is meaningless and we should assume max brightness
> + */
> + if ((mode_reg & DP_EDP_BACKLIGHT_CONTROL_MODE_MASK) !=
> + DP_EDP_BACKLIGHT_CONTROL_MODE_DPCD)
> + return connector->panel.backlight.max;
> +
> if (drm_dp_dpcd_read(&intel_dp->aux, DP_EDP_BACKLIGHT_BRIGHTNESS_MSB,
> &read_val, sizeof(read_val)) < 0) {
> DRM_DEBUG_KMS("Failed to read DPCD register 0x%x\n",
>
Tested-by:Perry Yuan <pyuan@redhat.com>
next prev parent reply other threads:[~2019-12-23 7:18 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-11-22 23:15 [PATCH 0/5] drm/i915: eDP DPCD aux backlight fixes Lyude Paul
2019-11-22 23:15 ` [Intel-gfx] " Lyude Paul
2019-11-22 23:15 ` Lyude Paul
2019-11-22 23:15 ` [PATCH 1/5] drm/i915: Fix eDP DPCD aux max backlight calculations Lyude Paul
2019-11-22 23:15 ` Lyude Paul
2019-11-22 23:15 ` [Intel-gfx] " Lyude Paul
2019-12-20 10:05 ` [1/5] " Perr Yuan
2019-12-20 10:05 ` Perr Yuan
2019-12-20 10:05 ` [Intel-gfx] " Perr Yuan
2019-11-22 23:16 ` [PATCH 2/5] drm/i915: Assume 100% brightness when not in DPCD control mode Lyude Paul
2019-11-22 23:16 ` Lyude Paul
2019-11-22 23:16 ` [Intel-gfx] " Lyude Paul
2019-11-22 23:16 ` Lyude Paul
2019-12-03 12:40 ` Jani Nikula
2019-12-03 12:40 ` Jani Nikula
2019-12-03 12:40 ` [Intel-gfx] " Jani Nikula
2019-12-03 22:42 ` [PATCH v2] " Lyude Paul
2019-12-03 22:42 ` Lyude Paul
2019-12-03 22:42 ` [Intel-gfx] " Lyude Paul
2019-12-23 7:17 ` Perr Yuan [this message]
2019-12-23 7:17 ` [v2] " Perr Yuan
2019-12-23 7:17 ` [Intel-gfx] " Perr Yuan
2019-11-22 23:16 ` [PATCH 3/5] drm/i915: Fix DPCD register order in intel_dp_aux_enable_backlight() Lyude Paul
2019-11-22 23:16 ` [Intel-gfx] " Lyude Paul
2019-11-22 23:16 ` Lyude Paul
2019-12-03 12:41 ` Jani Nikula
2019-12-03 12:41 ` Jani Nikula
2019-12-03 12:41 ` [Intel-gfx] " Jani Nikula
2019-12-23 7:19 ` [3/5] " Perr Yuan
2019-12-23 7:19 ` Perr Yuan
2019-12-23 7:19 ` [Intel-gfx] " Perr Yuan
2019-11-22 23:16 ` [PATCH 4/5] drm/i915: Auto detect DPCD backlight support by default Lyude Paul
2019-11-22 23:16 ` Lyude Paul
2019-11-22 23:16 ` [Intel-gfx] " Lyude Paul
2019-12-03 12:41 ` Jani Nikula
2019-12-03 12:41 ` Jani Nikula
2019-12-03 12:41 ` [Intel-gfx] " Jani Nikula
2019-12-23 7:20 ` [4/5] " Perr Yuan
2019-12-23 7:20 ` Perr Yuan
2019-12-23 7:20 ` [Intel-gfx] " Perr Yuan
2019-11-22 23:16 ` [PATCH 5/5] drm/i915: Force DPCD backlight mode on X1 Extreme 2nd Gen 4K AMOLED panel Lyude Paul
2019-11-22 23:16 ` Lyude Paul
2019-11-22 23:16 ` [Intel-gfx] " Lyude Paul
2019-11-22 23:16 ` Lyude Paul
2019-12-03 12:42 ` Jani Nikula
2019-12-03 12:42 ` Jani Nikula
2019-12-03 12:42 ` [Intel-gfx] " Jani Nikula
2019-11-22 23:55 ` ✓ Fi.CI.BAT: success for drm/i915: eDP DPCD aux backlight fixes Patchwork
2019-11-22 23:55 ` [Intel-gfx] " Patchwork
2019-11-24 6:16 ` ✓ Fi.CI.IGT: " Patchwork
2019-11-24 6:16 ` [Intel-gfx] " Patchwork
2019-12-04 1:05 ` [Intel-gfx] ✓ Fi.CI.BAT: success for drm/i915: eDP DPCD aux backlight fixes (rev2) Patchwork
2019-12-04 13:07 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
2019-12-05 1:13 ` [Intel-gfx] ✗ Fi.CI.BAT: failure for drm/i915: eDP DPCD aux backlight fixes (rev3) Patchwork
2019-12-05 7:15 ` [Intel-gfx] ✓ Fi.CI.BAT: success for drm/i915: eDP DPCD aux backlight fixes (rev4) Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=690de0cf-362b-c826-e607-e12fc403aca9@redhat.com \
--to=pyuan@redhat.com \
--cc=airlied@linux.ie \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lyude@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.