On Mon, Dec 15, 2014 at 03:58:21PM +0530, Vandana Kannan wrote: > From: Deepak M <m.deepak@xxxxxxxxx> > > LFP brighness control from the VBT block 43 indicates which > controller is used for brightness. > LFP1 brightness control method: > Bit 7-4 = This field controller number of the brightnes controller. > 0 = Controller 0 > 1 = Controller 1 > 2 = Controller 2 > 3 = Controller 3 > Others = Reserved > Bits 3-0 = This field specifies the brightness control pin to be used on the > platform. > 0 = PMIC pin is used for brightness control > 1 = LPSS PWM is used for brightness control > 2 = Display DDI is used for brightness control > 3 = CABC method to control brightness > Others = Reserved > > Adding the above fields in dev_priv->vbt and corresponding changes in > parse_backlight() > > v2: Jani's review comments addressed > - Move PWM definitions to intel_bios.h > - Moving vbt_version to intel_vbt_data > - Rename brightness to bl_ctrl_data > - Logging just control_pin instead of string > - Avoid adding vbt_version in dev_priv > - Since only DDI option is available as of now, let control pin DDI > affect dev_priv->vbt.backlight.present > > v3: Jani's review comments addressed > - Drop control_pin > - Use bdb->version > - set controller to 0 instead of using control pin define > - check controller bounds > - remove superfluous changes in intel_parse_bios > > Signed-off-by: Deepak M <m.deepak@xxxxxxxxx> > Signed-off-by: Vandana Kannan <vandana.kannan@xxxxxxxxx> > Reviewed-by: Jani Nikula <jani.nikula@xxxxxxxxx> Queued for -next, thanks for the patch. -Daniel > --- > drivers/gpu/drm/i915/i915_drv.h | 1 + > drivers/gpu/drm/i915/intel_bios.c | 20 ++++++++++++++++++++ > drivers/gpu/drm/i915/intel_bios.h | 11 +++++++++++ > 3 files changed, 32 insertions(+) > > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h > index 11e85cb..f4fef28 100644 > --- a/drivers/gpu/drm/i915/i915_drv.h > +++ b/drivers/gpu/drm/i915/i915_drv.h > @@ -1355,6 +1355,7 @@ struct intel_vbt_data { > bool present; > bool active_low_pwm; > u8 min_brightness; /* min_brightness/255 of max */ > + u8 controller; /* brightness controller number */ > } backlight; > > /* MIPI DSI */ > diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c > index 3f17825..65b1fbc 100644 > --- a/drivers/gpu/drm/i915/intel_bios.c > +++ b/drivers/gpu/drm/i915/intel_bios.c > @@ -314,6 +314,7 @@ parse_lfp_backlight(struct drm_i915_private *dev_priv, struct bdb_header *bdb) > { > const struct bdb_lfp_backlight_data *backlight_data; > const struct bdb_lfp_backlight_data_entry *entry; > + const struct bdb_lfp_backlight_control_data *bl_ctrl_data; > > backlight_data = find_section(bdb, BDB_LVDS_BACKLIGHT); > if (!backlight_data) > @@ -326,6 +327,7 @@ parse_lfp_backlight(struct drm_i915_private *dev_priv, struct bdb_header *bdb) > } > > entry = &backlight_data->data[panel_type]; > + bl_ctrl_data = &backlight_data->blc_ctl[panel_type]; > > dev_priv->vbt.backlight.present = entry->type == BDB_BACKLIGHT_TYPE_PWM; > if (!dev_priv->vbt.backlight.present) { > @@ -337,12 +339,30 @@ parse_lfp_backlight(struct drm_i915_private *dev_priv, struct bdb_header *bdb) > 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; > + > + dev_priv->vbt.backlight.controller = 0; > + if (bdb->version >= 191) { > + dev_priv->vbt.backlight.present = > + bl_ctrl_data->pin == BLC_CONTROL_PIN_DDI; > + if (!dev_priv->vbt.backlight.present) { > + DRM_DEBUG_KMS("BL control pin is not DDI (pin %u)\n", > + bl_ctrl_data->pin); > + return; > + } > + if (bl_ctrl_data->controller == 1) > + dev_priv->vbt.backlight.controller = > + bl_ctrl_data->controller; > + } > + > DRM_DEBUG_KMS("VBT backlight PWM modulation frequency %u Hz, " > "active %s, min brightness %u, level %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]); > + > + DRM_DEBUG_KMS("VBT BL controller %u\n", > + dev_priv->vbt.backlight.controller); > } > > /* Try to find sdvo panel data */ > diff --git a/drivers/gpu/drm/i915/intel_bios.h b/drivers/gpu/drm/i915/intel_bios.h > index a6a8710..9a7202e 100644 > --- a/drivers/gpu/drm/i915/intel_bios.h > +++ b/drivers/gpu/drm/i915/intel_bios.h > @@ -402,10 +402,21 @@ struct bdb_lfp_backlight_data_entry { > u8 obsolete3; > } __packed; > > +#define BLC_CONTROL_PIN_PMIC 0 > +#define BLC_CONTROL_PIN_LPSS_PWM 1 > +#define BLC_CONTROL_PIN_DDI 2 > +#define BLC_CONTROL_PIN_CABC 3 > + > +struct bdb_lfp_backlight_control_data { > + u8 controller:4; > + u8 pin:4; > +} __packed; > + > struct bdb_lfp_backlight_data { > u8 entry_size; > struct bdb_lfp_backlight_data_entry data[16]; > u8 level[16]; > + struct bdb_lfp_backlight_control_data blc_ctl[16]; > } __packed; > > struct aimdb_header { > -- > 2.0.1 > -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx