On 11/27/2018 08:37 PM, Eddie James wrote: > The Video Engine (VE) embedded in the Aspeed AST2400 and AST2500 SOCs > can capture and compress video data from digital or analog sources. With > the Aspeed chip acting as a service processor, the Video Engine can > capture the host processor graphics output. > > This series adds a V4L2 driver for the VE, providing the usual V4L2 streaming > interface by way of videobuf2. Each frame, the driver triggers the hardware to > capture the host graphics output and compress it to JPEG format. > > v4l2-compliance SHA: ac9596560fedb3cd29148ef90b03778d76f1cd9a, 32 bits > > Compliance test for device /dev/video0: > > Driver Info: > Driver name : aspeed-video > Card type : Aspeed Video Engine > Bus info : platform:aspeed-video > Driver version : 4.18.19 > 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/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 > 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 (Not Supported) > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK > test VIDIOC_DV_TIMINGS_CAP: OK > 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 > fail: v4l2-test-controls.cpp(831): failed to find event for control 'Chroma Subsampling' This is fixed in our master branch. Event handling was broken for a while. I recommend that you upgrade, since this was a nasty little bug. Regards, Hans > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: FAIL > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported) > Standard Controls: 3 Private Controls: 0 > > Format ioctls (Input 0): > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK > test VIDIOC_G/S_PARM: OK > 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 (Not Supported) > test Composing: OK (Not Supported) > 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 > test MMAP: OK > test USERPTR: OK (Not Supported) > test DMABUF: Cannot test, specify --expbuf-device > > Total: 48, Succeeded: 47, Failed: 1, Warnings: 0 > > Changes since v5: > - Rework resolution change and v4l2 timings functions again with active and > detected timings. > - Renamed a few things. > - Fixed polarities in the timings. > > Changes since v4: > - Set real min and max resolution in enum_dv_timings > - Add check for vb2_is_busy before settings the timings > - Set max frame rate to the actual max rather than max + 1 > - Correct the input status to 0. > - Rework resolution change to only set the relevant h/w regs during startup or > when set_timings is called. > > Changes since v3: > - Switch update reg function to use u32 clear rather than unsigned long mask > - Add timing information from host VGA signal > - Fix binding documentation mispelling > - Fix upper case hex values > - Add wait_prepare and wait_finish > - Set buffer state to queued (rather than error) if streaming fails to start > - Switch engine busy print statement to error > - Removed a couple unecessary type assignments in v4l2 ioctls > - Added query_dv_timings, fixed get_dv_timings > - Corrected source change event to fire if and only if size actually changes > - Locked open and release > > Changes since v2: > - Switch to streaming interface. This involved a lot of changes. > - Rework memory allocation due to using videobuf2 buffers, but also only > allocate the necessary size of source buffer rather than the max size > > Changes since v1: > - Removed le32_to_cpu calls for JPEG header data > - Reworked v4l2 ioctls to be compliant. > - Added JPEG controls > - Updated devicetree docs according to Rob's suggestions. > - Added myself to MAINTAINERS > > Eddie James (2): > dt-bindings: media: Add Aspeed Video Engine binding documentation > media: platform: Add Aspeed Video Engine driver > > .../devicetree/bindings/media/aspeed-video.txt | 26 + > MAINTAINERS | 8 + > drivers/media/platform/Kconfig | 9 + > drivers/media/platform/Makefile | 1 + > drivers/media/platform/aspeed-video.c | 1719 ++++++++++++++++++++ > 5 files changed, 1763 insertions(+) > create mode 100644 Documentation/devicetree/bindings/media/aspeed-video.txt > create mode 100644 drivers/media/platform/aspeed-video.c >