drm/gud: Add GUD_PIXEL_FORMAT_R8
authorNoralf Trønnes <noralf@tronnes.org>
Wed, 29 Sep 2021 19:11:59 +0000 (21:11 +0200)
committerNoralf Trønnes <noralf@tronnes.org>
Mon, 4 Oct 2021 10:05:07 +0000 (12:05 +0200)
Add support for 8-bit greyscale format.

Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20210929191201.34456-5-noralf@tronnes.org
drivers/gpu/drm/gud/gud_drv.c
drivers/gpu/drm/gud/gud_internal.h
drivers/gpu/drm/gud/gud_pipe.c
include/drm/gud.h

index eb4e088..a8d76c7 100644 (file)
@@ -523,6 +523,8 @@ static int gud_probe(struct usb_interface *intf, const struct usb_device_id *id)
                switch (format) {
                case GUD_DRM_FORMAT_R1:
                        fallthrough;
+               case DRM_FORMAT_R8:
+                       fallthrough;
                case GUD_DRM_FORMAT_XRGB1111:
                        if (!xrgb8888_emulation_format)
                                xrgb8888_emulation_format = info;
index 2a388e2..8499e71 100644 (file)
@@ -80,6 +80,8 @@ static inline u8 gud_from_fourcc(u32 fourcc)
        switch (fourcc) {
        case GUD_DRM_FORMAT_R1:
                return GUD_PIXEL_FORMAT_R1;
+       case DRM_FORMAT_R8:
+               return GUD_PIXEL_FORMAT_R8;
        case GUD_DRM_FORMAT_XRGB1111:
                return GUD_PIXEL_FORMAT_XRGB1111;
        case DRM_FORMAT_RGB565:
@@ -98,6 +100,8 @@ static inline u32 gud_to_fourcc(u8 format)
        switch (format) {
        case GUD_PIXEL_FORMAT_R1:
                return GUD_DRM_FORMAT_R1;
+       case GUD_PIXEL_FORMAT_R8:
+               return DRM_FORMAT_R8;
        case GUD_PIXEL_FORMAT_XRGB1111:
                return GUD_DRM_FORMAT_XRGB1111;
        case GUD_PIXEL_FORMAT_RGB565:
index b9b0e43..be4f95b 100644 (file)
@@ -189,6 +189,8 @@ retry:
                                ret = -ENOMEM;
                                goto end_cpu_access;
                        }
+               } else if (format->format == DRM_FORMAT_R8) {
+                       drm_fb_xrgb8888_to_gray8(buf, vaddr, fb, rect);
                } else if (format->format == DRM_FORMAT_RGB565) {
                        drm_fb_xrgb8888_to_rgb565(buf, vaddr, fb, rect, gud_is_big_endian());
                } else {
index 0b46b54..1dc7810 100644 (file)
@@ -246,8 +246,8 @@ struct gud_state_req {
 /* Get supported pixel formats as a byte array of GUD_PIXEL_FORMAT_* */
 #define GUD_REQ_GET_FORMATS                            0x40
   #define GUD_FORMATS_MAX_NUM                  32
-  /* R1 is a 1-bit monochrome transfer format presented to userspace as XRGB8888 */
-  #define GUD_PIXEL_FORMAT_R1                  0x01
+  #define GUD_PIXEL_FORMAT_R1                  0x01 /* 1-bit monochrome */
+  #define GUD_PIXEL_FORMAT_R8                  0x08 /* 8-bit greyscale */
   #define GUD_PIXEL_FORMAT_XRGB1111            0x20
   #define GUD_PIXEL_FORMAT_RGB565              0x40
   #define GUD_PIXEL_FORMAT_XRGB8888            0x80