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.

Signed-off-by: Suraj Kandpal <suraj.kand...@intel.com>
---
 drivers/gpu/drm/display/drm_dp_helper.c | 35 ++++++++++++++++++-------
 1 file changed, 25 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/display/drm_dp_helper.c 
b/drivers/gpu/drm/display/drm_dp_helper.c
index c58973d8c5f0..bb1242a1bf6b 100644
--- a/drivers/gpu/drm/display/drm_dp_helper.c
+++ b/drivers/gpu/drm/display/drm_dp_helper.c
@@ -4185,7 +4185,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);
@@ -4202,17 +4202,32 @@ 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 (ret < 0) {
-                       drm_dbg_kms(aux->drm_dev, "%s: Failed to read backlight 
level: %d\n",
-                                   aux->name, ret);
-                       return ret;
+               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;
                }
 
-               if (bl->lsb_reg_used)
-                       return (buf[0] << 8) | buf[1];
-               else
-                       return buf[0];
+               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",
+                                           aux->name, ret);
+                               return ret;
+                       }
+
+                       if (bl->lsb_reg_used)
+                               return (buf[0] << 8) | buf[1];
+                       else
+                               return buf[0];
+               }
        }
 
        /*
-- 
2.34.1

Reply via email to