Message ID | 20220328141309.177611-1-xavier.roumegue@oss.nxp.com (mailing list archive) |
---|---|
Headers | show |
Series | i.MX8MP DW100 dewarper driver | expand |
On 28/03/2022 16:13, Xavier Roumegue wrote: > This patchset depends on the series "imx8mp: Add media block control"[1] and > "i.MX8MP GPC and blk-ctrl"[2] which provide the power driver infrastructure. > > Previous series can now be marked as superseded. > v1: > https://patchwork.linuxtv.org/project/linux-media/list/?series=7443 > v2: > https://patchwork.linuxtv.org/project/linux-media/list/?series=7472 > v3: > https://patchwork.linuxtv.org/project/linux-media/list/?series=7473 > > Patches [1-3/9] add support for dynamic array control imported from the > "Move HEVC stateless controls out of staging"[3] currently under review. > > Patches [4-7/9] document the driver interfaces, and export its v4l2 custom > control to uapi headers. > > Patches [8/9] adds the v4l2 m2m driver. > Patches [9/9] adds the driver to MAINTAINERS. > > The patch baseline is linuxtv-tree/master. > > The Vivante DW100 Dewarp Engine, found on i.MX8MP SoC, provides high-performance > dewarp processing for the correction of the distortion that is introduced in > images produced by fisheye and wide angle lenses. The engine can be used for > accelerating scaling, cropping and pixel format conversion operations > independently of the dewarping feature. > > A script example [4] has been published to generate the dewarping blob from > outgoing openCV 3d calibration process parameters. This scrict can generate > identity map with h/v flip, dewarping and stereo rectification mappings. > > The driver has been tested with: > - v4l2-ctl (from master with [6]) for testing pixel format conversion, scaling > and crop features using builtin driver identity map. > - OpenCV stereo application using dedicated dw100 openCV module [5] to implement > stereo rectification stage. > - GStreamer v4l2convert (patched to support dewarping blob map injection) > - v4l2-compliance (test report added after changelog) > > [1] https://patchwork.kernel.org/project/linux-arm-kernel/list/?series=626781 > [2] https://patchwork.kernel.org/project/linux-arm-kernel/list/?series=618869 > [3] https://patchwork.linuxtv.org/project/linux-media/list/?series=7418 > [4] https://github.com/NXPmicro/vtec-cv/tree/main/bin > [5] https://github.com/NXPmicro/vtec-opencv > [6] https://patchwork.linuxtv.org/project/linux-media/list/?series=7595 > > --- > Changelog: > > v4: > - Move dw100 driver to NXP platform media drivers folder > - Change dt compatible string to "nxp,imx8mp-dw100" > - Rename V4L2_CID_DW100_MAPPING to V4L2_CID_DW100_DEWARPING_16x16_VERTEX_MAP > - Add more verbose description of V4L2_CID_DW100_DEWARPING_16x16_VERTEX_MAP > - Handle v4l2 controls as an array in driver. > > v3: > - Fix incorrect i.MX8MP Reference Manual link in documentation > > v2: > - Fix yaml dt-bindings errors > - Drop assigned-clocks properties from dt-bindings example > - Add dw100 driver documentation > - Rework V4L2 LUT assignment with v4l2 dynamic array control > - Rename V4L2_CID_DW100_LUT to V4L2_CID_DW100_MAPPING > - Export V4L2_CID_DW100_MAPPING to kernel headers > > Hans Verkuil (3): > videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY > v4l2-ctrls: add support for dynamically allocated arrays. > vivid: add dynamic array test control > > Xavier Roumegue (6): > media: Documentation: dw100: Add user documentation for the DW100 > driver > media: v4l: uapi: Add user control base for DW100 controls > media: uapi: Add a control for DW100 driver > media: dt-bindings: media: Add i.MX8MP DW100 binding > media: dw100: Add i.MX8MP dw100 dewarper driver > media: MAINTAINERS: add entry for i.MX8MP DW100 v4l2 mem2mem driver > > .../devicetree/bindings/media/nxp,dw100.yaml | 69 + > .../userspace-api/media/drivers/dw100.rst | 35 + > .../userspace-api/media/drivers/index.rst | 1 + > .../media/v4l/vidioc-queryctrl.rst | 8 + > MAINTAINERS | 9 + > drivers/media/platform/nxp/Kconfig | 1 + > drivers/media/platform/nxp/Makefile | 1 + > drivers/media/platform/nxp/dw100/Kconfig | 16 + > drivers/media/platform/nxp/dw100/Makefile | 3 + > drivers/media/platform/nxp/dw100/dw100.c | 1763 +++++++++++++++++ > drivers/media/platform/nxp/dw100/dw100_regs.h | 118 ++ > .../media/test-drivers/vivid/vivid-ctrls.c | 15 + > drivers/media/v4l2-core/v4l2-ctrls-api.c | 103 +- > drivers/media/v4l2-core/v4l2-ctrls-core.c | 182 +- > drivers/media/v4l2-core/v4l2-ctrls-priv.h | 3 +- > drivers/media/v4l2-core/v4l2-ctrls-request.c | 13 +- > include/media/v4l2-ctrls.h | 42 +- > include/uapi/linux/dw100.h | 11 + > include/uapi/linux/v4l2-controls.h | 6 +- > include/uapi/linux/videodev2.h | 1 + > 20 files changed, 2328 insertions(+), 72 deletions(-) > create mode 100644 Documentation/devicetree/bindings/media/nxp,dw100.yaml > create mode 100644 Documentation/userspace-api/media/drivers/dw100.rst > create mode 100644 drivers/media/platform/nxp/dw100/Kconfig > create mode 100644 drivers/media/platform/nxp/dw100/Makefile > create mode 100644 drivers/media/platform/nxp/dw100/dw100.c > create mode 100644 drivers/media/platform/nxp/dw100/dw100_regs.h > create mode 100644 include/uapi/linux/dw100.h > > ============ > Compliance > ============ > # v4l2-compliance -d 0 > v4l2-compliance 1.23.0, 64 bits, 64-bit time_t This isn't compiled from the v4l-utils repository since I am missing a 'SHA' line. As of today you should see something like this: $ v4l2-compliance --version v4l2-compliance 1.23.0-4922, 64 bits, 64-bit time_t v4l2-compliance SHA: 6de743337007 2022-04-07 11:29:29 And running 'v4l2-compliance -d 0' should show that SHA as well. The compliance test of a driver must always use the latest v4l2-compliance compiled from the repository, that way I know all the latest tests are run. Regards, Hans > > Compliance test for dw100 device /dev/video0: > > Driver Info: > Driver name : dw100 > Card type : DW100 dewarper > Bus info : platform:dw100 > Driver version : 5.17.0 > Capabilities : 0x84208000 > Video Memory-to-Memory > Streaming > Extended Pix Format > Device Capabilities > Device Caps : 0x04208000 > Video Memory-to-Memory > Streaming > Extended Pix Format > Media Driver Info: > Driver name : dw100 > Model : dw100 > Serial : > Bus info : platform:dw100 > Media version : 5.17.0 > Hardware revision: 0x00000000 (0) > Driver version : 5.17.0 > Interface Info: > ID : 0x0300000c > Type : V4L Video > Entity Info: > ID : 0x00000001 (1) > Name : dw100-source > Function : V4L2 I/O > Pad 0x01000002 : 0: Source > Link 0x02000008: to remote pad 0x1000004 of entity 'dw100-proc' (Video Scaler): Data, Enabled, Immutable > > Required ioctls: > test MC information (see 'Media Driver Info' above): OK > test VIDIOC_QUERYCAP: OK > test invalid ioctls: OK > > Allow for multiple opens: > test second /dev/video0 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 (Not Supported) > > 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 (Not Supported) > test VIDIOC_G/S_AUDIO: OK (Not Supported) > Inputs: 0 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 (Not Supported) > 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: > 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: 1 Private Controls: 1 > Standard Compound Controls: 0 Private Compound Controls: 1 > > Format ioctls: > 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 > > Codec ioctls: > 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: > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK > test VIDIOC_EXPBUF: OK > test Requests: OK (Not Supported) > > Total for dw100 device /dev/video0: 46, Succeeded: 46, Failed: 0, Warnings: 0 > > ============== > Media controller > ============== > # media-ctl -d 0 -p > Media controller API version 5.17.0 > > Media device information > ------------------------ > driver dw100 > model dw100 > serial > bus info platform:dw100 > hw revision 0x0 > driver version 5.17.0 > > Device topology > - entity 1: dw100-source (1 pad, 1 link, 0 route) > type Node subtype V4L flags 0 > device node name /dev/video0 > pad0: Source > -> "dw100-proc":0 [ENABLED,IMMUTABLE] > > - entity 3: dw100-proc (2 pads, 2 links, 0 route) > type Node subtype Unknown flags 0 > pad0: Sink > <- "dw100-source":0 [ENABLED,IMMUTABLE] > pad1: Source > -> "dw100-sink":0 [ENABLED,IMMUTABLE] > > - entity 6: dw100-sink (1 pad, 1 link, 0 route) > type Node subtype V4L flags 0 > device node name /dev/video0 > pad0: Sink > <- "dw100-proc":1 [ENABLED,IMMUTABLE] > > -- > 2.35.1 >