media: rcar-vin: add GREY format
authorVladimir Barinov <vladimir.barinov@cogentembedded.com>
Fri, 24 Sep 2021 12:43:17 +0000 (14:43 +0200)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Tue, 5 Oct 2021 07:39:55 +0000 (09:39 +0200)
This adds support for MEDIA_BUS_FMT_Y8_1X8 input and V4L2_PIX_FMT_GREY
output format.

Signed-off-by: Vladimir Barinov <vladimir.barinov@cogentembedded.com>
Signed-off-by: Nikita Yushchenko <nikita.yoush@cogentembedded.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/media/platform/rcar-vin/rcar-dma.c
drivers/media/platform/rcar-vin/rcar-v4l2.c

index e5162bf..25ead93 100644 (file)
 /* Video n Data Mode Register bits */
 #define VNDMR_A8BIT(n)         (((n) & 0xff) << 24)
 #define VNDMR_A8BIT_MASK       (0xff << 24)
+#define VNDMR_YMODE_Y8         (1 << 12)
 #define VNDMR_EXRGB            (1 << 8)
 #define VNDMR_BPSM             (1 << 4)
 #define VNDMR_ABIT             (1 << 2)
@@ -603,6 +604,7 @@ void rvin_crop_scale_comp(struct rvin_dev *vin)
        case V4L2_PIX_FMT_SGBRG8:
        case V4L2_PIX_FMT_SGRBG8:
        case V4L2_PIX_FMT_SRGGB8:
+       case V4L2_PIX_FMT_GREY:
                stride /= 2;
                break;
        default:
@@ -695,6 +697,7 @@ static int rvin_setup(struct rvin_dev *vin)
        case MEDIA_BUS_FMT_SGBRG8_1X8:
        case MEDIA_BUS_FMT_SGRBG8_1X8:
        case MEDIA_BUS_FMT_SRGGB8_1X8:
+       case MEDIA_BUS_FMT_Y8_1X8:
                vnmc |= VNMC_INF_RAW8;
                break;
        default:
@@ -774,6 +777,14 @@ static int rvin_setup(struct rvin_dev *vin)
        case V4L2_PIX_FMT_SRGGB8:
                dmr = 0;
                break;
+       case V4L2_PIX_FMT_GREY:
+               if (input_is_yuv) {
+                       dmr = VNDMR_DTMD_YCSEP | VNDMR_YMODE_Y8;
+                       output_is_yuv = true;
+               } else {
+                       dmr = 0;
+               }
+               break;
        default:
                vin_err(vin, "Invalid pixelformat (0x%x)\n",
                        vin->format.pixelformat);
@@ -1148,6 +1159,10 @@ static int rvin_mc_validate_format(struct rvin_dev *vin, struct v4l2_subdev *sd,
                if (vin->format.pixelformat != V4L2_PIX_FMT_SRGGB8)
                        return -EPIPE;
                break;
+       case MEDIA_BUS_FMT_Y8_1X8:
+               if (vin->format.pixelformat != V4L2_PIX_FMT_GREY)
+                       return -EPIPE;
+               break;
        default:
                return -EPIPE;
        }
index 0d14115..bdeff51 100644 (file)
@@ -82,6 +82,10 @@ static const struct rvin_video_format rvin_formats[] = {
                .fourcc                 = V4L2_PIX_FMT_SRGGB8,
                .bpp                    = 1,
        },
+       {
+               .fourcc                 = V4L2_PIX_FMT_GREY,
+               .bpp                    = 1,
+       },
 };
 
 const struct rvin_video_format *rvin_format_from_pixel(struct rvin_dev *vin,