diff mbox series

[v3] media: rcar-vin: Enable YDS bit depending on bus_width and data_shift

Message ID 20200913181608.32077-1-prabhakar.mahadev-lad.rj@bp.renesas.com
State Accepted
Commit e88349437654f9d1b3c144049b9990026f911e56
Headers show
Series [v3] media: rcar-vin: Enable YDS bit depending on bus_width and data_shift | expand

Commit Message

Prabhakar Mahadev Lad Sept. 13, 2020, 6:16 p.m. UTC
Enable YDS bit if bus_width and data_shift is set to 8 in parallel mode
for MEDIA_BUS_FMT_UYVY8_2X8 format.

Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Reviewed-by: Biju Das <biju.das.jz@bp.renesas.com>
---
Changes for v3:
* Dropped BIT macro
* Introduced struct v4l2_fwnode_bus_parallel

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 |  9 ++++-----
 drivers/media/platform/rcar-vin/rcar-dma.c  | 17 ++++++++++++++---
 drivers/media/platform/rcar-vin/rcar-vin.h  |  5 +++--
 3 files changed, 21 insertions(+), 10 deletions(-)

Comments

Laurent Pinchart Sept. 14, 2020, 11:45 p.m. UTC | #1
Hi Prabhakar,

Thank you for the patch.

On Sun, Sep 13, 2020 at 07:16:08PM +0100, Lad Prabhakar wrote:
> Enable YDS bit if bus_width and data_shift is set to 8 in parallel mode
> for MEDIA_BUS_FMT_UYVY8_2X8 format.
> 
> Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
> Reviewed-by: Biju Das <biju.das.jz@bp.renesas.com>
> ---
> Changes for v3:
> * Dropped BIT macro
> * Introduced struct v4l2_fwnode_bus_parallel
> 
> 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 |  9 ++++-----
>  drivers/media/platform/rcar-vin/rcar-dma.c  | 17 ++++++++++++++---
>  drivers/media/platform/rcar-vin/rcar-vin.h  |  5 +++--
>  3 files changed, 21 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/media/platform/rcar-vin/rcar-core.c b/drivers/media/platform/rcar-vin/rcar-core.c
> index 7440c8965d27..1149ab76cf5c 100644
> --- a/drivers/media/platform/rcar-vin/rcar-core.c
> +++ b/drivers/media/platform/rcar-vin/rcar-core.c
> @@ -626,12 +626,11 @@ static int rvin_parallel_parse_v4l2(struct device *dev,
>  
>  	switch (vin->parallel->mbus_type) {
>  	case V4L2_MBUS_PARALLEL:
> -		vin_dbg(vin, "Found PARALLEL media bus\n");
> -		vin->parallel->mbus_flags = vep->bus.parallel.flags;
> -		break;
>  	case V4L2_MBUS_BT656:
> -		vin_dbg(vin, "Found BT656 media bus\n");
> -		vin->parallel->mbus_flags = 0;
> +		vin_dbg(vin, "Found %s media bus\n",
> +			vin->parallel->mbus_type == V4L2_MBUS_PARALLEL ?
> +			"PARALLEL" : "BT656");

I'd write "parallel" and "BT.656".

> +		vin->parallel->bus = vep->bus.parallel;
>  		break;
>  	default:
>  		vin_err(vin, "Unknown media bus type\n");
> diff --git a/drivers/media/platform/rcar-vin/rcar-dma.c b/drivers/media/platform/rcar-vin/rcar-dma.c
> index a5dbb90c5210..d067439b0b0d 100644
> --- a/drivers/media/platform/rcar-vin/rcar-dma.c
> +++ b/drivers/media/platform/rcar-vin/rcar-dma.c
> @@ -125,6 +125,7 @@
>  #define VNDMR2_VPS		(1 << 30)
>  #define VNDMR2_HPS		(1 << 29)
>  #define VNDMR2_CES		(1 << 28)
> +#define VNDMR2_YDS		(1 << 22)
>  #define VNDMR2_FTEV		(1 << 17)
>  #define VNDMR2_VLV(n)		((n & 0xf) << 12)
>  
> @@ -698,16 +699,26 @@ static int rvin_setup(struct rvin_dev *vin)
>  
>  	if (!vin->is_csi) {
>  		/* Hsync Signal Polarity Select */
> -		if (!(vin->parallel->mbus_flags & V4L2_MBUS_HSYNC_ACTIVE_LOW))
> +		if (!(vin->parallel->bus.flags & V4L2_MBUS_HSYNC_ACTIVE_LOW))
>  			dmr2 |= VNDMR2_HPS;
>  
>  		/* Vsync Signal Polarity Select */
> -		if (!(vin->parallel->mbus_flags & V4L2_MBUS_VSYNC_ACTIVE_LOW))
> +		if (!(vin->parallel->bus.flags & V4L2_MBUS_VSYNC_ACTIVE_LOW))
>  			dmr2 |= VNDMR2_VPS;
>  
>  		/* Data Enable Polarity Select */
> -		if (vin->parallel->mbus_flags & V4L2_MBUS_DATA_ENABLE_LOW)
> +		if (vin->parallel->bus.flags & V4L2_MBUS_DATA_ENABLE_LOW)
>  			dmr2 |= VNDMR2_CES;
> +
> +		switch (vin->mbus_code) {
> +		case MEDIA_BUS_FMT_UYVY8_2X8:
> +			if (vin->parallel->bus.bus_width == 8 &&

You can possibly drop this check, as UYVY8_2X8 implies a bus_width equal
to 8. Apart from that,

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> +			    vin->parallel->bus.data_shift == 8)
> +				dmr2 |= VNDMR2_YDS;
> +			break;
> +		default:
> +			break;
> +		}
>  	}
>  
>  	/*
> diff --git a/drivers/media/platform/rcar-vin/rcar-vin.h b/drivers/media/platform/rcar-vin/rcar-vin.h
> index c19d077ce1cb..8396e0e45478 100644
> --- a/drivers/media/platform/rcar-vin/rcar-vin.h
> +++ b/drivers/media/platform/rcar-vin/rcar-vin.h
> @@ -19,6 +19,7 @@
>  #include <media/v4l2-ctrls.h>
>  #include <media/v4l2-dev.h>
>  #include <media/v4l2-device.h>
> +#include <media/v4l2-fwnode.h>
>  #include <media/videobuf2-v4l2.h>
>  
>  /* Number of HW buffers */
> @@ -92,7 +93,7 @@ struct rvin_video_format {
>   * @asd:	sub-device descriptor for async framework
>   * @subdev:	subdevice matched using async framework
>   * @mbus_type:	media bus type
> - * @mbus_flags:	media bus configuration flags
> + * @bus:	media bus parallel configuration
>   * @source_pad:	source pad of remote subdevice
>   * @sink_pad:	sink pad of remote subdevice
>   *
> @@ -102,7 +103,7 @@ struct rvin_parallel_entity {
>  	struct v4l2_subdev *subdev;
>  
>  	enum v4l2_mbus_type mbus_type;
> -	unsigned int mbus_flags;
> +	struct v4l2_fwnode_bus_parallel bus;
>  
>  	unsigned int source_pad;
>  	unsigned int sink_pad;
Niklas Söderlund Sept. 15, 2020, 12:01 a.m. UTC | #2
Hi Lad,

Thanks for your work.

On 2020-09-15 02:45:32 +0300, Laurent Pinchart wrote:
> Hi Prabhakar,
> 
> Thank you for the patch.
> 
> On Sun, Sep 13, 2020 at 07:16:08PM +0100, Lad Prabhakar wrote:
> > Enable YDS bit if bus_width and data_shift is set to 8 in parallel mode
> > for MEDIA_BUS_FMT_UYVY8_2X8 format.
> > 
> > Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
> > Reviewed-by: Biju Das <biju.das.jz@bp.renesas.com>
> > ---
> > Changes for v3:
> > * Dropped BIT macro
> > * Introduced struct v4l2_fwnode_bus_parallel
> > 
> > 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 |  9 ++++-----
> >  drivers/media/platform/rcar-vin/rcar-dma.c  | 17 ++++++++++++++---
> >  drivers/media/platform/rcar-vin/rcar-vin.h  |  5 +++--
> >  3 files changed, 21 insertions(+), 10 deletions(-)
> > 
> > diff --git a/drivers/media/platform/rcar-vin/rcar-core.c b/drivers/media/platform/rcar-vin/rcar-core.c
> > index 7440c8965d27..1149ab76cf5c 100644
> > --- a/drivers/media/platform/rcar-vin/rcar-core.c
> > +++ b/drivers/media/platform/rcar-vin/rcar-core.c
> > @@ -626,12 +626,11 @@ static int rvin_parallel_parse_v4l2(struct device *dev,
> >  
> >  	switch (vin->parallel->mbus_type) {
> >  	case V4L2_MBUS_PARALLEL:
> > -		vin_dbg(vin, "Found PARALLEL media bus\n");
> > -		vin->parallel->mbus_flags = vep->bus.parallel.flags;
> > -		break;
> >  	case V4L2_MBUS_BT656:
> > -		vin_dbg(vin, "Found BT656 media bus\n");
> > -		vin->parallel->mbus_flags = 0;
> > +		vin_dbg(vin, "Found %s media bus\n",
> > +			vin->parallel->mbus_type == V4L2_MBUS_PARALLEL ?
> > +			"PARALLEL" : "BT656");
> 
> I'd write "parallel" and "BT.656".

I agree with this change.

> 
> > +		vin->parallel->bus = vep->bus.parallel;
> >  		break;
> >  	default:
> >  		vin_err(vin, "Unknown media bus type\n");
> > diff --git a/drivers/media/platform/rcar-vin/rcar-dma.c b/drivers/media/platform/rcar-vin/rcar-dma.c
> > index a5dbb90c5210..d067439b0b0d 100644
> > --- a/drivers/media/platform/rcar-vin/rcar-dma.c
> > +++ b/drivers/media/platform/rcar-vin/rcar-dma.c
> > @@ -125,6 +125,7 @@
> >  #define VNDMR2_VPS		(1 << 30)
> >  #define VNDMR2_HPS		(1 << 29)
> >  #define VNDMR2_CES		(1 << 28)
> > +#define VNDMR2_YDS		(1 << 22)
> >  #define VNDMR2_FTEV		(1 << 17)
> >  #define VNDMR2_VLV(n)		((n & 0xf) << 12)
> >  
> > @@ -698,16 +699,26 @@ static int rvin_setup(struct rvin_dev *vin)
> >  
> >  	if (!vin->is_csi) {
> >  		/* Hsync Signal Polarity Select */
> > -		if (!(vin->parallel->mbus_flags & V4L2_MBUS_HSYNC_ACTIVE_LOW))
> > +		if (!(vin->parallel->bus.flags & V4L2_MBUS_HSYNC_ACTIVE_LOW))
> >  			dmr2 |= VNDMR2_HPS;
> >  
> >  		/* Vsync Signal Polarity Select */
> > -		if (!(vin->parallel->mbus_flags & V4L2_MBUS_VSYNC_ACTIVE_LOW))
> > +		if (!(vin->parallel->bus.flags & V4L2_MBUS_VSYNC_ACTIVE_LOW))
> >  			dmr2 |= VNDMR2_VPS;
> >  
> >  		/* Data Enable Polarity Select */
> > -		if (vin->parallel->mbus_flags & V4L2_MBUS_DATA_ENABLE_LOW)
> > +		if (vin->parallel->bus.flags & V4L2_MBUS_DATA_ENABLE_LOW)
> >  			dmr2 |= VNDMR2_CES;
> > +
> > +		switch (vin->mbus_code) {
> > +		case MEDIA_BUS_FMT_UYVY8_2X8:
> > +			if (vin->parallel->bus.bus_width == 8 &&
> 
> You can possibly drop this check, as UYVY8_2X8 implies a bus_width equal
> to 8. Apart from that,

I agree here as well, I think the check for UYVY8_2X8 may be dropped.

> 
> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> 
> > +			    vin->parallel->bus.data_shift == 8)
> > +				dmr2 |= VNDMR2_YDS;
> > +			break;
> > +		default:
> > +			break;
> > +		}
> >  	}
> >  
> >  	/*
> > diff --git a/drivers/media/platform/rcar-vin/rcar-vin.h b/drivers/media/platform/rcar-vin/rcar-vin.h
> > index c19d077ce1cb..8396e0e45478 100644
> > --- a/drivers/media/platform/rcar-vin/rcar-vin.h
> > +++ b/drivers/media/platform/rcar-vin/rcar-vin.h
> > @@ -19,6 +19,7 @@
> >  #include <media/v4l2-ctrls.h>
> >  #include <media/v4l2-dev.h>
> >  #include <media/v4l2-device.h>
> > +#include <media/v4l2-fwnode.h>
> >  #include <media/videobuf2-v4l2.h>
> >  
> >  /* Number of HW buffers */
> > @@ -92,7 +93,7 @@ struct rvin_video_format {
> >   * @asd:	sub-device descriptor for async framework
> >   * @subdev:	subdevice matched using async framework
> >   * @mbus_type:	media bus type
> > - * @mbus_flags:	media bus configuration flags
> > + * @bus:	media bus parallel configuration
> >   * @source_pad:	source pad of remote subdevice
> >   * @sink_pad:	sink pad of remote subdevice
> >   *
> > @@ -102,7 +103,7 @@ struct rvin_parallel_entity {
> >  	struct v4l2_subdev *subdev;
> >  
> >  	enum v4l2_mbus_type mbus_type;
> > -	unsigned int mbus_flags;
> > +	struct v4l2_fwnode_bus_parallel bus;

I think you could break this change (and the fallout) out to a separate 
patch to make the functional change clearer.

> >  
> >  	unsigned int source_pad;
> >  	unsigned int sink_pad;
> 
> -- 
> Regards,
> 
> Laurent Pinchart
Laurent Pinchart Sept. 15, 2020, 12:02 a.m. UTC | #3
Hi Niklas,

On Tue, Sep 15, 2020 at 02:01:40AM +0200, Niklas Söderlund wrote:
> On 2020-09-15 02:45:32 +0300, Laurent Pinchart wrote:

> > On Sun, Sep 13, 2020 at 07:16:08PM +0100, Lad Prabhakar wrote:

> > > Enable YDS bit if bus_width and data_shift is set to 8 in parallel mode

> > > for MEDIA_BUS_FMT_UYVY8_2X8 format.

> > > 

> > > Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>

> > > Reviewed-by: Biju Das <biju.das.jz@bp.renesas.com>

> > > ---

> > > Changes for v3:

> > > * Dropped BIT macro

> > > * Introduced struct v4l2_fwnode_bus_parallel

> > > 

> > > 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 |  9 ++++-----

> > >  drivers/media/platform/rcar-vin/rcar-dma.c  | 17 ++++++++++++++---

> > >  drivers/media/platform/rcar-vin/rcar-vin.h  |  5 +++--

> > >  3 files changed, 21 insertions(+), 10 deletions(-)

> > > 

> > > diff --git a/drivers/media/platform/rcar-vin/rcar-core.c b/drivers/media/platform/rcar-vin/rcar-core.c

> > > index 7440c8965d27..1149ab76cf5c 100644

> > > --- a/drivers/media/platform/rcar-vin/rcar-core.c

> > > +++ b/drivers/media/platform/rcar-vin/rcar-core.c

> > > @@ -626,12 +626,11 @@ static int rvin_parallel_parse_v4l2(struct device *dev,

> > >  

> > >  	switch (vin->parallel->mbus_type) {

> > >  	case V4L2_MBUS_PARALLEL:

> > > -		vin_dbg(vin, "Found PARALLEL media bus\n");

> > > -		vin->parallel->mbus_flags = vep->bus.parallel.flags;

> > > -		break;

> > >  	case V4L2_MBUS_BT656:

> > > -		vin_dbg(vin, "Found BT656 media bus\n");

> > > -		vin->parallel->mbus_flags = 0;

> > > +		vin_dbg(vin, "Found %s media bus\n",

> > > +			vin->parallel->mbus_type == V4L2_MBUS_PARALLEL ?

> > > +			"PARALLEL" : "BT656");

> > 

> > I'd write "parallel" and "BT.656".

> 

> I agree with this change.

> 

> > > +		vin->parallel->bus = vep->bus.parallel;

> > >  		break;

> > >  	default:

> > >  		vin_err(vin, "Unknown media bus type\n");

> > > diff --git a/drivers/media/platform/rcar-vin/rcar-dma.c b/drivers/media/platform/rcar-vin/rcar-dma.c

> > > index a5dbb90c5210..d067439b0b0d 100644

> > > --- a/drivers/media/platform/rcar-vin/rcar-dma.c

> > > +++ b/drivers/media/platform/rcar-vin/rcar-dma.c

> > > @@ -125,6 +125,7 @@

> > >  #define VNDMR2_VPS		(1 << 30)

> > >  #define VNDMR2_HPS		(1 << 29)

> > >  #define VNDMR2_CES		(1 << 28)

> > > +#define VNDMR2_YDS		(1 << 22)

> > >  #define VNDMR2_FTEV		(1 << 17)

> > >  #define VNDMR2_VLV(n)		((n & 0xf) << 12)

> > >  

> > > @@ -698,16 +699,26 @@ static int rvin_setup(struct rvin_dev *vin)

> > >  

> > >  	if (!vin->is_csi) {

> > >  		/* Hsync Signal Polarity Select */

> > > -		if (!(vin->parallel->mbus_flags & V4L2_MBUS_HSYNC_ACTIVE_LOW))

> > > +		if (!(vin->parallel->bus.flags & V4L2_MBUS_HSYNC_ACTIVE_LOW))

> > >  			dmr2 |= VNDMR2_HPS;

> > >  

> > >  		/* Vsync Signal Polarity Select */

> > > -		if (!(vin->parallel->mbus_flags & V4L2_MBUS_VSYNC_ACTIVE_LOW))

> > > +		if (!(vin->parallel->bus.flags & V4L2_MBUS_VSYNC_ACTIVE_LOW))

> > >  			dmr2 |= VNDMR2_VPS;

> > >  

> > >  		/* Data Enable Polarity Select */

> > > -		if (vin->parallel->mbus_flags & V4L2_MBUS_DATA_ENABLE_LOW)

> > > +		if (vin->parallel->bus.flags & V4L2_MBUS_DATA_ENABLE_LOW)

> > >  			dmr2 |= VNDMR2_CES;

> > > +

> > > +		switch (vin->mbus_code) {

> > > +		case MEDIA_BUS_FMT_UYVY8_2X8:

> > > +			if (vin->parallel->bus.bus_width == 8 &&

> > 

> > You can possibly drop this check, as UYVY8_2X8 implies a bus_width equal

> > to 8. Apart from that,

> 

> I agree here as well, I think the check for UYVY8_2X8 may be dropped.

> 

> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> > 

> > > +			    vin->parallel->bus.data_shift == 8)

> > > +				dmr2 |= VNDMR2_YDS;

> > > +			break;

> > > +		default:

> > > +			break;

> > > +		}

> > >  	}

> > >  

> > >  	/*

> > > diff --git a/drivers/media/platform/rcar-vin/rcar-vin.h b/drivers/media/platform/rcar-vin/rcar-vin.h

> > > index c19d077ce1cb..8396e0e45478 100644

> > > --- a/drivers/media/platform/rcar-vin/rcar-vin.h

> > > +++ b/drivers/media/platform/rcar-vin/rcar-vin.h

> > > @@ -19,6 +19,7 @@

> > >  #include <media/v4l2-ctrls.h>

> > >  #include <media/v4l2-dev.h>

> > >  #include <media/v4l2-device.h>

> > > +#include <media/v4l2-fwnode.h>

> > >  #include <media/videobuf2-v4l2.h>

> > >  

> > >  /* Number of HW buffers */

> > > @@ -92,7 +93,7 @@ struct rvin_video_format {

> > >   * @asd:	sub-device descriptor for async framework

> > >   * @subdev:	subdevice matched using async framework

> > >   * @mbus_type:	media bus type

> > > - * @mbus_flags:	media bus configuration flags

> > > + * @bus:	media bus parallel configuration

> > >   * @source_pad:	source pad of remote subdevice

> > >   * @sink_pad:	sink pad of remote subdevice

> > >   *

> > > @@ -102,7 +103,7 @@ struct rvin_parallel_entity {

> > >  	struct v4l2_subdev *subdev;

> > >  

> > >  	enum v4l2_mbus_type mbus_type;

> > > -	unsigned int mbus_flags;

> > > +	struct v4l2_fwnode_bus_parallel bus;

> 

> I think you could break this change (and the fallout) out to a separate 

> patch to make the functional change clearer.


You're often on the side of breaking patches in too small pieces :-) In
this case the patch is small, so I don't think breaking it in two is
required. It would be different if the changes were larger and more
intertwined.

> > >  

> > >  	unsigned int source_pad;

> > >  	unsigned int sink_pad;


-- 
Regards,

Laurent Pinchart
Hans Verkuil Sept. 17, 2020, 8:57 a.m. UTC | #4
Hi Prabhakar,

Can you rebase this patch? It no longer applies.

Regards,

	Hans

On 13/09/2020 20:16, Lad Prabhakar wrote:
> Enable YDS bit if bus_width and data_shift is set to 8 in parallel mode

> for MEDIA_BUS_FMT_UYVY8_2X8 format.

> 

> Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>

> Reviewed-by: Biju Das <biju.das.jz@bp.renesas.com>

> ---

> Changes for v3:

> * Dropped BIT macro

> * Introduced struct v4l2_fwnode_bus_parallel

> 

> 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 |  9 ++++-----

>  drivers/media/platform/rcar-vin/rcar-dma.c  | 17 ++++++++++++++---

>  drivers/media/platform/rcar-vin/rcar-vin.h  |  5 +++--

>  3 files changed, 21 insertions(+), 10 deletions(-)

> 

> diff --git a/drivers/media/platform/rcar-vin/rcar-core.c b/drivers/media/platform/rcar-vin/rcar-core.c

> index 7440c8965d27..1149ab76cf5c 100644

> --- a/drivers/media/platform/rcar-vin/rcar-core.c

> +++ b/drivers/media/platform/rcar-vin/rcar-core.c

> @@ -626,12 +626,11 @@ static int rvin_parallel_parse_v4l2(struct device *dev,

>  

>  	switch (vin->parallel->mbus_type) {

>  	case V4L2_MBUS_PARALLEL:

> -		vin_dbg(vin, "Found PARALLEL media bus\n");

> -		vin->parallel->mbus_flags = vep->bus.parallel.flags;

> -		break;

>  	case V4L2_MBUS_BT656:

> -		vin_dbg(vin, "Found BT656 media bus\n");

> -		vin->parallel->mbus_flags = 0;

> +		vin_dbg(vin, "Found %s media bus\n",

> +			vin->parallel->mbus_type == V4L2_MBUS_PARALLEL ?

> +			"PARALLEL" : "BT656");

> +		vin->parallel->bus = vep->bus.parallel;

>  		break;

>  	default:

>  		vin_err(vin, "Unknown media bus type\n");

> diff --git a/drivers/media/platform/rcar-vin/rcar-dma.c b/drivers/media/platform/rcar-vin/rcar-dma.c

> index a5dbb90c5210..d067439b0b0d 100644

> --- a/drivers/media/platform/rcar-vin/rcar-dma.c

> +++ b/drivers/media/platform/rcar-vin/rcar-dma.c

> @@ -125,6 +125,7 @@

>  #define VNDMR2_VPS		(1 << 30)

>  #define VNDMR2_HPS		(1 << 29)

>  #define VNDMR2_CES		(1 << 28)

> +#define VNDMR2_YDS		(1 << 22)

>  #define VNDMR2_FTEV		(1 << 17)

>  #define VNDMR2_VLV(n)		((n & 0xf) << 12)

>  

> @@ -698,16 +699,26 @@ static int rvin_setup(struct rvin_dev *vin)

>  

>  	if (!vin->is_csi) {

>  		/* Hsync Signal Polarity Select */

> -		if (!(vin->parallel->mbus_flags & V4L2_MBUS_HSYNC_ACTIVE_LOW))

> +		if (!(vin->parallel->bus.flags & V4L2_MBUS_HSYNC_ACTIVE_LOW))

>  			dmr2 |= VNDMR2_HPS;

>  

>  		/* Vsync Signal Polarity Select */

> -		if (!(vin->parallel->mbus_flags & V4L2_MBUS_VSYNC_ACTIVE_LOW))

> +		if (!(vin->parallel->bus.flags & V4L2_MBUS_VSYNC_ACTIVE_LOW))

>  			dmr2 |= VNDMR2_VPS;

>  

>  		/* Data Enable Polarity Select */

> -		if (vin->parallel->mbus_flags & V4L2_MBUS_DATA_ENABLE_LOW)

> +		if (vin->parallel->bus.flags & V4L2_MBUS_DATA_ENABLE_LOW)

>  			dmr2 |= VNDMR2_CES;

> +

> +		switch (vin->mbus_code) {

> +		case MEDIA_BUS_FMT_UYVY8_2X8:

> +			if (vin->parallel->bus.bus_width == 8 &&

> +			    vin->parallel->bus.data_shift == 8)

> +				dmr2 |= VNDMR2_YDS;

> +			break;

> +		default:

> +			break;

> +		}

>  	}

>  

>  	/*

> diff --git a/drivers/media/platform/rcar-vin/rcar-vin.h b/drivers/media/platform/rcar-vin/rcar-vin.h

> index c19d077ce1cb..8396e0e45478 100644

> --- a/drivers/media/platform/rcar-vin/rcar-vin.h

> +++ b/drivers/media/platform/rcar-vin/rcar-vin.h

> @@ -19,6 +19,7 @@

>  #include <media/v4l2-ctrls.h>

>  #include <media/v4l2-dev.h>

>  #include <media/v4l2-device.h>

> +#include <media/v4l2-fwnode.h>

>  #include <media/videobuf2-v4l2.h>

>  

>  /* Number of HW buffers */

> @@ -92,7 +93,7 @@ struct rvin_video_format {

>   * @asd:	sub-device descriptor for async framework

>   * @subdev:	subdevice matched using async framework

>   * @mbus_type:	media bus type

> - * @mbus_flags:	media bus configuration flags

> + * @bus:	media bus parallel configuration

>   * @source_pad:	source pad of remote subdevice

>   * @sink_pad:	sink pad of remote subdevice

>   *

> @@ -102,7 +103,7 @@ struct rvin_parallel_entity {

>  	struct v4l2_subdev *subdev;

>  

>  	enum v4l2_mbus_type mbus_type;

> -	unsigned int mbus_flags;

> +	struct v4l2_fwnode_bus_parallel bus;

>  

>  	unsigned int source_pad;

>  	unsigned int sink_pad;

>
Hans Verkuil Sept. 17, 2020, 9:58 a.m. UTC | #5
On 17/09/2020 10:57, Hans Verkuil wrote:
> Hi Prabhakar,

> 

> Can you rebase this patch? It no longer applies.


Never mind, my mistake. When I was preparing this patch I also had this patch
applied: https://patchwork.linuxtv.org/project/linux-media/patch/1595602732-25582-3-git-send-email-prabhakar.mahadev-lad.rj@bp.renesas.com/

And that caused the conflict with this YDS patch.

However, I backed out the two renesas-vin-ycbcr-8b-g patches since there were a
bunch comments for https://patchwork.linuxtv.org/project/linux-media/patch/1595602732-25582-2-git-send-email-prabhakar.mahadev-lad.rj@bp.renesas.com/

So after dropping those two patches this YDS patch now applies fine and will
be included in the PR.

Sorry for the confusion,

	Hans

> 

> Regards,

> 

> 	Hans

> 

> On 13/09/2020 20:16, Lad Prabhakar wrote:

>> Enable YDS bit if bus_width and data_shift is set to 8 in parallel mode

>> for MEDIA_BUS_FMT_UYVY8_2X8 format.

>>

>> Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>

>> Reviewed-by: Biju Das <biju.das.jz@bp.renesas.com>

>> ---

>> Changes for v3:

>> * Dropped BIT macro

>> * Introduced struct v4l2_fwnode_bus_parallel

>>

>> 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 |  9 ++++-----

>>  drivers/media/platform/rcar-vin/rcar-dma.c  | 17 ++++++++++++++---

>>  drivers/media/platform/rcar-vin/rcar-vin.h  |  5 +++--

>>  3 files changed, 21 insertions(+), 10 deletions(-)

>>

>> diff --git a/drivers/media/platform/rcar-vin/rcar-core.c b/drivers/media/platform/rcar-vin/rcar-core.c

>> index 7440c8965d27..1149ab76cf5c 100644

>> --- a/drivers/media/platform/rcar-vin/rcar-core.c

>> +++ b/drivers/media/platform/rcar-vin/rcar-core.c

>> @@ -626,12 +626,11 @@ static int rvin_parallel_parse_v4l2(struct device *dev,

>>  

>>  	switch (vin->parallel->mbus_type) {

>>  	case V4L2_MBUS_PARALLEL:

>> -		vin_dbg(vin, "Found PARALLEL media bus\n");

>> -		vin->parallel->mbus_flags = vep->bus.parallel.flags;

>> -		break;

>>  	case V4L2_MBUS_BT656:

>> -		vin_dbg(vin, "Found BT656 media bus\n");

>> -		vin->parallel->mbus_flags = 0;

>> +		vin_dbg(vin, "Found %s media bus\n",

>> +			vin->parallel->mbus_type == V4L2_MBUS_PARALLEL ?

>> +			"PARALLEL" : "BT656");

>> +		vin->parallel->bus = vep->bus.parallel;

>>  		break;

>>  	default:

>>  		vin_err(vin, "Unknown media bus type\n");

>> diff --git a/drivers/media/platform/rcar-vin/rcar-dma.c b/drivers/media/platform/rcar-vin/rcar-dma.c

>> index a5dbb90c5210..d067439b0b0d 100644

>> --- a/drivers/media/platform/rcar-vin/rcar-dma.c

>> +++ b/drivers/media/platform/rcar-vin/rcar-dma.c

>> @@ -125,6 +125,7 @@

>>  #define VNDMR2_VPS		(1 << 30)

>>  #define VNDMR2_HPS		(1 << 29)

>>  #define VNDMR2_CES		(1 << 28)

>> +#define VNDMR2_YDS		(1 << 22)

>>  #define VNDMR2_FTEV		(1 << 17)

>>  #define VNDMR2_VLV(n)		((n & 0xf) << 12)

>>  

>> @@ -698,16 +699,26 @@ static int rvin_setup(struct rvin_dev *vin)

>>  

>>  	if (!vin->is_csi) {

>>  		/* Hsync Signal Polarity Select */

>> -		if (!(vin->parallel->mbus_flags & V4L2_MBUS_HSYNC_ACTIVE_LOW))

>> +		if (!(vin->parallel->bus.flags & V4L2_MBUS_HSYNC_ACTIVE_LOW))

>>  			dmr2 |= VNDMR2_HPS;

>>  

>>  		/* Vsync Signal Polarity Select */

>> -		if (!(vin->parallel->mbus_flags & V4L2_MBUS_VSYNC_ACTIVE_LOW))

>> +		if (!(vin->parallel->bus.flags & V4L2_MBUS_VSYNC_ACTIVE_LOW))

>>  			dmr2 |= VNDMR2_VPS;

>>  

>>  		/* Data Enable Polarity Select */

>> -		if (vin->parallel->mbus_flags & V4L2_MBUS_DATA_ENABLE_LOW)

>> +		if (vin->parallel->bus.flags & V4L2_MBUS_DATA_ENABLE_LOW)

>>  			dmr2 |= VNDMR2_CES;

>> +

>> +		switch (vin->mbus_code) {

>> +		case MEDIA_BUS_FMT_UYVY8_2X8:

>> +			if (vin->parallel->bus.bus_width == 8 &&

>> +			    vin->parallel->bus.data_shift == 8)

>> +				dmr2 |= VNDMR2_YDS;

>> +			break;

>> +		default:

>> +			break;

>> +		}

>>  	}

>>  

>>  	/*

>> diff --git a/drivers/media/platform/rcar-vin/rcar-vin.h b/drivers/media/platform/rcar-vin/rcar-vin.h

>> index c19d077ce1cb..8396e0e45478 100644

>> --- a/drivers/media/platform/rcar-vin/rcar-vin.h

>> +++ b/drivers/media/platform/rcar-vin/rcar-vin.h

>> @@ -19,6 +19,7 @@

>>  #include <media/v4l2-ctrls.h>

>>  #include <media/v4l2-dev.h>

>>  #include <media/v4l2-device.h>

>> +#include <media/v4l2-fwnode.h>

>>  #include <media/videobuf2-v4l2.h>

>>  

>>  /* Number of HW buffers */

>> @@ -92,7 +93,7 @@ struct rvin_video_format {

>>   * @asd:	sub-device descriptor for async framework

>>   * @subdev:	subdevice matched using async framework

>>   * @mbus_type:	media bus type

>> - * @mbus_flags:	media bus configuration flags

>> + * @bus:	media bus parallel configuration

>>   * @source_pad:	source pad of remote subdevice

>>   * @sink_pad:	sink pad of remote subdevice

>>   *

>> @@ -102,7 +103,7 @@ struct rvin_parallel_entity {

>>  	struct v4l2_subdev *subdev;

>>  

>>  	enum v4l2_mbus_type mbus_type;

>> -	unsigned int mbus_flags;

>> +	struct v4l2_fwnode_bus_parallel bus;

>>  

>>  	unsigned int source_pad;

>>  	unsigned int sink_pad;

>>

>
Niklas Söderlund Sept. 17, 2020, 10:19 a.m. UTC | #6
Hi Hans,

On 2020-09-17 11:58:16 +0200, Hans Verkuil wrote:
> On 17/09/2020 10:57, Hans Verkuil wrote:

> > Hi Prabhakar,

> > 

> > Can you rebase this patch? It no longer applies.

> 

> Never mind, my mistake. When I was preparing this patch I also had this patch

> applied: https://patchwork.linuxtv.org/project/linux-media/patch/1595602732-25582-3-git-send-email-prabhakar.mahadev-lad.rj@bp.renesas.com/

> 

> And that caused the conflict with this YDS patch.

> 

> However, I backed out the two renesas-vin-ycbcr-8b-g patches since there were a

> bunch comments for https://patchwork.linuxtv.org/project/linux-media/patch/1595602732-25582-2-git-send-email-prabhakar.mahadev-lad.rj@bp.renesas.com/

> 

> So after dropping those two patches this YDS patch now applies fine and will

> be included in the PR.


Thanks for dropping the renesas-vin-ycbcr-8b-g patches from the PR, they 
really should not have been picked up as this patch address the issue in 
a nicer way. To ease your workload would you like me to collect VIN 
patches and send PR to you for that driver?

> 

> Sorry for the confusion,

> 

> 	Hans

> 

> > 

> > Regards,

> > 

> > 	Hans

> > 

> > On 13/09/2020 20:16, Lad Prabhakar wrote:

> >> Enable YDS bit if bus_width and data_shift is set to 8 in parallel mode

> >> for MEDIA_BUS_FMT_UYVY8_2X8 format.

> >>

> >> Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>

> >> Reviewed-by: Biju Das <biju.das.jz@bp.renesas.com>

> >> ---

> >> Changes for v3:

> >> * Dropped BIT macro

> >> * Introduced struct v4l2_fwnode_bus_parallel

> >>

> >> 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 |  9 ++++-----

> >>  drivers/media/platform/rcar-vin/rcar-dma.c  | 17 ++++++++++++++---

> >>  drivers/media/platform/rcar-vin/rcar-vin.h  |  5 +++--

> >>  3 files changed, 21 insertions(+), 10 deletions(-)

> >>

> >> diff --git a/drivers/media/platform/rcar-vin/rcar-core.c b/drivers/media/platform/rcar-vin/rcar-core.c

> >> index 7440c8965d27..1149ab76cf5c 100644

> >> --- a/drivers/media/platform/rcar-vin/rcar-core.c

> >> +++ b/drivers/media/platform/rcar-vin/rcar-core.c

> >> @@ -626,12 +626,11 @@ static int rvin_parallel_parse_v4l2(struct device *dev,

> >>  

> >>  	switch (vin->parallel->mbus_type) {

> >>  	case V4L2_MBUS_PARALLEL:

> >> -		vin_dbg(vin, "Found PARALLEL media bus\n");

> >> -		vin->parallel->mbus_flags = vep->bus.parallel.flags;

> >> -		break;

> >>  	case V4L2_MBUS_BT656:

> >> -		vin_dbg(vin, "Found BT656 media bus\n");

> >> -		vin->parallel->mbus_flags = 0;

> >> +		vin_dbg(vin, "Found %s media bus\n",

> >> +			vin->parallel->mbus_type == V4L2_MBUS_PARALLEL ?

> >> +			"PARALLEL" : "BT656");

> >> +		vin->parallel->bus = vep->bus.parallel;

> >>  		break;

> >>  	default:

> >>  		vin_err(vin, "Unknown media bus type\n");

> >> diff --git a/drivers/media/platform/rcar-vin/rcar-dma.c b/drivers/media/platform/rcar-vin/rcar-dma.c

> >> index a5dbb90c5210..d067439b0b0d 100644

> >> --- a/drivers/media/platform/rcar-vin/rcar-dma.c

> >> +++ b/drivers/media/platform/rcar-vin/rcar-dma.c

> >> @@ -125,6 +125,7 @@

> >>  #define VNDMR2_VPS		(1 << 30)

> >>  #define VNDMR2_HPS		(1 << 29)

> >>  #define VNDMR2_CES		(1 << 28)

> >> +#define VNDMR2_YDS		(1 << 22)

> >>  #define VNDMR2_FTEV		(1 << 17)

> >>  #define VNDMR2_VLV(n)		((n & 0xf) << 12)

> >>  

> >> @@ -698,16 +699,26 @@ static int rvin_setup(struct rvin_dev *vin)

> >>  

> >>  	if (!vin->is_csi) {

> >>  		/* Hsync Signal Polarity Select */

> >> -		if (!(vin->parallel->mbus_flags & V4L2_MBUS_HSYNC_ACTIVE_LOW))

> >> +		if (!(vin->parallel->bus.flags & V4L2_MBUS_HSYNC_ACTIVE_LOW))

> >>  			dmr2 |= VNDMR2_HPS;

> >>  

> >>  		/* Vsync Signal Polarity Select */

> >> -		if (!(vin->parallel->mbus_flags & V4L2_MBUS_VSYNC_ACTIVE_LOW))

> >> +		if (!(vin->parallel->bus.flags & V4L2_MBUS_VSYNC_ACTIVE_LOW))

> >>  			dmr2 |= VNDMR2_VPS;

> >>  

> >>  		/* Data Enable Polarity Select */

> >> -		if (vin->parallel->mbus_flags & V4L2_MBUS_DATA_ENABLE_LOW)

> >> +		if (vin->parallel->bus.flags & V4L2_MBUS_DATA_ENABLE_LOW)

> >>  			dmr2 |= VNDMR2_CES;

> >> +

> >> +		switch (vin->mbus_code) {

> >> +		case MEDIA_BUS_FMT_UYVY8_2X8:

> >> +			if (vin->parallel->bus.bus_width == 8 &&

> >> +			    vin->parallel->bus.data_shift == 8)

> >> +				dmr2 |= VNDMR2_YDS;

> >> +			break;

> >> +		default:

> >> +			break;

> >> +		}

> >>  	}

> >>  

> >>  	/*

> >> diff --git a/drivers/media/platform/rcar-vin/rcar-vin.h b/drivers/media/platform/rcar-vin/rcar-vin.h

> >> index c19d077ce1cb..8396e0e45478 100644

> >> --- a/drivers/media/platform/rcar-vin/rcar-vin.h

> >> +++ b/drivers/media/platform/rcar-vin/rcar-vin.h

> >> @@ -19,6 +19,7 @@

> >>  #include <media/v4l2-ctrls.h>

> >>  #include <media/v4l2-dev.h>

> >>  #include <media/v4l2-device.h>

> >> +#include <media/v4l2-fwnode.h>

> >>  #include <media/videobuf2-v4l2.h>

> >>  

> >>  /* Number of HW buffers */

> >> @@ -92,7 +93,7 @@ struct rvin_video_format {

> >>   * @asd:	sub-device descriptor for async framework

> >>   * @subdev:	subdevice matched using async framework

> >>   * @mbus_type:	media bus type

> >> - * @mbus_flags:	media bus configuration flags

> >> + * @bus:	media bus parallel configuration

> >>   * @source_pad:	source pad of remote subdevice

> >>   * @sink_pad:	sink pad of remote subdevice

> >>   *

> >> @@ -102,7 +103,7 @@ struct rvin_parallel_entity {

> >>  	struct v4l2_subdev *subdev;

> >>  

> >>  	enum v4l2_mbus_type mbus_type;

> >> -	unsigned int mbus_flags;

> >> +	struct v4l2_fwnode_bus_parallel bus;

> >>  

> >>  	unsigned int source_pad;

> >>  	unsigned int sink_pad;

> >>

> > 

> 


-- 
Regards,
Niklas Söderlund
Hans Verkuil Sept. 17, 2020, 10:42 a.m. UTC | #7
On 17/09/2020 12:19, Niklas Söderlund wrote:
> Hi Hans,
> 
> On 2020-09-17 11:58:16 +0200, Hans Verkuil wrote:
>> On 17/09/2020 10:57, Hans Verkuil wrote:
>>> Hi Prabhakar,
>>>
>>> Can you rebase this patch? It no longer applies.
>>
>> Never mind, my mistake. When I was preparing this patch I also had this patch
>> applied: https://patchwork.linuxtv.org/project/linux-media/patch/1595602732-25582-3-git-send-email-prabhakar.mahadev-lad.rj@bp.renesas.com/
>>
>> And that caused the conflict with this YDS patch.
>>
>> However, I backed out the two renesas-vin-ycbcr-8b-g patches since there were a
>> bunch comments for https://patchwork.linuxtv.org/project/linux-media/patch/1595602732-25582-2-git-send-email-prabhakar.mahadev-lad.rj@bp.renesas.com/
>>
>> So after dropping those two patches this YDS patch now applies fine and will
>> be included in the PR.
> 
> Thanks for dropping the renesas-vin-ycbcr-8b-g patches from the PR, they 
> really should not have been picked up as this patch address the issue in 
> a nicer way. To ease your workload would you like me to collect VIN 
> patches and send PR to you for that driver?

I don't think that's necessary. It's not all that much.

But please don't hesitate to ping/mail me if it takes too long for me to pick up
rcar patches, in case I missed some.

Regards,

	Hans

> 
>>
>> Sorry for the confusion,
>>
>> 	Hans
>>
>>>
>>> Regards,
>>>
>>> 	Hans
>>>
>>> On 13/09/2020 20:16, Lad Prabhakar wrote:
>>>> Enable YDS bit if bus_width and data_shift is set to 8 in parallel mode
>>>> for MEDIA_BUS_FMT_UYVY8_2X8 format.
>>>>
>>>> Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
>>>> Reviewed-by: Biju Das <biju.das.jz@bp.renesas.com>
>>>> ---
>>>> Changes for v3:
>>>> * Dropped BIT macro
>>>> * Introduced struct v4l2_fwnode_bus_parallel
>>>>
>>>> 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 |  9 ++++-----
>>>>  drivers/media/platform/rcar-vin/rcar-dma.c  | 17 ++++++++++++++---
>>>>  drivers/media/platform/rcar-vin/rcar-vin.h  |  5 +++--
>>>>  3 files changed, 21 insertions(+), 10 deletions(-)
>>>>
>>>> diff --git a/drivers/media/platform/rcar-vin/rcar-core.c b/drivers/media/platform/rcar-vin/rcar-core.c
>>>> index 7440c8965d27..1149ab76cf5c 100644
>>>> --- a/drivers/media/platform/rcar-vin/rcar-core.c
>>>> +++ b/drivers/media/platform/rcar-vin/rcar-core.c
>>>> @@ -626,12 +626,11 @@ static int rvin_parallel_parse_v4l2(struct device *dev,
>>>>  
>>>>  	switch (vin->parallel->mbus_type) {
>>>>  	case V4L2_MBUS_PARALLEL:
>>>> -		vin_dbg(vin, "Found PARALLEL media bus\n");
>>>> -		vin->parallel->mbus_flags = vep->bus.parallel.flags;
>>>> -		break;
>>>>  	case V4L2_MBUS_BT656:
>>>> -		vin_dbg(vin, "Found BT656 media bus\n");
>>>> -		vin->parallel->mbus_flags = 0;
>>>> +		vin_dbg(vin, "Found %s media bus\n",
>>>> +			vin->parallel->mbus_type == V4L2_MBUS_PARALLEL ?
>>>> +			"PARALLEL" : "BT656");
>>>> +		vin->parallel->bus = vep->bus.parallel;
>>>>  		break;
>>>>  	default:
>>>>  		vin_err(vin, "Unknown media bus type\n");
>>>> diff --git a/drivers/media/platform/rcar-vin/rcar-dma.c b/drivers/media/platform/rcar-vin/rcar-dma.c
>>>> index a5dbb90c5210..d067439b0b0d 100644
>>>> --- a/drivers/media/platform/rcar-vin/rcar-dma.c
>>>> +++ b/drivers/media/platform/rcar-vin/rcar-dma.c
>>>> @@ -125,6 +125,7 @@
>>>>  #define VNDMR2_VPS		(1 << 30)
>>>>  #define VNDMR2_HPS		(1 << 29)
>>>>  #define VNDMR2_CES		(1 << 28)
>>>> +#define VNDMR2_YDS		(1 << 22)
>>>>  #define VNDMR2_FTEV		(1 << 17)
>>>>  #define VNDMR2_VLV(n)		((n & 0xf) << 12)
>>>>  
>>>> @@ -698,16 +699,26 @@ static int rvin_setup(struct rvin_dev *vin)
>>>>  
>>>>  	if (!vin->is_csi) {
>>>>  		/* Hsync Signal Polarity Select */
>>>> -		if (!(vin->parallel->mbus_flags & V4L2_MBUS_HSYNC_ACTIVE_LOW))
>>>> +		if (!(vin->parallel->bus.flags & V4L2_MBUS_HSYNC_ACTIVE_LOW))
>>>>  			dmr2 |= VNDMR2_HPS;
>>>>  
>>>>  		/* Vsync Signal Polarity Select */
>>>> -		if (!(vin->parallel->mbus_flags & V4L2_MBUS_VSYNC_ACTIVE_LOW))
>>>> +		if (!(vin->parallel->bus.flags & V4L2_MBUS_VSYNC_ACTIVE_LOW))
>>>>  			dmr2 |= VNDMR2_VPS;
>>>>  
>>>>  		/* Data Enable Polarity Select */
>>>> -		if (vin->parallel->mbus_flags & V4L2_MBUS_DATA_ENABLE_LOW)
>>>> +		if (vin->parallel->bus.flags & V4L2_MBUS_DATA_ENABLE_LOW)
>>>>  			dmr2 |= VNDMR2_CES;
>>>> +
>>>> +		switch (vin->mbus_code) {
>>>> +		case MEDIA_BUS_FMT_UYVY8_2X8:
>>>> +			if (vin->parallel->bus.bus_width == 8 &&
>>>> +			    vin->parallel->bus.data_shift == 8)
>>>> +				dmr2 |= VNDMR2_YDS;
>>>> +			break;
>>>> +		default:
>>>> +			break;
>>>> +		}
>>>>  	}
>>>>  
>>>>  	/*
>>>> diff --git a/drivers/media/platform/rcar-vin/rcar-vin.h b/drivers/media/platform/rcar-vin/rcar-vin.h
>>>> index c19d077ce1cb..8396e0e45478 100644
>>>> --- a/drivers/media/platform/rcar-vin/rcar-vin.h
>>>> +++ b/drivers/media/platform/rcar-vin/rcar-vin.h
>>>> @@ -19,6 +19,7 @@
>>>>  #include <media/v4l2-ctrls.h>
>>>>  #include <media/v4l2-dev.h>
>>>>  #include <media/v4l2-device.h>
>>>> +#include <media/v4l2-fwnode.h>
>>>>  #include <media/videobuf2-v4l2.h>
>>>>  
>>>>  /* Number of HW buffers */
>>>> @@ -92,7 +93,7 @@ struct rvin_video_format {
>>>>   * @asd:	sub-device descriptor for async framework
>>>>   * @subdev:	subdevice matched using async framework
>>>>   * @mbus_type:	media bus type
>>>> - * @mbus_flags:	media bus configuration flags
>>>> + * @bus:	media bus parallel configuration
>>>>   * @source_pad:	source pad of remote subdevice
>>>>   * @sink_pad:	sink pad of remote subdevice
>>>>   *
>>>> @@ -102,7 +103,7 @@ struct rvin_parallel_entity {
>>>>  	struct v4l2_subdev *subdev;
>>>>  
>>>>  	enum v4l2_mbus_type mbus_type;
>>>> -	unsigned int mbus_flags;
>>>> +	struct v4l2_fwnode_bus_parallel bus;
>>>>  
>>>>  	unsigned int source_pad;
>>>>  	unsigned int sink_pad;
>>>>
>>>
>>
>
diff mbox series

Patch

diff --git a/drivers/media/platform/rcar-vin/rcar-core.c b/drivers/media/platform/rcar-vin/rcar-core.c
index 7440c8965d27..1149ab76cf5c 100644
--- a/drivers/media/platform/rcar-vin/rcar-core.c
+++ b/drivers/media/platform/rcar-vin/rcar-core.c
@@ -626,12 +626,11 @@  static int rvin_parallel_parse_v4l2(struct device *dev,
 
 	switch (vin->parallel->mbus_type) {
 	case V4L2_MBUS_PARALLEL:
-		vin_dbg(vin, "Found PARALLEL media bus\n");
-		vin->parallel->mbus_flags = vep->bus.parallel.flags;
-		break;
 	case V4L2_MBUS_BT656:
-		vin_dbg(vin, "Found BT656 media bus\n");
-		vin->parallel->mbus_flags = 0;
+		vin_dbg(vin, "Found %s media bus\n",
+			vin->parallel->mbus_type == V4L2_MBUS_PARALLEL ?
+			"PARALLEL" : "BT656");
+		vin->parallel->bus = vep->bus.parallel;
 		break;
 	default:
 		vin_err(vin, "Unknown media bus type\n");
diff --git a/drivers/media/platform/rcar-vin/rcar-dma.c b/drivers/media/platform/rcar-vin/rcar-dma.c
index a5dbb90c5210..d067439b0b0d 100644
--- a/drivers/media/platform/rcar-vin/rcar-dma.c
+++ b/drivers/media/platform/rcar-vin/rcar-dma.c
@@ -125,6 +125,7 @@ 
 #define VNDMR2_VPS		(1 << 30)
 #define VNDMR2_HPS		(1 << 29)
 #define VNDMR2_CES		(1 << 28)
+#define VNDMR2_YDS		(1 << 22)
 #define VNDMR2_FTEV		(1 << 17)
 #define VNDMR2_VLV(n)		((n & 0xf) << 12)
 
@@ -698,16 +699,26 @@  static int rvin_setup(struct rvin_dev *vin)
 
 	if (!vin->is_csi) {
 		/* Hsync Signal Polarity Select */
-		if (!(vin->parallel->mbus_flags & V4L2_MBUS_HSYNC_ACTIVE_LOW))
+		if (!(vin->parallel->bus.flags & V4L2_MBUS_HSYNC_ACTIVE_LOW))
 			dmr2 |= VNDMR2_HPS;
 
 		/* Vsync Signal Polarity Select */
-		if (!(vin->parallel->mbus_flags & V4L2_MBUS_VSYNC_ACTIVE_LOW))
+		if (!(vin->parallel->bus.flags & V4L2_MBUS_VSYNC_ACTIVE_LOW))
 			dmr2 |= VNDMR2_VPS;
 
 		/* Data Enable Polarity Select */
-		if (vin->parallel->mbus_flags & V4L2_MBUS_DATA_ENABLE_LOW)
+		if (vin->parallel->bus.flags & V4L2_MBUS_DATA_ENABLE_LOW)
 			dmr2 |= VNDMR2_CES;
+
+		switch (vin->mbus_code) {
+		case MEDIA_BUS_FMT_UYVY8_2X8:
+			if (vin->parallel->bus.bus_width == 8 &&
+			    vin->parallel->bus.data_shift == 8)
+				dmr2 |= VNDMR2_YDS;
+			break;
+		default:
+			break;
+		}
 	}
 
 	/*
diff --git a/drivers/media/platform/rcar-vin/rcar-vin.h b/drivers/media/platform/rcar-vin/rcar-vin.h
index c19d077ce1cb..8396e0e45478 100644
--- a/drivers/media/platform/rcar-vin/rcar-vin.h
+++ b/drivers/media/platform/rcar-vin/rcar-vin.h
@@ -19,6 +19,7 @@ 
 #include <media/v4l2-ctrls.h>
 #include <media/v4l2-dev.h>
 #include <media/v4l2-device.h>
+#include <media/v4l2-fwnode.h>
 #include <media/videobuf2-v4l2.h>
 
 /* Number of HW buffers */
@@ -92,7 +93,7 @@  struct rvin_video_format {
  * @asd:	sub-device descriptor for async framework
  * @subdev:	subdevice matched using async framework
  * @mbus_type:	media bus type
- * @mbus_flags:	media bus configuration flags
+ * @bus:	media bus parallel configuration
  * @source_pad:	source pad of remote subdevice
  * @sink_pad:	sink pad of remote subdevice
  *
@@ -102,7 +103,7 @@  struct rvin_parallel_entity {
 	struct v4l2_subdev *subdev;
 
 	enum v4l2_mbus_type mbus_type;
-	unsigned int mbus_flags;
+	struct v4l2_fwnode_bus_parallel bus;
 
 	unsigned int source_pad;
 	unsigned int sink_pad;