> Modify backlight setup function for VESA interface to take into account the nits > based luminance. > > --v2 > -Prefer using luminance over nits [Jani] > > Signed-off-by: Suraj Kandpal <suraj.kandpal@xxxxxxxxx> > Tested-by: Ben Kao <ben.kao@xxxxxxxxx> > --- Reviewed-by: Arun R Murthy <arun.r.murthy@xxxxxxxxx> Thanks and Regards, Arun R Murthy -------------------- > .../drm/i915/display/intel_dp_aux_backlight.c | 99 +++++++++++-------- > 1 file changed, 59 insertions(+), 40 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 a9facfacac95..38e2b8cc591c 100644 > --- a/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c > +++ b/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c > @@ -560,56 +560,75 @@ static void > intel_dp_aux_vesa_disable_backlight(const struct drm_connector_state static > int intel_dp_aux_vesa_setup_backlight(struct intel_connector *connector, > enum pipe pipe) { > struct intel_display *display = to_intel_display(connector); > + struct drm_luminance_range_info *luminance_range = > + &connector->base.display_info.luminance_range; > struct intel_dp *intel_dp = intel_attached_dp(connector); > struct intel_panel *panel = &connector->panel; > u16 current_level; > u8 current_mode; > int ret; > > - ret = drm_edp_backlight_init(&intel_dp->aux, &panel- > >backlight.edp.vesa.info, > - panel->vbt.backlight.pwm_freq_hz, > intel_dp->edp_dpcd, > - ¤t_level, ¤t_mode); > - if (ret < 0) > - return ret; > - > - drm_dbg_kms(display->drm, > - "[CONNECTOR:%d:%s] AUX VESA backlight enable is > controlled through %s\n", > - connector->base.base.id, connector->base.name, > - dpcd_vs_pwm_str(panel- > >backlight.edp.vesa.info.aux_enable)); > - drm_dbg_kms(display->drm, > - "[CONNECTOR:%d:%s] AUX VESA backlight level is controlled > through %s\n", > - connector->base.base.id, connector->base.name, > - dpcd_vs_pwm_str(panel->backlight.edp.vesa.info.aux_set)); > - > - if (!panel->backlight.edp.vesa.info.aux_set || !panel- > >backlight.edp.vesa.info.aux_enable) { > - ret = panel->backlight.pwm_funcs->setup(connector, pipe); > - if (ret < 0) { > - drm_err(display->drm, > - "[CONNECTOR:%d:%s] Failed to setup PWM > backlight controls for eDP backlight: %d\n", > - connector->base.base.id, connector- > >base.name, ret); > - return ret; > - } > - } > - > - if (panel->backlight.edp.vesa.info.aux_set) { > - panel->backlight.max = panel->backlight.edp.vesa.info.max; > - panel->backlight.min = 0; > - if (current_mode == > DP_EDP_BACKLIGHT_CONTROL_MODE_DPCD) { > - panel->backlight.level = current_level; > - panel->backlight.enabled = panel->backlight.level != 0; > + if (panel->backlight.edp.vesa.luminance_control_support) { > + if (luminance_range->max_luminance) { > + panel->backlight.max = luminance_range- > >max_luminance; > + panel->backlight.min = luminance_range- > >min_luminance; > } else { > - panel->backlight.level = panel->backlight.max; > - panel->backlight.enabled = false; > + panel->backlight.max = 512; > + panel->backlight.min = 0; > } > + panel->backlight.level = > intel_dp_aux_vesa_get_backlight(connector, 0); > + panel->backlight.enabled = panel->backlight.level != 0; > + drm_dbg_kms(display->drm, > + "[CONNECTOR:%d:%s] AUX VESA Nits backlight level > is controlled through DPCD\n", > + connector->base.base.id, connector->base.name); > } else { > - panel->backlight.max = panel->backlight.pwm_level_max; > - panel->backlight.min = panel->backlight.pwm_level_min; > - if (current_mode == > DP_EDP_BACKLIGHT_CONTROL_MODE_PWM) { > - panel->backlight.level = panel->backlight.pwm_funcs- > >get(connector, pipe); > - panel->backlight.enabled = panel- > >backlight.pwm_enabled; > + ret = drm_edp_backlight_init(&intel_dp->aux, &panel- > >backlight.edp.vesa.info, > + panel->vbt.backlight.pwm_freq_hz, > intel_dp->edp_dpcd, > + ¤t_level, ¤t_mode); > + if (ret < 0) > + return ret; > + > + drm_dbg_kms(display->drm, > + "[CONNECTOR:%d:%s] AUX VESA backlight enable is > controlled through %s\n", > + connector->base.base.id, connector->base.name, > + dpcd_vs_pwm_str(panel- > >backlight.edp.vesa.info.aux_enable)); > + drm_dbg_kms(display->drm, > + "[CONNECTOR:%d:%s] AUX VESA backlight level is > controlled through %s\n", > + connector->base.base.id, connector->base.name, > + dpcd_vs_pwm_str(panel- > >backlight.edp.vesa.info.aux_set)); > + > + if (!panel->backlight.edp.vesa.info.aux_set || > + !panel->backlight.edp.vesa.info.aux_enable) { > + ret = panel->backlight.pwm_funcs->setup(connector, > pipe); > + if (ret < 0) { > + drm_err(display->drm, > + "[CONNECTOR:%d:%s] Failed to setup > PWM backlight controls for eDP backlight: %d\n", > + connector->base.base.id, connector- > >base.name, ret); > + return ret; > + } > + } > + > + if (panel->backlight.edp.vesa.info.aux_set) { > + panel->backlight.max = panel- > >backlight.edp.vesa.info.max; > + panel->backlight.min = 0; > + if (current_mode == > DP_EDP_BACKLIGHT_CONTROL_MODE_DPCD) { > + panel->backlight.level = current_level; > + panel->backlight.enabled = panel- > >backlight.level != 0; > + } else { > + panel->backlight.level = panel->backlight.max; > + panel->backlight.enabled = false; > + } > } else { > - panel->backlight.level = panel->backlight.max; > - panel->backlight.enabled = false; > + panel->backlight.max = panel- > >backlight.pwm_level_max; > + panel->backlight.min = panel- > >backlight.pwm_level_min; > + if (current_mode == > DP_EDP_BACKLIGHT_CONTROL_MODE_PWM) { > + panel->backlight.level = > + panel->backlight.pwm_funcs- > >get(connector, pipe); > + panel->backlight.enabled = panel- > >backlight.pwm_enabled; > + } else { > + panel->backlight.level = panel->backlight.max; > + panel->backlight.enabled = false; > + } > } > } > > -- > 2.34.1