Commit c19bd82f authored by Anthony Koo's avatar Anthony Koo Committed by Alex Deucher

drm/amd/display: Increase precision for backlight curve

[Why]
We are currently losing precision when we convert from
16 bit --> 8 bit --> 16 bit.

[How]
We shouldn't down convert unnecessarily and lose precision.
Keep values at 16 bit and use directly.
Signed-off-by: default avatarAnthony Koo <Anthony.Koo@amd.com>
Reviewed-by: default avatarAric Cyr <Aric.Cyr@amd.com>
Acked-by: default avatarLeo Li <sunpeng.li@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent ce72741b
...@@ -165,18 +165,11 @@ struct iram_table_v_2_2 { ...@@ -165,18 +165,11 @@ struct iram_table_v_2_2 {
}; };
#pragma pack(pop) #pragma pack(pop)
static uint16_t backlight_8_to_16(unsigned int backlight_8bit)
{
return (uint16_t)(backlight_8bit * 0x101);
}
static void fill_backlight_transform_table(struct dmcu_iram_parameters params, static void fill_backlight_transform_table(struct dmcu_iram_parameters params,
struct iram_table_v_2 *table) struct iram_table_v_2 *table)
{ {
unsigned int i; unsigned int i;
unsigned int num_entries = NUM_BL_CURVE_SEGS; unsigned int num_entries = NUM_BL_CURVE_SEGS;
unsigned int query_input_8bit;
unsigned int query_output_8bit;
unsigned int lut_index; unsigned int lut_index;
table->backlight_thresholds[0] = 0; table->backlight_thresholds[0] = 0;
...@@ -194,16 +187,13 @@ static void fill_backlight_transform_table(struct dmcu_iram_parameters params, ...@@ -194,16 +187,13 @@ static void fill_backlight_transform_table(struct dmcu_iram_parameters params,
* format U4.10. * format U4.10.
*/ */
for (i = 1; i+1 < num_entries; i++) { for (i = 1; i+1 < num_entries; i++) {
query_input_8bit = DIV_ROUNDUP((i * 256), num_entries);
lut_index = (params.backlight_lut_array_size - 1) * i / (num_entries - 1); lut_index = (params.backlight_lut_array_size - 1) * i / (num_entries - 1);
ASSERT(lut_index < params.backlight_lut_array_size); ASSERT(lut_index < params.backlight_lut_array_size);
query_output_8bit = params.backlight_lut_array[lut_index] >> 8;
table->backlight_thresholds[i] = table->backlight_thresholds[i] =
backlight_8_to_16(query_input_8bit); cpu_to_be16(DIV_ROUNDUP((i * 65536), num_entries));
table->backlight_offsets[i] = table->backlight_offsets[i] =
backlight_8_to_16(query_output_8bit); cpu_to_be16(params.backlight_lut_array[lut_index]);
} }
} }
...@@ -212,8 +202,6 @@ static void fill_backlight_transform_table_v_2_2(struct dmcu_iram_parameters par ...@@ -212,8 +202,6 @@ static void fill_backlight_transform_table_v_2_2(struct dmcu_iram_parameters par
{ {
unsigned int i; unsigned int i;
unsigned int num_entries = NUM_BL_CURVE_SEGS; unsigned int num_entries = NUM_BL_CURVE_SEGS;
unsigned int query_input_8bit;
unsigned int query_output_8bit;
unsigned int lut_index; unsigned int lut_index;
table->backlight_thresholds[0] = 0; table->backlight_thresholds[0] = 0;
...@@ -231,16 +219,13 @@ static void fill_backlight_transform_table_v_2_2(struct dmcu_iram_parameters par ...@@ -231,16 +219,13 @@ static void fill_backlight_transform_table_v_2_2(struct dmcu_iram_parameters par
* format U4.10. * format U4.10.
*/ */
for (i = 1; i+1 < num_entries; i++) { for (i = 1; i+1 < num_entries; i++) {
query_input_8bit = DIV_ROUNDUP((i * 256), num_entries);
lut_index = (params.backlight_lut_array_size - 1) * i / (num_entries - 1); lut_index = (params.backlight_lut_array_size - 1) * i / (num_entries - 1);
ASSERT(lut_index < params.backlight_lut_array_size); ASSERT(lut_index < params.backlight_lut_array_size);
query_output_8bit = params.backlight_lut_array[lut_index] >> 8;
table->backlight_thresholds[i] = table->backlight_thresholds[i] =
backlight_8_to_16(query_input_8bit); cpu_to_be16(DIV_ROUNDUP((i * 65536), num_entries));
table->backlight_offsets[i] = table->backlight_offsets[i] =
backlight_8_to_16(query_output_8bit); cpu_to_be16(params.backlight_lut_array[lut_index]);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment