Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@xxxxxxxxxxxx> --- drivers/media/i2c/adv748x/adv748x-csi2.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/drivers/media/i2c/adv748x/adv748x-csi2.c b/drivers/media/i2c/adv748x/adv748x-csi2.c index a77069fc1adc1eca..58a9d9105148c15b 100644 --- a/drivers/media/i2c/adv748x/adv748x-csi2.c +++ b/drivers/media/i2c/adv748x/adv748x-csi2.c @@ -225,9 +225,38 @@ static int adv748x_csi2_set_format(struct v4l2_subdev *sd, return ret; } +static int adv748x_csi2_get_frame_desc(struct v4l2_subdev *sd, unsigned int pad, + struct v4l2_mbus_frame_desc *fd) +{ + struct adv748x_csi2 *tx = adv748x_sd_to_csi2(sd); + struct adv748x_state *state = tx->state; + struct v4l2_mbus_framefmt *mbusformat; + + if (pad != ADV748X_CSI2_SOURCE || fd == NULL) + return -EINVAL; + + mbusformat = adv748x_csi2_get_pad_format(sd, NULL, ADV748X_CSI2_SINK, + V4L2_SUBDEV_FORMAT_ACTIVE); + if (!mbusformat) + return -EINVAL; + + mutex_lock(&state->mutex); + fd->entry[0].flags = V4L2_MBUS_FRAME_DESC_FL_CSI2; + fd->entry[0].pixelcode = mbusformat->code; + fd->entry[0].csi2.channel = tx->vc; + fd->entry[0].csi2.datatype = + adv748x_csi2_code_to_datatype(fd->entry[0].pixelcode); + fd->entry[0].csi2.pad = ADV748X_CSI2_SINK; + fd->num_entries = 1; + mutex_unlock(&state->mutex); + + return 0; +} + static const struct v4l2_subdev_pad_ops adv748x_csi2_pad_ops = { .get_fmt = adv748x_csi2_get_format, .set_fmt = adv748x_csi2_set_format, + .get_frame_desc = adv748x_csi2_get_frame_desc, }; /* ----------------------------------------------------------------------------- -- 2.13.3