lkml.org 
[lkml]   [2020]   [Aug]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH v2] media: rcar-vin: Add support to select data pins for YCbCr422-8bit input
Date
Select the data pins for YCbCr422-8bit input format depending on
bus_width and data_shift passed as part of DT.

Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Reviewed-by: Biju Das <biju.das.jz@bp.renesas.com>
---
Changes for v2:
* Dropped DT binding documentation patch
* Select the data pins depending on bus-width and data-shift

v1 -
https://patchwork.kernel.org/project/linux-renesas-soc/list/?series=323799
---
drivers/media/platform/rcar-vin/rcar-core.c | 5 +++++
drivers/media/platform/rcar-vin/rcar-dma.c | 7 +++++++
drivers/media/platform/rcar-vin/rcar-vin.h | 5 +++++
3 files changed, 17 insertions(+)

diff --git a/drivers/media/platform/rcar-vin/rcar-core.c b/drivers/media/platform/rcar-vin/rcar-core.c
index 7440c8965d27..55005d86928d 100644
--- a/drivers/media/platform/rcar-vin/rcar-core.c
+++ b/drivers/media/platform/rcar-vin/rcar-core.c
@@ -624,6 +624,11 @@ static int rvin_parallel_parse_v4l2(struct device *dev,
vin->parallel = rvpe;
vin->parallel->mbus_type = vep->bus_type;

+ /* select VInDATA[15:8] pins for YCbCr422-8bit format */
+ if (vep->bus.parallel.bus_width == BUS_WIDTH_8 &&
+ vep->bus.parallel.data_shift == DATA_SHIFT_8)
+ vin->parallel->ycbcr_8b_g = true;
+
switch (vin->parallel->mbus_type) {
case V4L2_MBUS_PARALLEL:
vin_dbg(vin, "Found PARALLEL media bus\n");
diff --git a/drivers/media/platform/rcar-vin/rcar-dma.c b/drivers/media/platform/rcar-vin/rcar-dma.c
index 1a30cd036371..5db483877d65 100644
--- a/drivers/media/platform/rcar-vin/rcar-dma.c
+++ b/drivers/media/platform/rcar-vin/rcar-dma.c
@@ -127,6 +127,8 @@
#define VNDMR2_FTEV (1 << 17)
#define VNDMR2_VLV(n) ((n & 0xf) << 12)

+#define VNDMR2_YDS BIT(22)
+
/* Video n CSI2 Interface Mode Register (Gen3) */
#define VNCSI_IFMD_DES1 (1 << 26)
#define VNCSI_IFMD_DES0 (1 << 25)
@@ -698,6 +700,11 @@ static int rvin_setup(struct rvin_dev *vin)
/* Data Enable Polarity Select */
if (vin->parallel->mbus_flags & V4L2_MBUS_DATA_ENABLE_LOW)
dmr2 |= VNDMR2_CES;
+
+ if (vin->parallel->ycbcr_8b_g && vin->mbus_code == MEDIA_BUS_FMT_UYVY8_2X8)
+ dmr2 |= VNDMR2_YDS;
+ else
+ dmr2 &= ~VNDMR2_YDS;
}

/*
diff --git a/drivers/media/platform/rcar-vin/rcar-vin.h b/drivers/media/platform/rcar-vin/rcar-vin.h
index c19d077ce1cb..3126fee9a89b 100644
--- a/drivers/media/platform/rcar-vin/rcar-vin.h
+++ b/drivers/media/platform/rcar-vin/rcar-vin.h
@@ -87,6 +87,9 @@ struct rvin_video_format {
u8 bpp;
};

+#define BUS_WIDTH_8 8
+#define DATA_SHIFT_8 8
+
/**
* struct rvin_parallel_entity - Parallel video input endpoint descriptor
* @asd: sub-device descriptor for async framework
@@ -95,6 +98,7 @@ struct rvin_video_format {
* @mbus_flags: media bus configuration flags
* @source_pad: source pad of remote subdevice
* @sink_pad: sink pad of remote subdevice
+ * @ycbcr_8b_g: select data pins for YCbCr422-8bit
*
*/
struct rvin_parallel_entity {
@@ -106,6 +110,7 @@ struct rvin_parallel_entity {

unsigned int source_pad;
unsigned int sink_pad;
+ bool ycbcr_8b_g;
};

/**
--
2.17.1
\
 
 \ /
  Last update: 2020-08-03 18:03    [W:1.648 / U:0.924 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site