u8 dev_state, bool drv_state) { return 0; }
 static inline int amdgpu_acpi_smart_shift_update(struct drm_device *dev,
                                                 enum amdgpu_ss ss_state) { return 0; }
+static inline void amdgpu_acpi_get_backlight_caps(struct amdgpu_dm_backlight_caps *caps) { }
 #endif
 
 #if defined(CONFIG_ACPI) && defined(CONFIG_SUSPEND)
 
                        characteristics.min_input_signal;
        atif->backlight_caps.max_input_signal =
                        characteristics.max_input_signal;
+       atif->backlight_caps.ac_level = characteristics.ac_level;
+       atif->backlight_caps.dc_level = characteristics.dc_level;
 out:
        kfree(info);
        return err;
        caps->caps_valid = atif->backlight_caps.caps_valid;
        caps->min_input_signal = atif->backlight_caps.min_input_signal;
        caps->max_input_signal = atif->backlight_caps.max_input_signal;
+       caps->ac_level = atif->backlight_caps.ac_level;
+       caps->dc_level = atif->backlight_caps.dc_level;
 }
 
 /**
 
 #include <linux/types.h>
 #include <linux/pm_runtime.h>
 #include <linux/pci.h>
+#include <linux/power_supply.h>
 #include <linux/firmware.h>
 #include <linux/component.h>
 #include <linux/dmi.h>
        struct drm_device *drm = aconnector->base.dev;
        struct amdgpu_display_manager *dm = &drm_to_adev(drm)->dm;
        struct backlight_properties props = { 0 };
+       struct amdgpu_dm_backlight_caps caps = { 0 };
        char bl_name[16];
 
        if (aconnector->bl_idx == -1)
                return;
        }
 
+       amdgpu_acpi_get_backlight_caps(&caps);
+       if (caps.caps_valid) {
+               if (power_supply_is_system_supplied() > 0)
+                       props.brightness = caps.ac_level;
+               else
+                       props.brightness = caps.dc_level;
+       } else
+               props.brightness = AMDGPU_MAX_BL_LEVEL;
+
        props.max_brightness = AMDGPU_MAX_BL_LEVEL;
-       props.brightness = AMDGPU_MAX_BL_LEVEL;
        props.type = BACKLIGHT_RAW;
 
        snprintf(bl_name, sizeof(bl_name), "amdgpu_bl%d",