Message ID | 20240424153542.32503-1-laurent.pinchart@ideasonboard.com (mailing list archive) |
---|---|
Headers | show |
Series | media: Add driver for the Raspberry Pi <5 CSI-2 receiver | expand |
Hi Laurent, On 4/24/24 08:35, Laurent Pinchart wrote: > Hello everybody, > > This patch series adds a new driver for the BCM2835 (and derivative) > CCP2/CSI2 camera interface named Unicam. This IP core is found in the > VC4-based Raspberry Pi, namely the Pi Zero, Pi 3 and Pi 4. > > Camera support for Raspberry Pi 4 currently relies on a downstream > Unicam driver that lives in the Raspberry Pi kernel tree ([1]). The > driver uses the V4L2 API, but works around the lack of features in V4L2 > to properly support sensor embedded data. Since the Unicam driver > development by Raspberry Pi, some of those features have been merged in > the kernel (namely the V4L2 streams API) or are being developed (namely > generic metadata formats and subdev internal pads), with patches posted > for review on the linux-media mailing list ([2], [3]). > > This new upstream driver is based on the downstream code, extensively > reworked to use the new V4L2 APIs. > > The series is based on the generic metadata ([2]) and internal pads > ([3], v9) APIs. It can be found in my tree in [4]. Testing it requires > extra branches, which are also pushed to the same tree, and organized as > follows: > > - rpi/v6.9/base: The mainline tag that all the work is based on > (currently v6.9-rc2) > - rpi/v6.9/backports: DT integration fixes for bcm238x, backported from > linux-next > - rpi/v6.9/isp/v2: The ISP driver, which is getting upstreamed > separately > - rpi/v6.9/metadata/v10/base: The V4L2 embedded data patches > - rpi/v6.9/metadata/v10/sensors: The V4L2 internal pads patches > - rpi/v6.9/unicam/next: The Unicam driver, based on the > rpi/v6.9/metadata/v10/base branch that it depends on > - rpi/v6.9/imx219: Embedded data support for the imx219 driver, based on > the rpi/v6.9/metadata/v10/sensors branch that it depends on > - rpi/v6.9/merge: A merge of the backports, isp/v2, unicam/next and > imx219 branches > - rpi/v6.9/overlays: A sample overlay for the imx219 camera sensor > connected to a Raspberry Pi 4 > > The series starts with two patches that add new V4L2 pixel formats (1/5 > and 2/5), followed by the Unicam DT bindings (3/5) and driver (4/5). > Finally, it ends with DT integration for the Unicam devices (5/5). > > Compared to v10, I have rebased the patches on top of the latest version > of the generic metadata series ([2]), to prepare for a merge in > (hopefully) v6.10. > > The patches have been tested on a Raspberry Pi 4 using an IMX219 camera > module (the Raspberry Pi camera v2), with libcamera. Updates are needed > to libcamera to use the new V4L2 APIs, patches have been posted to [5]. > For manual testing with media-ctl, corresponding API updates to > v4l-utils have been posted to the linux-media mailing list ([6]) and > pushed to [7]. > > With this version I believe we are ready to merge the driver upstream. > Sensor driver changes, which require more work, with their corresponding > V4L2 API extensions, have been split out. The Unicam driver now depends > only on the core part of the embedded data API extensions, which I > believe is ready. Corresponding updates for v4l-utils have been > developed and submitted. This series, along with the libcamera support, > helps validating the new kernel APIs. > > Sakari, please feel free to apply this on top of your generic metadata > branch and include it in your pull request for v6.10. To miminize conflicts, I believe I should be taking patch #5 via the ARM SoC pull request since I already have merged patches there that are pre-requisites for patch #5 to apply. Let me know if that does not work. > > Below you will find the mandatory v4l2-compliance reports. It requires > the v4l-utils updates from [7]. There is a total of 4 warnings, all > related to the imx219 driver. They will be addressed separately, as part > of the effort to add embedded data support to the imx219 driver. > > [1] https://github.com/raspberrypi/linux/tree/rpi-6.1.y/drivers/media/platform/bcm2835 > [3] https://lore.kernel.org/linux-media/20240424122237.875000-1-sakari.ailus@linux.intel.com/ > [4] https://lore.kernel.org/linux-media/20240416193319.778192-1-sakari.ailus@linux.intel.com/ > [4] https://git.kernel.org/pub/scm/linux/kernel/git/pinchartl/linux.git/log/?h=rpi/v6.9/unicam/next > [5] https://lists.libcamera.org/pipermail/libcamera-devel/2024-March/040711.html > [6] https://lore.kernel.org/linux-media/20240424152230.31923-1-laurent.pinchart@ideasonboard.com/ > [7] https://git.linuxtv.org/pinchartl/v4l-utils.git/log/?h=metadata > > v4l2-compliance 1.27.0-5195, 64 bits, 64-bit time_t > v4l2-compliance SHA: 9356d44374db 2024-04-24 11:58:36 > > Compliance test for unicam device /dev/media0: > > Media Driver Info: > Driver name : unicam > Model : unicam > Serial : > Bus info : platform:fe801000.csi > Media version : 6.9.0 > Hardware revision: 0x00000000 (0) > Driver version : 6.9.0 > > Required ioctls: > test MEDIA_IOC_DEVICE_INFO: OK > test invalid ioctls: 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: 4 Interfaces: 4 Pads: 8 Links: 7 > test MEDIA_IOC_ENUM_ENTITIES/LINKS: OK > test MEDIA_IOC_SETUP_LINK: OK > > Total for unicam device /dev/media0: 8, Succeeded: 8, Failed: 0, Warnings: 0 > -------------------------------------------------------------------------------- > Compliance test for unicam device /dev/video0: > > Driver Info: > Driver name : unicam > Card type : unicam > Bus info : platform:fe801000.csi > Driver version : 6.9.0 > Capabilities : 0xa4a00001 > Video Capture > Metadata Capture > I/O MC > Streaming > Extended Pix Format > Device Capabilities > Device Caps : 0x24200001 > Video Capture > I/O MC > Streaming > Extended Pix Format > Media Driver Info: > Driver name : unicam > Model : unicam > Serial : > Bus info : platform:fe801000.csi > Media version : 6.9.0 > Hardware revision: 0x00000000 (0) > Driver version : 6.9.0 > Interface Info: > ID : 0x0300000d > Type : V4L Video > Entity Info: > ID : 0x0000000b (11) > Name : unicam-image > Function : V4L2 I/O > Flags : default > Pad 0x0100000c : 0: Sink > Link 0x0200000f: from remote pad 0x1000003 of entity 'unicam' (Video Interface Bridge): 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 > > 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 (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 (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 (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 (Not Supported) > test Composing: OK (Not Supported) > test Scaling: OK > > 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 CREATE_BUFS maximum buffers: OK > test VIDIOC_REMOVE_BUFS: OK > test VIDIOC_EXPBUF: OK > test Requests: OK (Not Supported) > > Total for unicam device /dev/video0: 48, Succeeded: 48, Failed: 0, Warnings: 0 > -------------------------------------------------------------------------------- > Compliance test for unicam device /dev/video1: > > Driver Info: > Driver name : unicam > Card type : unicam > Bus info : platform:fe801000.csi > Driver version : 6.9.0 > Capabilities : 0xa4a00001 > Video Capture > Metadata Capture > I/O MC > Streaming > Extended Pix Format > Device Capabilities > Device Caps : 0x24a00000 > Metadata Capture > I/O MC > Streaming > Extended Pix Format > Media Driver Info: > Driver name : unicam > Model : unicam > Serial : > Bus info : platform:fe801000.csi > Media version : 6.9.0 > Hardware revision: 0x00000000 (0) > Driver version : 6.9.0 > Interface Info: > ID : 0x03000013 > Type : V4L Video > Entity Info: > ID : 0x00000011 (17) > Name : unicam-embedded > Function : V4L2 I/O > Pad 0x01000012 : 0: Sink > Link 0x02000015: from remote pad 0x1000004 of entity 'unicam' (Video Interface Bridge): 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/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 (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 (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 (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 (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 CREATE_BUFS maximum buffers: OK > test VIDIOC_REMOVE_BUFS: OK > test VIDIOC_EXPBUF: OK > test Requests: OK (Not Supported) > > Total for unicam device /dev/video1: 48, Succeeded: 48, Failed: 0, Warnings: 0 > -------------------------------------------------------------------------------- > Compliance test for unicam device /dev/v4l-subdev0: > > Driver Info: > Driver version : 6.9.0 > Capabilities : 0x00000002 > Streams Support > Client Capabilities: 0x0000000000000003 > streams interval-uses-which Media Driver Info: > Driver name : unicam > Model : unicam > Serial : > Bus info : platform:fe801000.csi > Media version : 6.9.0 > Hardware revision: 0x00000000 (0) > Driver version : 6.9.0 > Interface Info: > ID : 0x03000017 > Type : V4L Sub-Device > Entity Info: > ID : 0x00000001 (1) > Name : unicam > Function : Video Interface Bridge > Pad 0x01000002 : 0: Sink > Link 0x02000009: from remote pad 0x1000006 of entity 'imx219 5-0010' (Camera Sensor): Data, Enabled, Immutable > Pad 0x01000003 : 1: Source > Link 0x0200000f: to remote pad 0x100000c of entity 'unicam-image' (V4L2 I/O): Data, Enabled, Immutable > Pad 0x01000004 : 2: Source > Link 0x02000015: to remote pad 0x1000012 of entity 'unicam-embedded' (V4L2 I/O): Data, Enabled, Immutable > > Required ioctls: > test MC information (see 'Media Driver Info' above): OK > test VIDIOC_SUDBEV_QUERYCAP: OK > test invalid ioctls: OK > > Allow for multiple opens: > test second /dev/v4l-subdev0 open: OK > test VIDIOC_SUBDEV_QUERYCAP: 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) > > Sub-Device routing ioctls: > test Try VIDIOC_SUBDEV_G_ROUTING/VIDIOC_SUBDEV_S_ROUTING: OK > test Active VIDIOC_SUBDEV_G_ROUTING/VIDIOC_SUBDEV_S_ROUTING: OK > > Sub-Device ioctls (Sink Pad 0): > Try Stream 0 > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK > test Try VIDIOC_SUBDEV_G/S_FMT: OK > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported) > Active Stream 0 > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK > test Active VIDIOC_SUBDEV_G/S_FMT: OK > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported) > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported) > > Sub-Device ioctls (Source Pad 1): > Try Stream 0 > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK > test Try VIDIOC_SUBDEV_G/S_FMT: OK > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported) > Active Stream 0 > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK > test Active VIDIOC_SUBDEV_G/S_FMT: OK > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported) > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported) > > Sub-Device ioctls (Source Pad 2): > > 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 CREATE_BUFS maximum buffers: OK > test VIDIOC_REMOVE_BUFS: OK > test VIDIOC_EXPBUF: OK (Not Supported) > test Requests: OK (Not Supported) > > Total for unicam device /dev/v4l-subdev0: 62, Succeeded: 62, Failed: 0, Warnings: 0 > -------------------------------------------------------------------------------- > Compliance test for unicam device /dev/v4l-subdev1: > > Driver Info: > Driver version : 6.9.0 > Capabilities : 0x00000002 > Streams Support > Client Capabilities: 0x0000000000000003 > streams interval-uses-which Media Driver Info: > Driver name : unicam > Model : unicam > Serial : > Bus info : platform:fe801000.csi > Media version : 6.9.0 > Hardware revision: 0x00000000 (0) > Driver version : 6.9.0 > Interface Info: > ID : 0x03000019 > Type : V4L Sub-Device > Entity Info: > ID : 0x00000005 (5) > Name : imx219 5-0010 > Function : Camera Sensor > Pad 0x01000006 : 0: Source > Link 0x02000009: to remote pad 0x1000002 of entity 'unicam' (Video Interface Bridge): Data, Enabled, Immutable > Pad 0x01000007 : 1: Sink, 00000008 > Pad 0x01000008 : 2: Sink, 00000008 > > Required ioctls: > test MC information (see 'Media Driver Info' above): OK > test VIDIOC_SUDBEV_QUERYCAP: OK > test invalid ioctls: OK > > Allow for multiple opens: > test second /dev/v4l-subdev1 open: OK > test VIDIOC_SUBDEV_QUERYCAP: 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) > > Sub-Device routing ioctls: > test Try VIDIOC_SUBDEV_G_ROUTING/VIDIOC_SUBDEV_S_ROUTING: OK > test Active VIDIOC_SUBDEV_G_ROUTING/VIDIOC_SUBDEV_S_ROUTING: OK > > Sub-Device ioctls (Source Pad 0): > Try Stream 0 > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK > test Try VIDIOC_SUBDEV_G/S_FMT: OK > warn: v4l2-test-subdevs.cpp(566): VIDIOC_SUBDEV_G_SELECTION is supported for target 0 but not VIDIOC_SUBDEV_S_SELECTION > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK > Try Stream 1 > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK > test Try VIDIOC_SUBDEV_G/S_FMT: OK > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported) > Active Stream 0 > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK > test Active VIDIOC_SUBDEV_G/S_FMT: OK > warn: v4l2-test-subdevs.cpp(566): VIDIOC_SUBDEV_G_SELECTION is supported for target 0 but not VIDIOC_SUBDEV_S_SELECTION > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported) > Active Stream 1 > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK > test Active VIDIOC_SUBDEV_G/S_FMT: OK > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported) > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported) > > Sub-Device ioctls (Sink Pad 1): > Try Stream 0 > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK > test Try VIDIOC_SUBDEV_G/S_FMT: OK > warn: v4l2-test-subdevs.cpp(566): VIDIOC_SUBDEV_G_SELECTION is supported for target 0 but not VIDIOC_SUBDEV_S_SELECTION > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK > Active Stream 0 > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK > test Active VIDIOC_SUBDEV_G/S_FMT: OK > warn: v4l2-test-subdevs.cpp(566): VIDIOC_SUBDEV_G_SELECTION is supported for target 0 but not VIDIOC_SUBDEV_S_SELECTION > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported) > > Sub-Device ioctls (Sink Pad 2): > Try Stream 0 > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK > test Try VIDIOC_SUBDEV_G/S_FMT: OK > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported) > Active Stream 0 > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK > test Active VIDIOC_SUBDEV_G/S_FMT: OK > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported) > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: 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: 20 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 CREATE_BUFS maximum buffers: OK > test VIDIOC_REMOVE_BUFS: OK > test VIDIOC_EXPBUF: OK (Not Supported) > test Requests: OK (Not Supported) > > Total for unicam device /dev/v4l-subdev1: 76, Succeeded: 76, Failed: 0, Warnings: 4 > > Grand Total for unicam device /dev/media0: 242, Succeeded: 242, Failed: 0, Warnings: 4 > > > Dave Stevenson (2): > dt-bindings: media: Add bindings for bcm2835-unicam > media: bcm2835-unicam: Add support for CCP2/CSI2 camera interface > > Jean-Michel Hautbois (3): > media: v4l: Add V4L2-PIX-FMT-Y12P format > media: v4l: Add V4L2-PIX-FMT-Y14P format > ARM: dts: bcm2835: Add Unicam CSI nodes > > .../bindings/media/brcm,bcm2835-unicam.yaml | 127 + > .../media/v4l/pixfmt-yuv-luma.rst | 48 + > MAINTAINERS | 7 + > arch/arm/boot/dts/broadcom/bcm2711.dtsi | 8 + > arch/arm/boot/dts/broadcom/bcm2835-rpi.dtsi | 14 + > arch/arm/boot/dts/broadcom/bcm283x.dtsi | 24 + > drivers/media/platform/Kconfig | 1 + > drivers/media/platform/Makefile | 1 + > drivers/media/platform/broadcom/Kconfig | 23 + > drivers/media/platform/broadcom/Makefile | 3 + > .../platform/broadcom/bcm2835-unicam-regs.h | 246 ++ > .../media/platform/broadcom/bcm2835-unicam.c | 2741 +++++++++++++++++ > drivers/media/v4l2-core/v4l2-ioctl.c | 2 + > include/uapi/linux/videodev2.h | 2 + > 14 files changed, 3247 insertions(+) > create mode 100644 Documentation/devicetree/bindings/media/brcm,bcm2835-unicam.yaml > create mode 100644 drivers/media/platform/broadcom/Kconfig > create mode 100644 drivers/media/platform/broadcom/Makefile > create mode 100644 drivers/media/platform/broadcom/bcm2835-unicam-regs.h > create mode 100644 drivers/media/platform/broadcom/bcm2835-unicam.c > > > base-commit: 47120f3da814440058a9823bf9ac3a660b2ce9c0
Hi Florian, On Wed, Apr 24, 2024 at 09:28:36AM -0700, Florian Fainelli wrote: > On 4/24/24 08:35, Laurent Pinchart wrote: > > Hello everybody, > > > > This patch series adds a new driver for the BCM2835 (and derivative) > > CCP2/CSI2 camera interface named Unicam. This IP core is found in the > > VC4-based Raspberry Pi, namely the Pi Zero, Pi 3 and Pi 4. > > > > Camera support for Raspberry Pi 4 currently relies on a downstream > > Unicam driver that lives in the Raspberry Pi kernel tree ([1]). The > > driver uses the V4L2 API, but works around the lack of features in V4L2 > > to properly support sensor embedded data. Since the Unicam driver > > development by Raspberry Pi, some of those features have been merged in > > the kernel (namely the V4L2 streams API) or are being developed (namely > > generic metadata formats and subdev internal pads), with patches posted > > for review on the linux-media mailing list ([2], [3]). > > > > This new upstream driver is based on the downstream code, extensively > > reworked to use the new V4L2 APIs. > > > > The series is based on the generic metadata ([2]) and internal pads > > ([3], v9) APIs. It can be found in my tree in [4]. Testing it requires > > extra branches, which are also pushed to the same tree, and organized as > > follows: > > > > - rpi/v6.9/base: The mainline tag that all the work is based on > > (currently v6.9-rc2) > > - rpi/v6.9/backports: DT integration fixes for bcm238x, backported from > > linux-next > > - rpi/v6.9/isp/v2: The ISP driver, which is getting upstreamed > > separately > > - rpi/v6.9/metadata/v10/base: The V4L2 embedded data patches > > - rpi/v6.9/metadata/v10/sensors: The V4L2 internal pads patches > > - rpi/v6.9/unicam/next: The Unicam driver, based on the > > rpi/v6.9/metadata/v10/base branch that it depends on > > - rpi/v6.9/imx219: Embedded data support for the imx219 driver, based on > > the rpi/v6.9/metadata/v10/sensors branch that it depends on > > - rpi/v6.9/merge: A merge of the backports, isp/v2, unicam/next and > > imx219 branches > > - rpi/v6.9/overlays: A sample overlay for the imx219 camera sensor > > connected to a Raspberry Pi 4 > > > > The series starts with two patches that add new V4L2 pixel formats (1/5 > > and 2/5), followed by the Unicam DT bindings (3/5) and driver (4/5). > > Finally, it ends with DT integration for the Unicam devices (5/5). > > > > Compared to v10, I have rebased the patches on top of the latest version > > of the generic metadata series ([2]), to prepare for a merge in > > (hopefully) v6.10. > > > > The patches have been tested on a Raspberry Pi 4 using an IMX219 camera > > module (the Raspberry Pi camera v2), with libcamera. Updates are needed > > to libcamera to use the new V4L2 APIs, patches have been posted to [5]. > > For manual testing with media-ctl, corresponding API updates to > > v4l-utils have been posted to the linux-media mailing list ([6]) and > > pushed to [7]. > > > > With this version I believe we are ready to merge the driver upstream. > > Sensor driver changes, which require more work, with their corresponding > > V4L2 API extensions, have been split out. The Unicam driver now depends > > only on the core part of the embedded data API extensions, which I > > believe is ready. Corresponding updates for v4l-utils have been > > developed and submitted. This series, along with the libcamera support, > > helps validating the new kernel APIs. > > > > Sakari, please feel free to apply this on top of your generic metadata > > branch and include it in your pull request for v6.10. > > To miminize conflicts, I believe I should be taking patch #5 via the ARM > SoC pull request since I already have merged patches there that are > pre-requisites for patch #5 to apply. Let me know if that does not work. That works for me. Sakari, please don't take patch 5/5 in your branch. > > Below you will find the mandatory v4l2-compliance reports. It requires > > the v4l-utils updates from [7]. There is a total of 4 warnings, all > > related to the imx219 driver. They will be addressed separately, as part > > of the effort to add embedded data support to the imx219 driver. > > > > [1] https://github.com/raspberrypi/linux/tree/rpi-6.1.y/drivers/media/platform/bcm2835 > > [3] https://lore.kernel.org/linux-media/20240424122237.875000-1-sakari.ailus@linux.intel.com/ > > [4] https://lore.kernel.org/linux-media/20240416193319.778192-1-sakari.ailus@linux.intel.com/ > > [4] https://git.kernel.org/pub/scm/linux/kernel/git/pinchartl/linux.git/log/?h=rpi/v6.9/unicam/next > > [5] https://lists.libcamera.org/pipermail/libcamera-devel/2024-March/040711.html > > [6] https://lore.kernel.org/linux-media/20240424152230.31923-1-laurent.pinchart@ideasonboard.com/ > > [7] https://git.linuxtv.org/pinchartl/v4l-utils.git/log/?h=metadata > > > > v4l2-compliance 1.27.0-5195, 64 bits, 64-bit time_t > > v4l2-compliance SHA: 9356d44374db 2024-04-24 11:58:36 > > > > Compliance test for unicam device /dev/media0: > > > > Media Driver Info: > > Driver name : unicam > > Model : unicam > > Serial : > > Bus info : platform:fe801000.csi > > Media version : 6.9.0 > > Hardware revision: 0x00000000 (0) > > Driver version : 6.9.0 > > > > Required ioctls: > > test MEDIA_IOC_DEVICE_INFO: OK > > test invalid ioctls: 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: 4 Interfaces: 4 Pads: 8 Links: 7 > > test MEDIA_IOC_ENUM_ENTITIES/LINKS: OK > > test MEDIA_IOC_SETUP_LINK: OK > > > > Total for unicam device /dev/media0: 8, Succeeded: 8, Failed: 0, Warnings: 0 > > -------------------------------------------------------------------------------- > > Compliance test for unicam device /dev/video0: > > > > Driver Info: > > Driver name : unicam > > Card type : unicam > > Bus info : platform:fe801000.csi > > Driver version : 6.9.0 > > Capabilities : 0xa4a00001 > > Video Capture > > Metadata Capture > > I/O MC > > Streaming > > Extended Pix Format > > Device Capabilities > > Device Caps : 0x24200001 > > Video Capture > > I/O MC > > Streaming > > Extended Pix Format > > Media Driver Info: > > Driver name : unicam > > Model : unicam > > Serial : > > Bus info : platform:fe801000.csi > > Media version : 6.9.0 > > Hardware revision: 0x00000000 (0) > > Driver version : 6.9.0 > > Interface Info: > > ID : 0x0300000d > > Type : V4L Video > > Entity Info: > > ID : 0x0000000b (11) > > Name : unicam-image > > Function : V4L2 I/O > > Flags : default > > Pad 0x0100000c : 0: Sink > > Link 0x0200000f: from remote pad 0x1000003 of entity 'unicam' (Video Interface Bridge): 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 > > > > 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 (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 (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 (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 (Not Supported) > > test Composing: OK (Not Supported) > > test Scaling: OK > > > > 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 CREATE_BUFS maximum buffers: OK > > test VIDIOC_REMOVE_BUFS: OK > > test VIDIOC_EXPBUF: OK > > test Requests: OK (Not Supported) > > > > Total for unicam device /dev/video0: 48, Succeeded: 48, Failed: 0, Warnings: 0 > > -------------------------------------------------------------------------------- > > Compliance test for unicam device /dev/video1: > > > > Driver Info: > > Driver name : unicam > > Card type : unicam > > Bus info : platform:fe801000.csi > > Driver version : 6.9.0 > > Capabilities : 0xa4a00001 > > Video Capture > > Metadata Capture > > I/O MC > > Streaming > > Extended Pix Format > > Device Capabilities > > Device Caps : 0x24a00000 > > Metadata Capture > > I/O MC > > Streaming > > Extended Pix Format > > Media Driver Info: > > Driver name : unicam > > Model : unicam > > Serial : > > Bus info : platform:fe801000.csi > > Media version : 6.9.0 > > Hardware revision: 0x00000000 (0) > > Driver version : 6.9.0 > > Interface Info: > > ID : 0x03000013 > > Type : V4L Video > > Entity Info: > > ID : 0x00000011 (17) > > Name : unicam-embedded > > Function : V4L2 I/O > > Pad 0x01000012 : 0: Sink > > Link 0x02000015: from remote pad 0x1000004 of entity 'unicam' (Video Interface Bridge): 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/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 (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 (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 (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 (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 CREATE_BUFS maximum buffers: OK > > test VIDIOC_REMOVE_BUFS: OK > > test VIDIOC_EXPBUF: OK > > test Requests: OK (Not Supported) > > > > Total for unicam device /dev/video1: 48, Succeeded: 48, Failed: 0, Warnings: 0 > > -------------------------------------------------------------------------------- > > Compliance test for unicam device /dev/v4l-subdev0: > > > > Driver Info: > > Driver version : 6.9.0 > > Capabilities : 0x00000002 > > Streams Support > > Client Capabilities: 0x0000000000000003 > > streams interval-uses-which Media Driver Info: > > Driver name : unicam > > Model : unicam > > Serial : > > Bus info : platform:fe801000.csi > > Media version : 6.9.0 > > Hardware revision: 0x00000000 (0) > > Driver version : 6.9.0 > > Interface Info: > > ID : 0x03000017 > > Type : V4L Sub-Device > > Entity Info: > > ID : 0x00000001 (1) > > Name : unicam > > Function : Video Interface Bridge > > Pad 0x01000002 : 0: Sink > > Link 0x02000009: from remote pad 0x1000006 of entity 'imx219 5-0010' (Camera Sensor): Data, Enabled, Immutable > > Pad 0x01000003 : 1: Source > > Link 0x0200000f: to remote pad 0x100000c of entity 'unicam-image' (V4L2 I/O): Data, Enabled, Immutable > > Pad 0x01000004 : 2: Source > > Link 0x02000015: to remote pad 0x1000012 of entity 'unicam-embedded' (V4L2 I/O): Data, Enabled, Immutable > > > > Required ioctls: > > test MC information (see 'Media Driver Info' above): OK > > test VIDIOC_SUDBEV_QUERYCAP: OK > > test invalid ioctls: OK > > > > Allow for multiple opens: > > test second /dev/v4l-subdev0 open: OK > > test VIDIOC_SUBDEV_QUERYCAP: 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) > > > > Sub-Device routing ioctls: > > test Try VIDIOC_SUBDEV_G_ROUTING/VIDIOC_SUBDEV_S_ROUTING: OK > > test Active VIDIOC_SUBDEV_G_ROUTING/VIDIOC_SUBDEV_S_ROUTING: OK > > > > Sub-Device ioctls (Sink Pad 0): > > Try Stream 0 > > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK > > test Try VIDIOC_SUBDEV_G/S_FMT: OK > > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported) > > Active Stream 0 > > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK > > test Active VIDIOC_SUBDEV_G/S_FMT: OK > > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported) > > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported) > > > > Sub-Device ioctls (Source Pad 1): > > Try Stream 0 > > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK > > test Try VIDIOC_SUBDEV_G/S_FMT: OK > > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported) > > Active Stream 0 > > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK > > test Active VIDIOC_SUBDEV_G/S_FMT: OK > > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported) > > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported) > > > > Sub-Device ioctls (Source Pad 2): > > > > 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 CREATE_BUFS maximum buffers: OK > > test VIDIOC_REMOVE_BUFS: OK > > test VIDIOC_EXPBUF: OK (Not Supported) > > test Requests: OK (Not Supported) > > > > Total for unicam device /dev/v4l-subdev0: 62, Succeeded: 62, Failed: 0, Warnings: 0 > > -------------------------------------------------------------------------------- > > Compliance test for unicam device /dev/v4l-subdev1: > > > > Driver Info: > > Driver version : 6.9.0 > > Capabilities : 0x00000002 > > Streams Support > > Client Capabilities: 0x0000000000000003 > > streams interval-uses-which Media Driver Info: > > Driver name : unicam > > Model : unicam > > Serial : > > Bus info : platform:fe801000.csi > > Media version : 6.9.0 > > Hardware revision: 0x00000000 (0) > > Driver version : 6.9.0 > > Interface Info: > > ID : 0x03000019 > > Type : V4L Sub-Device > > Entity Info: > > ID : 0x00000005 (5) > > Name : imx219 5-0010 > > Function : Camera Sensor > > Pad 0x01000006 : 0: Source > > Link 0x02000009: to remote pad 0x1000002 of entity 'unicam' (Video Interface Bridge): Data, Enabled, Immutable > > Pad 0x01000007 : 1: Sink, 00000008 > > Pad 0x01000008 : 2: Sink, 00000008 > > > > Required ioctls: > > test MC information (see 'Media Driver Info' above): OK > > test VIDIOC_SUDBEV_QUERYCAP: OK > > test invalid ioctls: OK > > > > Allow for multiple opens: > > test second /dev/v4l-subdev1 open: OK > > test VIDIOC_SUBDEV_QUERYCAP: 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) > > > > Sub-Device routing ioctls: > > test Try VIDIOC_SUBDEV_G_ROUTING/VIDIOC_SUBDEV_S_ROUTING: OK > > test Active VIDIOC_SUBDEV_G_ROUTING/VIDIOC_SUBDEV_S_ROUTING: OK > > > > Sub-Device ioctls (Source Pad 0): > > Try Stream 0 > > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK > > test Try VIDIOC_SUBDEV_G/S_FMT: OK > > warn: v4l2-test-subdevs.cpp(566): VIDIOC_SUBDEV_G_SELECTION is supported for target 0 but not VIDIOC_SUBDEV_S_SELECTION > > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK > > Try Stream 1 > > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK > > test Try VIDIOC_SUBDEV_G/S_FMT: OK > > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported) > > Active Stream 0 > > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK > > test Active VIDIOC_SUBDEV_G/S_FMT: OK > > warn: v4l2-test-subdevs.cpp(566): VIDIOC_SUBDEV_G_SELECTION is supported for target 0 but not VIDIOC_SUBDEV_S_SELECTION > > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK > > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported) > > Active Stream 1 > > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK > > test Active VIDIOC_SUBDEV_G/S_FMT: OK > > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported) > > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported) > > > > Sub-Device ioctls (Sink Pad 1): > > Try Stream 0 > > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK > > test Try VIDIOC_SUBDEV_G/S_FMT: OK > > warn: v4l2-test-subdevs.cpp(566): VIDIOC_SUBDEV_G_SELECTION is supported for target 0 but not VIDIOC_SUBDEV_S_SELECTION > > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK > > Active Stream 0 > > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK > > test Active VIDIOC_SUBDEV_G/S_FMT: OK > > warn: v4l2-test-subdevs.cpp(566): VIDIOC_SUBDEV_G_SELECTION is supported for target 0 but not VIDIOC_SUBDEV_S_SELECTION > > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK > > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported) > > > > Sub-Device ioctls (Sink Pad 2): > > Try Stream 0 > > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK > > test Try VIDIOC_SUBDEV_G/S_FMT: OK > > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported) > > Active Stream 0 > > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK > > test Active VIDIOC_SUBDEV_G/S_FMT: OK > > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported) > > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: 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: 20 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 CREATE_BUFS maximum buffers: OK > > test VIDIOC_REMOVE_BUFS: OK > > test VIDIOC_EXPBUF: OK (Not Supported) > > test Requests: OK (Not Supported) > > > > Total for unicam device /dev/v4l-subdev1: 76, Succeeded: 76, Failed: 0, Warnings: 4 > > > > Grand Total for unicam device /dev/media0: 242, Succeeded: 242, Failed: 0, Warnings: 4 > > > > > > Dave Stevenson (2): > > dt-bindings: media: Add bindings for bcm2835-unicam > > media: bcm2835-unicam: Add support for CCP2/CSI2 camera interface > > > > Jean-Michel Hautbois (3): > > media: v4l: Add V4L2-PIX-FMT-Y12P format > > media: v4l: Add V4L2-PIX-FMT-Y14P format > > ARM: dts: bcm2835: Add Unicam CSI nodes > > > > .../bindings/media/brcm,bcm2835-unicam.yaml | 127 + > > .../media/v4l/pixfmt-yuv-luma.rst | 48 + > > MAINTAINERS | 7 + > > arch/arm/boot/dts/broadcom/bcm2711.dtsi | 8 + > > arch/arm/boot/dts/broadcom/bcm2835-rpi.dtsi | 14 + > > arch/arm/boot/dts/broadcom/bcm283x.dtsi | 24 + > > drivers/media/platform/Kconfig | 1 + > > drivers/media/platform/Makefile | 1 + > > drivers/media/platform/broadcom/Kconfig | 23 + > > drivers/media/platform/broadcom/Makefile | 3 + > > .../platform/broadcom/bcm2835-unicam-regs.h | 246 ++ > > .../media/platform/broadcom/bcm2835-unicam.c | 2741 +++++++++++++++++ > > drivers/media/v4l2-core/v4l2-ioctl.c | 2 + > > include/uapi/linux/videodev2.h | 2 + > > 14 files changed, 3247 insertions(+) > > create mode 100644 Documentation/devicetree/bindings/media/brcm,bcm2835-unicam.yaml > > create mode 100644 drivers/media/platform/broadcom/Kconfig > > create mode 100644 drivers/media/platform/broadcom/Makefile > > create mode 100644 drivers/media/platform/broadcom/bcm2835-unicam-regs.h > > create mode 100644 drivers/media/platform/broadcom/bcm2835-unicam.c > > > > > > base-commit: 47120f3da814440058a9823bf9ac3a660b2ce9c0
Hi Laurent, Florian, On Wed, Apr 24, 2024 at 07:33:38PM +0300, Laurent Pinchart wrote: > > > Sakari, please feel free to apply this on top of your generic metadata > > > branch and include it in your pull request for v6.10. > > > > To miminize conflicts, I believe I should be taking patch #5 via the ARM > > SoC pull request since I already have merged patches there that are > > pre-requisites for patch #5 to apply. Let me know if that does not work. > > That works for me. Sakari, please don't take patch 5/5 in your branch. Ack. Thanks for confirming this.