Skip to content

Commit c38da57

Browse files
committed
drm/dp: Modify drm_edp_probe_state
Modify drm_edp_probe_state to read current level from DP_EDP_PANEL_TARGET_LUMINANCE_VALUE. We divide it by 1000 since the value in this register is in millinits. --v2 -Add comment on the unit sent back [Arun] Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com> Reviewed-by: Arun R Murthy <arun.r.murthy@intel.com> Link: https://lore.kernel.org/r/20250620063445.3603086-7-suraj.kandpal@intel.com
1 parent 9274a94 commit c38da57

File tree

1 file changed

+30
-10
lines changed

1 file changed

+30
-10
lines changed

drivers/gpu/drm/display/drm_dp_helper.c

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4193,7 +4193,7 @@ drm_edp_backlight_probe_state(struct drm_dp_aux *aux, struct drm_edp_backlight_i
41934193
u8 *current_mode)
41944194
{
41954195
int ret;
4196-
u8 buf[2];
4196+
u8 buf[3];
41974197
u8 mode_reg;
41984198

41994199
ret = drm_dp_dpcd_read_byte(aux, DP_EDP_BACKLIGHT_MODE_SET_REGISTER, &mode_reg);
@@ -4210,17 +4210,37 @@ drm_edp_backlight_probe_state(struct drm_dp_aux *aux, struct drm_edp_backlight_i
42104210
if (*current_mode == DP_EDP_BACKLIGHT_CONTROL_MODE_DPCD) {
42114211
int size = 1 + bl->lsb_reg_used;
42124212

4213-
ret = drm_dp_dpcd_read_data(aux, DP_EDP_BACKLIGHT_BRIGHTNESS_MSB, buf, size);
4214-
if (ret < 0) {
4215-
drm_dbg_kms(aux->drm_dev, "%s: Failed to read backlight level: %d\n",
4216-
aux->name, ret);
4217-
return ret;
4213+
if (bl->luminance_set) {
4214+
ret = drm_dp_dpcd_read_data(aux, DP_EDP_PANEL_TARGET_LUMINANCE_VALUE,
4215+
buf, sizeof(buf));
4216+
if (ret < 0) {
4217+
drm_dbg_kms(aux->drm_dev,
4218+
"%s: Failed to read backlight level: %d\n",
4219+
aux->name, ret);
4220+
return ret;
42184221
}
42194222

4220-
if (bl->lsb_reg_used)
4221-
return (buf[0] << 8) | buf[1];
4222-
else
4223-
return buf[0];
4223+
/*
4224+
* Incase luminance is set we want to send the value back in nits but since
4225+
* DP_EDP_PANEL_TARGET_LUMINANCE stores values in millinits we need to divide
4226+
* by 1000.
4227+
*/
4228+
return (buf[0] | buf[1] << 8 | buf[2] << 16) / 1000;
4229+
} else {
4230+
ret = drm_dp_dpcd_read_data(aux, DP_EDP_BACKLIGHT_BRIGHTNESS_MSB,
4231+
buf, size);
4232+
if (ret < 0) {
4233+
drm_dbg_kms(aux->drm_dev,
4234+
"%s: Failed to read backlight level: %d\n",
4235+
aux->name, ret);
4236+
return ret;
4237+
}
4238+
4239+
if (bl->lsb_reg_used)
4240+
return (buf[0] << 8) | buf[1];
4241+
else
4242+
return buf[0];
4243+
}
42244244
}
42254245

42264246
/*

0 commit comments

Comments
 (0)