Message ID | 20200413202351.1359754-7-niklas.soderlund+renesas@ragnatech.se (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | v4l2-dev/ioctl: Add V4L2_CAP_IO_MC | expand |
On 13.04.20 22:23, Niklas Söderlund wrote: > Set the V4L2_CAP_IO_MC capability flag to report this vimc > inputs/outputs are controlled by the media graph. > > Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com> > --- > Changes since v5: > > - Wrap line longer than 80 characters > - Implement mbus_code filtering for format enumeration > --- > drivers/media/platform/vimc/vimc-capture.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/drivers/media/platform/vimc/vimc-capture.c b/drivers/media/platform/vimc/vimc-capture.c > index 747ea9cc1bd7cb12..dbc827fd1b9baebb 100644 > --- a/drivers/media/platform/vimc/vimc-capture.c > +++ b/drivers/media/platform/vimc/vimc-capture.c > @@ -149,7 +149,12 @@ static int vimc_cap_s_fmt_vid_cap(struct file *file, void *priv, > static int vimc_cap_enum_fmt_vid_cap(struct file *file, void *priv, > struct v4l2_fmtdesc *f) > { > - const struct vimc_pix_map *vpix = vimc_pix_map_by_index(f->index); > + const struct vimc_pix_map *vpix; > + > + if (f->mbus_code) > + vpix = vimc_pix_map_by_code(f->mbus_code); Hi, if I understand correctly, the f->index should still tell us we should return the i'th format for the given mbus_code, right? if yes then since vimc support only one pixelformat for each mbus code there should be a code added here: if (f->index > 0) return -EINVAL; Thanks, Dafna > + else > + vpix = vimc_pix_map_by_index(f->index); > > if (!vpix) > return -EINVAL; > @@ -450,7 +455,8 @@ struct vimc_ent_device *vimc_cap_add(struct vimc_device *vimc, > > /* Initialize the video_device struct */ > vdev = &vcap->vdev; > - vdev->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING; > + vdev->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING > + | V4L2_CAP_IO_MC; > vdev->entity.ops = &vimc_cap_mops; > vdev->release = video_device_release_empty; > vdev->fops = &vimc_cap_fops; >
diff --git a/drivers/media/platform/vimc/vimc-capture.c b/drivers/media/platform/vimc/vimc-capture.c index 747ea9cc1bd7cb12..dbc827fd1b9baebb 100644 --- a/drivers/media/platform/vimc/vimc-capture.c +++ b/drivers/media/platform/vimc/vimc-capture.c @@ -149,7 +149,12 @@ static int vimc_cap_s_fmt_vid_cap(struct file *file, void *priv, static int vimc_cap_enum_fmt_vid_cap(struct file *file, void *priv, struct v4l2_fmtdesc *f) { - const struct vimc_pix_map *vpix = vimc_pix_map_by_index(f->index); + const struct vimc_pix_map *vpix; + + if (f->mbus_code) + vpix = vimc_pix_map_by_code(f->mbus_code); + else + vpix = vimc_pix_map_by_index(f->index); if (!vpix) return -EINVAL; @@ -450,7 +455,8 @@ struct vimc_ent_device *vimc_cap_add(struct vimc_device *vimc, /* Initialize the video_device struct */ vdev = &vcap->vdev; - vdev->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING; + vdev->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING + | V4L2_CAP_IO_MC; vdev->entity.ops = &vimc_cap_mops; vdev->release = video_device_release_empty; vdev->fops = &vimc_cap_fops;