diff options
author | Thierry Reding <treding@nvidia.com> | 2022-02-24 19:39:51 +0100 |
---|---|---|
committer | Thierry Reding <treding@nvidia.com> | 2022-03-01 11:13:09 +0100 |
commit | cf5086d35d8c7c2b9cb1ca34590097a5f2f8b588 (patch) | |
tree | f63e945605281c4014a47429b66745e64b0c04f7 | |
parent | a649b133c3154f3d1d297cf85711957e61c0f070 (diff) |
drm/tegra: Support YVYU, VYUY and YU24 formatsdrm/tegra/for-5.18-rc1
Signed-off-by: Thierry Reding <treding@nvidia.com>
-rw-r--r-- | drivers/gpu/drm/tegra/dc.c | 7 | ||||
-rw-r--r-- | drivers/gpu/drm/tegra/dc.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/tegra/plane.c | 21 |
3 files changed, 27 insertions, 2 deletions
diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c index 9442d7ee84a0..c6951cf5d2ca 100644 --- a/drivers/gpu/drm/tegra/dc.c +++ b/drivers/gpu/drm/tegra/dc.c @@ -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, diff --git a/drivers/gpu/drm/tegra/dc.h b/drivers/gpu/drm/tegra/dc.h index 67c4c5baa3cf..f902794d42cc 100644 --- a/drivers/gpu/drm/tegra/dc.h +++ b/drivers/gpu/drm/tegra/dc.h @@ -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 diff --git a/drivers/gpu/drm/tegra/plane.c b/drivers/gpu/drm/tegra/plane.c index 5136a37c0239..e0e6938c6200 100644 --- a/drivers/gpu/drm/tegra/plane.c +++ b/drivers/gpu/drm/tegra/plane.c @@ -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; |