> Subject: [PATCH] drm/i915/backlight: allow hybrid pin-enable + AUX brightness
> panels
> 
> Commit 102d44b3a8fa ("drm/i915/backlight: Fix VESA backlight possible check
> condition") restricted the VESA backlight path to fully AUX-based panels
> (enable and adjustment both via AUX), on the grounds that the hybrid
> configurations are not currently supported.
> 
> The hybrid pin-enable + AUX-adjustment configuration is however already
> handled: intel_dp_aux_vesa_enable_backlight() falls back to the PWM funcs
> for enable when info.aux_enable is unset, and
> drm_edp_backlight_init() supports aux_set without aux_enable.
> 
> At least one panel requires this configuration to work at all: the Tianma
> Y156ZAN02.0 in the Google Pixel Slate (nocturne) advertises
> DP_EDP_BACKLIGHT_BRIGHTNESS_AUX_SET_CAP but not
> DP_EDP_BACKLIGHT_AUX_ENABLE_CAP (DP_EDP_GENERAL_CAP_1 = 0xfb,
> DP_EDP_BACKLIGHT_ADJUSTMENT_CAP = 0xff). The panel ignores the PWM
> pin for brightness adjustment, and resets its AUX brightness register
> (DP_EDP_BACKLIGHT_BRIGHTNESS_MSB/LSB) to 0 whenever panel power is
> cycled. With the PWM backlight funcs selected, the panel comes back black
> after every suspend/resume or DPMS off/on cycle while all driver-visible state
> (link training, PPS, PWM duty) looks healthy.
> Firmware rewrites the register at boot, which masks the problem until the 
> first
> runtime panel power cycle.
> 
> Allow the hybrid configuration by requiring only AUX brightness adjustment
> capability; backlight enable keeps using the pin/PWM path via the existing
> fallback.
> 
> Tested on the Google Pixel Slate (KBL-Y) on 7.1.4: i915 now selects the VESA
> AUX backlight interface, the panel's AUX brightness register is restored 
> across
> suspend/resume, and brightness control works over the full range where it
> previously had no effect.
> 
> Fixes: 102d44b3a8fa ("drm/i915/backlight: Fix VESA backlight possible check
> condition")
> Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16679
> Cc: [email protected]
> Cc: Suraj Kandpal <[email protected]>
> Signed-off-by: John Foushee <[email protected]>

Hi John this fix has been already floated, reviewed and merged some days ago to 
drm-intel-next.

https://patchwork.freedesktop.org/series/170522/

Regards,
Suraj Kandpal

> ---
>  .../gpu/drm/i915/display/intel_dp_aux_backlight.c    | 12 ++++++++----
>  1 file changed, 8 insertions(+), 4 deletions(-)
> 
> 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 7a6c07f..a5c03c3 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
> @@ -616,11 +616,15 @@ check_if_vesa_backlight_possible(struct intel_dp
> *intel_dp)
>       u8 bit_min, bit_max;
> 
>       /*
> -      * Since we only support Fully AUX Based VESA Backlight interface make
> sure
> -      * backlight enable is possible via AUX along with backlight adjustment
> +      * Brightness adjustment must be possible via AUX. Backlight *enable*
> +      * may come either via AUX (DP_EDP_BACKLIGHT_AUX_ENABLE_CAP)
> or via the
> +      * BL_ENABLE pin, which the VESA backlight code already supports by
> +      * falling back to the PWM funcs for enable when aux_enable is not set.
> +      * Some panels (e.g. Tianma Y156ZAN02.0 in the Google Pixel Slate)
> +      * support only that hybrid configuration and ignore the PWM pin for
> +      * brightness adjustment.
>        */
> -     if (!(intel_dp->edp_dpcd[1] & DP_EDP_BACKLIGHT_AUX_ENABLE_CAP
> &&
> -           intel_dp->edp_dpcd[2] &
> DP_EDP_BACKLIGHT_BRIGHTNESS_AUX_SET_CAP))
> +     if (!(intel_dp->edp_dpcd[2] &
> +DP_EDP_BACKLIGHT_BRIGHTNESS_AUX_SET_CAP))
>               return false;
> 
>       ret = drm_dp_dpcd_read_byte(&intel_dp->aux,
> DP_EDP_PWMGEN_BIT_COUNT_CAP_MIN, &bit_min);
> --
> 2.47.3

Reply via email to