1ff768f59SMauro Carvalho Chehab.. SPDX-License-Identifier: GPL-2.0 2ff768f59SMauro Carvalho Chehab 3ff768f59SMauro Carvalho ChehabMedia Controller devices 4ff768f59SMauro Carvalho Chehab------------------------ 5ff768f59SMauro Carvalho Chehab 6ff768f59SMauro Carvalho ChehabMedia Controller 7ff768f59SMauro Carvalho Chehab~~~~~~~~~~~~~~~~ 8ff768f59SMauro Carvalho Chehab 9ff768f59SMauro Carvalho ChehabThe media controller userspace API is documented in 10ff768f59SMauro Carvalho Chehab:ref:`the Media Controller uAPI book <media_controller>`. This document focus 11ff768f59SMauro Carvalho Chehabon the kernel-side implementation of the media framework. 12ff768f59SMauro Carvalho Chehab 13ff768f59SMauro Carvalho ChehabAbstract media device model 14ff768f59SMauro Carvalho Chehab^^^^^^^^^^^^^^^^^^^^^^^^^^^ 15ff768f59SMauro Carvalho Chehab 16ff768f59SMauro Carvalho ChehabDiscovering a device internal topology, and configuring it at runtime, is one 17ff768f59SMauro Carvalho Chehabof the goals of the media framework. To achieve this, hardware devices are 18ff768f59SMauro Carvalho Chehabmodelled as an oriented graph of building blocks called entities connected 19ff768f59SMauro Carvalho Chehabthrough pads. 20ff768f59SMauro Carvalho Chehab 21ff768f59SMauro Carvalho ChehabAn entity is a basic media hardware building block. It can correspond to 22ff768f59SMauro Carvalho Chehaba large variety of logical blocks such as physical hardware devices 23ff768f59SMauro Carvalho Chehab(CMOS sensor for instance), logical hardware devices (a building block 24ff768f59SMauro Carvalho Chehabin a System-on-Chip image processing pipeline), DMA channels or physical 25ff768f59SMauro Carvalho Chehabconnectors. 26ff768f59SMauro Carvalho Chehab 27ff768f59SMauro Carvalho ChehabA pad is a connection endpoint through which an entity can interact with 28ff768f59SMauro Carvalho Chehabother entities. Data (not restricted to video) produced by an entity 29ff768f59SMauro Carvalho Chehabflows from the entity's output to one or more entity inputs. Pads should 30ff768f59SMauro Carvalho Chehabnot be confused with physical pins at chip boundaries. 31ff768f59SMauro Carvalho Chehab 32ff768f59SMauro Carvalho ChehabA link is a point-to-point oriented connection between two pads, either 33ff768f59SMauro Carvalho Chehabon the same entity or on different entities. Data flows from a source 34ff768f59SMauro Carvalho Chehabpad to a sink pad. 35ff768f59SMauro Carvalho Chehab 36ff768f59SMauro Carvalho ChehabMedia device 37ff768f59SMauro Carvalho Chehab^^^^^^^^^^^^ 38ff768f59SMauro Carvalho Chehab 399303c9d5SMauro Carvalho ChehabA media device is represented by a struct media_device 40ff768f59SMauro Carvalho Chehabinstance, defined in ``include/media/media-device.h``. 41ff768f59SMauro Carvalho ChehabAllocation of the structure is handled by the media device driver, usually by 42ff768f59SMauro Carvalho Chehabembedding the :c:type:`media_device` instance in a larger driver-specific 43ff768f59SMauro Carvalho Chehabstructure. 44ff768f59SMauro Carvalho Chehab 451d1d8669SSakari AilusDrivers initialise media device instances by calling 461d1d8669SSakari Ailus:c:func:`media_device_init()`. After initialising a media device instance, it is 471d1d8669SSakari Ailusregistered by calling :c:func:`__media_device_register()` via the macro 481d1d8669SSakari Ailus``media_device_register()`` and unregistered by calling 491d1d8669SSakari Ailus:c:func:`media_device_unregister()`. An initialised media device must be 501d1d8669SSakari Ailuseventually cleaned up by calling :c:func:`media_device_cleanup()`. 511d1d8669SSakari Ailus 521d1d8669SSakari AilusNote that it is not allowed to unregister a media device instance that was not 531d1d8669SSakari Ailuspreviously registered, or clean up a media device instance that was not 541d1d8669SSakari Ailuspreviously initialised. 55ff768f59SMauro Carvalho Chehab 56ff768f59SMauro Carvalho ChehabEntities 57ff768f59SMauro Carvalho Chehab^^^^^^^^ 58ff768f59SMauro Carvalho Chehab 599303c9d5SMauro Carvalho ChehabEntities are represented by a struct media_entity 60ff768f59SMauro Carvalho Chehabinstance, defined in ``include/media/media-entity.h``. The structure is usually 61ff768f59SMauro Carvalho Chehabembedded into a higher-level structure, such as 62ff768f59SMauro Carvalho Chehab:c:type:`v4l2_subdev` or :c:type:`video_device` 63ff768f59SMauro Carvalho Chehabinstances, although drivers can allocate entities directly. 64ff768f59SMauro Carvalho Chehab 65ff768f59SMauro Carvalho ChehabDrivers initialize entity pads by calling 66ff768f59SMauro Carvalho Chehab:c:func:`media_entity_pads_init()`. 67ff768f59SMauro Carvalho Chehab 68ff768f59SMauro Carvalho ChehabDrivers register entities with a media device by calling 69ff768f59SMauro Carvalho Chehab:c:func:`media_device_register_entity()` 70ff768f59SMauro Carvalho Chehaband unregistered by calling 71ff768f59SMauro Carvalho Chehab:c:func:`media_device_unregister_entity()`. 72ff768f59SMauro Carvalho Chehab 73ff768f59SMauro Carvalho ChehabInterfaces 74ff768f59SMauro Carvalho Chehab^^^^^^^^^^ 75ff768f59SMauro Carvalho Chehab 76ff768f59SMauro Carvalho ChehabInterfaces are represented by a 779303c9d5SMauro Carvalho Chehabstruct media_interface instance, defined in 78ff768f59SMauro Carvalho Chehab``include/media/media-entity.h``. Currently, only one type of interface is 79ff768f59SMauro Carvalho Chehabdefined: a device node. Such interfaces are represented by a 809303c9d5SMauro Carvalho Chehabstruct media_intf_devnode. 81ff768f59SMauro Carvalho Chehab 82ff768f59SMauro Carvalho ChehabDrivers initialize and create device node interfaces by calling 83ff768f59SMauro Carvalho Chehab:c:func:`media_devnode_create()` 84ff768f59SMauro Carvalho Chehaband remove them by calling: 85ff768f59SMauro Carvalho Chehab:c:func:`media_devnode_remove()`. 86ff768f59SMauro Carvalho Chehab 87ff768f59SMauro Carvalho ChehabPads 88ff768f59SMauro Carvalho Chehab^^^^ 899303c9d5SMauro Carvalho ChehabPads are represented by a struct media_pad instance, 90ff768f59SMauro Carvalho Chehabdefined in ``include/media/media-entity.h``. Each entity stores its pads in 91ff768f59SMauro Carvalho Chehaba pads array managed by the entity driver. Drivers usually embed the array in 92ff768f59SMauro Carvalho Chehaba driver-specific structure. 93ff768f59SMauro Carvalho Chehab 94ff768f59SMauro Carvalho ChehabPads are identified by their entity and their 0-based index in the pads 95ff768f59SMauro Carvalho Chehabarray. 96ff768f59SMauro Carvalho Chehab 979303c9d5SMauro Carvalho ChehabBoth information are stored in the struct media_pad, 989303c9d5SMauro Carvalho Chehabmaking the struct media_pad pointer the canonical way 99ff768f59SMauro Carvalho Chehabto store and pass link references. 100ff768f59SMauro Carvalho Chehab 101ff768f59SMauro Carvalho ChehabPads have flags that describe the pad capabilities and state. 102ff768f59SMauro Carvalho Chehab 103ff768f59SMauro Carvalho Chehab``MEDIA_PAD_FL_SINK`` indicates that the pad supports sinking data. 104ff768f59SMauro Carvalho Chehab``MEDIA_PAD_FL_SOURCE`` indicates that the pad supports sourcing data. 105ff768f59SMauro Carvalho Chehab 106ff768f59SMauro Carvalho Chehab.. note:: 107ff768f59SMauro Carvalho Chehab 108ff768f59SMauro Carvalho Chehab One and only one of ``MEDIA_PAD_FL_SINK`` or ``MEDIA_PAD_FL_SOURCE`` must 109ff768f59SMauro Carvalho Chehab be set for each pad. 110ff768f59SMauro Carvalho Chehab 111ff768f59SMauro Carvalho ChehabLinks 112ff768f59SMauro Carvalho Chehab^^^^^ 113ff768f59SMauro Carvalho Chehab 1149303c9d5SMauro Carvalho ChehabLinks are represented by a struct media_link instance, 115ff768f59SMauro Carvalho Chehabdefined in ``include/media/media-entity.h``. There are two types of links: 116ff768f59SMauro Carvalho Chehab 117ff768f59SMauro Carvalho Chehab**1. pad to pad links**: 118ff768f59SMauro Carvalho Chehab 119ff768f59SMauro Carvalho ChehabAssociate two entities via their PADs. Each entity has a list that points 120ff768f59SMauro Carvalho Chehabto all links originating at or targeting any of its pads. 121ff768f59SMauro Carvalho ChehabA given link is thus stored twice, once in the source entity and once in 122ff768f59SMauro Carvalho Chehabthe target entity. 123ff768f59SMauro Carvalho Chehab 124ff768f59SMauro Carvalho ChehabDrivers create pad to pad links by calling: 125ff768f59SMauro Carvalho Chehab:c:func:`media_create_pad_link()` and remove with 126ff768f59SMauro Carvalho Chehab:c:func:`media_entity_remove_links()`. 127ff768f59SMauro Carvalho Chehab 128ff768f59SMauro Carvalho Chehab**2. interface to entity links**: 129ff768f59SMauro Carvalho Chehab 130ff768f59SMauro Carvalho ChehabAssociate one interface to a Link. 131ff768f59SMauro Carvalho Chehab 132ff768f59SMauro Carvalho ChehabDrivers create interface to entity links by calling: 133ff768f59SMauro Carvalho Chehab:c:func:`media_create_intf_link()` and remove with 134ff768f59SMauro Carvalho Chehab:c:func:`media_remove_intf_links()`. 135ff768f59SMauro Carvalho Chehab 136ff768f59SMauro Carvalho Chehab.. note:: 137ff768f59SMauro Carvalho Chehab 138ff768f59SMauro Carvalho Chehab Links can only be created after having both ends already created. 139ff768f59SMauro Carvalho Chehab 140ff768f59SMauro Carvalho ChehabLinks have flags that describe the link capabilities and state. The 141ff768f59SMauro Carvalho Chehabvalid values are described at :c:func:`media_create_pad_link()` and 142ff768f59SMauro Carvalho Chehab:c:func:`media_create_intf_link()`. 143ff768f59SMauro Carvalho Chehab 144ff768f59SMauro Carvalho ChehabGraph traversal 145ff768f59SMauro Carvalho Chehab^^^^^^^^^^^^^^^ 146ff768f59SMauro Carvalho Chehab 147ff768f59SMauro Carvalho ChehabThe media framework provides APIs to iterate over entities in a graph. 148ff768f59SMauro Carvalho Chehab 149ff768f59SMauro Carvalho ChehabTo iterate over all entities belonging to a media device, drivers can use 150ff768f59SMauro Carvalho Chehabthe media_device_for_each_entity macro, defined in 151ff768f59SMauro Carvalho Chehab``include/media/media-device.h``. 152ff768f59SMauro Carvalho Chehab 153ff768f59SMauro Carvalho Chehab.. code-block:: c 154ff768f59SMauro Carvalho Chehab 155ff768f59SMauro Carvalho Chehab struct media_entity *entity; 156ff768f59SMauro Carvalho Chehab 157ff768f59SMauro Carvalho Chehab media_device_for_each_entity(entity, mdev) { 158ff768f59SMauro Carvalho Chehab // entity will point to each entity in turn 159ff768f59SMauro Carvalho Chehab ... 160ff768f59SMauro Carvalho Chehab } 161ff768f59SMauro Carvalho Chehab 162ff768f59SMauro Carvalho ChehabDrivers might also need to iterate over all entities in a graph that can be 163ff768f59SMauro Carvalho Chehabreached only through enabled links starting at a given entity. The media 164ff768f59SMauro Carvalho Chehabframework provides a depth-first graph traversal API for that purpose. 165ff768f59SMauro Carvalho Chehab 166ff768f59SMauro Carvalho Chehab.. note:: 167ff768f59SMauro Carvalho Chehab 168ff768f59SMauro Carvalho Chehab Graphs with cycles (whether directed or undirected) are **NOT** 169ff768f59SMauro Carvalho Chehab supported by the graph traversal API. To prevent infinite loops, the graph 170ff768f59SMauro Carvalho Chehab traversal code limits the maximum depth to ``MEDIA_ENTITY_ENUM_MAX_DEPTH``, 171ff768f59SMauro Carvalho Chehab currently defined as 16. 172ff768f59SMauro Carvalho Chehab 173ff768f59SMauro Carvalho ChehabDrivers initiate a graph traversal by calling 174ff768f59SMauro Carvalho Chehab:c:func:`media_graph_walk_start()` 175ff768f59SMauro Carvalho Chehab 176ff768f59SMauro Carvalho ChehabThe graph structure, provided by the caller, is initialized to start graph 177ff768f59SMauro Carvalho Chehabtraversal at the given entity. 178ff768f59SMauro Carvalho Chehab 179ff768f59SMauro Carvalho ChehabDrivers can then retrieve the next entity by calling 180ff768f59SMauro Carvalho Chehab:c:func:`media_graph_walk_next()` 181ff768f59SMauro Carvalho Chehab 182ff768f59SMauro Carvalho ChehabWhen the graph traversal is complete the function will return ``NULL``. 183ff768f59SMauro Carvalho Chehab 184ff768f59SMauro Carvalho ChehabGraph traversal can be interrupted at any moment. No cleanup function call 185ff768f59SMauro Carvalho Chehabis required and the graph structure can be freed normally. 186ff768f59SMauro Carvalho Chehab 187ff768f59SMauro Carvalho ChehabHelper functions can be used to find a link between two given pads, or a pad 188ff768f59SMauro Carvalho Chehabconnected to another pad through an enabled link 189bb85604bSLaurent Pinchart(:c:func:`media_entity_find_link()`, :c:func:`media_pad_remote_pad_first()`, 19003b28286SLaurent Pinchart:c:func:`media_entity_remote_source_pad_unique()` and 19103b28286SLaurent Pinchart:c:func:`media_pad_remote_pad_unique()`). 192ff768f59SMauro Carvalho Chehab 193ff768f59SMauro Carvalho ChehabUse count and power handling 194ff768f59SMauro Carvalho Chehab^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 195ff768f59SMauro Carvalho Chehab 196ff768f59SMauro Carvalho ChehabDue to the wide differences between drivers regarding power management 197ff768f59SMauro Carvalho Chehabneeds, the media controller does not implement power management. However, 1989303c9d5SMauro Carvalho Chehabthe struct media_entity includes a ``use_count`` 199ff768f59SMauro Carvalho Chehabfield that media drivers 200ff768f59SMauro Carvalho Chehabcan use to track the number of users of every entity for power management 201ff768f59SMauro Carvalho Chehabneeds. 202ff768f59SMauro Carvalho Chehab 203ff768f59SMauro Carvalho ChehabThe :c:type:`media_entity<media_entity>`.\ ``use_count`` field is owned by 204ff768f59SMauro Carvalho Chehabmedia drivers and must not be 205ff768f59SMauro Carvalho Chehabtouched by entity drivers. Access to the field must be protected by the 206ff768f59SMauro Carvalho Chehab:c:type:`media_device`.\ ``graph_mutex`` lock. 207ff768f59SMauro Carvalho Chehab 208ff768f59SMauro Carvalho ChehabLinks setup 209ff768f59SMauro Carvalho Chehab^^^^^^^^^^^ 210ff768f59SMauro Carvalho Chehab 211ff768f59SMauro Carvalho ChehabLink properties can be modified at runtime by calling 212ff768f59SMauro Carvalho Chehab:c:func:`media_entity_setup_link()`. 213ff768f59SMauro Carvalho Chehab 214ff768f59SMauro Carvalho ChehabPipelines and media streams 215ff768f59SMauro Carvalho Chehab^^^^^^^^^^^^^^^^^^^^^^^^^^^ 216ff768f59SMauro Carvalho Chehab 217b558ce56STomi ValkeinenA media stream is a stream of pixels or metadata originating from one or more 218b558ce56STomi Valkeinensource devices (such as a sensors) and flowing through media entity pads 219b558ce56STomi Valkeinentowards the final sinks. The stream can be modified on the route by the 220b558ce56STomi Valkeinendevices (e.g. scaling or pixel format conversions), or it can be split into 221b558ce56STomi Valkeinenmultiple branches, or multiple branches can be merged. 222b558ce56STomi Valkeinen 223b558ce56STomi ValkeinenA media pipeline is a set of media streams which are interdependent. This 224b558ce56STomi Valkeineninterdependency can be caused by the hardware (e.g. configuration of a second 225b558ce56STomi Valkeinenstream cannot be changed if the first stream has been enabled) or by the driver 226b558ce56STomi Valkeinendue to the software design. Most commonly a media pipeline consists of a single 227b558ce56STomi Valkeinenstream which does not branch. 228b558ce56STomi Valkeinen 229ff768f59SMauro Carvalho ChehabWhen starting streaming, drivers must notify all entities in the pipeline to 230ff768f59SMauro Carvalho Chehabprevent link states from being modified during streaming by calling 231ff768f59SMauro Carvalho Chehab:c:func:`media_pipeline_start()`. 232ff768f59SMauro Carvalho Chehab 233ae219872SLaurent PinchartThe function will mark all the pads which are part of the pipeline as streaming. 234ff768f59SMauro Carvalho Chehab 235*b5163545SLaurent PinchartThe struct media_pipeline instance pointed to by the pipe argument will be 236*b5163545SLaurent Pinchartstored in every pad in the pipeline. Drivers should embed the struct 237*b5163545SLaurent Pinchartmedia_pipeline in higher-level pipeline structures and can then access the 238*b5163545SLaurent Pinchartpipeline through the struct media_pad pipe field. 239ff768f59SMauro Carvalho Chehab 240ff768f59SMauro Carvalho ChehabCalls to :c:func:`media_pipeline_start()` can be nested. 241ff768f59SMauro Carvalho ChehabThe pipeline pointer must be identical for all nested calls to the function. 242ff768f59SMauro Carvalho Chehab 243ff768f59SMauro Carvalho Chehab:c:func:`media_pipeline_start()` may return an error. In that case, 244ff768f59SMauro Carvalho Chehabit will clean up any of the changes it did by itself. 245ff768f59SMauro Carvalho Chehab 246ff768f59SMauro Carvalho ChehabWhen stopping the stream, drivers must notify the entities with 247ff768f59SMauro Carvalho Chehab:c:func:`media_pipeline_stop()`. 248ff768f59SMauro Carvalho Chehab 249ff768f59SMauro Carvalho ChehabIf multiple calls to :c:func:`media_pipeline_start()` have been 250ff768f59SMauro Carvalho Chehabmade the same number of :c:func:`media_pipeline_stop()` calls 251ff768f59SMauro Carvalho Chehabare required to stop streaming. 252ff768f59SMauro Carvalho ChehabThe :c:type:`media_entity`.\ ``pipe`` field is reset to ``NULL`` on the last 253ff768f59SMauro Carvalho Chehabnested stop call. 254ff768f59SMauro Carvalho Chehab 255ff768f59SMauro Carvalho ChehabLink configuration will fail with ``-EBUSY`` by default if either end of the 256ff768f59SMauro Carvalho Chehablink is a streaming entity. Links that can be modified while streaming must 257ff768f59SMauro Carvalho Chehabbe marked with the ``MEDIA_LNK_FL_DYNAMIC`` flag. 258ff768f59SMauro Carvalho Chehab 259ff768f59SMauro Carvalho ChehabIf other operations need to be disallowed on streaming entities (such as 260ff768f59SMauro Carvalho Chehabchanging entities configuration parameters) drivers can explicitly check the 261ff768f59SMauro Carvalho Chehabmedia_entity stream_count field to find out if an entity is streaming. This 262ff768f59SMauro Carvalho Chehaboperation must be done with the media_device graph_mutex held. 263ff768f59SMauro Carvalho Chehab 264ff768f59SMauro Carvalho ChehabLink validation 265ff768f59SMauro Carvalho Chehab^^^^^^^^^^^^^^^ 266ff768f59SMauro Carvalho Chehab 267ff768f59SMauro Carvalho ChehabLink validation is performed by :c:func:`media_pipeline_start()` 268ff768f59SMauro Carvalho Chehabfor any entity which has sink pads in the pipeline. The 269ff768f59SMauro Carvalho Chehab:c:type:`media_entity`.\ ``link_validate()`` callback is used for that 270ff768f59SMauro Carvalho Chehabpurpose. In ``link_validate()`` callback, entity driver should check 271ff768f59SMauro Carvalho Chehabthat the properties of the source pad of the connected entity and its own 272ff768f59SMauro Carvalho Chehabsink pad match. It is up to the type of the entity (and in the end, the 273ff768f59SMauro Carvalho Chehabproperties of the hardware) what matching actually means. 274ff768f59SMauro Carvalho Chehab 275ff768f59SMauro Carvalho ChehabSubsystems should facilitate link validation by providing subsystem specific 276ff768f59SMauro Carvalho Chehabhelper functions to provide easy access for commonly needed information, and 277ff768f59SMauro Carvalho Chehabin the end provide a way to use driver-specific callbacks. 278ff768f59SMauro Carvalho Chehab 279ff768f59SMauro Carvalho ChehabMedia Controller Device Allocator API 280ff768f59SMauro Carvalho Chehab^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 281ff768f59SMauro Carvalho Chehab 282ff768f59SMauro Carvalho ChehabWhen the media device belongs to more than one driver, the shared media 283ff768f59SMauro Carvalho Chehabdevice is allocated with the shared struct device as the key for look ups. 284ff768f59SMauro Carvalho Chehab 285ff768f59SMauro Carvalho ChehabThe shared media device should stay in registered state until the last 286ff768f59SMauro Carvalho Chehabdriver unregisters it. In addition, the media device should be released when 287ff768f59SMauro Carvalho Chehaball the references are released. Each driver gets a reference to the media 288ff768f59SMauro Carvalho Chehabdevice during probe, when it allocates the media device. If media device is 289ff768f59SMauro Carvalho Chehabalready allocated, the allocate API bumps up the refcount and returns the 290ff768f59SMauro Carvalho Chehabexisting media device. The driver puts the reference back in its disconnect 291ff768f59SMauro Carvalho Chehabroutine when it calls :c:func:`media_device_delete()`. 292ff768f59SMauro Carvalho Chehab 293ff768f59SMauro Carvalho ChehabThe media device is unregistered and cleaned up from the kref put handler to 294ff768f59SMauro Carvalho Chehabensure that the media device stays in registered state until the last driver 295ff768f59SMauro Carvalho Chehabunregisters the media device. 296ff768f59SMauro Carvalho Chehab 297ff768f59SMauro Carvalho Chehab**Driver Usage** 298ff768f59SMauro Carvalho Chehab 299ff768f59SMauro Carvalho ChehabDrivers should use the appropriate media-core routines to manage the shared 300ff768f59SMauro Carvalho Chehabmedia device life-time handling the two states: 301ff768f59SMauro Carvalho Chehab1. allocate -> register -> delete 302ff768f59SMauro Carvalho Chehab2. get reference to already registered device -> delete 303ff768f59SMauro Carvalho Chehab 304ff768f59SMauro Carvalho Chehabcall :c:func:`media_device_delete()` routine to make sure the shared media 305ff768f59SMauro Carvalho Chehabdevice delete is handled correctly. 306ff768f59SMauro Carvalho Chehab 307ff768f59SMauro Carvalho Chehab**driver probe:** 308ff768f59SMauro Carvalho ChehabCall :c:func:`media_device_usb_allocate()` to allocate or get a reference 309ff768f59SMauro Carvalho ChehabCall :c:func:`media_device_register()`, if media devnode isn't registered 310ff768f59SMauro Carvalho Chehab 311ff768f59SMauro Carvalho Chehab**driver disconnect:** 312ff768f59SMauro Carvalho ChehabCall :c:func:`media_device_delete()` to free the media_device. Freeing is 313ff768f59SMauro Carvalho Chehabhandled by the kref put handler. 314ff768f59SMauro Carvalho Chehab 315ff768f59SMauro Carvalho ChehabAPI Definitions 316ff768f59SMauro Carvalho Chehab^^^^^^^^^^^^^^^ 317ff768f59SMauro Carvalho Chehab 318ff768f59SMauro Carvalho Chehab.. kernel-doc:: include/media/media-device.h 319ff768f59SMauro Carvalho Chehab 320ff768f59SMauro Carvalho Chehab.. kernel-doc:: include/media/media-devnode.h 321ff768f59SMauro Carvalho Chehab 322ff768f59SMauro Carvalho Chehab.. kernel-doc:: include/media/media-entity.h 323ff768f59SMauro Carvalho Chehab 324ff768f59SMauro Carvalho Chehab.. kernel-doc:: include/media/media-request.h 325ff768f59SMauro Carvalho Chehab 326ff768f59SMauro Carvalho Chehab.. kernel-doc:: include/media/media-dev-allocator.h 327