drm/amd/display: gradually ramp ABM intensity
authorRizvi <syerizvi@amd.com>
Wed, 2 Dec 2020 21:52:22 +0000 (14:52 -0700)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 23 Dec 2020 20:01:47 +0000 (15:01 -0500)
[Why]
Need driver to pass values of backlight ramp start and ramp reduction so
that intensity can be ramped down appropriately.

[How]
Using abm_parameters structure to get these values from driver.

Signed-off-by: Rizvi <syerizvi@amd.com>
Acked-by: Bindu Ramamurthy <bindu.r@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/modules/power/power_helpers.c
drivers/gpu/drm/amd/display/modules/power/power_helpers.h

index cc983f6..4fd8bce 100644 (file)
@@ -82,22 +82,24 @@ struct abm_parameters {
        unsigned char deviation_gain;
        unsigned char min_knee;
        unsigned char max_knee;
+       unsigned short blRampReduction;
+       unsigned short blRampStart;
 };
 
 static const struct abm_parameters abm_settings_config0[abm_defines_max_level] = {
-//  min_red  max_red  bright_pos  dark_pos  brightness_gain  contrast  deviation  min_knee  max_knee
-       {0xff,   0xbf,    0x20,       0x00,     0xff,            0x99,     0xb3,      0x40,     0xe0},
-       {0xde,   0x85,    0x20,       0x00,     0xff,            0x90,     0xa8,      0x40,     0xdf},
-       {0xb0,   0x50,    0x20,       0x00,     0xc0,            0x88,     0x78,      0x70,     0xa0},
-       {0x82,   0x40,    0x20,       0x00,     0x00,            0xff,     0xb3,      0x70,     0x70},
+//  min_red  max_red  bright_pos  dark_pos  bright_gain  contrast  dev   min_knee  max_knee  blStart  blRed
+       {0xff,   0xbf,    0x20,   0x00,     0xff,        0x99,     0xb3, 0x40,     0xe0,     0xCCCC,  0xCCCC},
+       {0xde,   0x85,    0x20,   0x00,     0xff,        0x90,     0xa8, 0x40,     0xdf,     0xCCCC,  0xCCCC},
+       {0xb0,   0x50,    0x20,   0x00,     0xc0,        0x88,     0x78, 0x70,     0xa0,     0xCCCC,  0xCCCC},
+       {0x82,   0x40,    0x20,   0x00,     0x00,        0xff,     0xb3, 0x70,     0x70,     0xCCCC,  0xCCCC},
 };
 
 static const struct abm_parameters abm_settings_config1[abm_defines_max_level] = {
-//  min_red  max_red  bright_pos  dark_pos  brightness_gain  contrast  deviation  min_knee  max_knee
-       {0xf0,   0xd9,    0x20,       0x00,     0x00,            0xff,     0xb3,      0x70,     0x70},
-       {0xcd,   0xa5,    0x20,       0x00,     0x00,            0xff,     0xb3,      0x70,     0x70},
-       {0x99,   0x65,    0x20,       0x00,     0x00,            0xff,     0xb3,      0x70,     0x70},
-       {0x82,   0x4d,    0x20,       0x00,     0x00,            0xff,     0xb3,      0x70,     0x70},
+//  min_red  max_red  bright_pos  dark_pos  bright_gain  contrast  dev   min_knee  max_knee  blStart  blRed
+       {0xf0,   0xd9,    0x20,   0x00,     0x00,        0xff,     0xb3, 0x70,     0x70,     0xCCCC,  0xCCCC},
+       {0xcd,   0xa5,    0x20,   0x00,     0x00,        0xff,     0xb3, 0x70,     0x70,     0xCCCC,  0xCCCC},
+       {0x99,   0x65,    0x20,   0x00,     0x00,        0xff,     0xb3, 0x70,     0x70,     0xCCCC,  0xCCCC},
+       {0x82,   0x4d,    0x20,   0x00,     0x00,        0xff,     0xb3, 0x70,     0x70,     0xCCCC,  0xCCCC},
 };
 
 static const struct abm_parameters * const abm_settings[] = {
@@ -662,6 +664,7 @@ bool dmub_init_abm_config(struct resource_pool *res_pool,
 {
        struct iram_table_v_2_2 ram_table;
        struct abm_config_table config;
+       unsigned int set = params.set;
        bool result = false;
        uint32_t i, j = 0;
 
@@ -710,6 +713,18 @@ bool dmub_init_abm_config(struct resource_pool *res_pool,
                config.max_knee[i] = ram_table.max_knee[i];
        }
 
+       if (params.backlight_ramping_override) {
+               for (i = 0; i < NUM_AGGR_LEVEL; i++) {
+                       config.blRampReduction[i] = params.backlight_ramping_reduction;
+                       config.blRampStart[i] = params.backlight_ramping_start;
+                       }
+               } else {
+                       for (i = 0; i < NUM_AGGR_LEVEL; i++) {
+                               config.blRampReduction[i] = abm_settings[set][i].blRampReduction;
+                               config.blRampStart[i] = abm_settings[set][i].blRampStart;
+                               }
+                       }
+
        config.min_abm_backlight = ram_table.min_abm_backlight;
 
 #if defined(CONFIG_DRM_AMD_DC_DCN)
index fa4728d..6f2eecc 100644 (file)
@@ -39,6 +39,7 @@ enum abm_defines {
 struct dmcu_iram_parameters {
        unsigned int *backlight_lut_array;
        unsigned int backlight_lut_array_size;
+       bool backlight_ramping_override;
        unsigned int backlight_ramping_reduction;
        unsigned int backlight_ramping_start;
        unsigned int min_abm_backlight;