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;
 
        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
  *
         * @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];
 };
 
 /**
 
 
 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 {
        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