blob: 1844c3f10728c4c128cbdf00dcc99ee61f6352af (plain
Linux kernel media framework
This document describes the Linux kernel media framework, its data structures,
functions and their usage.
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.
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
- 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
- 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.