Hi Laurent On Mon, May 06, 2024 at 12:07:40AM GMT, Laurent Pinchart wrote: > Hi Jacopo, > > Thank you for the patch. > > On Fri, May 03, 2024 at 05:51:21PM +0200, Jacopo Mondi wrote: > > Define a list of supported mbus codes for the TXA and TXB CSI-2 > > transmitters and implement the enum_mbus_code operation. > > The commit message should explain why, not just what. Explaining why the Should I explain why the driver has to implement enum_mbus_codes ? > formats for TXA and TXB differ would also be useful. ok > > > Signed-off-by: Jacopo Mondi <jacopo.mondi@xxxxxxxxxxxxxxxx> > > --- > > drivers/media/i2c/adv748x/adv748x-csi2.c | 35 ++++++++++++++++++++++++ > > 1 file changed, 35 insertions(+) > > > > diff --git a/drivers/media/i2c/adv748x/adv748x-csi2.c b/drivers/media/i2c/adv748x/adv748x-csi2.c > > index 9da7f6742a2b..219417b319a6 100644 > > --- a/drivers/media/i2c/adv748x/adv748x-csi2.c > > +++ b/drivers/media/i2c/adv748x/adv748x-csi2.c > > @@ -21,6 +21,18 @@ static const struct v4l2_mbus_framefmt adv748x_csi2_default_fmt = { > > .field = V4L2_FIELD_NONE, > > }; > > > > +static const unsigned int adv748x_csi2_txa_fmts[] = { > > + MEDIA_BUS_FMT_YUYV8_1X16, > > + MEDIA_BUS_FMT_YUYV10_1X20, > > CSI-2 uses UYVY, not YUYV. > As this a recurring comment in the series (rightfully, I'm not questioning that) how does it work with existing test scripts assuming YUYV ? The same question could be asked about the issue Niklas had: is changing what pad an operation is allowed to be called on legit ? My answer would be yes, otherwise we'll be forever stuck, but I would like to check, especially with Niklas which maintains vin-tests. > > + MEDIA_BUS_FMT_RGB565_1X16, > > + MEDIA_BUS_FMT_RGB666_1X18, > > + MEDIA_BUS_FMT_RGB888_1X24, > > +}; > > + > > +static const unsigned int adv748x_csi2_txb_fmts[] = { > > + MEDIA_BUS_FMT_YUYV8_1X16, > > +}; > > + > > int adv748x_csi2_set_virtual_channel(struct adv748x_csi2 *tx, unsigned int vc) > > { > > return tx_write(tx, ADV748X_CSI_VC_REF, vc << ADV748X_CSI_VC_REF_SHIFT); > > @@ -146,6 +158,28 @@ static const struct v4l2_subdev_video_ops adv748x_csi2_video_ops = { > > * But we must support setting the pad formats for format propagation. > > */ > > > > +static int adv748x_csi2_enum_mbus_code(struct v4l2_subdev *sd, > > + struct v4l2_subdev_state *sd_state, > > + struct v4l2_subdev_mbus_code_enum *code) > > +{ > > + struct adv748x_csi2 *tx = adv748x_sd_to_csi2(sd); > > + const unsigned int *codes = is_txa(tx) ? > > + adv748x_csi2_txa_fmts : > > + adv748x_csi2_txb_fmts; > > + size_t num_fmts = is_txa(tx) ? ARRAY_SIZE(adv748x_csi2_txa_fmts) > > + : ARRAY_SIZE(adv748x_csi2_txb_fmts); > > + > > + if (code->pad != ADV748X_CSI2_SOURCE) > > + return -EINVAL; > > + > > + if (code->index >= num_fmts) > > + return -EINVAL; > > + > > + code->code = codes[code->index]; > > + > > + return 0; > > +} > > + > > static struct v4l2_mbus_framefmt * > > adv748x_csi2_get_pad_format(struct v4l2_subdev *sd, > > struct v4l2_subdev_state *sd_state, > > @@ -235,6 +269,7 @@ static int adv748x_csi2_get_mbus_config(struct v4l2_subdev *sd, unsigned int pad > > } > > > > static const struct v4l2_subdev_pad_ops adv748x_csi2_pad_ops = { > > + .enum_mbus_code = adv748x_csi2_enum_mbus_code, > > .get_fmt = adv748x_csi2_get_format, > > .set_fmt = adv748x_csi2_set_format, > > .get_mbus_config = adv748x_csi2_get_mbus_config, > > -- > Regards, > > Laurent Pinchart