Hi Lad, Thanks for your work. On 2020-05-27 13:16:48 +0100, Lad Prabhakar wrote: > Up until now the VIN was capable to convert any of its supported input mbus > formats to any of it's supported output pixel formats. With the addition of > RAW formats this is no longer true. > > This patch invalidates the pipeline by adding a check if given vin input > format can be converted to supported output pixel format. > > Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx> Reviewed-by: Niklas Söderlund <niklas.soderlund+renesas@xxxxxxxxxxxx> > --- > drivers/media/platform/rcar-vin/rcar-dma.c | 6 +++++- > drivers/media/platform/rcar-vin/rcar-v4l2.c | 11 ++++++++--- > 2 files changed, 13 insertions(+), 4 deletions(-) > > diff --git a/drivers/media/platform/rcar-vin/rcar-dma.c b/drivers/media/platform/rcar-vin/rcar-dma.c > index 1a30cd036371..2b26204910fd 100644 > --- a/drivers/media/platform/rcar-vin/rcar-dma.c > +++ b/drivers/media/platform/rcar-vin/rcar-dma.c > @@ -1110,11 +1110,15 @@ static int rvin_mc_validate_format(struct rvin_dev *vin, struct v4l2_subdev *sd, > case MEDIA_BUS_FMT_UYVY8_2X8: > case MEDIA_BUS_FMT_UYVY10_2X10: > case MEDIA_BUS_FMT_RGB888_1X24: > - vin->mbus_code = fmt.format.code; > + break; > + case MEDIA_BUS_FMT_SRGGB8_1X8: > + if (vin->format.pixelformat != V4L2_PIX_FMT_SRGGB8) > + return -EPIPE; > break; > default: > return -EPIPE; > } > + vin->mbus_code = fmt.format.code; > > switch (fmt.format.field) { > case V4L2_FIELD_TOP: > diff --git a/drivers/media/platform/rcar-vin/rcar-v4l2.c b/drivers/media/platform/rcar-vin/rcar-v4l2.c > index f421e2584875..d3b6a992b4a2 100644 > --- a/drivers/media/platform/rcar-vin/rcar-v4l2.c > +++ b/drivers/media/platform/rcar-vin/rcar-v4l2.c > @@ -350,9 +350,9 @@ static int rvin_enum_fmt_vid_cap(struct file *file, void *priv, > * all of the related pixel formats. If mbus_code is not set enumerate > * all possible pixelformats. > * > - * TODO: Once raw capture formats are added to the driver this needs > - * to be extended so raw media bus codes only result in raw pixel > - * formats. > + * TODO: Once raw MEDIA_BUS_FMT_SRGGB12_1X12 format is added to the > + * driver this needs to be extended so raw media bus code only result in > + * raw pixel format. > */ > switch (f->mbus_code) { > case 0: > @@ -362,6 +362,11 @@ static int rvin_enum_fmt_vid_cap(struct file *file, void *priv, > case MEDIA_BUS_FMT_UYVY10_2X10: > case MEDIA_BUS_FMT_RGB888_1X24: > break; > + case MEDIA_BUS_FMT_SRGGB8_1X8: > + if (f->index) > + return -EINVAL; > + f->pixelformat = V4L2_PIX_FMT_SRGGB8; > + return 0; > default: > return -EINVAL; > } > -- > 2.17.1 > -- Regards, Niklas Söderlund