[Intel-gfx] [PATCH v2] drm/i915: Parse panel backlight controller from VBT

Jani Nikula jani.nikula at intel.com
Mon Dec 12 15:25:45 UTC 2016


On Thu, 08 Dec 2016, Jani Nikula <jani.nikula at intel.com> wrote:
> From: Vidya Srinivas <vidya.srinivas at intel.com>
>
> Currently the backlight controller is taken as 0. It needs to derive
> value from the VBT. Adding the necessary changes.
>
> v2 by Jani:
>  - drop obsolete comments, drop redundant initialization (Bob)
>  - merge debug logging into one
>
> Signed-off-by: Uma Shankar <uma.shankar at intel.com>
> Signed-off-by: Vidya Srinivas <vidya.srinivas at intel.com>
> Reviewed-by: Bob Paauwe <bob.j.paauwe at intel.com>
> Tested-by: Bob Paauwe <bob.j.paauwe at intel.com>
> Tested-by: Mika Kahola <mika.kahola at intel.com>
> Signed-off-by: Jani Nikula <jani.nikula at intel.com>

Pushed to dinq, thanks for the patch.

BR,
Jani.

> ---
>  drivers/gpu/drm/i915/i915_drv.h    |  1 +
>  drivers/gpu/drm/i915/intel_bios.c  |  6 ++++--
>  drivers/gpu/drm/i915/intel_panel.c | 17 +++--------------
>  3 files changed, 8 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 1480e733312a..786e3bb8eecf 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -1716,6 +1716,7 @@ struct intel_vbt_data {
>  		bool present;
>  		bool active_low_pwm;
>  		u8 min_brightness;	/* min_brightness/255 of max */
> +		u8 controller;		/* brightness controller number */
>  		enum intel_backlight_type type;
>  	} backlight;
>  
> diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
> index eaade27af386..1cf2fa6ec28f 100644
> --- a/drivers/gpu/drm/i915/intel_bios.c
> +++ b/drivers/gpu/drm/i915/intel_bios.c
> @@ -330,17 +330,19 @@ parse_lfp_backlight(struct drm_i915_private *dev_priv,
>  
>  		method = &backlight_data->backlight_control[panel_type];
>  		dev_priv->vbt.backlight.type = method->type;
> +		dev_priv->vbt.backlight.controller = method->controller;
>  	}
>  
>  	dev_priv->vbt.backlight.pwm_freq_hz = entry->pwm_freq_hz;
>  	dev_priv->vbt.backlight.active_low_pwm = entry->active_low_pwm;
>  	dev_priv->vbt.backlight.min_brightness = entry->min_brightness;
>  	DRM_DEBUG_KMS("VBT backlight PWM modulation frequency %u Hz, "
> -		      "active %s, min brightness %u, level %u\n",
> +		      "active %s, min brightness %u, level %u, controller %u\n",
>  		      dev_priv->vbt.backlight.pwm_freq_hz,
>  		      dev_priv->vbt.backlight.active_low_pwm ? "low" : "high",
>  		      dev_priv->vbt.backlight.min_brightness,
> -		      backlight_data->level[panel_type]);
> +		      backlight_data->level[panel_type],
> +		      dev_priv->vbt.backlight.controller);
>  }
>  
>  /* Try to find sdvo panel data */
> diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
> index 3578b402d412..b01edceac650 100644
> --- a/drivers/gpu/drm/i915/intel_panel.c
> +++ b/drivers/gpu/drm/i915/intel_panel.c
> @@ -1039,10 +1039,7 @@ static void bxt_enable_backlight(struct intel_connector *connector)
>  	enum pipe pipe = intel_get_pipe_from_connector(connector);
>  	u32 pwm_ctl, val;
>  
> -	/* To use 2nd set of backlight registers, utility pin has to be
> -	 * enabled with PWM mode.
> -	 * The field should only be changed when the utility pin is disabled
> -	 */
> +	/* Controller 1 uses the utility pin. */
>  	if (panel->backlight.controller == 1) {
>  		val = I915_READ(UTIL_PIN_CTL);
>  		if (val & UTIL_PIN_ENABLE) {
> @@ -1608,19 +1605,11 @@ bxt_setup_backlight(struct intel_connector *connector, enum pipe unused)
>  	struct intel_panel *panel = &connector->panel;
>  	u32 pwm_ctl, val;
>  
> -	/*
> -	 * For BXT hard coding the Backlight controller to 0.
> -	 * TODO : Read the controller value from VBT and generalize
> -	 */
> -	panel->backlight.controller = 0;
> +	panel->backlight.controller = dev_priv->vbt.backlight.controller;
>  
>  	pwm_ctl = I915_READ(BXT_BLC_PWM_CTL(panel->backlight.controller));
>  
> -	/* Keeping the check if controller 1 is to be programmed.
> -	 * This will come into affect once the VBT parsing
> -	 * is fixed for controller selection, and controller 1 is used
> -	 * for a prticular display configuration.
> -	 */
> +	/* Controller 1 uses the utility pin. */
>  	if (panel->backlight.controller == 1) {
>  		val = I915_READ(UTIL_PIN_CTL);
>  		panel->backlight.util_pin_active_low =

-- 
Jani Nikula, Intel Open Source Technology Center


More information about the Intel-gfx mailing list