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