]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/tegra: Support YVYU, VYUY and YU24 formats
authorThierry Reding <treding@nvidia.com>
Thu, 24 Feb 2022 18:39:51 +0000 (19:39 +0100)
committerThierry Reding <treding@nvidia.com>
Tue, 1 Mar 2022 10:13:09 +0000 (11:13 +0100)
Signed-off-by: Thierry Reding <treding@nvidia.com>
drivers/gpu/drm/tegra/dc.c
drivers/gpu/drm/tegra/dc.h
drivers/gpu/drm/tegra/plane.c

index 9442d7ee84a06edb1c864f18245bb39b98be107b..c6951cf5d2ca718a33325fd1da31626857a7b681 100644 (file)
@@ -1232,8 +1232,11 @@ static const u32 tegra124_overlay_formats[] = {
        /* planar formats */
        DRM_FORMAT_UYVY,
        DRM_FORMAT_YUYV,
-       DRM_FORMAT_YUV420,
-       DRM_FORMAT_YUV422,
+       DRM_FORMAT_YVYU,
+       DRM_FORMAT_VYUY,
+       DRM_FORMAT_YUV420, /* YU12 */
+       DRM_FORMAT_YUV422, /* YU16 */
+       DRM_FORMAT_YUV444, /* YU24 */
        /* semi-planar formats */
        DRM_FORMAT_NV12,
        DRM_FORMAT_NV21,
index 67c4c5baa3cf2c8caa9db73f174ce5d90aa8a79f..f902794d42ccbdc9195502b982f88cfef860dc86 100644 (file)
@@ -637,6 +637,7 @@ int tegra_dc_rgb_exit(struct tegra_dc *dc);
 #define WIN_COLOR_DEPTH_A8B8G8R8       36
 #define WIN_COLOR_DEPTH_B8G8R8X8       37
 #define WIN_COLOR_DEPTH_R8G8B8X8       38
+#define WIN_COLOR_DEPTH_YCbCr444P      41
 #define WIN_COLOR_DEPTH_YCrCb420SP     42
 #define WIN_COLOR_DEPTH_YCbCr420SP     43
 #define WIN_COLOR_DEPTH_YCrCb422SP     44
index 5136a37c02399405a9438f467644db46fc2cb930..e0e6938c62003aacded8150080e0e708e4ab0156 100644 (file)
@@ -413,6 +413,22 @@ int tegra_plane_format(u32 fourcc, u32 *format, u32 *swap)
                *swap = BYTE_SWAP_SWAP2;
                break;
 
+       case DRM_FORMAT_YVYU:
+               if (!swap)
+                       return -EINVAL;
+
+               *format = WIN_COLOR_DEPTH_YCbCr422;
+               *swap = BYTE_SWAP_SWAP4;
+               break;
+
+       case DRM_FORMAT_VYUY:
+               if (!swap)
+                       return -EINVAL;
+
+               *format = WIN_COLOR_DEPTH_YCbCr422;
+               *swap = BYTE_SWAP_SWAP4HW;
+               break;
+
        case DRM_FORMAT_YUV420:
                *format = WIN_COLOR_DEPTH_YCbCr420P;
                break;
@@ -421,6 +437,10 @@ int tegra_plane_format(u32 fourcc, u32 *format, u32 *swap)
                *format = WIN_COLOR_DEPTH_YCbCr422P;
                break;
 
+       case DRM_FORMAT_YUV444:
+               *format = WIN_COLOR_DEPTH_YCbCr444P;
+               break;
+
        case DRM_FORMAT_NV12:
                *format = WIN_COLOR_DEPTH_YCbCr420SP;
                break;
@@ -486,6 +506,7 @@ bool tegra_plane_format_is_yuv(unsigned int format, unsigned int *planes, unsign
        case WIN_COLOR_DEPTH_YUV422R:
        case WIN_COLOR_DEPTH_YCbCr422RA:
        case WIN_COLOR_DEPTH_YUV422RA:
+       case WIN_COLOR_DEPTH_YCbCr444P:
                if (planes)
                        *planes = 3;