From: Thomas Zimmermann Date: Tue, 14 Apr 2026 07:02:30 +0000 (+0200) Subject: drm/ast: Support DRM_FORMAT_XRGB1555 on the primary plane X-Git-Tag: v7.2-rc1~141^2~26^2~6 X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=652f67a12865de74b0e5b67273b94f90bce1ae91;p=thirdparty%2Flinux.git 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 Reviewed-by: Jocelyn Falempe Link: https://patch.msgid.link/20260414070522.33943-5-tzimmermann@suse.de --- diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c index 340ea680df473..91b83ec00e9c9 100644 --- a/drivers/gpu/drm/ast/ast_mode.c +++ b/drivers/gpu/drm/ast/ast_mode.c @@ -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; diff --git a/drivers/gpu/drm/ast/ast_reg.h b/drivers/gpu/drm/ast/ast_reg.h index 9267b70a3ec83..b808b0a02ba81 100644 --- a/drivers/gpu/drm/ast/ast_reg.h +++ b/drivers/gpu/drm/ast/ast_reg.h @@ -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)