Re: [PATCH v5 00/11] Add support for BCM2835 camera interface (unicam)

From: Jean-Michel Hautbois
Date: Sun Feb 20 2022 - 09:31:00 EST


Hi Stefan,

On 16/02/2022 21:57, Stefan Wahren wrote:
Hi Jean-Michel,

Am 08.02.22 um 16:50 schrieb Jean-Michel Hautbois:
Hello !

...

In order to properly configure the media pipeline, it is needed to call
the usual ioctls, and configure routing in order to send the embedded
data from the sensor to the "unicam-embedded" device node :

```
media=0
media-ctl -d${media} -l "'imx219 2-0010':0->'unicam-subdev':0 [1]"
media-ctl -d${media} -l "'unicam-subdev':1->'unicam-image':0 [1]"
media-ctl -d${media} -v -R "'unicam-subdev' [0/0->1/0[1],0/1->2/0[1]]"
media-ctl -d${media} -V "'imx219 2-0010':0/0 [fmt:SRGGB10_1X10/3280x2464 field:none]"
v4l2-ctl -d0 --set-fmt-video width=3280,height=2464,pixelformat='pRAA',field=none
media-ctl -d${media} -v -V "'imx219 2-0010':0/1 [fmt:METADATA_8/16384x1 field:none]"
media-ctl -d${media} -p
```

i tried to test the unicam driver on a Raspberry Pi 4 with the imx219
camera (based on 5.17-rc4). The unicam & imx219 driver probes and
/dev/video0 is created.

If a execute the first media-ctl command, it complains with invalid
argument 22. Is there a more fool-proof variant to configure this (a
script or something else)? I never used the unicam driver before.

Here is the output of

$ mediactl -d0 -p


Based on your output, I suppose the issue is the naming of the imx219 media entity ('imx219 2-0010' vs 'imx219 5-0010').
You could add a '-v' in the line to help you I suppose.

A more bullet-proof version of the commands is certainly doable, not sure how though as I would not like to rewrite a libcamera-like command ;-).

Media controller API version 5.17.0

Media device information
------------------------
driver          unicam
model           unicam
serial
bus info        platform:fe801000.csi
hw revision     0x0
driver version  5.17.0

Device topology
- entity 1: unicam-subdev (3 pads, 3 links, 2 routes)
            type V4L2 subdev subtype Unknown flags 0
            device node name /dev/v4l-subdev0
    routes:
        0/0 -> 1/0 [ACTIVE]
        0/1 -> 2/0 [ACTIVE]
    pad0: Sink
        [stream:0 fmt:unknown/0x0]
        [stream:1 fmt:unknown/0x0]
        <- "imx219 5-0010":0 [ENABLED,IMMUTABLE]
    pad1: Source
        [stream:0 fmt:unknown/0x0]
        -> "unicam-image":0 [ENABLED,IMMUTABLE]
    pad2: Source
        [stream:0 fmt:unknown/0x0]
        -> "unicam-embedded":0 [ENABLED,IMMUTABLE]

- entity 5: imx219 5-0010 (1 pad, 1 link, 2 routes)
            type V4L2 subdev subtype Sensor flags 0
            device node name /dev/v4l-subdev1
    routes:
        0/0 -> 0/0 [ACTIVE, IMMUTABLE, SOURCE]
        0/0 -> 0/1 [ACTIVE, SOURCE]
    pad0: Source
        [stream:0 fmt:SRGGB10_1X10/3280x2464 field:none colorspace:raw
         crop.bounds:(8,8)/3280x2464
         crop:(8,8)/3280x2464]
        [stream:1 fmt:METADATA_8/16384x1 field:none
         crop.bounds:(8,8)/3280x2464
         crop:(8,8)/3280x2464]
        -> "unicam-subdev":0 [ENABLED,IMMUTABLE]

- entity 9: unicam-image (1 pad, 1 link, 0 route)
            type Node subtype V4L flags 1
            device node name /dev/video0
    pad0: Sink
        <- "unicam-subdev":1 [ENABLED,IMMUTABLE]

- entity 15: unicam-embedded (1 pad, 1 link, 0 route)
             type Node subtype V4L flags 0
             device node name /dev/video1
    pad0: Sink
        <- "unicam-subdev":2 [ENABLED,IMMUTABLE]