drm/sun4i: Add separate DE3 VI layer formats
DE3 VI layers support alpha blending, but DE2 VI layers do not.
Additionally, DE3 VI layers support 10-bit RGB and YUV formats.
Make a separate list for DE3.
Fixes: c50519e6db
("drm/sun4i: Add basic support for DE3")
Acked-by: Maxime Ripard <mripard@kernel.org>
Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
Link: https://patchwork.freedesktop.org/patch/msgid/20200224173901.174016-3-jernej.skrabec@siol.net
This commit is contained in:
Родитель
a4769905f0
Коммит
169ca4b389
|
@ -148,6 +148,30 @@ static const struct de2_fmt_info de2_formats[] = {
|
|||
.rgb = true,
|
||||
.csc = SUN8I_CSC_MODE_OFF,
|
||||
},
|
||||
{
|
||||
.drm_fmt = DRM_FORMAT_ARGB2101010,
|
||||
.de2_fmt = SUN8I_MIXER_FBFMT_ARGB2101010,
|
||||
.rgb = true,
|
||||
.csc = SUN8I_CSC_MODE_OFF,
|
||||
},
|
||||
{
|
||||
.drm_fmt = DRM_FORMAT_ABGR2101010,
|
||||
.de2_fmt = SUN8I_MIXER_FBFMT_ABGR2101010,
|
||||
.rgb = true,
|
||||
.csc = SUN8I_CSC_MODE_OFF,
|
||||
},
|
||||
{
|
||||
.drm_fmt = DRM_FORMAT_RGBA1010102,
|
||||
.de2_fmt = SUN8I_MIXER_FBFMT_RGBA1010102,
|
||||
.rgb = true,
|
||||
.csc = SUN8I_CSC_MODE_OFF,
|
||||
},
|
||||
{
|
||||
.drm_fmt = DRM_FORMAT_BGRA1010102,
|
||||
.de2_fmt = SUN8I_MIXER_FBFMT_BGRA1010102,
|
||||
.rgb = true,
|
||||
.csc = SUN8I_CSC_MODE_OFF,
|
||||
},
|
||||
{
|
||||
.drm_fmt = DRM_FORMAT_UYVY,
|
||||
.de2_fmt = SUN8I_MIXER_FBFMT_UYVY,
|
||||
|
@ -232,6 +256,18 @@ static const struct de2_fmt_info de2_formats[] = {
|
|||
.rgb = false,
|
||||
.csc = SUN8I_CSC_MODE_YVU2RGB,
|
||||
},
|
||||
{
|
||||
.drm_fmt = DRM_FORMAT_P010,
|
||||
.de2_fmt = SUN8I_MIXER_FBFMT_P010_YUV,
|
||||
.rgb = false,
|
||||
.csc = SUN8I_CSC_MODE_YUV2RGB,
|
||||
},
|
||||
{
|
||||
.drm_fmt = DRM_FORMAT_P210,
|
||||
.de2_fmt = SUN8I_MIXER_FBFMT_P210_YUV,
|
||||
.rgb = false,
|
||||
.csc = SUN8I_CSC_MODE_YUV2RGB,
|
||||
},
|
||||
};
|
||||
|
||||
const struct de2_fmt_info *sun8i_mixer_format_info(u32 format)
|
||||
|
|
|
@ -93,6 +93,10 @@
|
|||
#define SUN8I_MIXER_FBFMT_ABGR1555 17
|
||||
#define SUN8I_MIXER_FBFMT_RGBA5551 18
|
||||
#define SUN8I_MIXER_FBFMT_BGRA5551 19
|
||||
#define SUN8I_MIXER_FBFMT_ARGB2101010 20
|
||||
#define SUN8I_MIXER_FBFMT_ABGR2101010 21
|
||||
#define SUN8I_MIXER_FBFMT_RGBA1010102 22
|
||||
#define SUN8I_MIXER_FBFMT_BGRA1010102 23
|
||||
|
||||
#define SUN8I_MIXER_FBFMT_YUYV 0
|
||||
#define SUN8I_MIXER_FBFMT_UYVY 1
|
||||
|
@ -109,6 +113,13 @@
|
|||
/* format 12 is semi-planar YUV411 UVUV */
|
||||
/* format 13 is semi-planar YUV411 VUVU */
|
||||
#define SUN8I_MIXER_FBFMT_YUV411 14
|
||||
/* format 15 doesn't exist */
|
||||
/* format 16 is P010 YVU */
|
||||
#define SUN8I_MIXER_FBFMT_P010_YUV 17
|
||||
/* format 18 is P210 YVU */
|
||||
#define SUN8I_MIXER_FBFMT_P210_YUV 19
|
||||
/* format 20 is packed YVU444 10-bit */
|
||||
/* format 21 is packed YUV444 10-bit */
|
||||
|
||||
/*
|
||||
* Sub-engines listed bellow are unused for now. The EN registers are here only
|
||||
|
|
|
@ -436,24 +436,76 @@ static const u32 sun8i_vi_layer_formats[] = {
|
|||
DRM_FORMAT_YVU422,
|
||||
};
|
||||
|
||||
static const u32 sun8i_vi_layer_de3_formats[] = {
|
||||
DRM_FORMAT_ABGR1555,
|
||||
DRM_FORMAT_ABGR2101010,
|
||||
DRM_FORMAT_ABGR4444,
|
||||
DRM_FORMAT_ABGR8888,
|
||||
DRM_FORMAT_ARGB1555,
|
||||
DRM_FORMAT_ARGB2101010,
|
||||
DRM_FORMAT_ARGB4444,
|
||||
DRM_FORMAT_ARGB8888,
|
||||
DRM_FORMAT_BGR565,
|
||||
DRM_FORMAT_BGR888,
|
||||
DRM_FORMAT_BGRA1010102,
|
||||
DRM_FORMAT_BGRA5551,
|
||||
DRM_FORMAT_BGRA4444,
|
||||
DRM_FORMAT_BGRA8888,
|
||||
DRM_FORMAT_BGRX8888,
|
||||
DRM_FORMAT_RGB565,
|
||||
DRM_FORMAT_RGB888,
|
||||
DRM_FORMAT_RGBA1010102,
|
||||
DRM_FORMAT_RGBA4444,
|
||||
DRM_FORMAT_RGBA5551,
|
||||
DRM_FORMAT_RGBA8888,
|
||||
DRM_FORMAT_RGBX8888,
|
||||
DRM_FORMAT_XBGR8888,
|
||||
DRM_FORMAT_XRGB8888,
|
||||
|
||||
DRM_FORMAT_NV16,
|
||||
DRM_FORMAT_NV12,
|
||||
DRM_FORMAT_NV21,
|
||||
DRM_FORMAT_NV61,
|
||||
DRM_FORMAT_P010,
|
||||
DRM_FORMAT_P210,
|
||||
DRM_FORMAT_UYVY,
|
||||
DRM_FORMAT_VYUY,
|
||||
DRM_FORMAT_YUYV,
|
||||
DRM_FORMAT_YVYU,
|
||||
DRM_FORMAT_YUV411,
|
||||
DRM_FORMAT_YUV420,
|
||||
DRM_FORMAT_YUV422,
|
||||
DRM_FORMAT_YVU411,
|
||||
DRM_FORMAT_YVU420,
|
||||
DRM_FORMAT_YVU422,
|
||||
};
|
||||
|
||||
struct sun8i_vi_layer *sun8i_vi_layer_init_one(struct drm_device *drm,
|
||||
struct sun8i_mixer *mixer,
|
||||
int index)
|
||||
{
|
||||
u32 supported_encodings, supported_ranges;
|
||||
unsigned int plane_cnt, format_count;
|
||||
struct sun8i_vi_layer *layer;
|
||||
unsigned int plane_cnt;
|
||||
const u32 *formats;
|
||||
int ret;
|
||||
|
||||
layer = devm_kzalloc(drm->dev, sizeof(*layer), GFP_KERNEL);
|
||||
if (!layer)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
if (mixer->cfg->is_de3) {
|
||||
formats = sun8i_vi_layer_de3_formats;
|
||||
format_count = ARRAY_SIZE(sun8i_vi_layer_de3_formats);
|
||||
} else {
|
||||
formats = sun8i_vi_layer_formats;
|
||||
format_count = ARRAY_SIZE(sun8i_vi_layer_formats);
|
||||
}
|
||||
|
||||
/* possible crtcs are set later */
|
||||
ret = drm_universal_plane_init(drm, &layer->plane, 0,
|
||||
&sun8i_vi_layer_funcs,
|
||||
sun8i_vi_layer_formats,
|
||||
ARRAY_SIZE(sun8i_vi_layer_formats),
|
||||
formats, format_count,
|
||||
NULL, DRM_PLANE_TYPE_OVERLAY, NULL);
|
||||
if (ret) {
|
||||
dev_err(drm->dev, "Couldn't initialize layer\n");
|
||||
|
|
Загрузка…
Ссылка в новой задаче