^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) .. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) .. _media-controller-model:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) Media device model
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) ==================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) Discovering a device internal topology, and configuring it at runtime,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) is one of the goals of the media controller API. To achieve this,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) hardware devices and Linux Kernel interfaces are modelled as graph
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) objects on an oriented graph. The object types that constitute the graph
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) are:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) - An **entity** is a basic media hardware or software building block.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) It can correspond to a large variety of logical blocks such as
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) physical hardware devices (CMOS sensor for instance), logical
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) hardware devices (a building block in a System-on-Chip image
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) processing pipeline), DMA channels or physical connectors.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) - An **interface** is a graph representation of a Linux Kernel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) userspace API interface, like a device node or a sysfs file that
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) controls one or more entities in the graph.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) - A **pad** is a data connection endpoint through which an entity can
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) interact with other entities. Data (not restricted to video) produced
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) by an entity flows from the entity's output to one or more entity
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) inputs. Pads should not be confused with physical pins at chip
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) boundaries.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) - A **data link** is a point-to-point oriented connection between two
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) pads, either on the same entity or on different entities. Data flows
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) from a source pad to a sink pad.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) - An **interface link** is a point-to-point bidirectional control
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) connection between a Linux Kernel interface and an entity.