mirror of https://gitee.com/openkylin/linux.git
gpu: ipu-v3: add support for 15-bit RGB with 1-bit alpha formats
This patch adds support for ARGB1555, ABGR1555, RGBA5551, and BGRA5551 in-memory formats. Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
This commit is contained in:
parent
ef739aa4c6
commit
0cb8b75792
|
@ -57,6 +57,10 @@ EXPORT_SYMBOL_GPL(ipu_srm_dp_sync_update);
|
|||
enum ipu_color_space ipu_drm_fourcc_to_colorspace(u32 drm_fourcc)
|
||||
{
|
||||
switch (drm_fourcc) {
|
||||
case DRM_FORMAT_ARGB1555:
|
||||
case DRM_FORMAT_ABGR1555:
|
||||
case DRM_FORMAT_RGBA5551:
|
||||
case DRM_FORMAT_BGRA5551:
|
||||
case DRM_FORMAT_RGB565:
|
||||
case DRM_FORMAT_BGR565:
|
||||
case DRM_FORMAT_RGB888:
|
||||
|
|
|
@ -500,6 +500,38 @@ static const struct ipu_rgb def_bgr_16 = {
|
|||
.bits_per_pixel = 16,
|
||||
};
|
||||
|
||||
static const struct ipu_rgb def_argb_16 = {
|
||||
.red = { .offset = 10, .length = 5, },
|
||||
.green = { .offset = 5, .length = 5, },
|
||||
.blue = { .offset = 0, .length = 5, },
|
||||
.transp = { .offset = 15, .length = 1, },
|
||||
.bits_per_pixel = 16,
|
||||
};
|
||||
|
||||
static const struct ipu_rgb def_abgr_16 = {
|
||||
.red = { .offset = 0, .length = 5, },
|
||||
.green = { .offset = 5, .length = 5, },
|
||||
.blue = { .offset = 10, .length = 5, },
|
||||
.transp = { .offset = 15, .length = 1, },
|
||||
.bits_per_pixel = 16,
|
||||
};
|
||||
|
||||
static const struct ipu_rgb def_rgba_16 = {
|
||||
.red = { .offset = 11, .length = 5, },
|
||||
.green = { .offset = 6, .length = 5, },
|
||||
.blue = { .offset = 1, .length = 5, },
|
||||
.transp = { .offset = 0, .length = 1, },
|
||||
.bits_per_pixel = 16,
|
||||
};
|
||||
|
||||
static const struct ipu_rgb def_bgra_16 = {
|
||||
.red = { .offset = 1, .length = 5, },
|
||||
.green = { .offset = 6, .length = 5, },
|
||||
.blue = { .offset = 11, .length = 5, },
|
||||
.transp = { .offset = 0, .length = 1, },
|
||||
.bits_per_pixel = 16,
|
||||
};
|
||||
|
||||
#define Y_OFFSET(pix, x, y) ((x) + pix->width * (y))
|
||||
#define U_OFFSET(pix, x, y) ((pix->width * pix->height) + \
|
||||
(pix->width * (y) / 4) + (x) / 2)
|
||||
|
@ -581,6 +613,18 @@ int ipu_cpmem_set_fmt(struct ipuv3_channel *ch, u32 drm_fourcc)
|
|||
case DRM_FORMAT_BGR565:
|
||||
ipu_cpmem_set_format_rgb(ch, &def_bgr_16);
|
||||
break;
|
||||
case DRM_FORMAT_ARGB1555:
|
||||
ipu_cpmem_set_format_rgb(ch, &def_argb_16);
|
||||
break;
|
||||
case DRM_FORMAT_ABGR1555:
|
||||
ipu_cpmem_set_format_rgb(ch, &def_abgr_16);
|
||||
break;
|
||||
case DRM_FORMAT_RGBA5551:
|
||||
ipu_cpmem_set_format_rgb(ch, &def_rgba_16);
|
||||
break;
|
||||
case DRM_FORMAT_BGRA5551:
|
||||
ipu_cpmem_set_format_rgb(ch, &def_bgra_16);
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue