aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilipp Zabel <p.zabel@pengutronix.de>2014-12-12 07:40:14 -0500
committerPhilipp Zabel <p.zabel@pengutronix.de>2015-10-30 12:13:47 -0400
commit0cb8b75792d6b752df945993cc5d455c75bf6884 (patch)
tree7cc17724dc9820cbe11d81e8c1851a5212195074
parentef739aa4c68be8a05b7f0b91cf87747acbe0b424 (diff)
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>
-rw-r--r--drivers/gpu/ipu-v3/ipu-common.c4
-rw-r--r--drivers/gpu/ipu-v3/ipu-cpmem.c44
2 files changed, 48 insertions, 0 deletions
diff --git a/drivers/gpu/ipu-v3/ipu-common.c b/drivers/gpu/ipu-v3/ipu-common.c
index e5a38d202a21..c0b19160a946 100644
--- a/drivers/gpu/ipu-v3/ipu-common.c
+++ b/drivers/gpu/ipu-v3/ipu-common.c
@@ -57,6 +57,10 @@ EXPORT_SYMBOL_GPL(ipu_srm_dp_sync_update);
57enum ipu_color_space ipu_drm_fourcc_to_colorspace(u32 drm_fourcc) 57enum ipu_color_space ipu_drm_fourcc_to_colorspace(u32 drm_fourcc)
58{ 58{
59 switch (drm_fourcc) { 59 switch (drm_fourcc) {
60 case DRM_FORMAT_ARGB1555:
61 case DRM_FORMAT_ABGR1555:
62 case DRM_FORMAT_RGBA5551:
63 case DRM_FORMAT_BGRA5551:
60 case DRM_FORMAT_RGB565: 64 case DRM_FORMAT_RGB565:
61 case DRM_FORMAT_BGR565: 65 case DRM_FORMAT_BGR565:
62 case DRM_FORMAT_RGB888: 66 case DRM_FORMAT_RGB888:
diff --git a/drivers/gpu/ipu-v3/ipu-cpmem.c b/drivers/gpu/ipu-v3/ipu-cpmem.c
index 3bf05bc4ab67..d26b8bee0269 100644
--- a/drivers/gpu/ipu-v3/ipu-cpmem.c
+++ b/drivers/gpu/ipu-v3/ipu-cpmem.c
@@ -500,6 +500,38 @@ static const struct ipu_rgb def_bgr_16 = {
500 .bits_per_pixel = 16, 500 .bits_per_pixel = 16,
501}; 501};
502 502
503static const struct ipu_rgb def_argb_16 = {
504 .red = { .offset = 10, .length = 5, },
505 .green = { .offset = 5, .length = 5, },
506 .blue = { .offset = 0, .length = 5, },
507 .transp = { .offset = 15, .length = 1, },
508 .bits_per_pixel = 16,
509};
510
511static const struct ipu_rgb def_abgr_16 = {
512 .red = { .offset = 0, .length = 5, },
513 .green = { .offset = 5, .length = 5, },
514 .blue = { .offset = 10, .length = 5, },
515 .transp = { .offset = 15, .length = 1, },
516 .bits_per_pixel = 16,
517};
518
519static const struct ipu_rgb def_rgba_16 = {
520 .red = { .offset = 11, .length = 5, },
521 .green = { .offset = 6, .length = 5, },
522 .blue = { .offset = 1, .length = 5, },
523 .transp = { .offset = 0, .length = 1, },
524 .bits_per_pixel = 16,
525};
526
527static const struct ipu_rgb def_bgra_16 = {
528 .red = { .offset = 1, .length = 5, },
529 .green = { .offset = 6, .length = 5, },
530 .blue = { .offset = 11, .length = 5, },
531 .transp = { .offset = 0, .length = 1, },
532 .bits_per_pixel = 16,
533};
534
503#define Y_OFFSET(pix, x, y) ((x) + pix->width * (y)) 535#define Y_OFFSET(pix, x, y) ((x) + pix->width * (y))
504#define U_OFFSET(pix, x, y) ((pix->width * pix->height) + \ 536#define U_OFFSET(pix, x, y) ((pix->width * pix->height) + \
505 (pix->width * (y) / 4) + (x) / 2) 537 (pix->width * (y) / 4) + (x) / 2)
@@ -581,6 +613,18 @@ int ipu_cpmem_set_fmt(struct ipuv3_channel *ch, u32 drm_fourcc)
581 case DRM_FORMAT_BGR565: 613 case DRM_FORMAT_BGR565:
582 ipu_cpmem_set_format_rgb(ch, &def_bgr_16); 614 ipu_cpmem_set_format_rgb(ch, &def_bgr_16);
583 break; 615 break;
616 case DRM_FORMAT_ARGB1555:
617 ipu_cpmem_set_format_rgb(ch, &def_argb_16);
618 break;
619 case DRM_FORMAT_ABGR1555:
620 ipu_cpmem_set_format_rgb(ch, &def_abgr_16);
621 break;
622 case DRM_FORMAT_RGBA5551:
623 ipu_cpmem_set_format_rgb(ch, &def_rgba_16);
624 break;
625 case DRM_FORMAT_BGRA5551:
626 ipu_cpmem_set_format_rgb(ch, &def_bgra_16);
627 break;
584 default: 628 default:
585 return -EINVAL; 629 return -EINVAL;
586 } 630 }