aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2009-12-09 06:39:58 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2011-03-22 03:53:09 -0400
commit176fb0d108f7495ccf9aa127e1342a1a0d87e004 (patch)
treea1b54ad186dde663853d4d2d24f42cd7c0f94bfb /Documentation
parentcf4b9211b5680cd9ca004232e517fb7ec5bf5316 (diff)
[media] media: Media device
The media_device structure abstracts functions common to all kind of media devices (v4l2, dvb, alsa, ...). It manages media entities and offers a userspace API to discover and configure the media device internal topology. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Acked-by: Hans Verkuil <hverkuil@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'Documentation')
-rw-r--r--Documentation/ABI/testing/sysfs-bus-media6
-rw-r--r--Documentation/DocBook/media-entities.tmpl2
-rw-r--r--Documentation/DocBook/media.tmpl3
-rw-r--r--Documentation/DocBook/v4l/media-controller.xml56
-rw-r--r--Documentation/media-framework.txt67
5 files changed, 134 insertions, 0 deletions
diff --git a/Documentation/ABI/testing/sysfs-bus-media b/Documentation/ABI/testing/sysfs-bus-media
new file mode 100644
index 000000000000..7057e574154a
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-bus-media
@@ -0,0 +1,6 @@
1What: /sys/bus/media/devices/.../model
2Date: January 2011
3Contact: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
4 linux-media@vger.kernel.org
5Description: Contains the device model name in UTF-8. The device version is
6 is not be appended to the model name.
diff --git a/Documentation/DocBook/media-entities.tmpl b/Documentation/DocBook/media-entities.tmpl
index d2f99e5a3a2f..c47897f046b1 100644
--- a/Documentation/DocBook/media-entities.tmpl
+++ b/Documentation/DocBook/media-entities.tmpl
@@ -327,6 +327,8 @@
327<!ENTITY sub-media-entities SYSTEM "media-entities.tmpl"> 327<!ENTITY sub-media-entities SYSTEM "media-entities.tmpl">
328<!ENTITY sub-media-indices SYSTEM "media-indices.tmpl"> 328<!ENTITY sub-media-indices SYSTEM "media-indices.tmpl">
329 329
330<!ENTITY sub-media-controller SYSTEM "v4l/media-controller.xml">
331
330<!-- Function Reference --> 332<!-- Function Reference -->
331<!ENTITY close SYSTEM "v4l/func-close.xml"> 333<!ENTITY close SYSTEM "v4l/func-close.xml">
332<!ENTITY ioctl SYSTEM "v4l/func-ioctl.xml"> 334<!ENTITY ioctl SYSTEM "v4l/func-ioctl.xml">
diff --git a/Documentation/DocBook/media.tmpl b/Documentation/DocBook/media.tmpl
index a99088aae1aa..88f2cc680cc2 100644
--- a/Documentation/DocBook/media.tmpl
+++ b/Documentation/DocBook/media.tmpl
@@ -106,6 +106,9 @@ Foundation. A copy of the license is included in the chapter entitled
106&sub-remote_controllers; 106&sub-remote_controllers;
107</chapter> 107</chapter>
108</part> 108</part>
109<part id="media_common">
110&sub-media-controller;
111</part>
109 112
110&sub-fdl-appendix; 113&sub-fdl-appendix;
111 114
diff --git a/Documentation/DocBook/v4l/media-controller.xml b/Documentation/DocBook/v4l/media-controller.xml
new file mode 100644
index 000000000000..253ddb4426c9
--- /dev/null
+++ b/Documentation/DocBook/v4l/media-controller.xml
@@ -0,0 +1,56 @@
1<partinfo>
2 <authorgroup>
3 <author>
4 <firstname>Laurent</firstname>
5 <surname>Pinchart</surname>
6 <affiliation><address><email>laurent.pinchart@ideasonboard.com</email></address></affiliation>
7 <contrib>Initial version.</contrib>
8 </author>
9 </authorgroup>
10 <copyright>
11 <year>2010</year>
12 <holder>Laurent Pinchart</holder>
13 </copyright>
14
15 <revhistory>
16 <!-- Put document revisions here, newest first. -->
17 <revision>
18 <revnumber>1.0.0</revnumber>
19 <date>2010-11-10</date>
20 <authorinitials>lp</authorinitials>
21 <revremark>Initial revision</revremark>
22 </revision>
23 </revhistory>
24</partinfo>
25
26<title>Media Controller API</title>
27
28<chapter id="media_controller">
29 <title>Media Controller</title>
30
31 <section id="media-controller-intro">
32 <title>Introduction</title>
33 <para>Media devices increasingly handle multiple related functions. Many USB
34 cameras include microphones, video capture hardware can also output video,
35 or SoC camera interfaces also perform memory-to-memory operations similar to
36 video codecs.</para>
37 <para>Independent functions, even when implemented in the same hardware, can
38 be modelled as separate devices. A USB camera with a microphone will be
39 presented to userspace applications as V4L2 and ALSA capture devices. The
40 devices' relationships (when using a webcam, end-users shouldn't have to
41 manually select the associated USB microphone), while not made available
42 directly to applications by the drivers, can usually be retrieved from
43 sysfs.</para>
44 <para>With more and more advanced SoC devices being introduced, the current
45 approach will not scale. Device topologies are getting increasingly complex
46 and can't always be represented by a tree structure. Hardware blocks are
47 shared between different functions, creating dependencies between seemingly
48 unrelated devices.</para>
49 <para>Kernel abstraction APIs such as V4L2 and ALSA provide means for
50 applications to access hardware parameters. As newer hardware expose an
51 increasingly high number of those parameters, drivers need to guess what
52 applications really require based on limited information, thereby
53 implementing policies that belong to userspace.</para>
54 <para>The media controller API aims at solving those problems.</para>
55 </section>
56</chapter>
diff --git a/Documentation/media-framework.txt b/Documentation/media-framework.txt
new file mode 100644
index 000000000000..1844c3f10728
--- /dev/null
+++ b/Documentation/media-framework.txt
@@ -0,0 +1,67 @@
1Linux kernel media framework
2============================
3
4This document describes the Linux kernel media framework, its data structures,
5functions and their usage.
6
7
8Introduction
9------------
10
11The media controller API is documented in DocBook format in
12Documentation/DocBook/v4l/media-controller.xml. This document will focus on
13the kernel-side implementation of the media framework.
14
15
16Media device
17------------
18
19A media device is represented by a struct media_device instance, defined in
20include/media/media-device.h. Allocation of the structure is handled by the
21media device driver, usually by embedding the media_device instance in a
22larger driver-specific structure.
23
24Drivers register media device instances by calling
25
26 media_device_register(struct media_device *mdev);
27
28The caller is responsible for initializing the media_device structure before
29registration. The following fields must be set:
30
31 - dev must point to the parent device (usually a pci_dev, usb_interface or
32 platform_device instance).
33
34 - model must be filled with the device model name as a NUL-terminated UTF-8
35 string. The device/model revision must not be stored in this field.
36
37The following fields are optional:
38
39 - serial is a unique serial number stored as a NUL-terminated ASCII string.
40 The field is big enough to store a GUID in text form. If the hardware
41 doesn't provide a unique serial number this field must be left empty.
42
43 - bus_info represents the location of the device in the system as a
44 NUL-terminated ASCII string. For PCI/PCIe devices bus_info must be set to
45 "PCI:" (or "PCIe:") followed by the value of pci_name(). For USB devices,
46 the usb_make_path() function must be used. This field is used by
47 applications to distinguish between otherwise identical devices that don't
48 provide a serial number.
49
50 - hw_revision is the hardware device revision in a driver-specific format.
51 When possible the revision should be formatted with the KERNEL_VERSION
52 macro.
53
54 - driver_version is formatted with the KERNEL_VERSION macro. The version
55 minor must be incremented when new features are added to the userspace API
56 without breaking binary compatibility. The version major must be
57 incremented when binary compatibility is broken.
58
59Upon successful registration a character device named media[0-9]+ is created.
60The device major and minor numbers are dynamic. The model name is exported as
61a sysfs attribute.
62
63Drivers unregister media device instances by calling
64
65 media_device_unregister(struct media_device *mdev);
66
67Unregistering a media device that hasn't been registered is *NOT* safe.