drm/ast: Support DRM_FORMAT_XRGB1555 on the primary plane

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
This commit is contained in:
Thomas Zimmermann 2026-04-14 09:02:30 +02:00
parent 95ed102e9f
commit 652f67a128
2 changed files with 14 additions and 2 deletions

View 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;

View 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)