From patchwork Fri May 8 13:10:33 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Mauro Carvalho Chehab X-Patchwork-Id: 209891 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.1 required=3.0 tests=DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6AE00C54E4A for ; Fri, 8 May 2020 13:10:45 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4AD0F249EC for ; Fri, 8 May 2020 13:10:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1588943445; bh=HQV8+pfPplk0V+kgDADCRrsaL77q+O7ZgggINhSPIYU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=h+E9lGHDRWz/zQsweh0SnO6hSJ5XrvXlCyuiKL563p7T7hitQoOElIK9H1KR7Y0Na 1vf/15va9+gDkrKJUTGjLYQV8QQ8iD7hxqoQsUmKw9E1slIWfj0bFfwOm2Zir8RB2/ N2gVP3YmFe/NMTKMU12gt9zuzmZBTke5wvEjft+4= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730547AbgEHNKm (ORCPT ); Fri, 8 May 2020 09:10:42 -0400 Received: from mail.kernel.org ([198.145.29.99]:60446 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730485AbgEHNKl (ORCPT ); Fri, 8 May 2020 09:10:41 -0400 Received: from mail.kernel.org (ip5f5ad5c5.dynamic.kabel-deutschland.de [95.90.213.197]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 67A3B249AC; Fri, 8 May 2020 13:10:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1588943440; bh=HQV8+pfPplk0V+kgDADCRrsaL77q+O7ZgggINhSPIYU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=2D6szX+nH/r0SxIkIphIHV9s8ZSsnzPxtEMB8/VHYJqFSHiB8YPoK8wU5HpwvNf2n c1IPVF+fgdX1cCLS/KFchwjWdTyYbK8I9NqKT5G/fbXybXV2xpdJkYIEP46P79NgjE FMeAc6AIs1WhyXSipfD8Rp9kQL/XUQOlMVid3NSM= Received: from mchehab by mail.kernel.org with local (Exim 4.93) (envelope-from ) id 1jX2ly-000Z95-DD; Fri, 08 May 2020 15:10:38 +0200 From: Mauro Carvalho Chehab To: Linux Media Mailing List Cc: Mauro Carvalho Chehab , Hans Verkuil , Laurent Pinchart , Sakari Ailus , Hans Verkuil Subject: [PATCH v9 1/5] media: open.rst: better document device node naming Date: Fri, 8 May 2020 15:10:33 +0200 Message-Id: X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org Right now, only kAPI documentation describes the device naming. However, such description is needed at the uAPI too. Add it, and describe how to get an unique identify for a given device. Acked-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab --- .../userspace-api/media/v4l/open.rst | 43 +++++++++++++++++-- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/Documentation/userspace-api/media/v4l/open.rst b/Documentation/userspace-api/media/v4l/open.rst index 38046ef20141..86816b247a17 100644 --- a/Documentation/userspace-api/media/v4l/open.rst +++ b/Documentation/userspace-api/media/v4l/open.rst @@ -14,12 +14,14 @@ Opening and Closing Devices *************************** -Device Naming -============= +.. _v4l2_device_naming: + +V4L2 Device Node Naming +======================= V4L2 drivers are implemented as kernel modules, loaded manually by the system administrator or automatically when a device is first discovered. -The driver modules plug into the "videodev" kernel module. It provides +The driver modules plug into the ``videodev`` kernel module. It provides helper functions and a common application interface specified in this document. @@ -30,6 +32,41 @@ option CONFIG_VIDEO_FIXED_MINOR_RANGES. In that case minor numbers are allocated in ranges depending on the device node type (video, radio, etc.). +The device nodes supported by the Video4Linux subsystem are: + +======================== ====================================================== +Default device node name Usage +======================== ====================================================== +``/dev/videoX`` Video input/output devices +``/dev/vbiX`` Vertical blank data (i.e. closed captions, teletext) +``/dev/radioX`` Radio tuners and modulators +``/dev/swradioX`` Software Defined Radio tuners and modulators +``/dev/v4l-touchX`` Touch sensors +``/dev/v4l-sudevX`` Video sub-devices (used by sensors and other I2C + devices)\ [#]_ +======================== ====================================================== + +Where ``X`` is a non-negative number. + +.. note:: + + 1. The actual device node name is system-dependent, as udev rules may apply. + 2. There is no guarantee that ``X`` will remain the same for the same + device, as the number depends on the device driver's probe order. + If you need an unique name, udev default rules produce + ``/dev/v4l/by-id/`` and ``/dev/v4l/by-path/`` directories containing + links that can be used uniquely to identify a V4L2 device node:: + + $ tree /dev/v4l + /dev/v4l + ├── by-id + │   └── usb-OmniVision._USB_Camera-B4.04.27.1-video-index0 -> ../../video0 + └── by-path + └── pci-0000:00:14.0-usb-0:2:1.0-video-index0 -> ../../video0 + +.. [#] **V4L2 sub-device nodes** (e. g. ``/dev/v4l-sudevX``) use a different + set of system calls, as covered at :ref:`subdev`. + Many drivers support "video_nr", "radio_nr" or "vbi_nr" module options to select specific video/radio/vbi node numbers. This allows the user to request that the device node is named e.g. /dev/video5 instead From patchwork Fri May 8 13:10:35 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Mauro Carvalho Chehab X-Patchwork-Id: 209890 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.1 required=3.0 tests=DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B2927C38A2A for ; Fri, 8 May 2020 13:10:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 8D1AF249C2 for ; Fri, 8 May 2020 13:10:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1588943447; bh=e7rJiIVGerWaSbbKSKZf+aeRycboyDyabwzwVgJTOTQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=vwC0MO51H9jYYgYu5JNNva1Q+9vNvfh3JF3qTnGOJKejYqdpz3uhU74OCaSmKEQ+b kAFNiqVC3lclF87yGcdcigT2teqhkV9px+26x3WPkHaqt6I1nwbcIKz+V61zG2kPNA P773A2Udz/0X2hKnfqF+Re5QfwgZyG/XIleN2vUo= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728193AbgEHNKq (ORCPT ); Fri, 8 May 2020 09:10:46 -0400 Received: from mail.kernel.org ([198.145.29.99]:60454 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730521AbgEHNKl (ORCPT ); Fri, 8 May 2020 09:10:41 -0400 Received: from mail.kernel.org (ip5f5ad5c5.dynamic.kabel-deutschland.de [95.90.213.197]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 7A1EE249C2; Fri, 8 May 2020 13:10:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1588943440; bh=e7rJiIVGerWaSbbKSKZf+aeRycboyDyabwzwVgJTOTQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=nnLgSjQy1aVaX1gyo22Ij6hINSICot5QxPbpLZMiOgnKZfNAjSyxGxn5/Y8YBchDc gaRAk0eUMKeBLwhhHpyNkMpy91w+a3AMiXaMqj2TAqAjXpNF5B59H5T6yQpSEvlBxe M+vYQszyWLqZ8iJAgxRD1LW5H+WRcZGcwLrEhscE= Received: from mchehab by mail.kernel.org with local (Exim 4.93) (envelope-from ) id 1jX2ly-000Z9D-FJ; Fri, 08 May 2020 15:10:38 +0200 From: Mauro Carvalho Chehab To: Linux Media Mailing List Cc: Mauro Carvalho Chehab , Hans Verkuil , Laurent Pinchart , Sakari Ailus Subject: [PATCH v9 3/5] media: docs: add glossary.rst with common terms used at V4L2 spec Date: Fri, 8 May 2020 15:10:35 +0200 Message-Id: <03ae8cfd780924080f48154569c7fa26b6e92ab3.1588943181.git.mchehab+huawei@kernel.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org Add a glossary of terms used within the media userspace API documentation, as several concepts are complex enough to cause misunderstandings. Signed-off-by: Mauro Carvalho Chehab --- .../userspace-api/media/glossary.rst | 182 ++++++++++++++++++ Documentation/userspace-api/media/index.rst | 3 + 2 files changed, 185 insertions(+) create mode 100644 Documentation/userspace-api/media/glossary.rst diff --git a/Documentation/userspace-api/media/glossary.rst b/Documentation/userspace-api/media/glossary.rst new file mode 100644 index 000000000000..18a1ace00159 --- /dev/null +++ b/Documentation/userspace-api/media/glossary.rst @@ -0,0 +1,182 @@ +.. SPDX-License-Identifier: GPL-2.0 OR GFDL-1.1-or-later + +.. For GPL-2.0, see LICENSES/preferred/GPL-2.0 +.. +.. For GFDL-1.1-or-later, see: +.. +.. Permission is granted to copy, distribute and/or modify this document +.. under the terms of the GNU Free Documentation License, Version 1.1 or +.. any later version published by the Free Software Foundation, with no +.. Invariant Sections, no Front-Cover Texts and no Back-Cover Texts. +.. A copy of the license is included at +.. Documentation/userspace-api/media/fdl-appendix.rst. + +======== +Glossary +======== + +.. note:: + + This goal of this section is to standardize the terms used within the media + userspace API documentation. It is written incrementally as they are + standardized in the media documentation. + + So, it is a Work In Progress. + +.. Please keep the glossary entries in alphabetical order + +.. glossary:: + + Bridge Driver + A :term:`device driver` that implements the main logic to talk with + media hardware. + + CEC API + **Consumer Electronics Control API** + + An API designed to receive and transmit data via an HDMI + CEC interface. + + See :ref:`cec`. + + Device Driver + Part of the Linux Kernel that implements support for a hardware + component. + + Device Node + A character device node in the file system used to control and + ransfer data in and out of a Kernel driver. + + Digital TV API + **Previously known as DVB API** + + An API designed to control a subset of the :term:`Media Hardware` + that implements digital TV. + + See :ref:`dvbapi`. + + DSP + **Digital Signal Processor** + + A specialized :term:`Microprocessor`, with its architecture + optimized for the operational needs of digital signal processing. + + FPGA + **Field-programmable Gate Array** + + An :term:`IC` circuit designed to be configured by a customer or + a designer after manufacturing. + + See https://en.wikipedia.org/wiki/Field-programmable_gate_array. + + I²C + **Inter-Integrated Circuit** + + A multi-master, multi-slave, packet switched, single-ended, + serial computer bus used to control some hardware components + like sub-device hardware components. + + See http://www.nxp.com/docs/en/user-guide/UM10204.pdf. + + IC + **Integrated circuit** + + A set of electronic circuits on one small flat piece of + semiconductor material, normally silicon. + + Also known as chip. + + IP Block + **Intellectual property core** + + In electronic design a semiconductor intellectual property core, + is a reusable unit of logic, cell, or integrated circuit layout + design that is the intellectual property of one party. + IP Blocks may be licensed to another party or can be owned + and used by a single party alone. + + See https://en.wikipedia.org/wiki/Semiconductor_intellectual_property_core). + + ISP + **Image Signal Processor** + + A specialized processor that implements a set of algorithms for + processing image data. ISPs may implement algorithms for lens + shading correction, demosaicing, scaling and pixel format conversion + as well as produce statistics for the use of the control + algorithms (e.g. automatic exposure, white balance and focus). + + Media API + A set of userspace APIs used to control the media hardware. It is + composed by: + + - :term:`CEC API`; + - :term:`Digital TV API`; + - :term:`MC API`; + - :term:`RC API`; and + - :term:`V4L2 API`. + + See :doc:`v4l/v4l2`. + + MC API + **Media Controller API** + + An API designed to expose and control the relationships between + devices and sub-devices. + + See :ref:`media_controller`. + + Media Hardware + Subset of the hardware that is supported by the Linux Media API. + + This includes audio and video capture and playback hardware, + digital and analog TV, camera sensors, ISPs, remote controllers, + codecs, HDMI Consumer Electronics Control, HDMI capture, etc. + + Microprocessor + Electronic circuitry that carries out the instructions of a + computer program by performing the basic arithmetic, logical, + control and input/output (I/O) operations specified by the + instructions on a single integrated circuit. + + RC API + **Remote Controller API** + + An API designed to receive and transmit data from remote + controllers. + + See :ref:`remote_controllers`. + + SMBus + A subset of I²C, which defines a stricter usage of the bus. + + SPI + **Serial Peripheral Interface Bus** + + Synchronous serial communication interface specification used for + short distance communication, primarily in embedded systems. + + SoC + **System on a Chip** + + An integrated circuit that integrates all components of a computer + or other electronic systems. + + V4L2 API + **V4L2 userspace API** + + The userspace API defined in :ref:`v4l2spec`, which is used to + control a V4L2 hardware. + + V4L2 Hardware + Part of a media hardware with is supported by the :term:`V4L2 API`. + + V4L2 Sub-device + V4L2 hardware components that aren't controlled by a + :term:`bridge driver`. + + V4L2 Sub-device API + Part of the :term:`V4L2 API` which control + :term:`V4L2 sub-devices `. + + See :ref:`subdev`. diff --git a/Documentation/userspace-api/media/index.rst b/Documentation/userspace-api/media/index.rst index 70a3f3d73698..7f42f83b9f59 100644 --- a/Documentation/userspace-api/media/index.rst +++ b/Documentation/userspace-api/media/index.rst @@ -35,6 +35,9 @@ Please see: mediactl/media-controller cec/cec-api gen-errors + + glossary + fdl-appendix drivers/index From patchwork Fri May 8 13:10:37 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Mauro Carvalho Chehab X-Patchwork-Id: 209892 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.1 required=3.0 tests=DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1AEECC38A2A for ; Fri, 8 May 2020 13:10:44 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E8C13249EC for ; Fri, 8 May 2020 13:10:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1588943443; bh=5auvOo0cz4Mvuw96bMWyk5KHEpjwFSVVuFxTn6gbhZo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=DMDR2Fy+rSW0O9eVuM1cuLAYiDyNcPMBj6vgqP5Sp+FP4lxGXgJlyukJ6+Yq/Qto6 gFeDs7RMSIhbVllWng6q8Lu3h1omcltzIcHLrsAMw6Fc0Sy2ES0dCAARFfWbbblfO0 /BtmmVC6/RtzedcM+mDaC/YIdWf+yny4MEHpV/Pw= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730485AbgEHNKn (ORCPT ); Fri, 8 May 2020 09:10:43 -0400 Received: from mail.kernel.org ([198.145.29.99]:60500 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728787AbgEHNKm (ORCPT ); Fri, 8 May 2020 09:10:42 -0400 Received: from mail.kernel.org (ip5f5ad5c5.dynamic.kabel-deutschland.de [95.90.213.197]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 93A52249D3; Fri, 8 May 2020 13:10:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1588943440; bh=5auvOo0cz4Mvuw96bMWyk5KHEpjwFSVVuFxTn6gbhZo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=gX75Ai6Dswv7vYjL4lzKXWXn4NDfjgD9MoKyOMnR5sZ3Z1S3psJ6DrIlf0uL8NAtj VleRZ2XNkl2tCV5bIikX89wy43rysfu01ZJBGOEab1mRry0KpRPKUbEqNevAfwXVgR T/dny8iZ1ovE/VgKe6TkWEAOnH813Rxb0a+UpEyk= Received: from mchehab by mail.kernel.org with local (Exim 4.93) (envelope-from ) id 1jX2ly-000Z9L-HI; Fri, 08 May 2020 15:10:38 +0200 From: Mauro Carvalho Chehab To: Linux Media Mailing List Cc: Mauro Carvalho Chehab , Hans Verkuil , Laurent Pinchart , Sakari Ailus , Hans Verkuil Subject: [PATCH v9 5/5] media: open.rst: document mc-centric and video-node-centric Date: Fri, 8 May 2020 15:10:37 +0200 Message-Id: <4fe37ecf19ad62f3c2ba6af31de81ec724fead16.1588943181.git.mchehab+huawei@kernel.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org When we added support for omap3, back in 2010, we added a new type of V4L2 devices that aren't fully controlled via the V4L2 device node. Yet, we have never clearly documented in the V4L2 specification the differences between the two types. Let's document them based on the the current implementation. Signed-off-by: Mauro Carvalho Chehab --- .../userspace-api/media/v4l/open.rst | 54 ++++++++++++++++--- 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/Documentation/userspace-api/media/v4l/open.rst b/Documentation/userspace-api/media/v4l/open.rst index ee4c8f123815..8a9f766ab855 100644 --- a/Documentation/userspace-api/media/v4l/open.rst +++ b/Documentation/userspace-api/media/v4l/open.rst @@ -13,6 +13,48 @@ Opening and Closing Devices *************************** +.. _v4l2_hardware_control: + +Controlling a hardware peripheral via V4L2 +========================================== + +V4L2 hardware peripheral is usually complex: support for it is +implemented via a bridge driver and often by several additional drivers. +The bridge driver exposes one or more V4L2 device nodes +(see :ref:`v4l2_device_naming`). + +There are other drivers providing support for other components of +the hardware, with may also expose device nodes, called V4L2 sub-devices. + +When such V4L2 sub-devices are exposed, they allow controlling +other hardware components - usually connected via a serial bus (like +I²C, SMBus or SPI). Depending on the bridge driver, those sub-devices +can be controlled indirectly via the bridge driver or explicitly via +the :ref:`Media Controller ` and via the +:ref:`V4L2 sub-devices `. + +The devices that require the use of the +:ref:`Media Controller ` are called **MC-centric** +devices. The devices that are fully controlled via V4L2 device nodes +are called **video-node-centric**. + +Userspace can check if a V4L2 hardware peripheral is MC-centric by +calling :ref:`VIDIOC_QUERYCAP` and checking the +:ref:`device_caps field `. + +If the device returns ``V4L2_CAP_IO_MC`` flag at ``device_caps``, +it is MC-centric, otherwise, it is video-node-centric. + +It is required for MC-centric hardware to identify the V4L2 +sub-devices and to configure the pipelines via the +:ref:`media controller API ` before using the peripheral. +Also, the sub-devices' configuration shall be controlled via the +:ref:`sub-device API `. + +.. note:: + + A video-node-centric may still provide a both media-controller and + sub-device interfaces as well. .. _v4l2_device_naming: @@ -109,7 +151,7 @@ Related Devices Devices can support several functions. For example video capturing, VBI capturing and radio support. -The V4L2 API creates different nodes for each of these functions. +The V4L2 API creates different V4L2 device nodes for each of these functions. The V4L2 API was designed with the idea that one device node could support all functions. However, in practice this never worked: this @@ -119,17 +161,17 @@ switching a device node between different functions only works when using the streaming I/O API, not with the :ref:`read() `/\ :ref:`write() ` API. -Today each device node supports just one function. +Today each V4L2 device node supports just one function. Besides video input or output the hardware may also support audio sampling or playback. If so, these functions are implemented as ALSA PCM devices with optional ALSA audio mixer devices. One problem with all these devices is that the V4L2 API makes no -provisions to find these related devices. Some really complex devices -use the Media Controller (see :ref:`media_controller`) which can be -used for this purpose. But most drivers do not use it, and while some -code exists that uses sysfs to discover related devices (see +provisions to find these related V4L2 device nodes. Some really complex +hardware use the Media Controller (see :ref:`media_controller`) which can +be used for this purpose. But several drivers do not use it, and while some +code exists that uses sysfs to discover related V4L2 device nodes (see libmedia_dev in the `v4l-utils `__ git repository), there is no library yet that can provide a single API