summaryrefslogtreecommitdiffstats
path: root/bsp/meta-rcar/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0177-media-rcar_vin-add-GREY-Y8-bypass.patch
blob: 3a1278d956c025550f043a5f12372b3f71da3980 (plain)
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