From: Jani Nikula <jani.nikula@linux.intel.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,
Rodrigo Vivi <rodrigo.vivi@intel.com>,
Lee Shawn C <shawn.c.lee@intel.com>
Subject: Re: [PATCH 2/5] drm/i915: Assume 100% brightness when not in DPCD control mode
Date: Tue, 03 Dec 2019 14:40:18 +0200 [thread overview]
Message-ID: <87tv6hinv1.fsf@intel.com> (raw)
In-Reply-To: <20191122231616.2574-3-lyude@redhat.com>
On Fri, 22 Nov 2019, Lyude Paul <lyude@redhat.com> 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.
>
> Signed-off-by: Lyude Paul <lyude@redhat.com>
> ---
> .../gpu/drm/i915/display/intel_dp_aux_backlight.c | 15 +++++++++++++++
> 1 file changed, 15 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..0bf8772bc7bb 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,23 @@ 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 control_reg;
> u16 level = 0;
>
> + if (drm_dp_dpcd_readb(&intel_dp->aux, DP_EDP_DISPLAY_CONTROL_REGISTER,
Shouldn't that be DP_EDP_BACKLIGHT_MODE_SET_REGISTER instead?
> + &control_reg) != 1) {
> + DRM_DEBUG_KMS("Failed to read the DPCD register 0x%x\n",
> + DP_EDP_DISPLAY_CONTROL_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 (!(control_reg & DP_EDP_BACKLIGHT_CONTROL_MODE_DPCD))
> + return connector->panel.backlight.max;
It's not just a bit, I think you need to check (control_reg & mask) ==
value.
BR,
Jani.
> +
> 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",
--
Jani Nikula, Intel Open Source Graphics Center
_______________________________________________
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: Jani Nikula <jani.nikula@linux.intel.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] [PATCH 2/5] drm/i915: Assume 100% brightness when not in DPCD control mode
Date: Tue, 03 Dec 2019 14:40:18 +0200 [thread overview]
Message-ID: <87tv6hinv1.fsf@intel.com> (raw)
In-Reply-To: <20191122231616.2574-3-lyude@redhat.com>
On Fri, 22 Nov 2019, Lyude Paul <lyude@redhat.com> 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.
>
> Signed-off-by: Lyude Paul <lyude@redhat.com>
> ---
> .../gpu/drm/i915/display/intel_dp_aux_backlight.c | 15 +++++++++++++++
> 1 file changed, 15 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..0bf8772bc7bb 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,23 @@ 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 control_reg;
> u16 level = 0;
>
> + if (drm_dp_dpcd_readb(&intel_dp->aux, DP_EDP_DISPLAY_CONTROL_REGISTER,
Shouldn't that be DP_EDP_BACKLIGHT_MODE_SET_REGISTER instead?
> + &control_reg) != 1) {
> + DRM_DEBUG_KMS("Failed to read the DPCD register 0x%x\n",
> + DP_EDP_DISPLAY_CONTROL_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 (!(control_reg & DP_EDP_BACKLIGHT_CONTROL_MODE_DPCD))
> + return connector->panel.backlight.max;
It's not just a bit, I think you need to check (control_reg & mask) ==
value.
BR,
Jani.
> +
> 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",
--
Jani Nikula, Intel Open Source Graphics Center
_______________________________________________
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: Jani Nikula <jani.nikula@linux.intel.com>
To: Lyude Paul <lyude@redhat.com>, intel-gfx@lists.freedesktop.org
Cc: "Joonas Lahtinen" <joonas.lahtinen@linux.intel.com>,
"Rodrigo Vivi" <rodrigo.vivi@intel.com>,
"David Airlie" <airlied@linux.ie>,
"Daniel Vetter" <daniel@ffwll.ch>,
"Chris Wilson" <chris@chris-wilson.co.uk>,
"Ville Syrjälä" <ville.syrjala@linux.intel.com>,
"Lee Shawn C" <shawn.c.lee@intel.com>,
dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/5] drm/i915: Assume 100% brightness when not in DPCD control mode
Date: Tue, 03 Dec 2019 14:40:18 +0200 [thread overview]
Message-ID: <87tv6hinv1.fsf@intel.com> (raw)
In-Reply-To: <20191122231616.2574-3-lyude@redhat.com>
On Fri, 22 Nov 2019, Lyude Paul <lyude@redhat.com> 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.
>
> Signed-off-by: Lyude Paul <lyude@redhat.com>
> ---
> .../gpu/drm/i915/display/intel_dp_aux_backlight.c | 15 +++++++++++++++
> 1 file changed, 15 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..0bf8772bc7bb 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,23 @@ 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 control_reg;
> u16 level = 0;
>
> + if (drm_dp_dpcd_readb(&intel_dp->aux, DP_EDP_DISPLAY_CONTROL_REGISTER,
Shouldn't that be DP_EDP_BACKLIGHT_MODE_SET_REGISTER instead?
> + &control_reg) != 1) {
> + DRM_DEBUG_KMS("Failed to read the DPCD register 0x%x\n",
> + DP_EDP_DISPLAY_CONTROL_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 (!(control_reg & DP_EDP_BACKLIGHT_CONTROL_MODE_DPCD))
> + return connector->panel.backlight.max;
It's not just a bit, I think you need to check (control_reg & mask) ==
value.
BR,
Jani.
> +
> 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",
--
Jani Nikula, Intel Open Source Graphics Center
next prev parent reply other threads:[~2019-12-03 12:40 UTC|newest]
Thread overview: 56+ 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 [this message]
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 ` [v2] " Perr Yuan
2019-12-23 7:17 ` 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
-- strict thread matches above, loose matches on Subject: below --
2019-12-12 3:11 [PATCH 2/5] drm/i915: Assume 100% brightness when not in DPCD control mode AceLan Kao
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=87tv6hinv1.fsf@intel.com \
--to=jani.nikula@linux.intel.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 \
--cc=rodrigo.vivi@intel.com \
--cc=shawn.c.lee@intel.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.