OSDN Git Service

drm/amd/display: add option to use custom backlight caps
authorJosip Pavic <Josip.Pavic@amd.com>
Mon, 3 Apr 2023 14:42:06 +0000 (10:42 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 24 Apr 2023 22:36:46 +0000 (18:36 -0400)
[Why & How]
Provide option for vendors to specify a custom brightness-to-backlight
conversion profile.

Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Reviewed-by: Anthony Koo <Anthony.Koo@amd.com>
Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: Josip Pavic <Josip.Pavic@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 51e76bc..68d95b9 100644 (file)
@@ -116,6 +116,27 @@ static const struct abm_parameters * const abm_settings[] = {
        abm_settings_config2,
 };
 
+const struct dm_bl_data_point custom_backlight_curve0[] = {
+               {2, 14}, {4, 16}, {6, 18}, {8, 21}, {10, 23}, {12, 26}, {14, 29}, {16, 32}, {18, 35},
+               {20, 38}, {22, 41}, {24, 44}, {26, 48}, {28, 52}, {30, 55}, {32, 59}, {34, 62},
+               {36, 67}, {38, 71}, {40, 75}, {42, 80}, {44, 84}, {46, 88}, {48, 93}, {50, 98},
+               {52, 103}, {54, 108}, {56, 113}, {58, 118}, {60, 123}, {62, 129}, {64, 135}, {66, 140},
+               {68, 146}, {70, 152}, {72, 158}, {74, 164}, {76, 171}, {78, 177}, {80, 183}, {82, 190},
+               {84, 197}, {86, 204}, {88, 211}, {90, 218}, {92, 225}, {94, 232}, {96, 240}, {98, 247}};
+
+struct custom_backlight_profile {
+       uint8_t  ac_level_percentage;
+       uint8_t  dc_level_percentage;
+       uint8_t  min_input_signal;
+       uint8_t  max_input_signal;
+       uint8_t  num_data_points;
+       const struct dm_bl_data_point *data_points;
+};
+
+static const struct custom_backlight_profile custom_backlight_profiles[] = {
+               {100, 32, 12, 255, ARRAY_SIZE(custom_backlight_curve0), custom_backlight_curve0},
+};
+
 #define NUM_AMBI_LEVEL    5
 #define NUM_AGGR_LEVEL    4
 #define NUM_POWER_FN_SEGS 8
@@ -944,3 +965,25 @@ bool psr_su_set_dsc_slice_height(struct dc *dc, struct dc_link *link,
 
        return true;
 }
+
+bool fill_custom_backlight_caps(unsigned int config_no, struct dm_acpi_atif_backlight_caps *caps)
+{
+       unsigned int data_points_size;
+
+       if (config_no >= ARRAY_SIZE(custom_backlight_profiles))
+               return false;
+
+       data_points_size = custom_backlight_profiles[config_no].num_data_points
+                       * sizeof(custom_backlight_profiles[config_no].data_points[0]);
+
+       caps->size = sizeof(struct dm_acpi_atif_backlight_caps) - sizeof(caps->data_points) + data_points_size;
+       caps->flags = 0;
+       caps->error_code = 0;
+       caps->ac_level_percentage = custom_backlight_profiles[config_no].ac_level_percentage;
+       caps->dc_level_percentage = custom_backlight_profiles[config_no].dc_level_percentage;
+       caps->min_input_signal = custom_backlight_profiles[config_no].min_input_signal;
+       caps->max_input_signal = custom_backlight_profiles[config_no].max_input_signal;
+       caps->num_data_points = custom_backlight_profiles[config_no].num_data_points;
+       memcpy(caps->data_points, custom_backlight_profiles[config_no].data_points, data_points_size);
+       return true;
+}
index 1d3079e..ffc924c 100644 (file)
@@ -62,4 +62,7 @@ bool mod_power_only_edp(const struct dc_state *context,
 bool psr_su_set_dsc_slice_height(struct dc *dc, struct dc_link *link,
                              struct dc_stream_state *stream,
                              struct psr_config *config);
+
+bool fill_custom_backlight_caps(unsigned int config_no,
+               struct dm_acpi_atif_backlight_caps *caps);
 #endif /* MODULES_POWER_POWER_HELPERS_H_ */