diff options
author | Philipp Zabel <p.zabel@pengutronix.de> | 2014-12-12 07:40:14 -0500 |
---|---|---|
committer | Philipp Zabel <p.zabel@pengutronix.de> | 2015-10-30 12:13:47 -0400 |
commit | 0cb8b75792d6b752df945993cc5d455c75bf6884 (patch) | |
tree | 7cc17724dc9820cbe11d81e8c1851a5212195074 | |
parent | ef739aa4c68be8a05b7f0b91cf87747acbe0b424 (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.c | 4 | ||||
-rw-r--r-- | drivers/gpu/ipu-v3/ipu-cpmem.c | 44 |
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); | |||
57 | enum ipu_color_space ipu_drm_fourcc_to_colorspace(u32 drm_fourcc) | 57 | enum 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 | ||
503 | static 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 | |||
511 | static 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 | |||
519 | static 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 | |||
527 | static 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 | } |