SR(BL1_PWM_USER_LEVEL), \
        SR(DC_ABM1_LS_MIN_MAX_PIXEL_VALUE_THRES), \
        SR(DC_ABM1_HGLS_REG_READ_PROGRESS), \
+       SR(DC_ABM1_ACE_OFFSET_SLOPE_0), \
+       SR(DC_ABM1_ACE_THRES_12), \
        SR(BIOS_SCRATCH_2)
 
 #define ABM_DCN10_REG_LIST(id)\
        SRI(BL1_PWM_USER_LEVEL, ABM, id), \
        SRI(DC_ABM1_LS_MIN_MAX_PIXEL_VALUE_THRES, ABM, id), \
        SRI(DC_ABM1_HGLS_REG_READ_PROGRESS, ABM, id), \
+       SRI(DC_ABM1_ACE_OFFSET_SLOPE_0, ABM, id), \
+       SRI(DC_ABM1_ACE_THRES_12, ABM, id), \
        NBIO_SR(BIOS_SCRATCH_2)
 
 #define ABM_DCN20_REG_LIST() \
        SR(BL1_PWM_USER_LEVEL), \
        SR(DC_ABM1_LS_MIN_MAX_PIXEL_VALUE_THRES), \
        SR(DC_ABM1_HGLS_REG_READ_PROGRESS), \
+       SR(DC_ABM1_ACE_OFFSET_SLOPE_0), \
+       SR(DC_ABM1_ACE_THRES_12), \
        NBIO_SR(BIOS_SCRATCH_2)
 
 #if defined(CONFIG_DRM_AMD_DC_DCN3_0)
-#define ABM_DCN301_REG_LIST(id)\
+#define ABM_DCN30_REG_LIST(id)\
        ABM_COMMON_REG_LIST_DCE_BASE(), \
        SRI(DC_ABM1_HG_SAMPLE_RATE, ABM, id), \
        SRI(DC_ABM1_LS_SAMPLE_RATE, ABM, id), \
        SRI(BL1_PWM_USER_LEVEL, ABM, id), \
        SRI(DC_ABM1_LS_MIN_MAX_PIXEL_VALUE_THRES, ABM, id), \
        SRI(DC_ABM1_HGLS_REG_READ_PROGRESS, ABM, id), \
+       SRI(DC_ABM1_ACE_OFFSET_SLOPE_0, ABM, id), \
+       SRI(DC_ABM1_ACE_THRES_12, ABM, id), \
        NBIO_SR(BIOS_SCRATCH_2)
 #endif
 
        uint32_t BL1_PWM_USER_LEVEL;
        uint32_t DC_ABM1_LS_MIN_MAX_PIXEL_VALUE_THRES;
        uint32_t DC_ABM1_HGLS_REG_READ_PROGRESS;
+       uint32_t DC_ABM1_ACE_OFFSET_SLOPE_0;
+       uint32_t DC_ABM1_ACE_THRES_12;
        uint32_t MASTER_COMM_CNTL_REG;
        uint32_t MASTER_COMM_CMD_REG;
        uint32_t MASTER_COMM_DATA_REG1;
 
 #define FN(reg_name, field_name) \
        dce_panel_cntl->shift->field_name, dce_panel_cntl->mask->field_name
 
-static unsigned int calculate_16_bit_backlight_from_pwm(struct dce_panel_cntl *dce_panel_cntl)
+static unsigned int dce_get_16_bit_backlight_from_pwm(struct panel_cntl *panel_cntl)
 {
        uint64_t current_backlight;
        uint32_t round_result;
        uint32_t pwm_period_cntl, bl_period, bl_int_count;
        uint32_t bl_pwm_cntl, bl_pwm, fractional_duty_cycle_en;
        uint32_t bl_period_mask, bl_pwm_mask;
+       struct dce_panel_cntl *dce_panel_cntl = TO_DCE_PANEL_CNTL(panel_cntl);
 
        pwm_period_cntl = REG_READ(BL_PWM_PERIOD_CNTL);
        REG_GET(BL_PWM_PERIOD_CNTL, BL_PWM_PERIOD, &bl_period);
        REG_UPDATE(BL_PWM_GRP1_REG_LOCK,
                        BL_PWM_GRP1_REG_LOCK, 0);
 
-       current_backlight = calculate_16_bit_backlight_from_pwm(dce_panel_cntl);
+       current_backlight = dce_get_16_bit_backlight_from_pwm(panel_cntl);
 
        return current_backlight;
 }
        .is_panel_powered_on = dce_is_panel_powered_on,
        .store_backlight_level = dce_store_backlight_level,
        .driver_set_backlight = dce_driver_set_backlight,
+       .get_current_backlight = dce_get_16_bit_backlight_from_pwm,
 };
 
 void dce_panel_cntl_construct(