This patch series add support for the TI VIP video capture engine. VIP stands for Video Input Port, it can be found on devices such as DRA7xx and provides a parallel interface to a video source such as a sensor or TV decoder. Each VIP can support two inputs (slices) and a SoC can be configured with a variable number of VIP's. Each slice can support two ports each connected to its own sub-device.
Here is the output of v4l2-compliance against this driver: # v4l2-compliance -s -d 1 v4l2-compliance SHA: not available, 32 bits Compliance test for vip device /dev/video1: Driver name : vip Card type : vip Bus info : platform:vip1:vin2a:stream0 Driver version : 5.7.0 Capabilities : 0x85200001 Video Capture Read/Write Streaming Extended Pix Format Device Capabilities Device Caps : 0x05200001 Video Capture Read/Write Streaming Extended Pix Format Required ioctls: test VIDIOC_QUERYCAP: OK Allow for multiple opens: test second /dev/video1 open: OK test VIDIOC_QUERYCAP: OK test VIDIOC_G/S_PRIORITY: OK test for unlimited opens: OK Debug ioctls: test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported) test VIDIOC_LOG_STATUS: OK Input ioctls: test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported) test VIDIOC_G/S_FREQUENCY: OK (Not Supported) test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported) test VIDIOC_ENUMAUDIO: OK (Not Supported) test VIDIOC_G/S/ENUMINPUT: OK test VIDIOC_G/S_AUDIO: OK (Not Supported) Inputs: 1 Audio Inputs: 0 Tuners: 0 Output ioctls: test VIDIOC_G/S_MODULATOR: OK (Not Supported) test VIDIOC_G/S_FREQUENCY: OK (Not Supported) test VIDIOC_ENUMAUDOUT: OK (Not Supported) test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported) test VIDIOC_G/S_AUDOUT: OK (Not Supported) Outputs: 0 Audio Outputs: 0 Modulators: 0 Input/Output configuration ioctls: test VIDIOC_ENUM/G/S/QUERY_STD: OK test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported) test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported) test VIDIOC_G/S_EDID: OK (Not Supported) Control ioctls (Input 0): test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK test VIDIOC_QUERYCTRL: OK test VIDIOC_G/S_CTRL: OK test VIDIOC_G/S/TRY_EXT_CTRLS: OK test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK test VIDIOC_G/S_JPEGCOMP: OK (Not Supported) Standard Controls: 5 Private Controls: 0 Format ioctls (Input 0): test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK test VIDIOC_G/S_PARM: OK (Not Supported) test VIDIOC_G_FBUF: OK (Not Supported) test VIDIOC_G_FMT: OK test VIDIOC_TRY_FMT: OK test VIDIOC_S_FMT: OK test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported) test Cropping: OK test Composing: OK test Scaling: OK (Not Supported) Codec ioctls (Input 0): test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported) test VIDIOC_G_ENC_INDEX: OK (Not Supported) test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported) Buffer ioctls (Input 0): test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK test VIDIOC_EXPBUF: OK test Requests: OK (Not Supported) Test input 0: Streaming ioctls: test read/write: OK test blocking wait: OK Video Capture: Frame #002 warn: v4l2-test-buffers.cpp(446): got sequence number 4, expected 3 Video Capture: Frame #005 warn: v4l2-test-buffers.cpp(446): got sequence number 8, expected 7 Video Capture: Frame #008 warn: v4l2-test-buffers.cpp(446): got sequence number 12, expected 11 Video Capture: Frame #011 warn: v4l2-test-buffers.cpp(446): got sequence number 16, expected 15 Video Capture: Frame #014 warn: v4l2-test-buffers.cpp(446): got sequence number 20, expected 19 Video Capture: Frame #017 warn: v4l2-test-buffers.cpp(446): got sequence number 24, expected 23 Video Capture: Frame #020 warn: v4l2-test-buffers.cpp(446): got sequence number 28, expected 27 Video Capture: Frame #023 warn: v4l2-test-buffers.cpp(446): got sequence number 32, expected 31 Video Capture: Frame #026 warn: v4l2-test-buffers.cpp(446): got sequence number 36, expected 35 Video Capture: Frame #029 warn: v4l2-test-buffers.cpp(446): got sequence number 40, expected 39 Video Capture: Frame #032 warn: v4l2-test-buffers.cpp(446): got sequence number 44, expected 43 Video Capture: Frame #035 warn: v4l2-test-buffers.cpp(446): got sequence number 48, expected 47 Video Capture: Frame #038 warn: v4l2-test-buffers.cpp(446): got sequence number 52, expected 51 Video Capture: Frame #041 warn: v4l2-test-buffers.cpp(446): got sequence number 56, expected 55 Video Capture: Frame #044 warn: v4l2-test-buffers.cpp(446): got sequence number 60, expected 59 Video Capture: Frame #047 warn: v4l2-test-buffers.cpp(446): got sequence number 64, expected 63 Video Capture: Frame #050 warn: v4l2-test-buffers.cpp(446): got sequence number 68, expected 67 Video Capture: Frame #053 warn: v4l2-test-buffers.cpp(446): got sequence number 72, expected 71 Video Capture: Frame #056 warn: v4l2-test-buffers.cpp(446): got sequence number 76, expected 75 test MMAP (no poll): OK Video Capture: Frame #002 (select) warn: v4l2-test-buffers.cpp(446): got sequence number 4, expected 3 Video Capture: Frame #005 (select) warn: v4l2-test-buffers.cpp(446): got sequence number 8, expected 7 Video Capture: Frame #008 (select) warn: v4l2-test-buffers.cpp(446): got sequence number 12, expected 11 Video Capture: Frame #011 (select) warn: v4l2-test-buffers.cpp(446): got sequence number 16, expected 15 Video Capture: Frame #014 (select) warn: v4l2-test-buffers.cpp(446): got sequence number 20, expected 19 Video Capture: Frame #017 (select) warn: v4l2-test-buffers.cpp(446): got sequence number 24, expected 23 Video Capture: Frame #020 (select) warn: v4l2-test-buffers.cpp(446): got sequence number 28, expected 27 Video Capture: Frame #023 (select) warn: v4l2-test-buffers.cpp(446): got sequence number 32, expected 31 Video Capture: Frame #026 (select) warn: v4l2-test-buffers.cpp(446): got sequence number 36, expected 35 Video Capture: Frame #029 (select) warn: v4l2-test-buffers.cpp(446): got sequence number 40, expected 39 Video Capture: Frame #032 (select) warn: v4l2-test-buffers.cpp(446): got sequence number 44, expected 43 Video Capture: Frame #035 (select) warn: v4l2-test-buffers.cpp(446): got sequence number 48, expected 47 Video Capture: Frame #038 (select) warn: v4l2-test-buffers.cpp(446): got sequence number 52, expected 51 Video Capture: Frame #041 (select) warn: v4l2-test-buffers.cpp(446): got sequence number 56, expected 55 Video Capture: Frame #044 (select) warn: v4l2-test-buffers.cpp(446): got sequence number 60, expected 59 Video Capture: Frame #047 (select) warn: v4l2-test-buffers.cpp(446): got sequence number 64, expected 63 Video Capture: Frame #050 (select) warn: v4l2-test-buffers.cpp(446): got sequence number 68, expected 67 Video Capture: Frame #053 (select) warn: v4l2-test-buffers.cpp(446): got sequence number 72, expected 71 Video Capture: Frame #056 (select) warn: v4l2-test-buffers.cpp(446): got sequence number 76, expected 75 test MMAP (select): OK Video Capture: Frame #002 (epoll) warn: v4l2-test-buffers.cpp(446): got sequence number 4, expected 3 Video Capture: Frame #005 (epoll) warn: v4l2-test-buffers.cpp(446): got sequence number 8, expected 7 Video Capture: Frame #008 (epoll) warn: v4l2-test-buffers.cpp(446): got sequence number 12, expected 11 Video Capture: Frame #011 (epoll) warn: v4l2-test-buffers.cpp(446): got sequence number 16, expected 15 Video Capture: Frame #014 (epoll) warn: v4l2-test-buffers.cpp(446): got sequence number 20, expected 19 Video Capture: Frame #017 (epoll) warn: v4l2-test-buffers.cpp(446): got sequence number 24, expected 23 Video Capture: Frame #020 (epoll) warn: v4l2-test-buffers.cpp(446): got sequence number 28, expected 27 Video Capture: Frame #023 (epoll) warn: v4l2-test-buffers.cpp(446): got sequence number 32, expected 31 Video Capture: Frame #026 (epoll) warn: v4l2-test-buffers.cpp(446): got sequence number 36, expected 35 Video Capture: Frame #029 (epoll) warn: v4l2-test-buffers.cpp(446): got sequence number 40, expected 39 Video Capture: Frame #032 (epoll) warn: v4l2-test-buffers.cpp(446): got sequence number 44, expected 43 Video Capture: Frame #035 (epoll) warn: v4l2-test-buffers.cpp(446): got sequence number 48, expected 47 Video Capture: Frame #038 (epoll) warn: v4l2-test-buffers.cpp(446): got sequence number 52, expected 51 Video Capture: Frame #041 (epoll) warn: v4l2-test-buffers.cpp(446): got sequence number 56, expected 55 Video Capture: Frame #044 (epoll) warn: v4l2-test-buffers.cpp(446): got sequence number 60, expected 59 Video Capture: Frame #047 (epoll) warn: v4l2-test-buffers.cpp(446): got sequence number 64, expected 63 Video Capture: Frame #050 (epoll) warn: v4l2-test-buffers.cpp(446): got sequence number 68, expected 67 Video Capture: Frame #053 (epoll) warn: v4l2-test-buffers.cpp(446): got sequence number 72, expected 71 Video Capture: Frame #056 (epoll) warn: v4l2-test-buffers.cpp(446): got sequence number 76, expected 75 test MMAP (epoll): OK test USERPTR (no poll): OK (Not Supported) test USERPTR (select): OK (Not Supported) test DMABUF: Cannot test, specify --expbuf-device Total for vip device /dev/video1: 51, Succeeded: 51, Failed: 0, Warnings: 57 Benoit Parrot (2): dt-binbings: media: ti-vpe: Document the VIP driver media: ti-vpe: Add the VIP driver .../devicetree/bindings/media/ti,vip.yaml | 394 ++ MAINTAINERS | 1 + drivers/media/platform/Kconfig | 13 + drivers/media/platform/ti-vpe/Makefile | 2 + drivers/media/platform/ti-vpe/vip.c | 4158 +++++++++++++++++ drivers/media/platform/ti-vpe/vip.h | 724 +++ 6 files changed, 5292 insertions(+) create mode 100644 Documentation/devicetree/bindings/media/ti,vip.yaml create mode 100644 drivers/media/platform/ti-vpe/vip.c create mode 100644 drivers/media/platform/ti-vpe/vip.h -- 2.17.1