From: Aaron Kling <[email protected]> YVU420 is used by AOSP for video playback among other things. YVU422 and YVU444 can be trivially supported in the same manner, so add them as well.
Signed-off-by: Aaron Kling <[email protected]> --- drivers/gpu/drm/tegra/dc.c | 7 +++++++ drivers/gpu/drm/tegra/hub.c | 2 ++ drivers/gpu/drm/tegra/plane.c | 24 ++++++++++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c index 39c2e920d76a6..be913f2609077 100644 --- a/drivers/gpu/drm/tegra/dc.c +++ b/drivers/gpu/drm/tegra/dc.c @@ -1282,6 +1282,8 @@ static const u32 tegra20_overlay_formats[] = { DRM_FORMAT_YUYV, DRM_FORMAT_YUV420, DRM_FORMAT_YUV422, + DRM_FORMAT_YVU420, + DRM_FORMAT_YVU422, }; static const u32 tegra114_overlay_formats[] = { @@ -1309,6 +1311,8 @@ static const u32 tegra114_overlay_formats[] = { DRM_FORMAT_YUYV, DRM_FORMAT_YUV420, DRM_FORMAT_YUV422, + DRM_FORMAT_YVU420, + DRM_FORMAT_YVU422, /* semi-planar formats */ DRM_FORMAT_NV12, DRM_FORMAT_NV21, @@ -1349,6 +1353,9 @@ static const u32 tegra124_overlay_formats[] = { DRM_FORMAT_YUV420, /* YU12 */ DRM_FORMAT_YUV422, /* YU16 */ DRM_FORMAT_YUV444, /* YU24 */ + DRM_FORMAT_YVU420, /* YV12 */ + DRM_FORMAT_YVU422, /* YV16 */ + DRM_FORMAT_YVU444, /* YV24 */ /* semi-planar formats */ DRM_FORMAT_NV12, DRM_FORMAT_NV21, diff --git a/drivers/gpu/drm/tegra/hub.c b/drivers/gpu/drm/tegra/hub.c index 5a86f8260f136..ac4542e54d7dd 100644 --- a/drivers/gpu/drm/tegra/hub.c +++ b/drivers/gpu/drm/tegra/hub.c @@ -51,6 +51,8 @@ static const u32 tegra_shared_plane_formats[] = { DRM_FORMAT_YUYV, DRM_FORMAT_YUV420, DRM_FORMAT_YUV422, + DRM_FORMAT_YVU420, + DRM_FORMAT_YVU422, }; static const u64 tegra_shared_plane_modifiers[] = { diff --git a/drivers/gpu/drm/tegra/plane.c b/drivers/gpu/drm/tegra/plane.c index 757bc552809fe..79ef5fc1b3678 100644 --- a/drivers/gpu/drm/tegra/plane.c +++ b/drivers/gpu/drm/tegra/plane.c @@ -433,14 +433,38 @@ int tegra_plane_format(u32 fourcc, u32 *format, u32 *swap, bool *swap_uv) *format = WIN_COLOR_DEPTH_YCbCr420P; break; + case DRM_FORMAT_YVU420: + if (!swap_uv) + return -EINVAL; + + *format = WIN_COLOR_DEPTH_YCbCr420P; + *swap_uv = true; + break; + case DRM_FORMAT_YUV422: *format = WIN_COLOR_DEPTH_YCbCr422P; break; + case DRM_FORMAT_YVU422: + if (!swap_uv) + return -EINVAL; + + *format = WIN_COLOR_DEPTH_YCbCr422P; + *swap_uv = true; + break; + case DRM_FORMAT_YUV444: *format = WIN_COLOR_DEPTH_YCbCr444P; break; + case DRM_FORMAT_YVU444: + if (!swap_uv) + return -EINVAL; + + *format = WIN_COLOR_DEPTH_YCbCr444P; + *swap_uv = true; + break; + case DRM_FORMAT_NV12: *format = WIN_COLOR_DEPTH_YCbCr420SP; break; -- 2.54.0
