On 17/05/18 04:00, Niklas Söderlund wrote: Missing commit log. > Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@xxxxxxxxxxxx> > --- > Documentation/media/uapi/v4l/vidioc-g-std.rst | 14 ++++++++++---- > Documentation/media/uapi/v4l/vidioc-querystd.rst | 11 +++++++---- What about ENUMSTD? Regards, Hans > drivers/media/v4l2-core/v4l2-subdev.c | 12 ++++++++++++ > include/uapi/linux/v4l2-subdev.h | 3 +++ > 4 files changed, 32 insertions(+), 8 deletions(-) > > --- > > Hi Hans, > > I have tested this on Renesas Gen3 Salvator-XS M3-N using the AFE > subdevice from the adv748x driver together with the R-Car VIN and CSI-2 > pipeline. > > I wrote a prototype patch for v4l2-ctl which adds three new options > (--get-subdev-standard, --set-subdev-standard and > --get-subdev-detected-standard) to ease testing which I plan to submit > after some cleanup if this patch receives positive feedback. > > If you or anyone else is interested in testing this patch the v4l2-utils > prototype patches are available at > > git://git.ragnatech.se/v4l-utils#subdev-std > > Regards, > // Niklas > > diff --git a/Documentation/media/uapi/v4l/vidioc-g-std.rst b/Documentation/media/uapi/v4l/vidioc-g-std.rst > index 90791ab51a5371b8..8d94f0404df270db 100644 > --- a/Documentation/media/uapi/v4l/vidioc-g-std.rst > +++ b/Documentation/media/uapi/v4l/vidioc-g-std.rst > @@ -2,14 +2,14 @@ > > .. _VIDIOC_G_STD: > > -******************************** > -ioctl VIDIOC_G_STD, VIDIOC_S_STD > -******************************** > +************************************************************************** > +ioctl VIDIOC_G_STD, VIDIOC_S_STD, VIDIOC_SUBDEV_G_STD, VIDIOC_SUBDEV_S_STD > +************************************************************************** > > Name > ==== > > -VIDIOC_G_STD - VIDIOC_S_STD - Query or select the video standard of the current input > +VIDIOC_G_STD - VIDIOC_S_STD - VIDIOC_SUBDEV_G_STD - VIDIOC_SUBDEV_S_STD - Query or select the video standard of the current input > > > Synopsis > @@ -21,6 +21,12 @@ Synopsis > .. c:function:: int ioctl( int fd, VIDIOC_S_STD, const v4l2_std_id *argp ) > :name: VIDIOC_S_STD > > +.. c:function:: int ioctl( int fd, VIDIOC_SUBDEV_G_STD, v4l2_std_id *argp ) > + :name: VIDIOC_SUBDEV_G_STD > + > +.. c:function:: int ioctl( int fd, VIDIOC_SUBDEV_S_STD, const v4l2_std_id *argp ) > + :name: VIDIOC_SUBDEV_S_STD > + > > Arguments > ========= > diff --git a/Documentation/media/uapi/v4l/vidioc-querystd.rst b/Documentation/media/uapi/v4l/vidioc-querystd.rst > index cf40bca19b9f8665..a8385cc7481869dd 100644 > --- a/Documentation/media/uapi/v4l/vidioc-querystd.rst > +++ b/Documentation/media/uapi/v4l/vidioc-querystd.rst > @@ -2,14 +2,14 @@ > > .. _VIDIOC_QUERYSTD: > > -********************* > -ioctl VIDIOC_QUERYSTD > -********************* > +********************************************* > +ioctl VIDIOC_QUERYSTD, VIDIOC_SUBDEV_QUERYSTD > +********************************************* > > Name > ==== > > -VIDIOC_QUERYSTD - Sense the video standard received by the current input > +VIDIOC_QUERYSTD - VIDIOC_SUBDEV_QUERYSTD - Sense the video standard received by the current input > > > Synopsis > @@ -18,6 +18,9 @@ Synopsis > .. c:function:: int ioctl( int fd, VIDIOC_QUERYSTD, v4l2_std_id *argp ) > :name: VIDIOC_QUERYSTD > > +.. c:function:: int ioctl( int fd, VIDIOC_SUBDEV_QUERYSTD, v4l2_std_id *argp ) > + :name: VIDIOC_SUBDEV_QUERYSTD > + > > Arguments > ========= > diff --git a/drivers/media/v4l2-core/v4l2-subdev.c b/drivers/media/v4l2-core/v4l2-subdev.c > index f9eed938d3480b74..a156b1812e923721 100644 > --- a/drivers/media/v4l2-core/v4l2-subdev.c > +++ b/drivers/media/v4l2-core/v4l2-subdev.c > @@ -494,6 +494,18 @@ static long subdev_do_ioctl(struct file *file, unsigned int cmd, void *arg) > > case VIDIOC_SUBDEV_S_DV_TIMINGS: > return v4l2_subdev_call(sd, video, s_dv_timings, arg); > + > + case VIDIOC_SUBDEV_G_STD: > + return v4l2_subdev_call(sd, video, g_std, arg); > + > + case VIDIOC_SUBDEV_S_STD: { > + v4l2_std_id *std = arg; > + > + return v4l2_subdev_call(sd, video, s_std, *std); > + } > + > + case VIDIOC_SUBDEV_QUERYSTD: > + return v4l2_subdev_call(sd, video, querystd, arg); > #endif > default: > return v4l2_subdev_call(sd, core, ioctl, cmd, arg); > diff --git a/include/uapi/linux/v4l2-subdev.h b/include/uapi/linux/v4l2-subdev.h > index c95a53e6743cb040..133696a1f324ffdc 100644 > --- a/include/uapi/linux/v4l2-subdev.h > +++ b/include/uapi/linux/v4l2-subdev.h > @@ -170,8 +170,11 @@ struct v4l2_subdev_selection { > #define VIDIOC_SUBDEV_G_SELECTION _IOWR('V', 61, struct v4l2_subdev_selection) > #define VIDIOC_SUBDEV_S_SELECTION _IOWR('V', 62, struct v4l2_subdev_selection) > /* The following ioctls are identical to the ioctls in videodev2.h */ > +#define VIDIOC_SUBDEV_G_STD _IOR('V', 23, v4l2_std_id) > +#define VIDIOC_SUBDEV_S_STD _IOW('V', 24, v4l2_std_id) > #define VIDIOC_SUBDEV_G_EDID _IOWR('V', 40, struct v4l2_edid) > #define VIDIOC_SUBDEV_S_EDID _IOWR('V', 41, struct v4l2_edid) > +#define VIDIOC_SUBDEV_QUERYSTD _IOR('V', 63, v4l2_std_id) > #define VIDIOC_SUBDEV_S_DV_TIMINGS _IOWR('V', 87, struct v4l2_dv_timings) > #define VIDIOC_SUBDEV_G_DV_TIMINGS _IOWR('V', 88, struct v4l2_dv_timings) > #define VIDIOC_SUBDEV_ENUM_DV_TIMINGS _IOWR('V', 98, struct v4l2_enum_dv_timings) >