| Linux kernel media framework |
| ============================ |
| |
| This document describes the Linux kernel media framework, its data structures, |
| functions and their usage. |
| |
| |
| Introduction |
| ------------ |
| |
| The media controller API is documented in DocBook format in |
| Documentation/DocBook/v4l/media-controller.xml. This document will focus on |
| the kernel-side implementation of the media framework. |
| |
| |
| Media device |
| ------------ |
| |
| A media device is represented by a struct media_device instance, defined in |
| include/media/media-device.h. Allocation of the structure is handled by the |
| media device driver, usually by embedding the media_device instance in a |
| larger driver-specific structure. |
| |
| Drivers register media device instances by calling |
| |
| media_device_register(struct media_device *mdev); |
| |
| The caller is responsible for initializing the media_device structure before |
| registration. The following fields must be set: |
| |
| - dev must point to the parent device (usually a pci_dev, usb_interface or |
| platform_device instance). |
| |
| - model must be filled with the device model name as a NUL-terminated UTF-8 |
| string. The device/model revision must not be stored in this field. |
| |
| The following fields are optional: |
| |
| - serial is a unique serial number stored as a NUL-terminated ASCII string. |
| The field is big enough to store a GUID in text form. If the hardware |
| doesn't provide a unique serial number this field must be left empty. |
| |
| - bus_info represents the location of the device in the system as a |
| NUL-terminated ASCII string. For PCI/PCIe devices bus_info must be set to |
| "PCI:" (or "PCIe:") followed by the value of pci_name(). For USB devices, |
| the usb_make_path() function must be used. This field is used by |
| applications to distinguish between otherwise identical devices that don't |
| provide a serial number. |
| |
| - hw_revision is the hardware device revision in a driver-specific format. |
| When possible the revision should be formatted with the KERNEL_VERSION |
| macro. |
| |
| - driver_version is formatted with the KERNEL_VERSION macro. The version |
| minor must be incremented when new features are added to the userspace API |
| without breaking binary compatibility. The version major must be |
| incremented when binary compatibility is broken. |
| |
| Upon successful registration a character device named media[0-9]+ is created. |
| The device major and minor numbers are dynamic. The model name is exported as |
| a sysfs attribute. |
| |
| Drivers unregister media device instances by calling |
| |
| media_device_unregister(struct media_device *mdev); |
| |
| Unregistering a media device that hasn't been registered is *NOT* safe. |