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