Re: [PATCH 2/5] docs: media: vimc: Documenting vimc topology configuration using configfs
Hello All, W dniu 23.09.2019 o 11:50, Hans Verkuil pisze: On 9/23/19 11:29 AM, Dafna Hirschfeld wrote: On Fri, 2019-09-20 at 15:39 +0200, Hans Verkuil wrote: On 9/19/19 10:32 PM, Dafna Hirschfeld wrote: Add explanation of how to use configfs in order to create a vimc device with a given topology. Signed-off-by: Dafna Hirschfeld --- Documentation/media/v4l-drivers/vimc.dot | 28 ++- Documentation/media/v4l-drivers/vimc.rst | 240 --- 2 files changed, 220 insertions(+), 48 deletions(-) When adding new sysfs or configfs directories/files one should add appropriate entries to Documentation/ABI/*. My feeling is that this patch should be merged with the patch actually enabling the configfs interface, which is patch 4/5. The reason is twofold. The first is consistency: if a documentation for an interface is added in a different patch than the interface itself, then at the first of the two commits in question we either have a documentation for a non-existing interface, or an undocumented interface. The second is that the documentation is not only for kernel developers but also for users who don't have the faintest idea of what code is inside the kernel, so even though patch 3/5 of this series adds the code implementing the interface, it is not available to users until patch 4/5. Regards, Andrzej
Re: [PATCH 2/5] docs: media: vimc: Documenting vimc topology configuration using configfs
On 9/19/19 2:32 PM, Dafna Hirschfeld wrote: Add explanation of how to use configfs in order to create a vimc device with a given topology. Can you add more detail on the problem configfs solves and what value it adds. Signed-off-by: Dafna Hirschfeld --- Documentation/media/v4l-drivers/vimc.dot | 28 ++- Documentation/media/v4l-drivers/vimc.rst | 240 --- 2 files changed, 220 insertions(+), 48 deletions(-) diff --git a/Documentation/media/v4l-drivers/vimc.dot b/Documentation/media/v4l-drivers/vimc.dot index 57863a13fa39..e3b41ac2bc46 100644 --- a/Documentation/media/v4l-drivers/vimc.dot +++ b/Documentation/media/v4l-drivers/vimc.dot @@ -2,21 +2,15 @@ digraph board { rankdir=TB - n0001 [label="{{} | Sensor A\n/dev/v4l-subdev0 | { 0}}", shape=Mrecord, style=filled, fillcolor=green] - n0001:port0 -> n0005:port0 [style=bold] - n0001:port0 -> n000b [style=bold] - n0003 [label="{{} | Sensor B\n/dev/v4l-subdev1 | { 0}}", shape=Mrecord, style=filled, fillcolor=green] - n0003:port0 -> n0008:port0 [style=bold] - n0003:port0 -> n000f [style=bold] - n0005 [label="{{ 0} | Debayer A\n/dev/v4l-subdev2 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n0005:port1 -> n0017:port0 - n0008 [label="{{ 0} | Debayer B\n/dev/v4l-subdev3 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n0008:port1 -> n0017:port0 [style=dashed] - n000b [label="Raw Capture 0\n/dev/video0", shape=box, style=filled, fillcolor=yellow] - n000f [label="Raw Capture 1\n/dev/video1", shape=box, style=filled, fillcolor=yellow] - n0013 [label="RGB/YUV Input\n/dev/video2", shape=box, style=filled, fillcolor=yellow] - n0013 -> n0017:port0 [style=dashed] - n0017 [label="{{ 0} | Scaler\n/dev/v4l-subdev4 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n0017:port1 -> n001a [style=bold] - n001a [label="RGB/YUV Capture\n/dev/video3", shape=box, style=filled, fillcolor=yellow] + n0001 [label="cap-deb\n/dev/video0", shape=box, style=filled, fillcolor=yellow] + n0005 [label="cap-sen\n/dev/video1", shape=box, style=filled, fillcolor=yellow] + n0009 [label="cap-sca\n/dev/video2", shape=box, style=filled, fillcolor=yellow] + n000d [label="{{ 0} | sca\n/dev/v4l-subdev0 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n000d:port1 -> n0009 [style=bold] + n0010 [label="{{ 0} | deb\n/dev/v4l-subdev1 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n0010:port1 -> n0001 [style=bold] + n0010:port1 -> n000d:port0 [style=bold] + n0013 [label="{{} | sen\n/dev/v4l-subdev2 | { 0}}", shape=Mrecord, style=filled, fillcolor=green] + n0013:port0 -> n0005 [style=bold] + n0013:port0 -> n0010:port0 [style=bold] } diff --git a/Documentation/media/v4l-drivers/vimc.rst b/Documentation/media/v4l-drivers/vimc.rst index a582af0509ee..e5636883545f 100644 --- a/Documentation/media/v4l-drivers/vimc.rst +++ b/Documentation/media/v4l-drivers/vimc.rst @@ -1,45 +1,225 @@ .. SPDX-License-Identifier: GPL-2.0 +== The Virtual Media Controller Driver (vimc) == -The vimc driver emulates complex video hardware using the V4L2 API and the Media -API. It has a capture device and three subdevices: sensor, debayer and scaler. +The vimc driver emulates complex video hardware topologies using the V4L2 API +and the Media API. It has a capture device and three subdevices: Add blank line in between - helps with readability +sensor, debayer and scaler. It exposes media devices through /dev/mediaX nodes, +video capture devices through /dev/videoX and sub-devices through /dev/v4l-subdevX. + + +To configure a media device of a given topology, a ConfigFS API is provided. ConfigFS API enables the ability dynamically configure a media device and its topology. This will help customize topology for specific testing needs (?) Assuming that is the goal for this work. + +Configuring a topology through ConfigFS (Experimental) +== + +.. note:: This API is under development and might change in the future. > + +Mount configfs: +:: + + $ mkdir /configfs + $ mount -t configfs none /configfs + +When loading the module, you will see a folder named vimc +:: + + $ tree /configfs/ + /configfs/ + `-- vimc + +Creating a media device +--- + +To create a media device create a new folder under /configfs/vimc/ Change this to: How to create a media device or flip the sentence around: Create a folder under /configfs/vimc/ to create media device. + +Example: +:: + + $ mkdir /configfs/vimc/mdev + $ tr
Re: [PATCH 2/5] docs: media: vimc: Documenting vimc topology configuration using configfs
On 9/23/19 11:29 AM, Dafna Hirschfeld wrote: > On Fri, 2019-09-20 at 15:39 +0200, Hans Verkuil wrote: >> On 9/19/19 10:32 PM, Dafna Hirschfeld wrote: >>> Add explanation of how to use configfs in order to create a >>> vimc device with a given topology. >>> >>> Signed-off-by: Dafna Hirschfeld >>> --- >>> Documentation/media/v4l-drivers/vimc.dot | 28 ++- >>> Documentation/media/v4l-drivers/vimc.rst | 240 --- >>> 2 files changed, 220 insertions(+), 48 deletions(-) >>> >>> diff --git a/Documentation/media/v4l-drivers/vimc.dot >>> b/Documentation/media/v4l-drivers/vimc.dot >>> index 57863a13fa39..e3b41ac2bc46 100644 >>> --- a/Documentation/media/v4l-drivers/vimc.dot >>> +++ b/Documentation/media/v4l-drivers/vimc.dot >>> @@ -2,21 +2,15 @@ >>> >>> digraph board { >>> rankdir=TB >>> - n0001 [label="{{} | Sensor A\n/dev/v4l-subdev0 | { 0}}", >>> shape=Mrecord, style=filled, fillcolor=green] >>> - n0001:port0 -> n0005:port0 [style=bold] >>> - n0001:port0 -> n000b [style=bold] >>> - n0003 [label="{{} | Sensor B\n/dev/v4l-subdev1 | { 0}}", >>> shape=Mrecord, style=filled, fillcolor=green] >>> - n0003:port0 -> n0008:port0 [style=bold] >>> - n0003:port0 -> n000f [style=bold] >>> - n0005 [label="{{ 0} | Debayer A\n/dev/v4l-subdev2 | { >>> 1}}", shape=Mrecord, style=filled, fillcolor=green] >>> - n0005:port1 -> n0017:port0 >>> - n0008 [label="{{ 0} | Debayer B\n/dev/v4l-subdev3 | { >>> 1}}", shape=Mrecord, style=filled, fillcolor=green] >>> - n0008:port1 -> n0017:port0 [style=dashed] >>> - n000b [label="Raw Capture 0\n/dev/video0", shape=box, style=filled, >>> fillcolor=yellow] >>> - n000f [label="Raw Capture 1\n/dev/video1", shape=box, style=filled, >>> fillcolor=yellow] >>> - n0013 [label="RGB/YUV Input\n/dev/video2", shape=box, style=filled, >>> fillcolor=yellow] >>> - n0013 -> n0017:port0 [style=dashed] >>> - n0017 [label="{{ 0} | Scaler\n/dev/v4l-subdev4 | { >>> 1}}", shape=Mrecord, style=filled, fillcolor=green] >>> - n0017:port1 -> n001a [style=bold] >>> - n001a [label="RGB/YUV Capture\n/dev/video3", shape=box, >>> style=filled, fillcolor=yellow] >>> + n0001 [label="cap-deb\n/dev/video0", shape=box, style=filled, >>> fillcolor=yellow] >>> + n0005 [label="cap-sen\n/dev/video1", shape=box, style=filled, >>> fillcolor=yellow] >>> + n0009 [label="cap-sca\n/dev/video2", shape=box, style=filled, >>> fillcolor=yellow] >>> + n000d [label="{{ 0} | sca\n/dev/v4l-subdev0 | { 1}}", >>> shape=Mrecord, style=filled, fillcolor=green] >>> + n000d:port1 -> n0009 [style=bold] >>> + n0010 [label="{{ 0} | deb\n/dev/v4l-subdev1 | { 1}}", >>> shape=Mrecord, style=filled, fillcolor=green] >>> + n0010:port1 -> n0001 [style=bold] >>> + n0010:port1 -> n000d:port0 [style=bold] >>> + n0013 [label="{{} | sen\n/dev/v4l-subdev2 | { 0}}", >>> shape=Mrecord, style=filled, fillcolor=green] >>> + n0013:port0 -> n0005 [style=bold] >>> + n0013:port0 -> n0010:port0 [style=bold] >>> } >>> diff --git a/Documentation/media/v4l-drivers/vimc.rst >>> b/Documentation/media/v4l-drivers/vimc.rst >>> index a582af0509ee..e5636883545f 100644 >>> --- a/Documentation/media/v4l-drivers/vimc.rst >>> +++ b/Documentation/media/v4l-drivers/vimc.rst >>> @@ -1,45 +1,225 @@ >>> .. SPDX-License-Identifier: GPL-2.0 >>> >>> +== >>> The Virtual Media Controller Driver (vimc) >>> == >>> >>> -The vimc driver emulates complex video hardware using the V4L2 API and the >>> Media >>> -API. It has a capture device and three subdevices: sensor, debayer and >>> scaler. >>> +The vimc driver emulates complex video hardware topologies using the V4L2 >>> API >>> +and the Media API. It has a capture device and three subdevices: >>> +sensor, debayer and scaler. It exposes media devices through /dev/mediaX >>> nodes, >>> +video capture devices through /dev/videoX and sub-devices through >>> /dev/v4l-subdevX. >>> + >>> + >>> +To configure a media device of a given topology, a ConfigFS API is >>> provided. >>> + >>> +Configuring a topology through ConfigFS (Experimental) >>> +== >>> + >>> +.. note:: This API is under development and might change in the future. >>> + >>> +Mount configfs: >>> +:: >>> + >>> + $ mkdir /configfs >>> + $ mount -t configfs none /configfs >>> + >>> +When loading the module, you will see a folder named vimc >>> +:: >>> + >>> + $ tree /configfs/ >>> + /configfs/ >>> + `-- vimc >>> + >>> +Creating a media device >>> +--- >>> + >>> +To create a media device create a new folder under /configfs/vimc/ >>> + >>> +Example: >>> +:: >>> + >>> + $ mkdir /configfs/vimc/mdev >>> + $ tree /configfs/vimc/mdev >>> + /configfs/ >>> + `-- vimc
Re: [PATCH 2/5] docs: media: vimc: Documenting vimc topology configuration using configfs
On Fri, 2019-09-20 at 15:39 +0200, Hans Verkuil wrote: > On 9/19/19 10:32 PM, Dafna Hirschfeld wrote: > > Add explanation of how to use configfs in order to create a > > vimc device with a given topology. > > > > Signed-off-by: Dafna Hirschfeld > > --- > > Documentation/media/v4l-drivers/vimc.dot | 28 ++- > > Documentation/media/v4l-drivers/vimc.rst | 240 --- > > 2 files changed, 220 insertions(+), 48 deletions(-) > > > > diff --git a/Documentation/media/v4l-drivers/vimc.dot > > b/Documentation/media/v4l-drivers/vimc.dot > > index 57863a13fa39..e3b41ac2bc46 100644 > > --- a/Documentation/media/v4l-drivers/vimc.dot > > +++ b/Documentation/media/v4l-drivers/vimc.dot > > @@ -2,21 +2,15 @@ > > > > digraph board { > > rankdir=TB > > - n0001 [label="{{} | Sensor A\n/dev/v4l-subdev0 | { 0}}", > > shape=Mrecord, style=filled, fillcolor=green] > > - n0001:port0 -> n0005:port0 [style=bold] > > - n0001:port0 -> n000b [style=bold] > > - n0003 [label="{{} | Sensor B\n/dev/v4l-subdev1 | { 0}}", > > shape=Mrecord, style=filled, fillcolor=green] > > - n0003:port0 -> n0008:port0 [style=bold] > > - n0003:port0 -> n000f [style=bold] > > - n0005 [label="{{ 0} | Debayer A\n/dev/v4l-subdev2 | { > > 1}}", shape=Mrecord, style=filled, fillcolor=green] > > - n0005:port1 -> n0017:port0 > > - n0008 [label="{{ 0} | Debayer B\n/dev/v4l-subdev3 | { > > 1}}", shape=Mrecord, style=filled, fillcolor=green] > > - n0008:port1 -> n0017:port0 [style=dashed] > > - n000b [label="Raw Capture 0\n/dev/video0", shape=box, style=filled, > > fillcolor=yellow] > > - n000f [label="Raw Capture 1\n/dev/video1", shape=box, style=filled, > > fillcolor=yellow] > > - n0013 [label="RGB/YUV Input\n/dev/video2", shape=box, style=filled, > > fillcolor=yellow] > > - n0013 -> n0017:port0 [style=dashed] > > - n0017 [label="{{ 0} | Scaler\n/dev/v4l-subdev4 | { > > 1}}", shape=Mrecord, style=filled, fillcolor=green] > > - n0017:port1 -> n001a [style=bold] > > - n001a [label="RGB/YUV Capture\n/dev/video3", shape=box, > > style=filled, fillcolor=yellow] > > + n0001 [label="cap-deb\n/dev/video0", shape=box, style=filled, > > fillcolor=yellow] > > + n0005 [label="cap-sen\n/dev/video1", shape=box, style=filled, > > fillcolor=yellow] > > + n0009 [label="cap-sca\n/dev/video2", shape=box, style=filled, > > fillcolor=yellow] > > + n000d [label="{{ 0} | sca\n/dev/v4l-subdev0 | { 1}}", > > shape=Mrecord, style=filled, fillcolor=green] > > + n000d:port1 -> n0009 [style=bold] > > + n0010 [label="{{ 0} | deb\n/dev/v4l-subdev1 | { 1}}", > > shape=Mrecord, style=filled, fillcolor=green] > > + n0010:port1 -> n0001 [style=bold] > > + n0010:port1 -> n000d:port0 [style=bold] > > + n0013 [label="{{} | sen\n/dev/v4l-subdev2 | { 0}}", > > shape=Mrecord, style=filled, fillcolor=green] > > + n0013:port0 -> n0005 [style=bold] > > + n0013:port0 -> n0010:port0 [style=bold] > > } > > diff --git a/Documentation/media/v4l-drivers/vimc.rst > > b/Documentation/media/v4l-drivers/vimc.rst > > index a582af0509ee..e5636883545f 100644 > > --- a/Documentation/media/v4l-drivers/vimc.rst > > +++ b/Documentation/media/v4l-drivers/vimc.rst > > @@ -1,45 +1,225 @@ > > .. SPDX-License-Identifier: GPL-2.0 > > > > +== > > The Virtual Media Controller Driver (vimc) > > == > > > > -The vimc driver emulates complex video hardware using the V4L2 API and the > > Media > > -API. It has a capture device and three subdevices: sensor, debayer and > > scaler. > > +The vimc driver emulates complex video hardware topologies using the V4L2 > > API > > +and the Media API. It has a capture device and three subdevices: > > +sensor, debayer and scaler. It exposes media devices through /dev/mediaX > > nodes, > > +video capture devices through /dev/videoX and sub-devices through > > /dev/v4l-subdevX. > > + > > + > > +To configure a media device of a given topology, a ConfigFS API is > > provided. > > + > > +Configuring a topology through ConfigFS (Experimental) > > +== > > + > > +.. note:: This API is under development and might change in the future. > > + > > +Mount configfs: > > +:: > > + > > + $ mkdir /configfs > > + $ mount -t configfs none /configfs > > + > > +When loading the module, you will see a folder named vimc > > +:: > > + > > + $ tree /configfs/ > > + /configfs/ > > + `-- vimc > > + > > +Creating a media device > > +--- > > + > > +To create a media device create a new folder under /configfs/vimc/ > > + > > +Example: > > +:: > > + > > + $ mkdir /configfs/vimc/mdev > > + $ tree /configfs/vimc/mdev > > + /configfs/ > > + `-- vimc > > + `-- mdev > > + `-- hotpl
Re: [PATCH 2/5] docs: media: vimc: Documenting vimc topology configuration using configfs
On 9/19/19 10:32 PM, Dafna Hirschfeld wrote: > Add explanation of how to use configfs in order to create a > vimc device with a given topology. > > Signed-off-by: Dafna Hirschfeld > --- > Documentation/media/v4l-drivers/vimc.dot | 28 ++- > Documentation/media/v4l-drivers/vimc.rst | 240 --- > 2 files changed, 220 insertions(+), 48 deletions(-) > > diff --git a/Documentation/media/v4l-drivers/vimc.dot > b/Documentation/media/v4l-drivers/vimc.dot > index 57863a13fa39..e3b41ac2bc46 100644 > --- a/Documentation/media/v4l-drivers/vimc.dot > +++ b/Documentation/media/v4l-drivers/vimc.dot > @@ -2,21 +2,15 @@ > > digraph board { > rankdir=TB > - n0001 [label="{{} | Sensor A\n/dev/v4l-subdev0 | { 0}}", > shape=Mrecord, style=filled, fillcolor=green] > - n0001:port0 -> n0005:port0 [style=bold] > - n0001:port0 -> n000b [style=bold] > - n0003 [label="{{} | Sensor B\n/dev/v4l-subdev1 | { 0}}", > shape=Mrecord, style=filled, fillcolor=green] > - n0003:port0 -> n0008:port0 [style=bold] > - n0003:port0 -> n000f [style=bold] > - n0005 [label="{{ 0} | Debayer A\n/dev/v4l-subdev2 | { > 1}}", shape=Mrecord, style=filled, fillcolor=green] > - n0005:port1 -> n0017:port0 > - n0008 [label="{{ 0} | Debayer B\n/dev/v4l-subdev3 | { > 1}}", shape=Mrecord, style=filled, fillcolor=green] > - n0008:port1 -> n0017:port0 [style=dashed] > - n000b [label="Raw Capture 0\n/dev/video0", shape=box, style=filled, > fillcolor=yellow] > - n000f [label="Raw Capture 1\n/dev/video1", shape=box, style=filled, > fillcolor=yellow] > - n0013 [label="RGB/YUV Input\n/dev/video2", shape=box, style=filled, > fillcolor=yellow] > - n0013 -> n0017:port0 [style=dashed] > - n0017 [label="{{ 0} | Scaler\n/dev/v4l-subdev4 | { > 1}}", shape=Mrecord, style=filled, fillcolor=green] > - n0017:port1 -> n001a [style=bold] > - n001a [label="RGB/YUV Capture\n/dev/video3", shape=box, > style=filled, fillcolor=yellow] > + n0001 [label="cap-deb\n/dev/video0", shape=box, style=filled, > fillcolor=yellow] > + n0005 [label="cap-sen\n/dev/video1", shape=box, style=filled, > fillcolor=yellow] > + n0009 [label="cap-sca\n/dev/video2", shape=box, style=filled, > fillcolor=yellow] > + n000d [label="{{ 0} | sca\n/dev/v4l-subdev0 | { 1}}", > shape=Mrecord, style=filled, fillcolor=green] > + n000d:port1 -> n0009 [style=bold] > + n0010 [label="{{ 0} | deb\n/dev/v4l-subdev1 | { 1}}", > shape=Mrecord, style=filled, fillcolor=green] > + n0010:port1 -> n0001 [style=bold] > + n0010:port1 -> n000d:port0 [style=bold] > + n0013 [label="{{} | sen\n/dev/v4l-subdev2 | { 0}}", > shape=Mrecord, style=filled, fillcolor=green] > + n0013:port0 -> n0005 [style=bold] > + n0013:port0 -> n0010:port0 [style=bold] > } > diff --git a/Documentation/media/v4l-drivers/vimc.rst > b/Documentation/media/v4l-drivers/vimc.rst > index a582af0509ee..e5636883545f 100644 > --- a/Documentation/media/v4l-drivers/vimc.rst > +++ b/Documentation/media/v4l-drivers/vimc.rst > @@ -1,45 +1,225 @@ > .. SPDX-License-Identifier: GPL-2.0 > > +== > The Virtual Media Controller Driver (vimc) > == > > -The vimc driver emulates complex video hardware using the V4L2 API and the > Media > -API. It has a capture device and three subdevices: sensor, debayer and > scaler. > +The vimc driver emulates complex video hardware topologies using the V4L2 API > +and the Media API. It has a capture device and three subdevices: > +sensor, debayer and scaler. It exposes media devices through /dev/mediaX > nodes, > +video capture devices through /dev/videoX and sub-devices through > /dev/v4l-subdevX. > + > + > +To configure a media device of a given topology, a ConfigFS API is provided. > + > +Configuring a topology through ConfigFS (Experimental) > +== > + > +.. note:: This API is under development and might change in the future. > + > +Mount configfs: > +:: > + > + $ mkdir /configfs > + $ mount -t configfs none /configfs > + > +When loading the module, you will see a folder named vimc > +:: > + > + $ tree /configfs/ > + /configfs/ > + `-- vimc > + > +Creating a media device > +--- > + > +To create a media device create a new folder under /configfs/vimc/ > + > +Example: > +:: > + > + $ mkdir /configfs/vimc/mdev > + $ tree /configfs/vimc/mdev > + /configfs/ > + `-- vimc > + `-- mdev > + `-- hotplug > + > +Creating entities > +- > + > +To create an entity in the media device's topology, create a folder under > +``/configfs/vimc//`` with the following format: > + > + : I suspect that there are restri