]> www.infradead.org Git - users/hch/misc.git/commitdiff
drm/amd: Pass luminance data to amdgpu_dm_backlight_caps
authorMario Limonciello <mario.limonciello@amd.com>
Fri, 28 Feb 2025 18:51:42 +0000 (12:51 -0600)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 5 Mar 2025 15:42:42 +0000 (10:42 -0500)
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>
drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
drivers/gpu/drm/amd/include/amd_acpi.h

index 515c6f32448ded8c284ece5fc7bec8e09fe6a925..b7f8f2ff143dd1e0206894b019d69eebae049efb 100644 (file)
@@ -394,6 +394,10 @@ static int amdgpu_atif_query_backlight_caps(struct amdgpu_atif *atif)
                        characteristics.max_input_signal;
        atif->backlight_caps.ac_level = characteristics.ac_level;
        atif->backlight_caps.dc_level = characteristics.dc_level;
+       atif->backlight_caps.data_points = characteristics.number_of_points;
+       memcpy(atif->backlight_caps.luminance_data,
+              characteristics.data_points,
+              sizeof(atif->backlight_caps.luminance_data));
 out:
        kfree(info);
        return err;
index f3bc00e587ad04d68271e9d9589f05cb56b413c3..85b64c457ed6a02d269a6acb8e97a72b09a65b4c 100644 (file)
@@ -151,6 +151,18 @@ struct idle_workqueue {
        bool running;
 };
 
+#define MAX_LUMINANCE_DATA_POINTS 99
+
+/**
+ * struct amdgpu_dm_luminance_data - Custom luminance data
+ * @luminance: Luminance in percent
+ * @input_signal: Input signal in range 0-255
+ */
+struct amdgpu_dm_luminance_data {
+       u8 luminance;
+       u8 input_signal;
+} __packed;
+
 /**
  * struct amdgpu_dm_backlight_caps - Information about backlight
  *
@@ -195,6 +207,14 @@ struct amdgpu_dm_backlight_caps {
         * @dc_level: the default brightness if booted on DC
         */
        u8 dc_level;
+       /**
+        * @data_points: the number of custom luminance data points
+        */
+       u8 data_points;
+       /**
+        * @luminance_data: custom luminance data
+        */
+       struct amdgpu_dm_luminance_data luminance_data[MAX_LUMINANCE_DATA_POINTS];
 };
 
 /**
index 2d089d30518f3a2696a998ba9115773cdeecc2eb..06badbf0c5b9e67b6e077246db0369c8486cfad8 100644 (file)
@@ -61,7 +61,7 @@ struct atif_qbtc_arguments {
 
 struct atif_qbtc_data_point {
        u8 luminance;           /* luminance in percent */
-       u8 ipnut_signal;        /* input signal in range 0-255 */
+       u8 input_signal;        /* input signal in range 0-255 */
 } __packed;
 
 struct atif_qbtc_output {
@@ -75,6 +75,8 @@ struct atif_qbtc_output {
        u8 number_of_points;    /* number of data points */
        struct atif_qbtc_data_point data_points[ATIF_QBTC_MAX_DATA_POINTS];
 } __packed;
+static_assert(ATIF_QBTC_MAX_DATA_POINTS == MAX_LUMINANCE_DATA_POINTS);
+static_assert(sizeof(struct atif_qbtc_data_point) == sizeof(struct amdgpu_dm_luminance_data));
 
 #define ATIF_NOTIFY_MASK       0x3
 #define ATIF_NOTIFY_NONE       0