Commit c38da578 authored by Suraj Kandpal's avatar Suraj Kandpal
Browse files

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: default avatarSuraj Kandpal <suraj.kandpal@intel.com>
Reviewed-by: default avatarArun R Murthy <arun.r.murthy@intel.com>
Link: https://lore.kernel.org/r/20250620063445.3603086-7-suraj.kandpal@intel.com
parent 9274a940
Loading
Loading
Loading
Loading
+30 −10
Original line number Diff line number Diff line
@@ -4193,7 +4193,7 @@ drm_edp_backlight_probe_state(struct drm_dp_aux *aux, struct drm_edp_backlight_i
			      u8 *current_mode)
{
	int ret;
	u8 buf[2];
	u8 buf[3];
	u8 mode_reg;

	ret = drm_dp_dpcd_read_byte(aux, DP_EDP_BACKLIGHT_MODE_SET_REGISTER, &mode_reg);
@@ -4210,9 +4210,28 @@ drm_edp_backlight_probe_state(struct drm_dp_aux *aux, struct drm_edp_backlight_i
	if (*current_mode == DP_EDP_BACKLIGHT_CONTROL_MODE_DPCD) {
		int size = 1 + bl->lsb_reg_used;

		ret = drm_dp_dpcd_read_data(aux, DP_EDP_BACKLIGHT_BRIGHTNESS_MSB, buf, size);
		if (bl->luminance_set) {
			ret = drm_dp_dpcd_read_data(aux, DP_EDP_PANEL_TARGET_LUMINANCE_VALUE,
						    buf, sizeof(buf));
			if (ret < 0) {
				drm_dbg_kms(aux->drm_dev,
					    "%s: Failed to read backlight level: %d\n",
					    aux->name, ret);
				return ret;
		}

		/*
		 * Incase luminance is set we want to send the value back in nits but since
		 * DP_EDP_PANEL_TARGET_LUMINANCE stores values in millinits we need to divide
		 * by 1000.
		 */
		return (buf[0] | buf[1] << 8 | buf[2] << 16) / 1000;
		} else {
			ret = drm_dp_dpcd_read_data(aux, DP_EDP_BACKLIGHT_BRIGHTNESS_MSB,
						    buf, size);
			if (ret < 0) {
			drm_dbg_kms(aux->drm_dev, "%s: Failed to read backlight level: %d\n",
				drm_dbg_kms(aux->drm_dev,
					    "%s: Failed to read backlight level: %d\n",
					    aux->name, ret);
				return ret;
			}
@@ -4222,6 +4241,7 @@ drm_edp_backlight_probe_state(struct drm_dp_aux *aux, struct drm_edp_backlight_i
			else
				return buf[0];
		}
	}

	/*
	 * If we're not in DPCD control mode yet, the programmed brightness value is meaningless and