drm/tegra: Support ARGB and ABGR formats
authorThierry Reding <treding@nvidia.com>
Thu, 12 Oct 2017 15:30:55 +0000 (17:30 +0200)
committerThierry Reding <treding@nvidia.com>
Wed, 13 Dec 2017 13:16:39 +0000 (14:16 +0100)
These formats can easily be supported on all generations of Tegra.

Note that the XRGB and XBGR formats that we supported were in fact using
the ARGB and ABGR Tegra formats. This happened to work in cases where no
alpha was being considered. This change is also a fix for those formats.

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 5878d42d153c79fa814aa9b5bf20799181b5df8d..6790e2d869c4971ee39458c5f4642d9b35793d48 100644 (file)
@@ -287,7 +287,9 @@ static void tegra_dc_setup_window(struct tegra_dc *dc, unsigned int index,
 
 static const u32 tegra_primary_plane_formats[] = {
        DRM_FORMAT_XBGR8888,
+       DRM_FORMAT_ABGR8888,
        DRM_FORMAT_XRGB8888,
+       DRM_FORMAT_ARGB8888,
        DRM_FORMAT_RGB565,
 };
 
@@ -630,7 +632,9 @@ static struct drm_plane *tegra_dc_cursor_plane_create(struct drm_device *drm,
 
 static const uint32_t tegra_overlay_plane_formats[] = {
        DRM_FORMAT_XBGR8888,
+       DRM_FORMAT_ABGR8888,
        DRM_FORMAT_XRGB8888,
+       DRM_FORMAT_ARGB8888,
        DRM_FORMAT_RGB565,
        DRM_FORMAT_UYVY,
        DRM_FORMAT_YUYV,
index 47f43663adcb14427fd666fc26ace0efb6b7709b..018fea74fb5068dd10cca2ead9eedbfe24c1f418 100644 (file)
@@ -598,6 +598,8 @@ int tegra_dc_rgb_exit(struct tegra_dc *dc);
 #define WIN_COLOR_DEPTH_YUV422R        23
 #define WIN_COLOR_DEPTH_YCbCr422RA     24
 #define WIN_COLOR_DEPTH_YUV422RA       25
+#define WIN_COLOR_DEPTH_B8G8R8X8       37
+#define WIN_COLOR_DEPTH_R8G8B8X8       38
 
 #define DC_WIN_POSITION                                0x704
 #define H_POSITION(x) (((x) & 0x1fff) <<  0) /* XXX 0x7fff on Tegra186 */
index 78b24aa1ac83d533ff79f82d2faf52a53341d381..88b5aea4a48e7b48d46dea350a67c402c5a261f5 100644 (file)
@@ -111,10 +111,18 @@ int tegra_plane_format(u32 fourcc, u32 *format, u32 *swap)
 
        switch (fourcc) {
        case DRM_FORMAT_XBGR8888:
+               *format = WIN_COLOR_DEPTH_R8G8B8X8;
+               break;
+
+       case DRM_FORMAT_ABGR8888:
                *format = WIN_COLOR_DEPTH_R8G8B8A8;
                break;
 
        case DRM_FORMAT_XRGB8888:
+               *format = WIN_COLOR_DEPTH_B8G8R8X8;
+               break;
+
+       case DRM_FORMAT_ARGB8888:
                *format = WIN_COLOR_DEPTH_B8G8R8A8;
                break;