Hi Tim, Jacopo,

I have now finished writing the v4l2-compliance tests for the various v4l-subdev
ioctls. I managed to test some with the vimc driver, but that doesn't implement 
all
ioctls, so I could use some help testing my test code :-)

To test you first need to apply these patches to your kernel:

https://patchwork.linuxtv.org/patch/46817/
https://patchwork.linuxtv.org/patch/46822/

Otherwise the compliance test will fail a lot.

Now run v4l2-compliance -u /dev/v4l-subdevX (or -uX as a shortcut) and see what
happens.

I have tested the following ioctls with vimc, so they are likely to be correct:

#define VIDIOC_SUBDEV_G_FMT                     _IOWR('V',  4, struct 
v4l2_subdev_format)
#define VIDIOC_SUBDEV_S_FMT                     _IOWR('V',  5, struct 
v4l2_subdev_format)
#define VIDIOC_SUBDEV_ENUM_MBUS_CODE            _IOWR('V',  2, struct 
v4l2_subdev_mbus_code_enum)
#define VIDIOC_SUBDEV_ENUM_FRAME_SIZE           _IOWR('V', 74, struct 
v4l2_subdev_frame_size_enum)

All others are untested:

#define VIDIOC_SUBDEV_G_FRAME_INTERVAL          _IOWR('V', 21, struct 
v4l2_subdev_frame_interval)
#define VIDIOC_SUBDEV_S_FRAME_INTERVAL          _IOWR('V', 22, struct 
v4l2_subdev_frame_interval)
#define VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL       _IOWR('V', 75, struct 
v4l2_subdev_frame_interval_enum)
#define VIDIOC_SUBDEV_G_CROP                    _IOWR('V', 59, struct 
v4l2_subdev_crop)
#define VIDIOC_SUBDEV_S_CROP                    _IOWR('V', 60, struct 
v4l2_subdev_crop)
#define VIDIOC_SUBDEV_G_SELECTION               _IOWR('V', 61, struct 
v4l2_subdev_selection)
#define VIDIOC_SUBDEV_S_SELECTION               _IOWR('V', 62, struct 
v4l2_subdev_selection)
#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_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)
#define VIDIOC_SUBDEV_QUERY_DV_TIMINGS          _IOR('V', 99, struct 
v4l2_dv_timings)
#define VIDIOC_SUBDEV_DV_TIMINGS_CAP            _IOWR('V', 100, struct 
v4l2_dv_timings_cap)

I did the best I could, but there may very well be bugs in the test code.

I will also test the timings and edid ioctls myself later next week at work.

The v4l2-compliance utility can now also test media devices (-m option), 
although that's
early days yet. Eventually I want to be able to walk the graph and test each 
device in
turn.

I have this idea of making v4l2-compliance, cec-compliance and media-compliance
frontends that can all share the actual test code. And perhaps that can include 
a new
dvb-compliance as well.

However, that's future music, for now I just want to get proper ioctl test 
coverage
so driver authors can at least have some confidence in their code by running 
these
tests.

Regards,

        Hans

Reply via email to