Re: [PATCH 0/2] DCMI bridge support

From: Hugues FRUCHET
Date: Tue Apr 02 2019 - 05:17:29 EST


Thanks Hans,

I've aligned both namings by updating querycap:

@@ -1257,7 +1257,8 @@ static int dcmi_querycap(struct file *file, void
*priv,
strscpy(cap->driver, DRV_NAME, sizeof(cap->driver));
strscpy(cap->card, "STM32 Camera Memory Interface",
sizeof(cap->card));
- strscpy(cap->bus_info, "platform:dcmi", sizeof(cap->bus_info));
+ snprintf(cap->bus_info, sizeof(cap->bus_info),
+ "platform:%s", DRV_NAME);
return 0;
}

so now both V4L2 and MC are returning "platform:stm32-dcmi".

I'll push in v2.

BR,
Hugues.


On 4/1/19 3:30 PM, Hans Verkuil wrote:
> On 4/1/19 3:08 PM, Hugues FRUCHET wrote:
>> Hi Hans,
>>
>> Here it is.
>>
>> SHA1 is aa371c995ec2ad70323db00c47b3132002b060b7:
>>
>> Author: Hans Verkuil <hverkuil-cisco@xxxxxxxxx> 2019-02-08 16:21:23
>> Committer: Hans Verkuil <hverkuil-cisco@xxxxxxxxx> 2019-02-08 16:21:23
>> Parent: 98d5622551eb6b9a0397464fb52378949f33c364 (v4l2-compliance:
>> support m2m devices with -f)
>> Child: 59f9840781aab464c1331dcdb82e63dd0544b5c6 (v4l2-compliance:
>> remove duplicate MEDIA_IOC_DEVICE_INFO ioctl call)
>> Branches: master, master2, remotes/origin/master
>> Follows: v4l-utils-1.16.0
>> Precedes:
>>
>> v4l2-compliance: -f bug fixes
>>
>>
>> Result is below:
>>
>> root@stm32mp1:~# v4l2-compliance -m /dev/media0
>> v4l2-compliance SHA: eb8e3b07c9249ff56091ae4bc3ae9b76779db4cd, 32 bits
>>
>> Compliance test for stm32-dcmi device /dev/media0:
>>
>> Media Driver Info:
>> Driver name : stm32-dcmi
>> Model : stm32-dcmi
>> Serial :
>> Bus info : platform:stm32-dcmi
>> Media version : 5.0.0
>> Hardware revision: 0x00000000 (0)
>> Driver version : 5.0.0
>>
>> Required ioctls:
>> test MEDIA_IOC_DEVICE_INFO: OK
>>
>> Allow for multiple opens:
>> test second /dev/media0 open: OK
>> test MEDIA_IOC_DEVICE_INFO: OK
>> test for unlimited opens: OK
>>
>> Media Controller ioctls:
>> test MEDIA_IOC_G_TOPOLOGY: OK
>> Entities: 3 Interfaces: 2 Pads: 4 Links: 4
>> test MEDIA_IOC_ENUM_ENTITIES/LINKS: OK
>> test MEDIA_IOC_SETUP_LINK: OK
>>
>> Total for stm32-dcmi device /dev/media0: 7, Succeeded: 7, Failed: 0,
>> Warnings: 0
>> --------------------------------------------------------------------------------
>> Compliance test for stm32-dcmi device /dev/video0:
>>
>> Driver Info:
>> Driver name : stm32-dcmi
>> Card type : STM32 Camera Memory Interface
>> Bus info : platform:dcmi
>> Driver version : 5.0.0
>> Capabilities : 0x85200001
>> Video Capture
>> Read/Write
>> Streaming
>> [ 2117.336477] stm32-dcmi 4c006000.dcmi:
>> ================= START STATUS =================
>> E[ 2117.344647] stm32-dcmi 4c006000.dcmi: White Balance, Automatic: true
>> [ 2117.350990] stm32-dcmi 4c006000.dcmi: Blue Balance: 0 inactive
>> x[ 2117.356853] stm32-dcmi 4c006000.dcmi: Red Balance: 0 inactive
>> [ 2117.362645] stm32-dcmi 4c006000.dcmi: Auto Exposure: Auto Mode
>> [ 2117.368438] stm32-dcmi 4c006000.dcmi: Exposure: 0 inactive volatile
>> t[ 2117.374729] stm32-dcmi 4c006000.dcmi: Gain, Automatic: true
>> [ 2117.380335] stm32-dcmi 4c006000.dcmi: Gain: 0 inactive volatile
>> e[ 2117.386305] stm32-dcmi 4c006000.dcmi: Saturation: 64
>> [ 2117.391275] stm32-dcmi 4c006000.dcmi: Hue: 0
>> n[ 2117.395572] stm32-dcmi 4c006000.dcmi: Contrast: 0
>> [ 2117.400305] stm32-dcmi 4c006000.dcmi: Test Pattern: Disabled
>> d[ 2117.405988] stm32-dcmi 4c006000.dcmi: Horizontal Flip: false
>> [ 2117.411721] stm32-dcmi 4c006000.dcmi: Vertical Flip: false
>> [ 2117.417148] stm32-dcmi 4c006000.dcmi: Power Line Frequency: 50 Hz
>> [ 2117.423265] stm32-dcmi 4c006000.dcmi: ================== END STATUS
>> ==================
>> ed Pix Format
>> Device Capabilities
>> Device Caps : 0x05200001
>> Video Capture
>> Read/Write
>> Streaming
>> Extended Pix Format
>> Media Driver Info:
>> Driver name : stm32-dcmi
>> Model : stm32-dcmi
>> Serial :
>> Bus info : platform:stm32-dcmi
>> Media version : 5.0.0
>> Hardware revision: 0x00000000 (0)
>> Driver version : 5.0.0
>> Interface Info:
>> ID : 0x03000003
>> Type : V4L Video
>> Entity Info:
>> ID : 0x00000001 (1)
>> Name : stm32_dcmi
>> Function : V4L2 I/O
>> Flags : default
>> Pad 0x01000002 : 0: Sink
>> Link 0x02000008: from remote pad 0x1000007 of entity 'mipid02
>> 0-0014': Data, Enabled, Immutable
>>
>> Required ioctls:
>> test MC information (see 'Media Driver Info' above): OK
>> warn:
>> ../../../../../../../../../sources/v4l-utils/utils/v4l2-compliance/v4l2-compliance.cpp(621):
>> media bus_info 'platform:stm32-dcmi
>> ' differs from V4L2 bus_info 'platform:dcmi'
>> test VIDIOC_QUERYCAP: OK
>>
>> Allow for multiple opens:
>> test second /dev/video0 open: OK
>> warn:
>> ../../../../../../../../../sources/v4l-utils/utils/v4l2-compliance/v4l2-compliance.cpp(621):
>> media bus_info 'platform:stm32-dcmi
>> ' differs from V4L2 bus_info 'platform:dcmi'
>> 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_FRE[ 2117.564770] mipid02 0-0014:
>> ================= START STATUS =================
>> Q[ 2117.572042] mipid02 0-0014: ================== END STATUS
>> ==================
>> UENCY: 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 (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: 17 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)
>> fail:
>> ../../../../../../../../../sources/v4l-utils/utils/v4l2-compliance/v4l2-test-formats.cpp(1338):
>> node->frmsizes_count[pixfmt] > 1
>> test Cropping: FAIL
>> 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)
>>
>> Total for stm32-dcmi device /dev/video0: 45, Succeeded: 44, Failed: 1,
>> Warnings: 2
>> --------------------------------------------------------------------------------
>> Compliance test for device /dev/v4l-subdev0:
>>
>>
>> Required ioctls:
>>
>> Allow for multiple opens:
>> test second /dev/v4l-subdev0 open: OK
>> test for unlimited opens: OK
>>
>> Debug ioctls:
>> 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 (Not Supported)
>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>> Standard Controls: 0 Private Controls: 0
>>
>> Format ioctls:
>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK (Not Supported)
>> test VIDIOC_G/S_PARM: OK (Not Supported)
>> test VIDIOC_G_FBUF: OK (Not Supported)
>> test VIDIOC_G_FMT: OK (Not Supported)
>> test VIDIOC_TRY_FMT: OK (Not Supported)
>> test VIDIOC_S_FMT: OK (Not Supported)
>> 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:
>> 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 (Not Supported)
>> test VIDIOC_EXPBUF: OK (Not Supported)
>> test Requests: OK (Not Supported)
>>
>> Total for device /dev/v4l-subdev0: 40, Succeeded: 40, Failed: 0, Warnings: 0
>>
>> Grand Total for stm32-dcmi device /dev/media0: 92, Succeeded: 91,
>> Failed: 1, Warnings: 2
>
> The warnings should be fixed (both warnings refer to the same problem).
>
> The fail was present before this patch series.
>
> The core problem there is that if there are multiple possible framesizes,
> then crop support is ambiguous: against which framesize do you crop?
>
> I see that dcmi_try_fmt() has a heuristic for that. We really need to fix
> this in the API, but this situation rarely occurs.
>
> So for now I don't think there is a need to fix the fail.
>
> Regards,
>
> Hans
>
>>
>>
>> BR,
>> Hugues.
>>
>> On 4/1/19 1:10 PM, Hans Verkuil wrote:
>>> Hi Hugues,
>>>
>>> On 4/1/19 11:31 AM, Hugues Fruchet wrote:
>>>> This patch serie allows to connect non-parallel camera sensor to
>>>> DCMI thanks to a bridge connected in between such as STMIPID02 [1].
>>>>
>>>> Media controller support is introduced first, then support of
>>>> several sub-devices within pipeline with dynamic linking
>>>> between them.
>>>
>>> Can you post the output of v4l2-compliance -m /dev/mediaX ?
>>>
>>> Thanks!
>>>
>>> Hans
>>>
>>>>
>>>> [1] https://www.spinics.net/lists/devicetree/msg278002.html
>>>>
>>>> Hugues Fruchet (2):
>>>> media: stm32-dcmi: add media controller support
>>>> media: stm32-dcmi: add support of several sub-devices
>>>>
>>>> drivers/media/platform/Kconfig | 2 +-
>>>> drivers/media/platform/stm32/stm32-dcmi.c | 213 ++++++++++++++++++++++++------
>>>> 2 files changed, 177 insertions(+), 38 deletions(-)
>>>>
>