]> Git Repo - linux.git/blobdiff - drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
Merge tag 'pinctrl-v6.8-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw...
[linux.git] / drivers / gpu / drm / amd / amdgpu / amdgpu_mode.h
index 32fe05c810c6fcd3b89fe89ce7eba88f69c12aaf..2e4911050cc5ec8e34213553c42681f5f87ac2d1 100644 (file)
@@ -32,7 +32,6 @@
 
 #include <drm/display/drm_dp_helper.h>
 #include <drm/drm_crtc.h>
-#include <drm/drm_edid.h>
 #include <drm/drm_encoder.h>
 #include <drm/drm_fixed.h>
 #include <drm/drm_framebuffer.h>
@@ -51,6 +50,7 @@ struct amdgpu_device;
 struct amdgpu_encoder;
 struct amdgpu_router;
 struct amdgpu_hpd;
+struct edid;
 
 #define to_amdgpu_crtc(x) container_of(x, struct amdgpu_crtc, base)
 #define to_amdgpu_connector(x) container_of(x, struct amdgpu_connector, base)
@@ -343,6 +343,97 @@ struct amdgpu_mode_info {
        int                     disp_priority;
        const struct amdgpu_display_funcs *funcs;
        const enum drm_plane_type *plane_type;
+
+       /* Driver-private color mgmt props */
+
+       /* @plane_degamma_lut_property: Plane property to set a degamma LUT to
+        * convert encoded values to light linear values before sampling or
+        * blending.
+        */
+       struct drm_property *plane_degamma_lut_property;
+       /* @plane_degamma_lut_size_property: Plane property to define the max
+        * size of degamma LUT as supported by the driver (read-only).
+        */
+       struct drm_property *plane_degamma_lut_size_property;
+       /**
+        * @plane_degamma_tf_property: Plane pre-defined transfer function to
+        * to go from scanout/encoded values to linear values.
+        */
+       struct drm_property *plane_degamma_tf_property;
+       /**
+        * @plane_hdr_mult_property:
+        */
+       struct drm_property *plane_hdr_mult_property;
+
+       struct drm_property *plane_ctm_property;
+       /**
+        * @shaper_lut_property: Plane property to set pre-blending shaper LUT
+        * that converts color content before 3D LUT. If
+        * plane_shaper_tf_property != Identity TF, AMD color module will
+        * combine the user LUT values with pre-defined TF into the LUT
+        * parameters to be programmed.
+        */
+       struct drm_property *plane_shaper_lut_property;
+       /**
+        * @shaper_lut_size_property: Plane property for the size of
+        * pre-blending shaper LUT as supported by the driver (read-only).
+        */
+       struct drm_property *plane_shaper_lut_size_property;
+       /**
+        * @plane_shaper_tf_property: Plane property to set a predefined
+        * transfer function for pre-blending shaper (before applying 3D LUT)
+        * with or without LUT. There is no shaper ROM, but we can use AMD
+        * color modules to program LUT parameters from predefined TF (or
+        * from a combination of pre-defined TF and the custom 1D LUT).
+        */
+       struct drm_property *plane_shaper_tf_property;
+       /**
+        * @plane_lut3d_property: Plane property for color transformation using
+        * a 3D LUT (pre-blending), a three-dimensional array where each
+        * element is an RGB triplet. Each dimension has the size of
+        * lut3d_size. The array contains samples from the approximated
+        * function. On AMD, values between samples are estimated by
+        * tetrahedral interpolation. The array is accessed with three indices,
+        * one for each input dimension (color channel), blue being the
+        * outermost dimension, red the innermost.
+        */
+       struct drm_property *plane_lut3d_property;
+       /**
+        * @plane_degamma_lut_size_property: Plane property to define the max
+        * size of 3D LUT as supported by the driver (read-only). The max size
+        * is the max size of one dimension and, therefore, the max number of
+        * entries for 3D LUT array is the 3D LUT size cubed;
+        */
+       struct drm_property *plane_lut3d_size_property;
+       /**
+        * @plane_blend_lut_property: Plane property for output gamma before
+        * blending. Userspace set a blend LUT to convert colors after 3D LUT
+        * conversion. It works as a post-3DLUT 1D LUT. With shaper LUT, they
+        * are sandwiching 3D LUT with two 1D LUT. If plane_blend_tf_property
+        * != Identity TF, AMD color module will combine the user LUT values
+        * with pre-defined TF into the LUT parameters to be programmed.
+        */
+       struct drm_property *plane_blend_lut_property;
+       /**
+        * @plane_blend_lut_size_property: Plane property to define the max
+        * size of blend LUT as supported by the driver (read-only).
+        */
+       struct drm_property *plane_blend_lut_size_property;
+       /**
+        * @plane_blend_tf_property: Plane property to set a predefined
+        * transfer function for pre-blending blend/out_gamma (after applying
+        * 3D LUT) with or without LUT. There is no blend ROM, but we can use
+        * AMD color modules to program LUT parameters from predefined TF (or
+        * from a combination of pre-defined TF and the custom 1D LUT).
+        */
+       struct drm_property *plane_blend_tf_property;
+       /* @regamma_tf_property: Transfer function for CRTC regamma
+        * (post-blending). Possible values are defined by `enum
+        * amdgpu_transfer_function`. There is no regamma ROM, but we can use
+        * AMD color modules to program LUT parameters from predefined TF (or
+        * from a combination of pre-defined TF and the custom 1D LUT).
+        */
+       struct drm_property *regamma_tf_property;
 };
 
 #define AMDGPU_MAX_BL_LEVEL 0xFF
@@ -416,6 +507,10 @@ struct amdgpu_crtc {
 
        int otg_inst;
        struct drm_pending_vblank_event *event;
+
+       bool wb_pending;
+       bool wb_enabled;
+       struct drm_writeback_connector *wb_conn;
 };
 
 struct amdgpu_encoder_atom_dig {
This page took 0.038422 seconds and 4 git commands to generate.