]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/ast: Support DRM_FORMAT_XRGB1555 on the primary plane
authorThomas Zimmermann <tzimmermann@suse.de>
Tue, 14 Apr 2026 07:02:30 +0000 (09:02 +0200)
committerThomas Zimmermann <tzimmermann@suse.de>
Mon, 20 Apr 2026 07:12:01 +0000 (09:12 +0200)
Export DRM_FORMAT_XRGB1555 in the primary plane's format array and
handle the format in the color-format updates. With this, ast is now
feature complete wrt. color-format support.

Also update the comments in the gamma-LUT code to reflect the ast
manual's terminology.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>
Link: https://patch.msgid.link/20260414070522.33943-5-tzimmermann@suse.de
drivers/gpu/drm/ast/ast_mode.c
drivers/gpu/drm/ast/ast_reg.h

index 340ea680df473f298e28a0b34665bdba6438208c..91b83ec00e9c9b9830c5cdd41fc91a4db122470b 100644 (file)
@@ -105,8 +105,9 @@ static void ast_crtc_fill_gamma(struct ast_device *ast,
                /* gamma table is used as color palette */
                drm_crtc_fill_palette_8(crtc, ast_set_gamma_lut);
                break;
+       case DRM_FORMAT_XRGB1555:
        case DRM_FORMAT_RGB565:
-               /* also uses 8-bit gamma ramp on low-color modes */
+               /* also uses 24-bit gamma correction on high-color modes */
                fallthrough;
        case DRM_FORMAT_XRGB8888:
                drm_crtc_fill_gamma_888(crtc, ast_set_gamma_lut);
@@ -129,8 +130,9 @@ static void ast_crtc_load_gamma(struct ast_device *ast,
                /* gamma table is used as color palette */
                drm_crtc_load_palette_8(crtc, lut, ast_set_gamma_lut);
                break;
+       case DRM_FORMAT_XRGB1555:
        case DRM_FORMAT_RGB565:
-               /* also uses 8-bit gamma ramp on low-color modes */
+               /* also uses 24-bit gamma correction on high-color modes */
                fallthrough;
        case DRM_FORMAT_XRGB8888:
                drm_crtc_load_gamma_888(crtc, lut, ast_set_gamma_lut);
@@ -154,6 +156,10 @@ static void ast_set_vbios_color_reg(struct ast_device *ast,
                vgacr8c |= AST_IO_VGACR8C_CUR_MODE_VGA;
                vgacr92 = 8;
                break;
+       case DRM_FORMAT_XRGB1555:
+               vgacr8c |= AST_IO_VGACR8C_CUR_MODE_15_BPP;
+               vgacr92 = 15;
+               break;
        case DRM_FORMAT_RGB565:
                vgacr8c |= AST_IO_VGACR8C_CUR_MODE_16_BPP;
                vgacr92 = 16;
@@ -396,6 +402,9 @@ static void ast_set_color_reg(struct ast_device *ast,
                vgacra8 &= ~AST_IO_VGACRA8_GAMMA_CORRECTION_ENABLED;
                break;
        case DRM_FORMAT_XRGB1555:
+               vgacra3 |= AST_IO_VGACRA3_15_BPP;
+               vgacra8 |= AST_IO_VGACRA8_GAMMA_CORRECTION_ENABLED;
+               break;
        case DRM_FORMAT_RGB565:
                vgacra3 |= AST_IO_VGACRA3_16_BPP;
                vgacra8 |= AST_IO_VGACRA8_GAMMA_CORRECTION_ENABLED;
@@ -493,6 +502,7 @@ void __iomem *ast_plane_vaddr(struct ast_plane *ast_plane)
 static const uint32_t ast_primary_plane_formats[] = {
        DRM_FORMAT_XRGB8888,
        DRM_FORMAT_RGB565,
+       DRM_FORMAT_XRGB1555,
        DRM_FORMAT_C8,
 };
 
@@ -766,6 +776,7 @@ static int ast_crtc_helper_atomic_check(struct drm_crtc *crtc,
        case DRM_FORMAT_C8:
                ast_state->std_table = &vbios_stdtable[VGAModeIndex];
                break;
+       case DRM_FORMAT_XRGB1555:
        case DRM_FORMAT_RGB565:
                ast_state->std_table = &vbios_stdtable[HiCModeIndex];
                break;
index 9267b70a3ec837964210eb0db1f61fd2a5cef6c6..b808b0a02ba81332ccb2e91be0149172609be35e 100644 (file)
@@ -62,6 +62,7 @@
 #define AST_IO_VGACRA3_DVO_ENABLED             BIT(7)
 #define AST_IO_VGACRA3_32_BPP                  BIT(3)
 #define AST_IO_VGACRA3_16_BPP                  BIT(2)
+#define AST_IO_VGACRA3_15_BPP                  BIT(1)
 #define AST_IO_VGACRA3_256_COLORS              BIT(0)
 
 #define AST_IO_VGACRA8_GAMMA_CORRECTION_ENABLED        BIT(1)