Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amd: Pass luminance data to amdgpu_dm_backlight_caps

The ATIF method on some systems will provide a backlight curve. Pass
this curve into amdgpu_dm add it to the structures.

Reviewed-by: Alex Hung <alex.hung@amd.com>
Link: https://lore.kernel.org/r/20250228185145.186319-3-mario.limonciello@amd.com
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Mario Limonciello and committed by
Alex Deucher
f729e637 1c79b5fc

+27 -1
+4
drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c
··· 394 394 characteristics.max_input_signal; 395 395 atif->backlight_caps.ac_level = characteristics.ac_level; 396 396 atif->backlight_caps.dc_level = characteristics.dc_level; 397 + atif->backlight_caps.data_points = characteristics.number_of_points; 398 + memcpy(atif->backlight_caps.luminance_data, 399 + characteristics.data_points, 400 + sizeof(atif->backlight_caps.luminance_data)); 397 401 out: 398 402 kfree(info); 399 403 return err;
+20
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
··· 151 151 bool running; 152 152 }; 153 153 154 + #define MAX_LUMINANCE_DATA_POINTS 99 155 + 156 + /** 157 + * struct amdgpu_dm_luminance_data - Custom luminance data 158 + * @luminance: Luminance in percent 159 + * @input_signal: Input signal in range 0-255 160 + */ 161 + struct amdgpu_dm_luminance_data { 162 + u8 luminance; 163 + u8 input_signal; 164 + } __packed; 165 + 154 166 /** 155 167 * struct amdgpu_dm_backlight_caps - Information about backlight 156 168 * ··· 207 195 * @dc_level: the default brightness if booted on DC 208 196 */ 209 197 u8 dc_level; 198 + /** 199 + * @data_points: the number of custom luminance data points 200 + */ 201 + u8 data_points; 202 + /** 203 + * @luminance_data: custom luminance data 204 + */ 205 + struct amdgpu_dm_luminance_data luminance_data[MAX_LUMINANCE_DATA_POINTS]; 210 206 }; 211 207 212 208 /**
+3 -1
drivers/gpu/drm/amd/include/amd_acpi.h
··· 61 61 62 62 struct atif_qbtc_data_point { 63 63 u8 luminance; /* luminance in percent */ 64 - u8 ipnut_signal; /* input signal in range 0-255 */ 64 + u8 input_signal; /* input signal in range 0-255 */ 65 65 } __packed; 66 66 67 67 struct atif_qbtc_output { ··· 75 75 u8 number_of_points; /* number of data points */ 76 76 struct atif_qbtc_data_point data_points[ATIF_QBTC_MAX_DATA_POINTS]; 77 77 } __packed; 78 + static_assert(ATIF_QBTC_MAX_DATA_POINTS == MAX_LUMINANCE_DATA_POINTS); 79 + static_assert(sizeof(struct atif_qbtc_data_point) == sizeof(struct amdgpu_dm_luminance_data)); 78 80 79 81 #define ATIF_NOTIFY_MASK 0x3 80 82 #define ATIF_NOTIFY_NONE 0