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);
        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];
+               /*
+                * 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",
+                                           aux->name, ret);
+                               return ret;
+                       }
+
+                       if (bl->lsb_reg_used)
+                               return (buf[0] << 8) | buf[1];
+                       else
+                               return buf[0];
+               }
        }
 
        /*