1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
From 59876245439d2c5602bccdd454d1ef0a72cdb571 Mon Sep 17 00:00:00 2001
From: Vladimir Barinov <vladimir.barinov@cogentembedded.com>
Date: Fri, 7 Jun 2019 19:18:51 +0300
Subject: [PATCH 3/5] media: rcar_vin: add GREY (Y8) bypass
This adds bypass of luma Y8 stream
Signed-off-by: Vladimir Barinov <vladimir.barinov@cogentembedded.com>
---
drivers/media/platform/soc_camera/rcar_vin.c | 22 +++++++++++++++++-----
1 file changed, 17 insertions(+), 5 deletions(-)
diff --git a/drivers/media/platform/soc_camera/rcar_vin.c b/drivers/media/platform/soc_camera/rcar_vin.c
index 5239938..291d115 100644
--- a/drivers/media/platform/soc_camera/rcar_vin.c
+++ b/drivers/media/platform/soc_camera/rcar_vin.c
@@ -1076,6 +1076,7 @@ static int rcar_vin_setup(struct rcar_vin_priv *priv)
break;
case MEDIA_BUS_FMT_SBGGR8_1X8:
case MEDIA_BUS_FMT_SBGGR12_1X12:
+ case MEDIA_BUS_FMT_Y8_1X8:
vnmc |= VNMC_INF_RAW8 | VNMC_BPS;
break;
default:
@@ -1111,8 +1112,11 @@ static int rcar_vin_setup(struct rcar_vin_priv *priv)
output_is_yuv = true;
break;
case V4L2_PIX_FMT_GREY:
- dmr = VNDMR_DTMD_YCSEP | VNDMR_YMODE_Y8;
- output_is_yuv = true;
+ if (input_is_yuv) {
+ dmr = VNDMR_DTMD_YCSEP | VNDMR_YMODE_Y8;
+ output_is_yuv = true;
+ } else
+ dmr = 0;
break;
case V4L2_PIX_FMT_ARGB555:
dmr = VNDMR_DTMD_ARGB;
@@ -1802,14 +1806,16 @@ static int rcar_vin_set_rect(struct soc_camera_device *icd)
priv->chip == RCAR_M3N || priv->chip == RCAR_V3M) {
if ((icd->current_fmt->host_fmt->fourcc != V4L2_PIX_FMT_NV12) &&
(icd->current_fmt->host_fmt->fourcc != V4L2_PIX_FMT_SBGGR8) &&
- (icd->current_fmt->host_fmt->fourcc != V4L2_PIX_FMT_SBGGR12)
+ (icd->current_fmt->host_fmt->fourcc != V4L2_PIX_FMT_SBGGR12) &&
+ ((icd->current_fmt->host_fmt->fourcc == V4L2_PIX_FMT_GREY) && (icd->current_fmt->code == MEDIA_BUS_FMT_Y8_1X8))
&& is_scaling(cam)) {
ret = rcar_vin_uds_set(priv, cam);
if (ret < 0)
return ret;
}
if ((icd->current_fmt->host_fmt->fourcc == V4L2_PIX_FMT_SBGGR8) ||
- (icd->current_fmt->host_fmt->fourcc == V4L2_PIX_FMT_SBGGR12))
+ (icd->current_fmt->host_fmt->fourcc == V4L2_PIX_FMT_SBGGR12) ||
+ ((icd->current_fmt->host_fmt->fourcc == V4L2_PIX_FMT_GREY) && (icd->current_fmt->code == MEDIA_BUS_FMT_Y8_1X8)))
iowrite32(ALIGN(cam->out_width / 2, 0x10),
priv->base + VNIS_REG);
else if (is_scaling(cam) ||
@@ -2228,6 +2234,7 @@ static int rcar_vin_get_formats(struct soc_camera_device *icd, unsigned int idx,
case MEDIA_BUS_FMT_RGB888_1X24:
case MEDIA_BUS_FMT_SBGGR8_1X8:
case MEDIA_BUS_FMT_SBGGR12_1X12:
+ case MEDIA_BUS_FMT_Y8_1X8:
if (cam->extra_fmt)
break;
@@ -2447,10 +2454,15 @@ static int rcar_vin_set_fmt(struct soc_camera_device *icd,
case V4L2_PIX_FMT_XBGR32:
can_scale = priv->chip != RCAR_E1;
break;
+ case V4L2_PIX_FMT_GREY:
+ if (icd->current_fmt->code == MEDIA_BUS_FMT_Y8_1X8)
+ can_scale = false;
+ else
+ can_scale = true;
+ break;
case V4L2_PIX_FMT_ABGR32:
case V4L2_PIX_FMT_UYVY:
case V4L2_PIX_FMT_YUYV:
- case V4L2_PIX_FMT_GREY:
case V4L2_PIX_FMT_RGB565:
case V4L2_PIX_FMT_ARGB555:
case V4L2_PIX_FMT_NV16:
--
2.7.4
|