Merge branch 'master' into for-next
Fast-forwarded to current state of Linus' tree as there are patches to be applied for files that didn't exist on the old branch.
This commit is contained in:
commit
07f9479a40
4
.mailmap
4
.mailmap
@ -20,6 +20,7 @@ Andreas Herrmann <aherrman@de.ibm.com>
|
|||||||
Andrew Morton <akpm@osdl.org>
|
Andrew Morton <akpm@osdl.org>
|
||||||
Andrew Vasquez <andrew.vasquez@qlogic.com>
|
Andrew Vasquez <andrew.vasquez@qlogic.com>
|
||||||
Andy Adamson <andros@citi.umich.edu>
|
Andy Adamson <andros@citi.umich.edu>
|
||||||
|
Archit Taneja <archit@ti.com>
|
||||||
Arnaud Patard <arnaud.patard@rtp-net.org>
|
Arnaud Patard <arnaud.patard@rtp-net.org>
|
||||||
Arnd Bergmann <arnd@arndb.de>
|
Arnd Bergmann <arnd@arndb.de>
|
||||||
Axel Dyks <xl@xlsigned.net>
|
Axel Dyks <xl@xlsigned.net>
|
||||||
@ -70,6 +71,7 @@ Leonid I Ananiev <leonid.i.ananiev@intel.com>
|
|||||||
Linas Vepstas <linas@austin.ibm.com>
|
Linas Vepstas <linas@austin.ibm.com>
|
||||||
Mark Brown <broonie@sirena.org.uk>
|
Mark Brown <broonie@sirena.org.uk>
|
||||||
Matthieu CASTET <castet.matthieu@free.fr>
|
Matthieu CASTET <castet.matthieu@free.fr>
|
||||||
|
Mayuresh Janorkar <mayur@ti.com>
|
||||||
Michael Buesch <mb@bu3sch.de>
|
Michael Buesch <mb@bu3sch.de>
|
||||||
Michael Buesch <mbuesch@freenet.de>
|
Michael Buesch <mbuesch@freenet.de>
|
||||||
Michel Dänzer <michel@tungstengraphics.com>
|
Michel Dänzer <michel@tungstengraphics.com>
|
||||||
@ -78,6 +80,7 @@ Morten Welinder <terra@gnome.org>
|
|||||||
Morten Welinder <welinder@anemone.rentec.com>
|
Morten Welinder <welinder@anemone.rentec.com>
|
||||||
Morten Welinder <welinder@darter.rentec.com>
|
Morten Welinder <welinder@darter.rentec.com>
|
||||||
Morten Welinder <welinder@troll.com>
|
Morten Welinder <welinder@troll.com>
|
||||||
|
Mythri P K <mythripk@ti.com>
|
||||||
Nguyen Anh Quynh <aquynh@gmail.com>
|
Nguyen Anh Quynh <aquynh@gmail.com>
|
||||||
Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
|
Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
|
||||||
Patrick Mochel <mochel@digitalimplant.org>
|
Patrick Mochel <mochel@digitalimplant.org>
|
||||||
@ -98,6 +101,7 @@ S.Çağlar Onur <caglar@pardus.org.tr>
|
|||||||
Simon Kelley <simon@thekelleys.org.uk>
|
Simon Kelley <simon@thekelleys.org.uk>
|
||||||
Stéphane Witzmann <stephane.witzmann@ubpmes.univ-bpclermont.fr>
|
Stéphane Witzmann <stephane.witzmann@ubpmes.univ-bpclermont.fr>
|
||||||
Stephen Hemminger <shemminger@osdl.org>
|
Stephen Hemminger <shemminger@osdl.org>
|
||||||
|
Sumit Semwal <sumit.semwal@ti.com>
|
||||||
Tejun Heo <htejun@gmail.com>
|
Tejun Heo <htejun@gmail.com>
|
||||||
Thomas Graf <tgraf@suug.ch>
|
Thomas Graf <tgraf@suug.ch>
|
||||||
Tony Luck <tony.luck@intel.com>
|
Tony Luck <tony.luck@intel.com>
|
||||||
|
6
CREDITS
6
CREDITS
@ -1677,7 +1677,7 @@ W: http://www.codemonkey.org.uk
|
|||||||
D: Assorted VIA x86 support.
|
D: Assorted VIA x86 support.
|
||||||
D: 2.5 AGPGART overhaul.
|
D: 2.5 AGPGART overhaul.
|
||||||
D: CPUFREQ maintenance.
|
D: CPUFREQ maintenance.
|
||||||
D: Fedora kernel maintainence.
|
D: Fedora kernel maintenance.
|
||||||
D: Misc/Other.
|
D: Misc/Other.
|
||||||
S: 314 Littleton Rd, Westford, MA 01886, USA
|
S: 314 Littleton Rd, Westford, MA 01886, USA
|
||||||
|
|
||||||
@ -3211,7 +3211,7 @@ N: James Simmons
|
|||||||
E: jsimmons@infradead.org
|
E: jsimmons@infradead.org
|
||||||
E: jsimmons@users.sf.net
|
E: jsimmons@users.sf.net
|
||||||
D: Frame buffer device maintainer
|
D: Frame buffer device maintainer
|
||||||
D: input layer developement
|
D: input layer development
|
||||||
D: tty/console layer
|
D: tty/console layer
|
||||||
D: various mipsel devices
|
D: various mipsel devices
|
||||||
S: 115 Carmel Avenue
|
S: 115 Carmel Avenue
|
||||||
@ -3290,7 +3290,7 @@ S: USA
|
|||||||
N: Manfred Spraul
|
N: Manfred Spraul
|
||||||
E: manfred@colorfullife.com
|
E: manfred@colorfullife.com
|
||||||
W: http://www.colorfullife.com/~manfred
|
W: http://www.colorfullife.com/~manfred
|
||||||
D: Lots of tiny hacks. Larger improvments to SysV IPC msg,
|
D: Lots of tiny hacks. Larger improvements to SysV IPC msg,
|
||||||
D: slab, pipe, select.
|
D: slab, pipe, select.
|
||||||
S: 71701 Schwieberdingen
|
S: 71701 Schwieberdingen
|
||||||
S: Germany
|
S: Germany
|
||||||
|
@ -206,8 +206,8 @@ laptops/
|
|||||||
- directory with laptop related info and laptop driver documentation.
|
- directory with laptop related info and laptop driver documentation.
|
||||||
ldm.txt
|
ldm.txt
|
||||||
- a brief description of LDM (Windows Dynamic Disks).
|
- a brief description of LDM (Windows Dynamic Disks).
|
||||||
leds-class.txt
|
leds/
|
||||||
- documents LED handling under Linux.
|
- directory with info about LED handling under Linux.
|
||||||
local_ops.txt
|
local_ops.txt
|
||||||
- semantics and behavior of local atomic operations.
|
- semantics and behavior of local atomic operations.
|
||||||
lockdep-design.txt
|
lockdep-design.txt
|
||||||
|
@ -34,3 +34,23 @@ Contact: Richard Purdie <rpurdie@rpsys.net>
|
|||||||
Description:
|
Description:
|
||||||
Maximum brightness for <backlight>.
|
Maximum brightness for <backlight>.
|
||||||
Users: HAL
|
Users: HAL
|
||||||
|
|
||||||
|
What: /sys/class/backlight/<backlight>/type
|
||||||
|
Date: September 2010
|
||||||
|
KernelVersion: 2.6.37
|
||||||
|
Contact: Matthew Garrett <mjg@redhat.com>
|
||||||
|
Description:
|
||||||
|
The type of interface controlled by <backlight>.
|
||||||
|
"firmware": The driver uses a standard firmware interface
|
||||||
|
"platform": The driver uses a platform-specific interface
|
||||||
|
"raw": The driver controls hardware registers directly
|
||||||
|
|
||||||
|
In the general case, when multiple backlight
|
||||||
|
interfaces are available for a single device, firmware
|
||||||
|
control should be preferred to platform control should
|
||||||
|
be preferred to raw control. Using a firmware
|
||||||
|
interface reduces the probability of confusion with
|
||||||
|
the hardware and the OS independently updating the
|
||||||
|
backlight state. Platform interfaces are mostly a
|
||||||
|
holdover from pre-standardisation of firmware
|
||||||
|
interfaces.
|
||||||
|
31
Documentation/ABI/testing/configfs-spear-pcie-gadget
Normal file
31
Documentation/ABI/testing/configfs-spear-pcie-gadget
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
What: /config/pcie-gadget
|
||||||
|
Date: Feb 2011
|
||||||
|
KernelVersion: 2.6.37
|
||||||
|
Contact: Pratyush Anand <pratyush.anand@st.com>
|
||||||
|
Description:
|
||||||
|
|
||||||
|
Interface is used to configure selected dual mode PCIe controller
|
||||||
|
as device and then program its various registers to configure it
|
||||||
|
as a particular device type.
|
||||||
|
This interfaces can be used to show spear's PCIe device capability.
|
||||||
|
|
||||||
|
Nodes are only visible when configfs is mounted. To mount configfs
|
||||||
|
in /config directory use:
|
||||||
|
# mount -t configfs none /config/
|
||||||
|
|
||||||
|
For nth PCIe Device Controller
|
||||||
|
/config/pcie-gadget.n/
|
||||||
|
link ... used to enable ltssm and read its status.
|
||||||
|
int_type ...used to configure and read type of supported
|
||||||
|
interrupt
|
||||||
|
no_of_msi ... used to configure number of MSI vector needed and
|
||||||
|
to read no of MSI granted.
|
||||||
|
inta ... write 1 to assert INTA and 0 to de-assert.
|
||||||
|
send_msi ... write MSI vector to be sent.
|
||||||
|
vendor_id ... used to write and read vendor id (hex)
|
||||||
|
device_id ... used to write and read device id (hex)
|
||||||
|
bar0_size ... used to write and read bar0_size
|
||||||
|
bar0_address ... used to write and read bar0 mapped area in hex.
|
||||||
|
bar0_rw_offset ... used to write and read offset of bar0 where
|
||||||
|
bar0_data will be written or read.
|
||||||
|
bar0_data ... used to write and read data at bar0_rw_offset.
|
@ -1,6 +1,6 @@
|
|||||||
Where: /dev/pstore/...
|
Where: /dev/pstore/...
|
||||||
Date: January 2011
|
Date: March 2011
|
||||||
Kernel Version: 2.6.38
|
Kernel Version: 2.6.39
|
||||||
Contact: tony.luck@intel.com
|
Contact: tony.luck@intel.com
|
||||||
Description: Generic interface to platform dependent persistent storage.
|
Description: Generic interface to platform dependent persistent storage.
|
||||||
|
|
||||||
@ -11,7 +11,7 @@ Description: Generic interface to platform dependent persistent storage.
|
|||||||
of the console log is captured, but other interesting
|
of the console log is captured, but other interesting
|
||||||
data can also be saved.
|
data can also be saved.
|
||||||
|
|
||||||
# mount -t pstore - /dev/pstore
|
# mount -t pstore -o kmsg_bytes=8000 - /dev/pstore
|
||||||
|
|
||||||
$ ls -l /dev/pstore
|
$ ls -l /dev/pstore
|
||||||
total 0
|
total 0
|
||||||
@ -33,3 +33,9 @@ Description: Generic interface to platform dependent persistent storage.
|
|||||||
will be saved elsewhere and erased from persistent store
|
will be saved elsewhere and erased from persistent store
|
||||||
soon after boot to free up space ready for the next
|
soon after boot to free up space ready for the next
|
||||||
catastrophe.
|
catastrophe.
|
||||||
|
|
||||||
|
The 'kmsg_bytes' mount option changes the target amount of
|
||||||
|
data saved on each oops/panic. Pstore saves (possibly
|
||||||
|
multiple) files based on the record size of the underlying
|
||||||
|
persistent storage until at least this amount is reached.
|
||||||
|
Default is 10 Kbytes.
|
||||||
|
@ -29,7 +29,7 @@ Contact: Cornelia Huck <cornelia.huck@de.ibm.com>
|
|||||||
linux-s390@vger.kernel.org
|
linux-s390@vger.kernel.org
|
||||||
Description: Contains the PIM/PAM/POM values, as reported by the
|
Description: Contains the PIM/PAM/POM values, as reported by the
|
||||||
channel subsystem when last queried by the common I/O
|
channel subsystem when last queried by the common I/O
|
||||||
layer (this implies that this attribute is not neccessarily
|
layer (this implies that this attribute is not necessarily
|
||||||
in sync with the values current in the channel subsystem).
|
in sync with the values current in the channel subsystem).
|
||||||
Note: This is an I/O-subchannel specific attribute.
|
Note: This is an I/O-subchannel specific attribute.
|
||||||
Users: s390-tools, HAL
|
Users: s390-tools, HAL
|
||||||
|
6
Documentation/ABI/testing/sysfs-bus-media
Normal file
6
Documentation/ABI/testing/sysfs-bus-media
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
What: /sys/bus/media/devices/.../model
|
||||||
|
Date: January 2011
|
||||||
|
Contact: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||||
|
linux-media@vger.kernel.org
|
||||||
|
Description: Contains the device model name in UTF-8. The device version is
|
||||||
|
is not be appended to the model name.
|
@ -59,3 +59,15 @@ Kernel Version: 2.6.31
|
|||||||
Contact: iss_storagedev@hp.com
|
Contact: iss_storagedev@hp.com
|
||||||
Description: Displays the usage count (number of opens) of logical drive Y
|
Description: Displays the usage count (number of opens) of logical drive Y
|
||||||
of controller X.
|
of controller X.
|
||||||
|
|
||||||
|
Where: /sys/bus/pci/devices/<dev>/ccissX/resettable
|
||||||
|
Date: February 2011
|
||||||
|
Kernel Version: 2.6.38
|
||||||
|
Contact: iss_storagedev@hp.com
|
||||||
|
Description: Value of 1 indicates the controller can honor the reset_devices
|
||||||
|
kernel parameter. Value of 0 indicates reset_devices cannot be
|
||||||
|
honored. This is to allow, for example, kexec tools to be able
|
||||||
|
to warn the user if they designate an unresettable device as
|
||||||
|
a dump device, as kdump requires resetting the device in order
|
||||||
|
to work reliably.
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
What: /sys/bus/rbd/
|
What: /sys/bus/rbd/
|
||||||
Date: November 2010
|
Date: November 2010
|
||||||
Contact: Yehuda Sadeh <yehuda@hq.newdream.net>,
|
Contact: Yehuda Sadeh <yehuda@newdream.net>,
|
||||||
Sage Weil <sage@newdream.net>
|
Sage Weil <sage@newdream.net>
|
||||||
Description:
|
Description:
|
||||||
|
|
||||||
|
@ -33,5 +33,5 @@ Contact: Richard Purdie <rpurdie@rpsys.net>
|
|||||||
Description:
|
Description:
|
||||||
Invert the LED on/off state. This parameter is specific to
|
Invert the LED on/off state. This parameter is specific to
|
||||||
gpio and backlight triggers. In case of the backlight trigger,
|
gpio and backlight triggers. In case of the backlight trigger,
|
||||||
it is usefull when driving a LED which is intended to indicate
|
it is useful when driving a LED which is intended to indicate
|
||||||
a device in a standby like state.
|
a device in a standby like state.
|
||||||
|
21
Documentation/ABI/testing/sysfs-devices-mmc
Normal file
21
Documentation/ABI/testing/sysfs-devices-mmc
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
What: /sys/devices/.../mmc_host/mmcX/mmcX:XXXX/enhanced_area_offset
|
||||||
|
Date: January 2011
|
||||||
|
Contact: Chuanxiao Dong <chuanxiao.dong@intel.com>
|
||||||
|
Description:
|
||||||
|
Enhanced area is a new feature defined in eMMC4.4 standard.
|
||||||
|
eMMC4.4 or later card can support such feature. This kind of
|
||||||
|
area can help to improve the card performance. If the feature
|
||||||
|
is enabled, this attribute will indicate the start address of
|
||||||
|
enhanced data area. If not, this attribute will be -EINVAL.
|
||||||
|
Unit Byte. Format decimal.
|
||||||
|
|
||||||
|
What: /sys/devices/.../mmc_host/mmcX/mmcX:XXXX/enhanced_area_size
|
||||||
|
Date: January 2011
|
||||||
|
Contact: Chuanxiao Dong <chuanxiao.dong@intel.com>
|
||||||
|
Description:
|
||||||
|
Enhanced area is a new feature defined in eMMC4.4 standard.
|
||||||
|
eMMC4.4 or later card can support such feature. This kind of
|
||||||
|
area can help to improve the card performance. If the feature
|
||||||
|
is enabled, this attribute will indicate the size of enhanced
|
||||||
|
data area. If not, this attribute will be -EINVAL.
|
||||||
|
Unit KByte. Format decimal.
|
@ -40,7 +40,7 @@ What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-
|
|||||||
Date: March 2010
|
Date: March 2010
|
||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: The mouse can store 5 profiles which can be switched by the
|
Description: The mouse can store 5 profiles which can be switched by the
|
||||||
press of a button. A profile holds informations like button
|
press of a button. A profile holds information like button
|
||||||
mappings, sensitivity, the colors of the 5 leds and light
|
mappings, sensitivity, the colors of the 5 leds and light
|
||||||
effects.
|
effects.
|
||||||
When read, these files return the respective profile. The
|
When read, these files return the respective profile. The
|
||||||
|
@ -33,7 +33,7 @@ Date: August 2010
|
|||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: The mouse can store 5 profiles which can be switched by the
|
Description: The mouse can store 5 profiles which can be switched by the
|
||||||
press of a button. A profile is split in settings and buttons.
|
press of a button. A profile is split in settings and buttons.
|
||||||
profile_buttons holds informations about button layout.
|
profile_buttons holds information about button layout.
|
||||||
When written, this file lets one write the respective profile
|
When written, this file lets one write the respective profile
|
||||||
buttons back to the mouse. The data has to be 77 bytes long.
|
buttons back to the mouse. The data has to be 77 bytes long.
|
||||||
The mouse will reject invalid data.
|
The mouse will reject invalid data.
|
||||||
@ -47,7 +47,7 @@ Date: August 2010
|
|||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: The mouse can store 5 profiles which can be switched by the
|
Description: The mouse can store 5 profiles which can be switched by the
|
||||||
press of a button. A profile is split in settings and buttons.
|
press of a button. A profile is split in settings and buttons.
|
||||||
profile_buttons holds informations about button layout.
|
profile_buttons holds information about button layout.
|
||||||
When read, these files return the respective profile buttons.
|
When read, these files return the respective profile buttons.
|
||||||
The returned data is 77 bytes in size.
|
The returned data is 77 bytes in size.
|
||||||
This file is readonly.
|
This file is readonly.
|
||||||
@ -58,7 +58,7 @@ Date: October 2010
|
|||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: The mouse can store 5 profiles which can be switched by the
|
Description: The mouse can store 5 profiles which can be switched by the
|
||||||
press of a button. A profile is split in settings and buttons.
|
press of a button. A profile is split in settings and buttons.
|
||||||
profile_settings holds informations like resolution, sensitivity
|
profile_settings holds information like resolution, sensitivity
|
||||||
and light effects.
|
and light effects.
|
||||||
When written, this file lets one write the respective profile
|
When written, this file lets one write the respective profile
|
||||||
settings back to the mouse. The data has to be 43 bytes long.
|
settings back to the mouse. The data has to be 43 bytes long.
|
||||||
@ -73,7 +73,7 @@ Date: August 2010
|
|||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: The mouse can store 5 profiles which can be switched by the
|
Description: The mouse can store 5 profiles which can be switched by the
|
||||||
press of a button. A profile is split in settings and buttons.
|
press of a button. A profile is split in settings and buttons.
|
||||||
profile_settings holds informations like resolution, sensitivity
|
profile_settings holds information like resolution, sensitivity
|
||||||
and light effects.
|
and light effects.
|
||||||
When read, these files return the respective profile settings.
|
When read, these files return the respective profile settings.
|
||||||
The returned data is 43 bytes in size.
|
The returned data is 43 bytes in size.
|
||||||
|
@ -52,7 +52,7 @@ Date: January 2011
|
|||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: The mouse can store 5 profiles which can be switched by the
|
Description: The mouse can store 5 profiles which can be switched by the
|
||||||
press of a button. A profile is split in settings and buttons.
|
press of a button. A profile is split in settings and buttons.
|
||||||
profile_buttons holds informations about button layout.
|
profile_buttons holds information about button layout.
|
||||||
When written, this file lets one write the respective profile
|
When written, this file lets one write the respective profile
|
||||||
buttons back to the mouse. The data has to be 23 bytes long.
|
buttons back to the mouse. The data has to be 23 bytes long.
|
||||||
The mouse will reject invalid data.
|
The mouse will reject invalid data.
|
||||||
@ -66,7 +66,7 @@ Date: January 2011
|
|||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: The mouse can store 5 profiles which can be switched by the
|
Description: The mouse can store 5 profiles which can be switched by the
|
||||||
press of a button. A profile is split in settings and buttons.
|
press of a button. A profile is split in settings and buttons.
|
||||||
profile_buttons holds informations about button layout.
|
profile_buttons holds information about button layout.
|
||||||
When read, these files return the respective profile buttons.
|
When read, these files return the respective profile buttons.
|
||||||
The returned data is 23 bytes in size.
|
The returned data is 23 bytes in size.
|
||||||
This file is readonly.
|
This file is readonly.
|
||||||
@ -77,7 +77,7 @@ Date: January 2011
|
|||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: The mouse can store 5 profiles which can be switched by the
|
Description: The mouse can store 5 profiles which can be switched by the
|
||||||
press of a button. A profile is split in settings and buttons.
|
press of a button. A profile is split in settings and buttons.
|
||||||
profile_settings holds informations like resolution, sensitivity
|
profile_settings holds information like resolution, sensitivity
|
||||||
and light effects.
|
and light effects.
|
||||||
When written, this file lets one write the respective profile
|
When written, this file lets one write the respective profile
|
||||||
settings back to the mouse. The data has to be 16 bytes long.
|
settings back to the mouse. The data has to be 16 bytes long.
|
||||||
@ -92,7 +92,7 @@ Date: January 2011
|
|||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: The mouse can store 5 profiles which can be switched by the
|
Description: The mouse can store 5 profiles which can be switched by the
|
||||||
press of a button. A profile is split in settings and buttons.
|
press of a button. A profile is split in settings and buttons.
|
||||||
profile_settings holds informations like resolution, sensitivity
|
profile_settings holds information like resolution, sensitivity
|
||||||
and light effects.
|
and light effects.
|
||||||
When read, these files return the respective profile settings.
|
When read, these files return the respective profile settings.
|
||||||
The returned data is 16 bytes in size.
|
The returned data is 16 bytes in size.
|
||||||
|
@ -39,7 +39,7 @@ Date: August 2010
|
|||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: The mouse can store 5 profiles which can be switched by the
|
Description: The mouse can store 5 profiles which can be switched by the
|
||||||
press of a button. A profile is split in settings and buttons.
|
press of a button. A profile is split in settings and buttons.
|
||||||
profile_settings holds informations like resolution, sensitivity
|
profile_settings holds information like resolution, sensitivity
|
||||||
and light effects.
|
and light effects.
|
||||||
When written, this file lets one write the respective profile
|
When written, this file lets one write the respective profile
|
||||||
settings back to the mouse. The data has to be 13 bytes long.
|
settings back to the mouse. The data has to be 13 bytes long.
|
||||||
@ -54,7 +54,7 @@ Date: August 2010
|
|||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: The mouse can store 5 profiles which can be switched by the
|
Description: The mouse can store 5 profiles which can be switched by the
|
||||||
press of a button. A profile is split in settings and buttons.
|
press of a button. A profile is split in settings and buttons.
|
||||||
profile_settings holds informations like resolution, sensitivity
|
profile_settings holds information like resolution, sensitivity
|
||||||
and light effects.
|
and light effects.
|
||||||
When read, these files return the respective profile settings.
|
When read, these files return the respective profile settings.
|
||||||
The returned data is 13 bytes in size.
|
The returned data is 13 bytes in size.
|
||||||
@ -66,7 +66,7 @@ Date: August 2010
|
|||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: The mouse can store 5 profiles which can be switched by the
|
Description: The mouse can store 5 profiles which can be switched by the
|
||||||
press of a button. A profile is split in settings and buttons.
|
press of a button. A profile is split in settings and buttons.
|
||||||
profile_buttons holds informations about button layout.
|
profile_buttons holds information about button layout.
|
||||||
When written, this file lets one write the respective profile
|
When written, this file lets one write the respective profile
|
||||||
buttons back to the mouse. The data has to be 19 bytes long.
|
buttons back to the mouse. The data has to be 19 bytes long.
|
||||||
The mouse will reject invalid data.
|
The mouse will reject invalid data.
|
||||||
@ -80,7 +80,7 @@ Date: August 2010
|
|||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: The mouse can store 5 profiles which can be switched by the
|
Description: The mouse can store 5 profiles which can be switched by the
|
||||||
press of a button. A profile is split in settings and buttons.
|
press of a button. A profile is split in settings and buttons.
|
||||||
profile_buttons holds informations about button layout.
|
profile_buttons holds information about button layout.
|
||||||
When read, these files return the respective profile buttons.
|
When read, these files return the respective profile buttons.
|
||||||
The returned data is 19 bytes in size.
|
The returned data is 19 bytes in size.
|
||||||
This file is readonly.
|
This file is readonly.
|
||||||
|
19
Documentation/ABI/testing/sysfs-driver-samsung-laptop
Normal file
19
Documentation/ABI/testing/sysfs-driver-samsung-laptop
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
What: /sys/devices/platform/samsung/performance_level
|
||||||
|
Date: January 1, 2010
|
||||||
|
KernelVersion: 2.6.33
|
||||||
|
Contact: Greg Kroah-Hartman <gregkh@suse.de>
|
||||||
|
Description: Some Samsung laptops have different "performance levels"
|
||||||
|
that are can be modified by a function key, and by this
|
||||||
|
sysfs file. These values don't always make a whole lot
|
||||||
|
of sense, but some users like to modify them to keep
|
||||||
|
their fans quiet at all costs. Reading from this file
|
||||||
|
will show the current performance level. Writing to the
|
||||||
|
file can change this value.
|
||||||
|
Valid options:
|
||||||
|
"silent"
|
||||||
|
"normal"
|
||||||
|
"overclock"
|
||||||
|
Note that not all laptops support all of these options.
|
||||||
|
Specifically, not all support the "overclock" option,
|
||||||
|
and it's still unknown if this value even changes
|
||||||
|
anything, other than making the user feel a bit better.
|
@ -48,7 +48,7 @@ Description:
|
|||||||
will have its blocks allocated out of its own unique
|
will have its blocks allocated out of its own unique
|
||||||
preallocation pool.
|
preallocation pool.
|
||||||
|
|
||||||
What: /sys/fs/ext4/<disk>/inode_readahead
|
What: /sys/fs/ext4/<disk>/inode_readahead_blks
|
||||||
Date: March 2008
|
Date: March 2008
|
||||||
Contact: "Theodore Ts'o" <tytso@mit.edu>
|
Contact: "Theodore Ts'o" <tytso@mit.edu>
|
||||||
Description:
|
Description:
|
||||||
@ -85,7 +85,14 @@ Date: June 2008
|
|||||||
Contact: "Theodore Ts'o" <tytso@mit.edu>
|
Contact: "Theodore Ts'o" <tytso@mit.edu>
|
||||||
Description:
|
Description:
|
||||||
Tuning parameter which (if non-zero) controls the goal
|
Tuning parameter which (if non-zero) controls the goal
|
||||||
inode used by the inode allocator in p0reference to
|
inode used by the inode allocator in preference to
|
||||||
all other allocation hueristics. This is intended for
|
all other allocation heuristics. This is intended for
|
||||||
debugging use only, and should be 0 on production
|
debugging use only, and should be 0 on production
|
||||||
systems.
|
systems.
|
||||||
|
|
||||||
|
What: /sys/fs/ext4/<disk>/max_writeback_mb_bump
|
||||||
|
Date: September 2009
|
||||||
|
Contact: "Theodore Ts'o" <tytso@mit.edu>
|
||||||
|
Description:
|
||||||
|
The maximum number of megabytes the writeback code will
|
||||||
|
try to write out before move on to another inode.
|
||||||
|
@ -1,7 +0,0 @@
|
|||||||
What: /sys/fs/pstore/kmsg_bytes
|
|
||||||
Date: January 2011
|
|
||||||
Kernel Version: 2.6.38
|
|
||||||
Contact: "Tony Luck" <tony.luck@intel.com>
|
|
||||||
Description:
|
|
||||||
Controls amount of console log that will be saved
|
|
||||||
to persistent store on oops/panic.
|
|
@ -27,7 +27,7 @@ KernelVersion: 2.6.20
|
|||||||
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
||||||
Description:
|
Description:
|
||||||
Some models like the W1N have a LED display that can be
|
Some models like the W1N have a LED display that can be
|
||||||
used to display several informations.
|
used to display several items of information.
|
||||||
To control the LED display, use the following :
|
To control the LED display, use the following :
|
||||||
echo 0x0T000DDD > /sys/devices/platform/asus_laptop/
|
echo 0x0T000DDD > /sys/devices/platform/asus_laptop/
|
||||||
where T control the 3 letters display, and DDD the 3 digits display.
|
where T control the 3 letters display, and DDD the 3 digits display.
|
||||||
|
31
Documentation/ABI/testing/sysfs-platform-asus-wmi
Normal file
31
Documentation/ABI/testing/sysfs-platform-asus-wmi
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
What: /sys/devices/platform/<platform>/cpufv
|
||||||
|
Date: Oct 2010
|
||||||
|
KernelVersion: 2.6.37
|
||||||
|
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
||||||
|
Description:
|
||||||
|
Change CPU clock configuration (write-only).
|
||||||
|
There are three available clock configuration:
|
||||||
|
* 0 -> Super Performance Mode
|
||||||
|
* 1 -> High Performance Mode
|
||||||
|
* 2 -> Power Saving Mode
|
||||||
|
|
||||||
|
What: /sys/devices/platform/<platform>/camera
|
||||||
|
Date: Jan 2010
|
||||||
|
KernelVersion: 2.6.39
|
||||||
|
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
||||||
|
Description:
|
||||||
|
Control the camera. 1 means on, 0 means off.
|
||||||
|
|
||||||
|
What: /sys/devices/platform/<platform>/cardr
|
||||||
|
Date: Jan 2010
|
||||||
|
KernelVersion: 2.6.39
|
||||||
|
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
||||||
|
Description:
|
||||||
|
Control the card reader. 1 means on, 0 means off.
|
||||||
|
|
||||||
|
What: /sys/devices/platform/<platform>/touchpad
|
||||||
|
Date: Jan 2010
|
||||||
|
KernelVersion: 2.6.39
|
||||||
|
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
||||||
|
Description:
|
||||||
|
Control the card touchpad. 1 means on, 0 means off.
|
@ -1,10 +0,0 @@
|
|||||||
What: /sys/devices/platform/eeepc-wmi/cpufv
|
|
||||||
Date: Oct 2010
|
|
||||||
KernelVersion: 2.6.37
|
|
||||||
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
|
||||||
Description:
|
|
||||||
Change CPU clock configuration (write-only).
|
|
||||||
There are three available clock configuration:
|
|
||||||
* 0 -> Super Performance Mode
|
|
||||||
* 1 -> High Performance Mode
|
|
||||||
* 2 -> Power Saving Mode
|
|
@ -35,7 +35,7 @@ o util-linux 2.10o # fdformat --version
|
|||||||
o module-init-tools 0.9.10 # depmod -V
|
o module-init-tools 0.9.10 # depmod -V
|
||||||
o e2fsprogs 1.41.4 # e2fsck -V
|
o e2fsprogs 1.41.4 # e2fsck -V
|
||||||
o jfsutils 1.1.3 # fsck.jfs -V
|
o jfsutils 1.1.3 # fsck.jfs -V
|
||||||
o reiserfsprogs 3.6.3 # reiserfsck -V 2>&1|grep reiserfsprogs
|
o reiserfsprogs 3.6.3 # reiserfsck -V
|
||||||
o xfsprogs 2.6.0 # xfs_db -V
|
o xfsprogs 2.6.0 # xfs_db -V
|
||||||
o squashfs-tools 4.0 # mksquashfs -version
|
o squashfs-tools 4.0 # mksquashfs -version
|
||||||
o btrfs-progs 0.18 # btrfsck
|
o btrfs-progs 0.18 # btrfsck
|
||||||
@ -46,9 +46,9 @@ o isdn4k-utils 3.1pre1 # isdnctrl 2>&1|grep version
|
|||||||
o nfs-utils 1.0.5 # showmount --version
|
o nfs-utils 1.0.5 # showmount --version
|
||||||
o procps 3.2.0 # ps --version
|
o procps 3.2.0 # ps --version
|
||||||
o oprofile 0.9 # oprofiled --version
|
o oprofile 0.9 # oprofiled --version
|
||||||
o udev 081 # udevinfo -V
|
o udev 081 # udevd --version
|
||||||
o grub 0.93 # grub --version
|
o grub 0.93 # grub --version || grub-install --version
|
||||||
o mcelog 0.6
|
o mcelog 0.6 # mcelog --version
|
||||||
o iptables 1.4.2 # iptables -V
|
o iptables 1.4.2 # iptables -V
|
||||||
|
|
||||||
|
|
||||||
|
@ -168,6 +168,13 @@ Do not unnecessarily use braces where a single statement will do.
|
|||||||
if (condition)
|
if (condition)
|
||||||
action();
|
action();
|
||||||
|
|
||||||
|
and
|
||||||
|
|
||||||
|
if (condition)
|
||||||
|
do_this();
|
||||||
|
else
|
||||||
|
do_that();
|
||||||
|
|
||||||
This does not apply if one branch of a conditional statement is a single
|
This does not apply if one branch of a conditional statement is a single
|
||||||
statement. Use braces in both branches.
|
statement. Use braces in both branches.
|
||||||
|
|
||||||
|
@ -53,7 +53,9 @@ MAN := $(patsubst %.xml, %.9, $(BOOKS))
|
|||||||
mandocs: $(MAN)
|
mandocs: $(MAN)
|
||||||
|
|
||||||
build_images = mkdir -p $(objtree)/Documentation/DocBook/media/ && \
|
build_images = mkdir -p $(objtree)/Documentation/DocBook/media/ && \
|
||||||
cp $(srctree)/Documentation/DocBook/dvb/*.png $(srctree)/Documentation/DocBook/v4l/*.gif $(objtree)/Documentation/DocBook/media/
|
cp $(srctree)/Documentation/DocBook/dvb/*.png \
|
||||||
|
$(srctree)/Documentation/DocBook/v4l/*.gif \
|
||||||
|
$(objtree)/Documentation/DocBook/media/
|
||||||
|
|
||||||
xmldoclinks:
|
xmldoclinks:
|
||||||
ifneq ($(objtree),$(srctree))
|
ifneq ($(objtree),$(srctree))
|
||||||
|
@ -40,7 +40,7 @@
|
|||||||
|
|
||||||
<para>Central frequency of the channel.</para>
|
<para>Central frequency of the channel.</para>
|
||||||
|
|
||||||
<para>For ISDB-T the channels are usally transmitted with an offset of 143kHz. E.g. a
|
<para>For ISDB-T the channels are usually transmitted with an offset of 143kHz. E.g. a
|
||||||
valid frequncy could be 474143 kHz. The stepping is bound to the bandwidth of
|
valid frequncy could be 474143 kHz. The stepping is bound to the bandwidth of
|
||||||
the channel which is 6MHz.</para>
|
the channel which is 6MHz.</para>
|
||||||
|
|
||||||
|
@ -139,7 +139,7 @@ consistently to the DiSEqC commands as described in the DiSEqC spec.</para>
|
|||||||
<section id="frontend_sec_tone">
|
<section id="frontend_sec_tone">
|
||||||
<title>SEC continuous tone</title>
|
<title>SEC continuous tone</title>
|
||||||
|
|
||||||
<para>The continous 22KHz tone is usually used with non-DiSEqC capable LNBs to switch the
|
<para>The continuous 22KHz tone is usually used with non-DiSEqC capable LNBs to switch the
|
||||||
high/low band of a dual-band LNB. When using DiSEqC epuipment this voltage has to
|
high/low band of a dual-band LNB. When using DiSEqC epuipment this voltage has to
|
||||||
be switched consistently to the DiSEqC commands as described in the DiSEqC
|
be switched consistently to the DiSEqC commands as described in the DiSEqC
|
||||||
spec.</para>
|
spec.</para>
|
||||||
|
@ -1763,7 +1763,7 @@ as it would be on UP.
|
|||||||
There is a furthur optimization possible here: remember our original
|
There is a furthur optimization possible here: remember our original
|
||||||
cache code, where there were no reference counts and the caller simply
|
cache code, where there were no reference counts and the caller simply
|
||||||
held the lock whenever using the object? This is still possible: if
|
held the lock whenever using the object? This is still possible: if
|
||||||
you hold the lock, noone can delete the object, so you don't need to
|
you hold the lock, no one can delete the object, so you don't need to
|
||||||
get and put the reference count.
|
get and put the reference count.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
@ -1032,7 +1032,7 @@ and other resources, etc.
|
|||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
This is indicated by ICRC bit in the ERROR register and
|
This is indicated by ICRC bit in the ERROR register and
|
||||||
means that corruption occurred during data transfer. Upto
|
means that corruption occurred during data transfer. Up to
|
||||||
ATA/ATAPI-7, the standard specifies that this bit is only
|
ATA/ATAPI-7, the standard specifies that this bit is only
|
||||||
applicable to UDMA transfers but ATA/ATAPI-8 draft revision
|
applicable to UDMA transfers but ATA/ATAPI-8 draft revision
|
||||||
1f says that the bit may be applicable to multiword DMA and
|
1f says that the bit may be applicable to multiword DMA and
|
||||||
@ -1045,10 +1045,10 @@ and other resources, etc.
|
|||||||
<term>ABRT error during data transfer or on completion</term>
|
<term>ABRT error during data transfer or on completion</term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
Upto ATA/ATAPI-7, the standard specifies that ABRT could be
|
Up to ATA/ATAPI-7, the standard specifies that ABRT could be
|
||||||
set on ICRC errors and on cases where a device is not able
|
set on ICRC errors and on cases where a device is not able
|
||||||
to complete a command. Combined with the fact that MWDMA
|
to complete a command. Combined with the fact that MWDMA
|
||||||
and PIO transfer errors aren't allowed to use ICRC bit upto
|
and PIO transfer errors aren't allowed to use ICRC bit up to
|
||||||
ATA/ATAPI-7, it seems to imply that ABRT bit alone could
|
ATA/ATAPI-7, it seems to imply that ABRT bit alone could
|
||||||
indicate tranfer errors.
|
indicate tranfer errors.
|
||||||
</para>
|
</para>
|
||||||
@ -1122,7 +1122,7 @@ and other resources, etc.
|
|||||||
<para>
|
<para>
|
||||||
Depending on commands, not all STATUS/ERROR bits are
|
Depending on commands, not all STATUS/ERROR bits are
|
||||||
applicable. These non-applicable bits are marked with
|
applicable. These non-applicable bits are marked with
|
||||||
"na" in the output descriptions but upto ATA/ATAPI-7
|
"na" in the output descriptions but up to ATA/ATAPI-7
|
||||||
no definition of "na" can be found. However,
|
no definition of "na" can be found. However,
|
||||||
ATA/ATAPI-8 draft revision 1f describes "N/A" as
|
ATA/ATAPI-8 draft revision 1f describes "N/A" as
|
||||||
follows.
|
follows.
|
||||||
@ -1507,7 +1507,7 @@ and other resources, etc.
|
|||||||
|
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
CHS set up with INITIALIZE DEVICE PARAMETERS (seldomly used)
|
CHS set up with INITIALIZE DEVICE PARAMETERS (seldom used)
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
|
||||||
|
@ -11,6 +11,10 @@
|
|||||||
<!ENTITY func-select "<link linkend='func-select'><function>select()</function></link>">
|
<!ENTITY func-select "<link linkend='func-select'><function>select()</function></link>">
|
||||||
<!ENTITY func-write "<link linkend='func-write'><function>write()</function></link>">
|
<!ENTITY func-write "<link linkend='func-write'><function>write()</function></link>">
|
||||||
|
|
||||||
|
<!ENTITY media-func-close "<link linkend='media-func-close'><function>close()</function></link>">
|
||||||
|
<!ENTITY media-func-ioctl "<link linkend='media-func-ioctl'><function>ioctl()</function></link>">
|
||||||
|
<!ENTITY media-func-open "<link linkend='media-func-open'><function>open()</function></link>">
|
||||||
|
|
||||||
<!-- Ioctls -->
|
<!-- Ioctls -->
|
||||||
<!ENTITY VIDIOC-CROPCAP "<link linkend='vidioc-cropcap'><constant>VIDIOC_CROPCAP</constant></link>">
|
<!ENTITY VIDIOC-CROPCAP "<link linkend='vidioc-cropcap'><constant>VIDIOC_CROPCAP</constant></link>">
|
||||||
<!ENTITY VIDIOC-DBG-G-CHIP-IDENT "<link linkend='vidioc-dbg-g-chip-ident'><constant>VIDIOC_DBG_G_CHIP_IDENT</constant></link>">
|
<!ENTITY VIDIOC-DBG-G-CHIP-IDENT "<link linkend='vidioc-dbg-g-chip-ident'><constant>VIDIOC_DBG_G_CHIP_IDENT</constant></link>">
|
||||||
@ -82,11 +86,24 @@
|
|||||||
<!ENTITY VIDIOC-S-PRIORITY "<link linkend='vidioc-g-priority'><constant>VIDIOC_S_PRIORITY</constant></link>">
|
<!ENTITY VIDIOC-S-PRIORITY "<link linkend='vidioc-g-priority'><constant>VIDIOC_S_PRIORITY</constant></link>">
|
||||||
<!ENTITY VIDIOC-S-STD "<link linkend='vidioc-g-std'><constant>VIDIOC_S_STD</constant></link>">
|
<!ENTITY VIDIOC-S-STD "<link linkend='vidioc-g-std'><constant>VIDIOC_S_STD</constant></link>">
|
||||||
<!ENTITY VIDIOC-S-TUNER "<link linkend='vidioc-g-tuner'><constant>VIDIOC_S_TUNER</constant></link>">
|
<!ENTITY VIDIOC-S-TUNER "<link linkend='vidioc-g-tuner'><constant>VIDIOC_S_TUNER</constant></link>">
|
||||||
|
<!ENTITY VIDIOC-SUBDEV-ENUM-FRAME-SIZE "<link linkend='vidioc-subdev-enum-frame-size'><constant>VIDIOC_SUBDEV_ENUM_FRAME_SIZE</constant></link>">
|
||||||
|
<!ENTITY VIDIOC-SUBDEV-ENUM-MBUS-CODE "<link linkend='vidioc-subdev-enum-mbus-code'><constant>VIDIOC_SUBDEV_ENUM_MBUS_CODE</constant></link>">
|
||||||
|
<!ENTITY VIDIOC-SUBDEV-G-CROP "<link linkend='vidioc-subdev-g-crop'><constant>VIDIOC_SUBDEV_G_CROP</constant></link>">
|
||||||
|
<!ENTITY VIDIOC-SUBDEV-G-FMT "<link linkend='vidioc-subdev-g-fmt'><constant>VIDIOC_SUBDEV_G_FMT</constant></link>">
|
||||||
|
<!ENTITY VIDIOC-SUBDEV-G-FRAME-INTERVAL "<link linkend='vidioc-subdev-g-frame-interval'><constant>VIDIOC_SUBDEV_G_FRAME_INTERVAL</constant></link>">
|
||||||
|
<!ENTITY VIDIOC-SUBDEV-S-CROP "<link linkend='vidioc-subdev-g-crop'><constant>VIDIOC_SUBDEV_S_CROP</constant></link>">
|
||||||
|
<!ENTITY VIDIOC-SUBDEV-S-FMT "<link linkend='vidioc-subdev-g-fmt'><constant>VIDIOC_SUBDEV_S_FMT</constant></link>">
|
||||||
|
<!ENTITY VIDIOC-SUBDEV-S-FRAME-INTERVAL "<link linkend='vidioc-subdev-g-frame-interval'><constant>VIDIOC_SUBDEV_S_FRAME_INTERVAL</constant></link>">
|
||||||
<!ENTITY VIDIOC-TRY-ENCODER-CMD "<link linkend='vidioc-encoder-cmd'><constant>VIDIOC_TRY_ENCODER_CMD</constant></link>">
|
<!ENTITY VIDIOC-TRY-ENCODER-CMD "<link linkend='vidioc-encoder-cmd'><constant>VIDIOC_TRY_ENCODER_CMD</constant></link>">
|
||||||
<!ENTITY VIDIOC-TRY-EXT-CTRLS "<link linkend='vidioc-g-ext-ctrls'><constant>VIDIOC_TRY_EXT_CTRLS</constant></link>">
|
<!ENTITY VIDIOC-TRY-EXT-CTRLS "<link linkend='vidioc-g-ext-ctrls'><constant>VIDIOC_TRY_EXT_CTRLS</constant></link>">
|
||||||
<!ENTITY VIDIOC-TRY-FMT "<link linkend='vidioc-g-fmt'><constant>VIDIOC_TRY_FMT</constant></link>">
|
<!ENTITY VIDIOC-TRY-FMT "<link linkend='vidioc-g-fmt'><constant>VIDIOC_TRY_FMT</constant></link>">
|
||||||
<!ENTITY VIDIOC-UNSUBSCRIBE-EVENT "<link linkend='vidioc-subscribe-event'><constant>VIDIOC_UNSUBSCRIBE_EVENT</constant></link>">
|
<!ENTITY VIDIOC-UNSUBSCRIBE-EVENT "<link linkend='vidioc-subscribe-event'><constant>VIDIOC_UNSUBSCRIBE_EVENT</constant></link>">
|
||||||
|
|
||||||
|
<!ENTITY MEDIA-IOC-DEVICE-INFO "<link linkend='media-ioc-device-info'><constant>MEDIA_IOC_DEVICE_INFO</constant></link>">
|
||||||
|
<!ENTITY MEDIA-IOC-ENUM-ENTITIES "<link linkend='media-ioc-enum-entities'><constant>MEDIA_IOC_ENUM_ENTITIES</constant></link>">
|
||||||
|
<!ENTITY MEDIA-IOC-ENUM-LINKS "<link linkend='media-ioc-enum-links'><constant>MEDIA_IOC_ENUM_LINKS</constant></link>">
|
||||||
|
<!ENTITY MEDIA-IOC-SETUP-LINK "<link linkend='media-ioc-setup-link'><constant>MEDIA_IOC_SETUP_LINK</constant></link>">
|
||||||
|
|
||||||
<!-- Types -->
|
<!-- Types -->
|
||||||
<!ENTITY v4l2-std-id "<link linkend='v4l2-std-id'>v4l2_std_id</link>">
|
<!ENTITY v4l2-std-id "<link linkend='v4l2-std-id'>v4l2_std_id</link>">
|
||||||
|
|
||||||
@ -98,6 +115,7 @@
|
|||||||
<!ENTITY v4l2-field "enum <link linkend='v4l2-field'>v4l2_field</link>">
|
<!ENTITY v4l2-field "enum <link linkend='v4l2-field'>v4l2_field</link>">
|
||||||
<!ENTITY v4l2-frmivaltypes "enum <link linkend='v4l2-frmivaltypes'>v4l2_frmivaltypes</link>">
|
<!ENTITY v4l2-frmivaltypes "enum <link linkend='v4l2-frmivaltypes'>v4l2_frmivaltypes</link>">
|
||||||
<!ENTITY v4l2-frmsizetypes "enum <link linkend='v4l2-frmsizetypes'>v4l2_frmsizetypes</link>">
|
<!ENTITY v4l2-frmsizetypes "enum <link linkend='v4l2-frmsizetypes'>v4l2_frmsizetypes</link>">
|
||||||
|
<!ENTITY v4l2-mbus-pixelcode "enum <link linkend='v4l2-mbus-pixelcode'>v4l2_mbus_pixelcode</link>">
|
||||||
<!ENTITY v4l2-memory "enum <link linkend='v4l2-memory'>v4l2_memory</link>">
|
<!ENTITY v4l2-memory "enum <link linkend='v4l2-memory'>v4l2_memory</link>">
|
||||||
<!ENTITY v4l2-mpeg-audio-ac3-bitrate "enum <link linkend='v4l2-mpeg-audio-ac3-bitrate'>v4l2_mpeg_audio_ac3_bitrate</link>">
|
<!ENTITY v4l2-mpeg-audio-ac3-bitrate "enum <link linkend='v4l2-mpeg-audio-ac3-bitrate'>v4l2_mpeg_audio_ac3_bitrate</link>">
|
||||||
<!ENTITY v4l2-mpeg-audio-crc "enum <link linkend='v4l2-mpeg-audio-crc'>v4l2_mpeg_audio_crc</link>">
|
<!ENTITY v4l2-mpeg-audio-crc "enum <link linkend='v4l2-mpeg-audio-crc'>v4l2_mpeg_audio_crc</link>">
|
||||||
@ -121,6 +139,7 @@
|
|||||||
<!ENTITY v4l2-mpeg-video-encoding "enum <link linkend='v4l2-mpeg-video-encoding'>v4l2_mpeg_video_encoding</link>">
|
<!ENTITY v4l2-mpeg-video-encoding "enum <link linkend='v4l2-mpeg-video-encoding'>v4l2_mpeg_video_encoding</link>">
|
||||||
<!ENTITY v4l2-power-line-frequency "enum <link linkend='v4l2-power-line-frequency'>v4l2_power_line_frequency</link>">
|
<!ENTITY v4l2-power-line-frequency "enum <link linkend='v4l2-power-line-frequency'>v4l2_power_line_frequency</link>">
|
||||||
<!ENTITY v4l2-priority "enum <link linkend='v4l2-priority'>v4l2_priority</link>">
|
<!ENTITY v4l2-priority "enum <link linkend='v4l2-priority'>v4l2_priority</link>">
|
||||||
|
<!ENTITY v4l2-subdev-format-whence "enum <link linkend='v4l2-subdev-format-whence'>v4l2_subdev_format_whence</link>">
|
||||||
<!ENTITY v4l2-tuner-type "enum <link linkend='v4l2-tuner-type'>v4l2_tuner_type</link>">
|
<!ENTITY v4l2-tuner-type "enum <link linkend='v4l2-tuner-type'>v4l2_tuner_type</link>">
|
||||||
<!ENTITY v4l2-preemphasis "enum <link linkend='v4l2-preemphasis'>v4l2_preemphasis</link>">
|
<!ENTITY v4l2-preemphasis "enum <link linkend='v4l2-preemphasis'>v4l2_preemphasis</link>">
|
||||||
|
|
||||||
@ -129,6 +148,7 @@
|
|||||||
<!ENTITY v4l2-audioout "struct <link linkend='v4l2-audioout'>v4l2_audioout</link>">
|
<!ENTITY v4l2-audioout "struct <link linkend='v4l2-audioout'>v4l2_audioout</link>">
|
||||||
<!ENTITY v4l2-bt-timings "struct <link linkend='v4l2-bt-timings'>v4l2_bt_timings</link>">
|
<!ENTITY v4l2-bt-timings "struct <link linkend='v4l2-bt-timings'>v4l2_bt_timings</link>">
|
||||||
<!ENTITY v4l2-buffer "struct <link linkend='v4l2-buffer'>v4l2_buffer</link>">
|
<!ENTITY v4l2-buffer "struct <link linkend='v4l2-buffer'>v4l2_buffer</link>">
|
||||||
|
<!ENTITY v4l2-plane "struct <link linkend='v4l2-plane'>v4l2_plane</link>">
|
||||||
<!ENTITY v4l2-capability "struct <link linkend='v4l2-capability'>v4l2_capability</link>">
|
<!ENTITY v4l2-capability "struct <link linkend='v4l2-capability'>v4l2_capability</link>">
|
||||||
<!ENTITY v4l2-captureparm "struct <link linkend='v4l2-captureparm'>v4l2_captureparm</link>">
|
<!ENTITY v4l2-captureparm "struct <link linkend='v4l2-captureparm'>v4l2_captureparm</link>">
|
||||||
<!ENTITY v4l2-clip "struct <link linkend='v4l2-clip'>v4l2_clip</link>">
|
<!ENTITY v4l2-clip "struct <link linkend='v4l2-clip'>v4l2_clip</link>">
|
||||||
@ -162,11 +182,14 @@
|
|||||||
<!ENTITY v4l2-hw-freq-seek "struct <link linkend='v4l2-hw-freq-seek'>v4l2_hw_freq_seek</link>">
|
<!ENTITY v4l2-hw-freq-seek "struct <link linkend='v4l2-hw-freq-seek'>v4l2_hw_freq_seek</link>">
|
||||||
<!ENTITY v4l2-input "struct <link linkend='v4l2-input'>v4l2_input</link>">
|
<!ENTITY v4l2-input "struct <link linkend='v4l2-input'>v4l2_input</link>">
|
||||||
<!ENTITY v4l2-jpegcompression "struct <link linkend='v4l2-jpegcompression'>v4l2_jpegcompression</link>">
|
<!ENTITY v4l2-jpegcompression "struct <link linkend='v4l2-jpegcompression'>v4l2_jpegcompression</link>">
|
||||||
|
<!ENTITY v4l2-mbus-framefmt "struct <link linkend='v4l2-mbus-framefmt'>v4l2_mbus_framefmt</link>">
|
||||||
<!ENTITY v4l2-modulator "struct <link linkend='v4l2-modulator'>v4l2_modulator</link>">
|
<!ENTITY v4l2-modulator "struct <link linkend='v4l2-modulator'>v4l2_modulator</link>">
|
||||||
<!ENTITY v4l2-mpeg-vbi-fmt-ivtv "struct <link linkend='v4l2-mpeg-vbi-fmt-ivtv'>v4l2_mpeg_vbi_fmt_ivtv</link>">
|
<!ENTITY v4l2-mpeg-vbi-fmt-ivtv "struct <link linkend='v4l2-mpeg-vbi-fmt-ivtv'>v4l2_mpeg_vbi_fmt_ivtv</link>">
|
||||||
<!ENTITY v4l2-output "struct <link linkend='v4l2-output'>v4l2_output</link>">
|
<!ENTITY v4l2-output "struct <link linkend='v4l2-output'>v4l2_output</link>">
|
||||||
<!ENTITY v4l2-outputparm "struct <link linkend='v4l2-outputparm'>v4l2_outputparm</link>">
|
<!ENTITY v4l2-outputparm "struct <link linkend='v4l2-outputparm'>v4l2_outputparm</link>">
|
||||||
<!ENTITY v4l2-pix-format "struct <link linkend='v4l2-pix-format'>v4l2_pix_format</link>">
|
<!ENTITY v4l2-pix-format "struct <link linkend='v4l2-pix-format'>v4l2_pix_format</link>">
|
||||||
|
<!ENTITY v4l2-pix-format-mplane "struct <link linkend='v4l2-pix-format-mplane'>v4l2_pix_format_mplane</link>">
|
||||||
|
<!ENTITY v4l2-plane-pix-format "struct <link linkend='v4l2-plane-pix-format'>v4l2_plane_pix_format</link>">
|
||||||
<!ENTITY v4l2-queryctrl "struct <link linkend='v4l2-queryctrl'>v4l2_queryctrl</link>">
|
<!ENTITY v4l2-queryctrl "struct <link linkend='v4l2-queryctrl'>v4l2_queryctrl</link>">
|
||||||
<!ENTITY v4l2-querymenu "struct <link linkend='v4l2-querymenu'>v4l2_querymenu</link>">
|
<!ENTITY v4l2-querymenu "struct <link linkend='v4l2-querymenu'>v4l2_querymenu</link>">
|
||||||
<!ENTITY v4l2-rect "struct <link linkend='v4l2-rect'>v4l2_rect</link>">
|
<!ENTITY v4l2-rect "struct <link linkend='v4l2-rect'>v4l2_rect</link>">
|
||||||
@ -174,6 +197,12 @@
|
|||||||
<!ENTITY v4l2-sliced-vbi-cap "struct <link linkend='v4l2-sliced-vbi-cap'>v4l2_sliced_vbi_cap</link>">
|
<!ENTITY v4l2-sliced-vbi-cap "struct <link linkend='v4l2-sliced-vbi-cap'>v4l2_sliced_vbi_cap</link>">
|
||||||
<!ENTITY v4l2-sliced-vbi-data "struct <link linkend='v4l2-sliced-vbi-data'>v4l2_sliced_vbi_data</link>">
|
<!ENTITY v4l2-sliced-vbi-data "struct <link linkend='v4l2-sliced-vbi-data'>v4l2_sliced_vbi_data</link>">
|
||||||
<!ENTITY v4l2-sliced-vbi-format "struct <link linkend='v4l2-sliced-vbi-format'>v4l2_sliced_vbi_format</link>">
|
<!ENTITY v4l2-sliced-vbi-format "struct <link linkend='v4l2-sliced-vbi-format'>v4l2_sliced_vbi_format</link>">
|
||||||
|
<!ENTITY v4l2-subdev-frame-interval "struct <link linkend='v4l2-subdev-frame-interval'>v4l2_subdev_frame_interval</link>">
|
||||||
|
<!ENTITY v4l2-subdev-frame-interval-enum "struct <link linkend='v4l2-subdev-frame-interval-enum'>v4l2_subdev_frame_interval_enum</link>">
|
||||||
|
<!ENTITY v4l2-subdev-frame-size-enum "struct <link linkend='v4l2-subdev-frame-size-enum'>v4l2_subdev_frame_size_enum</link>">
|
||||||
|
<!ENTITY v4l2-subdev-crop "struct <link linkend='v4l2-subdev-crop'>v4l2_subdev_crop</link>">
|
||||||
|
<!ENTITY v4l2-subdev-format "struct <link linkend='v4l2-subdev-format'>v4l2_subdev_format</link>">
|
||||||
|
<!ENTITY v4l2-subdev-mbus-code-enum "struct <link linkend='v4l2-subdev-mbus-code-enum'>v4l2_subdev_mbus_code_enum</link>">
|
||||||
<!ENTITY v4l2-standard "struct <link linkend='v4l2-standard'>v4l2_standard</link>">
|
<!ENTITY v4l2-standard "struct <link linkend='v4l2-standard'>v4l2_standard</link>">
|
||||||
<!ENTITY v4l2-streamparm "struct <link linkend='v4l2-streamparm'>v4l2_streamparm</link>">
|
<!ENTITY v4l2-streamparm "struct <link linkend='v4l2-streamparm'>v4l2_streamparm</link>">
|
||||||
<!ENTITY v4l2-timecode "struct <link linkend='v4l2-timecode'>v4l2_timecode</link>">
|
<!ENTITY v4l2-timecode "struct <link linkend='v4l2-timecode'>v4l2_timecode</link>">
|
||||||
@ -181,6 +210,12 @@
|
|||||||
<!ENTITY v4l2-vbi-format "struct <link linkend='v4l2-vbi-format'>v4l2_vbi_format</link>">
|
<!ENTITY v4l2-vbi-format "struct <link linkend='v4l2-vbi-format'>v4l2_vbi_format</link>">
|
||||||
<!ENTITY v4l2-window "struct <link linkend='v4l2-window'>v4l2_window</link>">
|
<!ENTITY v4l2-window "struct <link linkend='v4l2-window'>v4l2_window</link>">
|
||||||
|
|
||||||
|
<!ENTITY media-device-info "struct <link linkend='media-device-info'>media_device_info</link>">
|
||||||
|
<!ENTITY media-entity-desc "struct <link linkend='media-entity-desc'>media_entity_desc</link>">
|
||||||
|
<!ENTITY media-links-enum "struct <link linkend='media-links-enum'>media_links_enum</link>">
|
||||||
|
<!ENTITY media-pad-desc "struct <link linkend='media-pad-desc'>media_pad_desc</link>">
|
||||||
|
<!ENTITY media-link-desc "struct <link linkend='media-link-desc'>media_link_desc</link>">
|
||||||
|
|
||||||
<!-- Error Codes -->
|
<!-- Error Codes -->
|
||||||
<!ENTITY EACCES "<errorcode>EACCES</errorcode> error code">
|
<!ENTITY EACCES "<errorcode>EACCES</errorcode> error code">
|
||||||
<!ENTITY EAGAIN "<errorcode>EAGAIN</errorcode> error code">
|
<!ENTITY EAGAIN "<errorcode>EAGAIN</errorcode> error code">
|
||||||
@ -197,11 +232,13 @@
|
|||||||
<!ENTITY ENXIO "<errorcode>ENXIO</errorcode> error code">
|
<!ENTITY ENXIO "<errorcode>ENXIO</errorcode> error code">
|
||||||
<!ENTITY EMFILE "<errorcode>EMFILE</errorcode> error code">
|
<!ENTITY EMFILE "<errorcode>EMFILE</errorcode> error code">
|
||||||
<!ENTITY EPERM "<errorcode>EPERM</errorcode> error code">
|
<!ENTITY EPERM "<errorcode>EPERM</errorcode> error code">
|
||||||
|
<!ENTITY EPIPE "<errorcode>EPIPE</errorcode> error code">
|
||||||
<!ENTITY ERANGE "<errorcode>ERANGE</errorcode> error code">
|
<!ENTITY ERANGE "<errorcode>ERANGE</errorcode> error code">
|
||||||
|
|
||||||
<!-- Subsections -->
|
<!-- Subsections -->
|
||||||
<!ENTITY sub-biblio SYSTEM "v4l/biblio.xml">
|
<!ENTITY sub-biblio SYSTEM "v4l/biblio.xml">
|
||||||
<!ENTITY sub-common SYSTEM "v4l/common.xml">
|
<!ENTITY sub-common SYSTEM "v4l/common.xml">
|
||||||
|
<!ENTITY sub-planar-apis SYSTEM "v4l/planar-apis.xml">
|
||||||
<!ENTITY sub-compat SYSTEM "v4l/compat.xml">
|
<!ENTITY sub-compat SYSTEM "v4l/compat.xml">
|
||||||
<!ENTITY sub-controls SYSTEM "v4l/controls.xml">
|
<!ENTITY sub-controls SYSTEM "v4l/controls.xml">
|
||||||
<!ENTITY sub-dev-capture SYSTEM "v4l/dev-capture.xml">
|
<!ENTITY sub-dev-capture SYSTEM "v4l/dev-capture.xml">
|
||||||
@ -215,6 +252,7 @@
|
|||||||
<!ENTITY sub-dev-raw-vbi SYSTEM "v4l/dev-raw-vbi.xml">
|
<!ENTITY sub-dev-raw-vbi SYSTEM "v4l/dev-raw-vbi.xml">
|
||||||
<!ENTITY sub-dev-rds SYSTEM "v4l/dev-rds.xml">
|
<!ENTITY sub-dev-rds SYSTEM "v4l/dev-rds.xml">
|
||||||
<!ENTITY sub-dev-sliced-vbi SYSTEM "v4l/dev-sliced-vbi.xml">
|
<!ENTITY sub-dev-sliced-vbi SYSTEM "v4l/dev-sliced-vbi.xml">
|
||||||
|
<!ENTITY sub-dev-subdev SYSTEM "v4l/dev-subdev.xml">
|
||||||
<!ENTITY sub-dev-teletext SYSTEM "v4l/dev-teletext.xml">
|
<!ENTITY sub-dev-teletext SYSTEM "v4l/dev-teletext.xml">
|
||||||
<!ENTITY sub-driver SYSTEM "v4l/driver.xml">
|
<!ENTITY sub-driver SYSTEM "v4l/driver.xml">
|
||||||
<!ENTITY sub-libv4l SYSTEM "v4l/libv4l.xml">
|
<!ENTITY sub-libv4l SYSTEM "v4l/libv4l.xml">
|
||||||
@ -233,6 +271,8 @@
|
|||||||
<!ENTITY sub-io SYSTEM "v4l/io.xml">
|
<!ENTITY sub-io SYSTEM "v4l/io.xml">
|
||||||
<!ENTITY sub-grey SYSTEM "v4l/pixfmt-grey.xml">
|
<!ENTITY sub-grey SYSTEM "v4l/pixfmt-grey.xml">
|
||||||
<!ENTITY sub-nv12 SYSTEM "v4l/pixfmt-nv12.xml">
|
<!ENTITY sub-nv12 SYSTEM "v4l/pixfmt-nv12.xml">
|
||||||
|
<!ENTITY sub-nv12m SYSTEM "v4l/pixfmt-nv12m.xml">
|
||||||
|
<!ENTITY sub-nv12mt SYSTEM "v4l/pixfmt-nv12mt.xml">
|
||||||
<!ENTITY sub-nv16 SYSTEM "v4l/pixfmt-nv16.xml">
|
<!ENTITY sub-nv16 SYSTEM "v4l/pixfmt-nv16.xml">
|
||||||
<!ENTITY sub-packed-rgb SYSTEM "v4l/pixfmt-packed-rgb.xml">
|
<!ENTITY sub-packed-rgb SYSTEM "v4l/pixfmt-packed-rgb.xml">
|
||||||
<!ENTITY sub-packed-yuv SYSTEM "v4l/pixfmt-packed-yuv.xml">
|
<!ENTITY sub-packed-yuv SYSTEM "v4l/pixfmt-packed-yuv.xml">
|
||||||
@ -247,6 +287,7 @@
|
|||||||
<!ENTITY sub-yuv410 SYSTEM "v4l/pixfmt-yuv410.xml">
|
<!ENTITY sub-yuv410 SYSTEM "v4l/pixfmt-yuv410.xml">
|
||||||
<!ENTITY sub-yuv411p SYSTEM "v4l/pixfmt-yuv411p.xml">
|
<!ENTITY sub-yuv411p SYSTEM "v4l/pixfmt-yuv411p.xml">
|
||||||
<!ENTITY sub-yuv420 SYSTEM "v4l/pixfmt-yuv420.xml">
|
<!ENTITY sub-yuv420 SYSTEM "v4l/pixfmt-yuv420.xml">
|
||||||
|
<!ENTITY sub-yuv420m SYSTEM "v4l/pixfmt-yuv420m.xml">
|
||||||
<!ENTITY sub-yuv422p SYSTEM "v4l/pixfmt-yuv422p.xml">
|
<!ENTITY sub-yuv422p SYSTEM "v4l/pixfmt-yuv422p.xml">
|
||||||
<!ENTITY sub-yuyv SYSTEM "v4l/pixfmt-yuyv.xml">
|
<!ENTITY sub-yuyv SYSTEM "v4l/pixfmt-yuyv.xml">
|
||||||
<!ENTITY sub-yvyu SYSTEM "v4l/pixfmt-yvyu.xml">
|
<!ENTITY sub-yvyu SYSTEM "v4l/pixfmt-yvyu.xml">
|
||||||
@ -298,6 +339,13 @@
|
|||||||
<!ENTITY sub-reqbufs SYSTEM "v4l/vidioc-reqbufs.xml">
|
<!ENTITY sub-reqbufs SYSTEM "v4l/vidioc-reqbufs.xml">
|
||||||
<!ENTITY sub-s-hw-freq-seek SYSTEM "v4l/vidioc-s-hw-freq-seek.xml">
|
<!ENTITY sub-s-hw-freq-seek SYSTEM "v4l/vidioc-s-hw-freq-seek.xml">
|
||||||
<!ENTITY sub-streamon SYSTEM "v4l/vidioc-streamon.xml">
|
<!ENTITY sub-streamon SYSTEM "v4l/vidioc-streamon.xml">
|
||||||
|
<!ENTITY sub-subdev-enum-frame-interval SYSTEM "v4l/vidioc-subdev-enum-frame-interval.xml">
|
||||||
|
<!ENTITY sub-subdev-enum-frame-size SYSTEM "v4l/vidioc-subdev-enum-frame-size.xml">
|
||||||
|
<!ENTITY sub-subdev-enum-mbus-code SYSTEM "v4l/vidioc-subdev-enum-mbus-code.xml">
|
||||||
|
<!ENTITY sub-subdev-formats SYSTEM "v4l/subdev-formats.xml">
|
||||||
|
<!ENTITY sub-subdev-g-crop SYSTEM "v4l/vidioc-subdev-g-crop.xml">
|
||||||
|
<!ENTITY sub-subdev-g-fmt SYSTEM "v4l/vidioc-subdev-g-fmt.xml">
|
||||||
|
<!ENTITY sub-subdev-g-frame-interval SYSTEM "v4l/vidioc-subdev-g-frame-interval.xml">
|
||||||
<!ENTITY sub-capture-c SYSTEM "v4l/capture.c.xml">
|
<!ENTITY sub-capture-c SYSTEM "v4l/capture.c.xml">
|
||||||
<!ENTITY sub-keytable-c SYSTEM "v4l/keytable.c.xml">
|
<!ENTITY sub-keytable-c SYSTEM "v4l/keytable.c.xml">
|
||||||
<!ENTITY sub-v4l2grab-c SYSTEM "v4l/v4l2grab.c.xml">
|
<!ENTITY sub-v4l2grab-c SYSTEM "v4l/v4l2grab.c.xml">
|
||||||
@ -321,6 +369,15 @@
|
|||||||
<!ENTITY sub-media-entities SYSTEM "media-entities.tmpl">
|
<!ENTITY sub-media-entities SYSTEM "media-entities.tmpl">
|
||||||
<!ENTITY sub-media-indices SYSTEM "media-indices.tmpl">
|
<!ENTITY sub-media-indices SYSTEM "media-indices.tmpl">
|
||||||
|
|
||||||
|
<!ENTITY sub-media-controller SYSTEM "v4l/media-controller.xml">
|
||||||
|
<!ENTITY sub-media-open SYSTEM "v4l/media-func-open.xml">
|
||||||
|
<!ENTITY sub-media-close SYSTEM "v4l/media-func-close.xml">
|
||||||
|
<!ENTITY sub-media-ioctl SYSTEM "v4l/media-func-ioctl.xml">
|
||||||
|
<!ENTITY sub-media-ioc-device-info SYSTEM "v4l/media-ioc-device-info.xml">
|
||||||
|
<!ENTITY sub-media-ioc-enum-entities SYSTEM "v4l/media-ioc-enum-entities.xml">
|
||||||
|
<!ENTITY sub-media-ioc-enum-links SYSTEM "v4l/media-ioc-enum-links.xml">
|
||||||
|
<!ENTITY sub-media-ioc-setup-link SYSTEM "v4l/media-ioc-setup-link.xml">
|
||||||
|
|
||||||
<!-- Function Reference -->
|
<!-- Function Reference -->
|
||||||
<!ENTITY close SYSTEM "v4l/func-close.xml">
|
<!ENTITY close SYSTEM "v4l/func-close.xml">
|
||||||
<!ENTITY ioctl SYSTEM "v4l/func-ioctl.xml">
|
<!ENTITY ioctl SYSTEM "v4l/func-ioctl.xml">
|
||||||
@ -333,6 +390,7 @@
|
|||||||
<!ENTITY write SYSTEM "v4l/func-write.xml">
|
<!ENTITY write SYSTEM "v4l/func-write.xml">
|
||||||
<!ENTITY grey SYSTEM "v4l/pixfmt-grey.xml">
|
<!ENTITY grey SYSTEM "v4l/pixfmt-grey.xml">
|
||||||
<!ENTITY nv12 SYSTEM "v4l/pixfmt-nv12.xml">
|
<!ENTITY nv12 SYSTEM "v4l/pixfmt-nv12.xml">
|
||||||
|
<!ENTITY nv12m SYSTEM "v4l/pixfmt-nv12m.xml">
|
||||||
<!ENTITY nv16 SYSTEM "v4l/pixfmt-nv16.xml">
|
<!ENTITY nv16 SYSTEM "v4l/pixfmt-nv16.xml">
|
||||||
<!ENTITY packed-rgb SYSTEM "v4l/pixfmt-packed-rgb.xml">
|
<!ENTITY packed-rgb SYSTEM "v4l/pixfmt-packed-rgb.xml">
|
||||||
<!ENTITY packed-yuv SYSTEM "v4l/pixfmt-packed-yuv.xml">
|
<!ENTITY packed-yuv SYSTEM "v4l/pixfmt-packed-yuv.xml">
|
||||||
@ -347,6 +405,7 @@
|
|||||||
<!ENTITY yuv410 SYSTEM "v4l/pixfmt-yuv410.xml">
|
<!ENTITY yuv410 SYSTEM "v4l/pixfmt-yuv410.xml">
|
||||||
<!ENTITY yuv411p SYSTEM "v4l/pixfmt-yuv411p.xml">
|
<!ENTITY yuv411p SYSTEM "v4l/pixfmt-yuv411p.xml">
|
||||||
<!ENTITY yuv420 SYSTEM "v4l/pixfmt-yuv420.xml">
|
<!ENTITY yuv420 SYSTEM "v4l/pixfmt-yuv420.xml">
|
||||||
|
<!ENTITY yuv420m SYSTEM "v4l/pixfmt-yuv420m.xml">
|
||||||
<!ENTITY yuv422p SYSTEM "v4l/pixfmt-yuv422p.xml">
|
<!ENTITY yuv422p SYSTEM "v4l/pixfmt-yuv422p.xml">
|
||||||
<!ENTITY yuyv SYSTEM "v4l/pixfmt-yuyv.xml">
|
<!ENTITY yuyv SYSTEM "v4l/pixfmt-yuyv.xml">
|
||||||
<!ENTITY yvyu SYSTEM "v4l/pixfmt-yvyu.xml">
|
<!ENTITY yvyu SYSTEM "v4l/pixfmt-yvyu.xml">
|
||||||
|
@ -106,6 +106,9 @@ Foundation. A copy of the license is included in the chapter entitled
|
|||||||
&sub-remote_controllers;
|
&sub-remote_controllers;
|
||||||
</chapter>
|
</chapter>
|
||||||
</part>
|
</part>
|
||||||
|
<part id="media_common">
|
||||||
|
&sub-media-controller;
|
||||||
|
</part>
|
||||||
|
|
||||||
&sub-fdl-appendix;
|
&sub-fdl-appendix;
|
||||||
|
|
||||||
|
@ -485,7 +485,7 @@ static void board_select_chip (struct mtd_info *mtd, int chip)
|
|||||||
Reed-Solomon library.
|
Reed-Solomon library.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
The ECC bytes must be placed immidiately after the data
|
The ECC bytes must be placed immediately after the data
|
||||||
bytes in order to make the syndrome generator work. This
|
bytes in order to make the syndrome generator work. This
|
||||||
is contrary to the usual layout used by software ECC. The
|
is contrary to the usual layout used by software ECC. The
|
||||||
separation of data and out of band area is not longer
|
separation of data and out of band area is not longer
|
||||||
@ -629,7 +629,7 @@ static void board_select_chip (struct mtd_info *mtd, int chip)
|
|||||||
holds the bad block table. Store a pointer to the pattern
|
holds the bad block table. Store a pointer to the pattern
|
||||||
in the pattern field. Further the length of the pattern has to be
|
in the pattern field. Further the length of the pattern has to be
|
||||||
stored in len and the offset in the spare area must be given
|
stored in len and the offset in the spare area must be given
|
||||||
in the offs member of the nand_bbt_descr stucture. For mirrored
|
in the offs member of the nand_bbt_descr structure. For mirrored
|
||||||
bad block tables different patterns are mandatory.</para></listitem>
|
bad block tables different patterns are mandatory.</para></listitem>
|
||||||
<listitem><para>Table creation</para>
|
<listitem><para>Table creation</para>
|
||||||
<para>Set the option NAND_BBT_CREATE to enable the table creation
|
<para>Set the option NAND_BBT_CREATE to enable the table creation
|
||||||
@ -648,7 +648,7 @@ static void board_select_chip (struct mtd_info *mtd, int chip)
|
|||||||
<listitem><para>Table version control</para>
|
<listitem><para>Table version control</para>
|
||||||
<para>Set the option NAND_BBT_VERSION to enable the table version control.
|
<para>Set the option NAND_BBT_VERSION to enable the table version control.
|
||||||
It's highly recommended to enable this for mirrored tables with write
|
It's highly recommended to enable this for mirrored tables with write
|
||||||
support. It makes sure that the risk of loosing the bad block
|
support. It makes sure that the risk of losing the bad block
|
||||||
table information is reduced to the loss of the information about the
|
table information is reduced to the loss of the information about the
|
||||||
one worn out block which should be marked bad. The version is stored in
|
one worn out block which should be marked bad. The version is stored in
|
||||||
4 consecutive bytes in the spare area of the device. The position of
|
4 consecutive bytes in the spare area of the device. The position of
|
||||||
@ -1060,19 +1060,19 @@ data in this page</entry>
|
|||||||
<row>
|
<row>
|
||||||
<entry>0x3D</entry>
|
<entry>0x3D</entry>
|
||||||
<entry>ECC byte 21</entry>
|
<entry>ECC byte 21</entry>
|
||||||
<entry>Error correction code byte 0 of the eigth 256 Bytes of data
|
<entry>Error correction code byte 0 of the eighth 256 Bytes of data
|
||||||
in this page</entry>
|
in this page</entry>
|
||||||
</row>
|
</row>
|
||||||
<row>
|
<row>
|
||||||
<entry>0x3E</entry>
|
<entry>0x3E</entry>
|
||||||
<entry>ECC byte 22</entry>
|
<entry>ECC byte 22</entry>
|
||||||
<entry>Error correction code byte 1 of the eigth 256 Bytes of data
|
<entry>Error correction code byte 1 of the eighth 256 Bytes of data
|
||||||
in this page</entry>
|
in this page</entry>
|
||||||
</row>
|
</row>
|
||||||
<row>
|
<row>
|
||||||
<entry>0x3F</entry>
|
<entry>0x3F</entry>
|
||||||
<entry>ECC byte 23</entry>
|
<entry>ECC byte 23</entry>
|
||||||
<entry>Error correction code byte 2 of the eigth 256 Bytes of data
|
<entry>Error correction code byte 2 of the eighth 256 Bytes of data
|
||||||
in this page</entry>
|
in this page</entry>
|
||||||
</row>
|
</row>
|
||||||
</tbody></tgroup></informaltable>
|
</tbody></tgroup></informaltable>
|
||||||
|
@ -133,7 +133,6 @@
|
|||||||
!Idrivers/rapidio/rio-sysfs.c
|
!Idrivers/rapidio/rio-sysfs.c
|
||||||
</sect1>
|
</sect1>
|
||||||
<sect1 id="PPC32_support"><title>PPC32 support</title>
|
<sect1 id="PPC32_support"><title>PPC32 support</title>
|
||||||
!Earch/powerpc/sysdev/fsl_rio.c
|
|
||||||
!Iarch/powerpc/sysdev/fsl_rio.c
|
!Iarch/powerpc/sysdev/fsl_rio.c
|
||||||
</sect1>
|
</sect1>
|
||||||
</chapter>
|
</chapter>
|
||||||
|
@ -267,8 +267,8 @@
|
|||||||
<sect1 id="machine-constraint">
|
<sect1 id="machine-constraint">
|
||||||
<title>Constraints</title>
|
<title>Constraints</title>
|
||||||
<para>
|
<para>
|
||||||
As well as definining the connections the machine interface
|
As well as defining the connections the machine interface
|
||||||
also provides constraints definining the operations that
|
also provides constraints defining the operations that
|
||||||
clients are allowed to perform and the parameters that may be
|
clients are allowed to perform and the parameters that may be
|
||||||
set. This is required since generally regulator devices will
|
set. This is required since generally regulator devices will
|
||||||
offer more flexibility than it is safe to use on a given
|
offer more flexibility than it is safe to use on a given
|
||||||
|
@ -797,7 +797,7 @@ framework to set up sysfs files for this region. Simply leave it alone.
|
|||||||
perform some initialization. After that, your hardware
|
perform some initialization. After that, your hardware
|
||||||
starts working and will generate an interrupt as soon
|
starts working and will generate an interrupt as soon
|
||||||
as it's finished, has some data available, or needs your
|
as it's finished, has some data available, or needs your
|
||||||
attention because an error occured.
|
attention because an error occurred.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
<filename>/dev/uioX</filename> is a read-only file. A
|
<filename>/dev/uioX</filename> is a read-only file. A
|
||||||
|
@ -690,7 +690,7 @@ usbdev_ioctl (int fd, int ifno, unsigned request, void *param)
|
|||||||
</para><para>
|
</para><para>
|
||||||
This request lets kernel drivers talk to user mode code
|
This request lets kernel drivers talk to user mode code
|
||||||
through filesystem operations even when they don't create
|
through filesystem operations even when they don't create
|
||||||
a charactor or block special device.
|
a character or block special device.
|
||||||
It's also been used to do things like ask devices what
|
It's also been used to do things like ask devices what
|
||||||
device special file should be used.
|
device special file should be used.
|
||||||
Two pre-defined ioctls are used
|
Two pre-defined ioctls are used
|
||||||
|
BIN
Documentation/DocBook/v4l/bayer.pdf
Normal file
BIN
Documentation/DocBook/v4l/bayer.pdf
Normal file
Binary file not shown.
BIN
Documentation/DocBook/v4l/bayer.png
Normal file
BIN
Documentation/DocBook/v4l/bayer.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.5 KiB |
@ -100,7 +100,7 @@ linux-kernel@vger.kernel.org, 2002-11-20. --></para>
|
|||||||
|
|
||||||
<para>By convention system administrators create various
|
<para>By convention system administrators create various
|
||||||
character device special files with these major and minor numbers in
|
character device special files with these major and minor numbers in
|
||||||
the <filename>/dev</filename> directory. The names recomended for the
|
the <filename>/dev</filename> directory. The names recommended for the
|
||||||
different V4L2 device types are listed in <xref linkend="devices" />.
|
different V4L2 device types are listed in <xref linkend="devices" />.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
@ -846,6 +846,8 @@ conversion routine or library for integration into applications.</para>
|
|||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
&sub-planar-apis;
|
||||||
|
|
||||||
<section id="crop">
|
<section id="crop">
|
||||||
<title>Image Cropping, Insertion and Scaling</title>
|
<title>Image Cropping, Insertion and Scaling</title>
|
||||||
|
|
||||||
|
@ -1711,8 +1711,8 @@ ioctl would enumerate the available audio inputs. An ioctl to
|
|||||||
determine the current audio input, if more than one combines with the
|
determine the current audio input, if more than one combines with the
|
||||||
current video input, did not exist. So
|
current video input, did not exist. So
|
||||||
<constant>VIDIOC_G_AUDIO</constant> was renamed to
|
<constant>VIDIOC_G_AUDIO</constant> was renamed to
|
||||||
<constant>VIDIOC_G_AUDIO_OLD</constant>, this ioctl will be removed in
|
<constant>VIDIOC_G_AUDIO_OLD</constant>, this ioctl was removed on
|
||||||
the future. The &VIDIOC-ENUMAUDIO; ioctl was added to enumerate
|
Kernel 2.6.39. The &VIDIOC-ENUMAUDIO; ioctl was added to enumerate
|
||||||
audio inputs, while &VIDIOC-G-AUDIO; now reports the current audio
|
audio inputs, while &VIDIOC-G-AUDIO; now reports the current audio
|
||||||
input.</para>
|
input.</para>
|
||||||
<para>The same changes were made to &VIDIOC-G-AUDOUT; and
|
<para>The same changes were made to &VIDIOC-G-AUDOUT; and
|
||||||
@ -1726,7 +1726,7 @@ must be updated to successfully compile again.</para>
|
|||||||
<para>The &VIDIOC-OVERLAY; ioctl was incorrectly defined with
|
<para>The &VIDIOC-OVERLAY; ioctl was incorrectly defined with
|
||||||
write-read parameter. It was changed to write-only, while the write-read
|
write-read parameter. It was changed to write-only, while the write-read
|
||||||
version was renamed to <constant>VIDIOC_OVERLAY_OLD</constant>. The old
|
version was renamed to <constant>VIDIOC_OVERLAY_OLD</constant>. The old
|
||||||
ioctl will be removed in the future. Until further the "videodev"
|
ioctl was removed on Kernel 2.6.39. Until further the "videodev"
|
||||||
kernel module will automatically translate to the new version, so drivers
|
kernel module will automatically translate to the new version, so drivers
|
||||||
must be recompiled, but not applications.</para>
|
must be recompiled, but not applications.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
@ -1744,7 +1744,7 @@ surface can be seen.</para>
|
|||||||
defined with write-only parameter, inconsistent with other ioctls
|
defined with write-only parameter, inconsistent with other ioctls
|
||||||
modifying their argument. They were changed to write-read, while a
|
modifying their argument. They were changed to write-read, while a
|
||||||
<constant>_OLD</constant> suffix was added to the write-only versions.
|
<constant>_OLD</constant> suffix was added to the write-only versions.
|
||||||
The old ioctls will be removed in the future. Drivers and
|
The old ioctls were removed on Kernel 2.6.39. Drivers and
|
||||||
applications assuming a constant parameter need an update.</para>
|
applications assuming a constant parameter need an update.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</orderedlist>
|
</orderedlist>
|
||||||
@ -1815,8 +1815,8 @@ yet to be addressed, for details see <xref
|
|||||||
<para>The &VIDIOC-CROPCAP; ioctl was incorrectly defined
|
<para>The &VIDIOC-CROPCAP; ioctl was incorrectly defined
|
||||||
with read-only parameter. It is now defined as write-read ioctl, while
|
with read-only parameter. It is now defined as write-read ioctl, while
|
||||||
the read-only version was renamed to
|
the read-only version was renamed to
|
||||||
<constant>VIDIOC_CROPCAP_OLD</constant>. The old ioctl will be removed
|
<constant>VIDIOC_CROPCAP_OLD</constant>. The old ioctl was removed
|
||||||
in the future.</para>
|
on Kernel 2.6.39.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</orderedlist>
|
</orderedlist>
|
||||||
</section>
|
</section>
|
||||||
@ -2353,6 +2353,20 @@ that used it. It was originally scheduled for removal in 2.6.35.
|
|||||||
</listitem>
|
</listitem>
|
||||||
</orderedlist>
|
</orderedlist>
|
||||||
</section>
|
</section>
|
||||||
|
<section>
|
||||||
|
<title>V4L2 in Linux 2.6.39</title>
|
||||||
|
<orderedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>The old VIDIOC_*_OLD symbols and V4L1 support were removed.</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>Multi-planar API added. Does not affect the compatibility of
|
||||||
|
current drivers and applications. See
|
||||||
|
<link linkend="planar-apis">multi-planar API</link>
|
||||||
|
for details.</para>
|
||||||
|
</listitem>
|
||||||
|
</orderedlist>
|
||||||
|
</section>
|
||||||
|
|
||||||
<section id="other">
|
<section id="other">
|
||||||
<title>Relation of V4L2 to other Linux multimedia APIs</title>
|
<title>Relation of V4L2 to other Linux multimedia APIs</title>
|
||||||
|
@ -1243,7 +1243,7 @@ values are:</entry>
|
|||||||
</row><row><entry spanname="descr">Mutes the audio when
|
</row><row><entry spanname="descr">Mutes the audio when
|
||||||
capturing. This is not done by muting audio hardware, which can still
|
capturing. This is not done by muting audio hardware, which can still
|
||||||
produce a slight hiss, but in the encoder itself, guaranteeing a fixed
|
produce a slight hiss, but in the encoder itself, guaranteeing a fixed
|
||||||
and reproducable audio bitstream. 0 = unmuted, 1 = muted.</entry>
|
and reproducible audio bitstream. 0 = unmuted, 1 = muted.</entry>
|
||||||
</row>
|
</row>
|
||||||
<row><entry></entry></row>
|
<row><entry></entry></row>
|
||||||
<row id="v4l2-mpeg-video-encoding">
|
<row id="v4l2-mpeg-video-encoding">
|
||||||
|
@ -18,7 +18,8 @@ files are used for video output devices.</para>
|
|||||||
<title>Querying Capabilities</title>
|
<title>Querying Capabilities</title>
|
||||||
|
|
||||||
<para>Devices supporting the video capture interface set the
|
<para>Devices supporting the video capture interface set the
|
||||||
<constant>V4L2_CAP_VIDEO_CAPTURE</constant> flag in the
|
<constant>V4L2_CAP_VIDEO_CAPTURE</constant> or
|
||||||
|
<constant>V4L2_CAP_VIDEO_CAPTURE_MPLANE</constant> flag in the
|
||||||
<structfield>capabilities</structfield> field of &v4l2-capability;
|
<structfield>capabilities</structfield> field of &v4l2-capability;
|
||||||
returned by the &VIDIOC-QUERYCAP; ioctl. As secondary device functions
|
returned by the &VIDIOC-QUERYCAP; ioctl. As secondary device functions
|
||||||
they may also support the <link linkend="overlay">video overlay</link>
|
they may also support the <link linkend="overlay">video overlay</link>
|
||||||
@ -64,9 +65,11 @@ linkend="crop" />.</para>
|
|||||||
|
|
||||||
<para>To query the current image format applications set the
|
<para>To query the current image format applications set the
|
||||||
<structfield>type</structfield> field of a &v4l2-format; to
|
<structfield>type</structfield> field of a &v4l2-format; to
|
||||||
<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant> and call the
|
<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant> or
|
||||||
|
<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE</constant> and call the
|
||||||
&VIDIOC-G-FMT; ioctl with a pointer to this structure. Drivers fill
|
&VIDIOC-G-FMT; ioctl with a pointer to this structure. Drivers fill
|
||||||
the &v4l2-pix-format; <structfield>pix</structfield> member of the
|
the &v4l2-pix-format; <structfield>pix</structfield> or the
|
||||||
|
&v4l2-pix-format-mplane; <structfield>pix_mp</structfield> member of the
|
||||||
<structfield>fmt</structfield> union.</para>
|
<structfield>fmt</structfield> union.</para>
|
||||||
|
|
||||||
<para>To request different parameters applications set the
|
<para>To request different parameters applications set the
|
||||||
@ -84,8 +87,8 @@ adjust the parameters and finally return the actual parameters as
|
|||||||
without disabling I/O or possibly time consuming hardware
|
without disabling I/O or possibly time consuming hardware
|
||||||
preparations.</para>
|
preparations.</para>
|
||||||
|
|
||||||
<para>The contents of &v4l2-pix-format; are discussed in <xref
|
<para>The contents of &v4l2-pix-format; and &v4l2-pix-format-mplane;
|
||||||
linkend="pixfmt" />. See also the specification of the
|
are discussed in <xref linkend="pixfmt" />. See also the specification of the
|
||||||
<constant>VIDIOC_G_FMT</constant>, <constant>VIDIOC_S_FMT</constant>
|
<constant>VIDIOC_G_FMT</constant>, <constant>VIDIOC_S_FMT</constant>
|
||||||
and <constant>VIDIOC_TRY_FMT</constant> ioctls for details. Video
|
and <constant>VIDIOC_TRY_FMT</constant> ioctls for details. Video
|
||||||
capture devices must implement both the
|
capture devices must implement both the
|
||||||
|
@ -17,7 +17,8 @@ files are used for video capture devices.</para>
|
|||||||
<title>Querying Capabilities</title>
|
<title>Querying Capabilities</title>
|
||||||
|
|
||||||
<para>Devices supporting the video output interface set the
|
<para>Devices supporting the video output interface set the
|
||||||
<constant>V4L2_CAP_VIDEO_OUTPUT</constant> flag in the
|
<constant>V4L2_CAP_VIDEO_OUTPUT</constant> or
|
||||||
|
<constant>V4L2_CAP_VIDEO_OUTPUT_MPLANE</constant> flag in the
|
||||||
<structfield>capabilities</structfield> field of &v4l2-capability;
|
<structfield>capabilities</structfield> field of &v4l2-capability;
|
||||||
returned by the &VIDIOC-QUERYCAP; ioctl. As secondary device functions
|
returned by the &VIDIOC-QUERYCAP; ioctl. As secondary device functions
|
||||||
they may also support the <link linkend="raw-vbi">raw VBI
|
they may also support the <link linkend="raw-vbi">raw VBI
|
||||||
@ -60,9 +61,11 @@ linkend="crop" />.</para>
|
|||||||
|
|
||||||
<para>To query the current image format applications set the
|
<para>To query the current image format applications set the
|
||||||
<structfield>type</structfield> field of a &v4l2-format; to
|
<structfield>type</structfield> field of a &v4l2-format; to
|
||||||
<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant> and call the
|
<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant> or
|
||||||
|
<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE</constant> and call the
|
||||||
&VIDIOC-G-FMT; ioctl with a pointer to this structure. Drivers fill
|
&VIDIOC-G-FMT; ioctl with a pointer to this structure. Drivers fill
|
||||||
the &v4l2-pix-format; <structfield>pix</structfield> member of the
|
the &v4l2-pix-format; <structfield>pix</structfield> or the
|
||||||
|
&v4l2-pix-format-mplane; <structfield>pix_mp</structfield> member of the
|
||||||
<structfield>fmt</structfield> union.</para>
|
<structfield>fmt</structfield> union.</para>
|
||||||
|
|
||||||
<para>To request different parameters applications set the
|
<para>To request different parameters applications set the
|
||||||
@ -80,8 +83,8 @@ adjust the parameters and finally return the actual parameters as
|
|||||||
without disabling I/O or possibly time consuming hardware
|
without disabling I/O or possibly time consuming hardware
|
||||||
preparations.</para>
|
preparations.</para>
|
||||||
|
|
||||||
<para>The contents of &v4l2-pix-format; are discussed in <xref
|
<para>The contents of &v4l2-pix-format; and &v4l2-pix-format-mplane;
|
||||||
linkend="pixfmt" />. See also the specification of the
|
are discussed in <xref linkend="pixfmt" />. See also the specification of the
|
||||||
<constant>VIDIOC_G_FMT</constant>, <constant>VIDIOC_S_FMT</constant>
|
<constant>VIDIOC_G_FMT</constant>, <constant>VIDIOC_S_FMT</constant>
|
||||||
and <constant>VIDIOC_TRY_FMT</constant> ioctls for details. Video
|
and <constant>VIDIOC_TRY_FMT</constant> ioctls for details. Video
|
||||||
output devices must implement both the
|
output devices must implement both the
|
||||||
|
313
Documentation/DocBook/v4l/dev-subdev.xml
Normal file
313
Documentation/DocBook/v4l/dev-subdev.xml
Normal file
@ -0,0 +1,313 @@
|
|||||||
|
<title>Sub-device Interface</title>
|
||||||
|
|
||||||
|
<note>
|
||||||
|
<title>Experimental</title>
|
||||||
|
<para>This is an <link linkend="experimental">experimental</link>
|
||||||
|
interface and may change in the future.</para>
|
||||||
|
</note>
|
||||||
|
|
||||||
|
<para>The complex nature of V4L2 devices, where hardware is often made of
|
||||||
|
several integrated circuits that need to interact with each other in a
|
||||||
|
controlled way, leads to complex V4L2 drivers. The drivers usually reflect
|
||||||
|
the hardware model in software, and model the different hardware components
|
||||||
|
as software blocks called sub-devices.</para>
|
||||||
|
|
||||||
|
<para>V4L2 sub-devices are usually kernel-only objects. If the V4L2 driver
|
||||||
|
implements the media device API, they will automatically inherit from media
|
||||||
|
entities. Applications will be able to enumerate the sub-devices and discover
|
||||||
|
the hardware topology using the media entities, pads and links enumeration
|
||||||
|
API.</para>
|
||||||
|
|
||||||
|
<para>In addition to make sub-devices discoverable, drivers can also choose
|
||||||
|
to make them directly configurable by applications. When both the sub-device
|
||||||
|
driver and the V4L2 device driver support this, sub-devices will feature a
|
||||||
|
character device node on which ioctls can be called to
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem><para>query, read and write sub-devices controls</para></listitem>
|
||||||
|
<listitem><para>subscribe and unsubscribe to events and retrieve them</para></listitem>
|
||||||
|
<listitem><para>negotiate image formats on individual pads</para></listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>Sub-device character device nodes, conventionally named
|
||||||
|
<filename>/dev/v4l-subdev*</filename>, use major number 81.</para>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<title>Controls</title>
|
||||||
|
<para>Most V4L2 controls are implemented by sub-device hardware. Drivers
|
||||||
|
usually merge all controls and expose them through video device nodes.
|
||||||
|
Applications can control all sub-devices through a single interface.</para>
|
||||||
|
|
||||||
|
<para>Complex devices sometimes implement the same control in different
|
||||||
|
pieces of hardware. This situation is common in embedded platforms, where
|
||||||
|
both sensors and image processing hardware implement identical functions,
|
||||||
|
such as contrast adjustment, white balance or faulty pixels correction. As
|
||||||
|
the V4L2 controls API doesn't support several identical controls in a single
|
||||||
|
device, all but one of the identical controls are hidden.</para>
|
||||||
|
|
||||||
|
<para>Applications can access those hidden controls through the sub-device
|
||||||
|
node with the V4L2 control API described in <xref linkend="control" />. The
|
||||||
|
ioctls behave identically as when issued on V4L2 device nodes, with the
|
||||||
|
exception that they deal only with controls implemented in the sub-device.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>Depending on the driver, those controls might also be exposed through
|
||||||
|
one (or several) V4L2 device nodes.</para>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<title>Events</title>
|
||||||
|
<para>V4L2 sub-devices can notify applications of events as described in
|
||||||
|
<xref linkend="event" />. The API behaves identically as when used on V4L2
|
||||||
|
device nodes, with the exception that it only deals with events generated by
|
||||||
|
the sub-device. Depending on the driver, those events might also be reported
|
||||||
|
on one (or several) V4L2 device nodes.</para>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="pad-level-formats">
|
||||||
|
<title>Pad-level Formats</title>
|
||||||
|
|
||||||
|
<warning><para>Pad-level formats are only applicable to very complex device that
|
||||||
|
need to expose low-level format configuration to user space. Generic V4L2
|
||||||
|
applications do <emphasis>not</emphasis> need to use the API described in
|
||||||
|
this section.</para></warning>
|
||||||
|
|
||||||
|
<note><para>For the purpose of this section, the term
|
||||||
|
<wordasword>format</wordasword> means the combination of media bus data
|
||||||
|
format, frame width and frame height.</para></note>
|
||||||
|
|
||||||
|
<para>Image formats are typically negotiated on video capture and output
|
||||||
|
devices using the <link linkend="crop">cropping and scaling</link> ioctls.
|
||||||
|
The driver is responsible for configuring every block in the video pipeline
|
||||||
|
according to the requested format at the pipeline input and/or
|
||||||
|
output.</para>
|
||||||
|
|
||||||
|
<para>For complex devices, such as often found in embedded systems,
|
||||||
|
identical image sizes at the output of a pipeline can be achieved using
|
||||||
|
different hardware configurations. One such example is shown on
|
||||||
|
<xref linkend="pipeline-scaling" />, where
|
||||||
|
image scaling can be performed on both the video sensor and the host image
|
||||||
|
processing hardware.</para>
|
||||||
|
|
||||||
|
<figure id="pipeline-scaling">
|
||||||
|
<title>Image Format Negotiation on Pipelines</title>
|
||||||
|
<mediaobject>
|
||||||
|
<imageobject>
|
||||||
|
<imagedata fileref="pipeline.pdf" format="PS" />
|
||||||
|
</imageobject>
|
||||||
|
<imageobject>
|
||||||
|
<imagedata fileref="pipeline.png" format="PNG" />
|
||||||
|
</imageobject>
|
||||||
|
<textobject>
|
||||||
|
<phrase>High quality and high speed pipeline configuration</phrase>
|
||||||
|
</textobject>
|
||||||
|
</mediaobject>
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
<para>The sensor scaler is usually of less quality than the host scaler, but
|
||||||
|
scaling on the sensor is required to achieve higher frame rates. Depending
|
||||||
|
on the use case (quality vs. speed), the pipeline must be configured
|
||||||
|
differently. Applications need to configure the formats at every point in
|
||||||
|
the pipeline explicitly.</para>
|
||||||
|
|
||||||
|
<para>Drivers that implement the <link linkend="media-controller-intro">media
|
||||||
|
API</link> can expose pad-level image format configuration to applications.
|
||||||
|
When they do, applications can use the &VIDIOC-SUBDEV-G-FMT; and
|
||||||
|
&VIDIOC-SUBDEV-S-FMT; ioctls. to negotiate formats on a per-pad basis.</para>
|
||||||
|
|
||||||
|
<para>Applications are responsible for configuring coherent parameters on
|
||||||
|
the whole pipeline and making sure that connected pads have compatible
|
||||||
|
formats. The pipeline is checked for formats mismatch at &VIDIOC-STREAMON;
|
||||||
|
time, and an &EPIPE; is then returned if the configuration is
|
||||||
|
invalid.</para>
|
||||||
|
|
||||||
|
<para>Pad-level image format configuration support can be tested by calling
|
||||||
|
the &VIDIOC-SUBDEV-G-FMT; ioctl on pad 0. If the driver returns an &EINVAL;
|
||||||
|
pad-level format configuration is not supported by the sub-device.</para>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<title>Format Negotiation</title>
|
||||||
|
|
||||||
|
<para>Acceptable formats on pads can (and usually do) depend on a number
|
||||||
|
of external parameters, such as formats on other pads, active links, or
|
||||||
|
even controls. Finding a combination of formats on all pads in a video
|
||||||
|
pipeline, acceptable to both application and driver, can't rely on formats
|
||||||
|
enumeration only. A format negotiation mechanism is required.</para>
|
||||||
|
|
||||||
|
<para>Central to the format negotiation mechanism are the get/set format
|
||||||
|
operations. When called with the <structfield>which</structfield> argument
|
||||||
|
set to <constant>V4L2_SUBDEV_FORMAT_TRY</constant>, the
|
||||||
|
&VIDIOC-SUBDEV-G-FMT; and &VIDIOC-SUBDEV-S-FMT; ioctls operate on a set of
|
||||||
|
formats parameters that are not connected to the hardware configuration.
|
||||||
|
Modifying those 'try' formats leaves the device state untouched (this
|
||||||
|
applies to both the software state stored in the driver and the hardware
|
||||||
|
state stored in the device itself).</para>
|
||||||
|
|
||||||
|
<para>While not kept as part of the device state, try formats are stored
|
||||||
|
in the sub-device file handles. A &VIDIOC-SUBDEV-G-FMT; call will return
|
||||||
|
the last try format set <emphasis>on the same sub-device file
|
||||||
|
handle</emphasis>. Several applications querying the same sub-device at
|
||||||
|
the same time will thus not interact with each other.</para>
|
||||||
|
|
||||||
|
<para>To find out whether a particular format is supported by the device,
|
||||||
|
applications use the &VIDIOC-SUBDEV-S-FMT; ioctl. Drivers verify and, if
|
||||||
|
needed, change the requested <structfield>format</structfield> based on
|
||||||
|
device requirements and return the possibly modified value. Applications
|
||||||
|
can then choose to try a different format or accept the returned value and
|
||||||
|
continue.</para>
|
||||||
|
|
||||||
|
<para>Formats returned by the driver during a negotiation iteration are
|
||||||
|
guaranteed to be supported by the device. In particular, drivers guarantee
|
||||||
|
that a returned format will not be further changed if passed to an
|
||||||
|
&VIDIOC-SUBDEV-S-FMT; call as-is (as long as external parameters, such as
|
||||||
|
formats on other pads or links' configuration are not changed).</para>
|
||||||
|
|
||||||
|
<para>Drivers automatically propagate formats inside sub-devices. When a
|
||||||
|
try or active format is set on a pad, corresponding formats on other pads
|
||||||
|
of the same sub-device can be modified by the driver. Drivers are free to
|
||||||
|
modify formats as required by the device. However, they should comply with
|
||||||
|
the following rules when possible:
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem><para>Formats should be propagated from sink pads to source pads.
|
||||||
|
Modifying a format on a source pad should not modify the format on any
|
||||||
|
sink pad.</para></listitem>
|
||||||
|
<listitem><para>Sub-devices that scale frames using variable scaling factors
|
||||||
|
should reset the scale factors to default values when sink pads formats
|
||||||
|
are modified. If the 1:1 scaling ratio is supported, this means that
|
||||||
|
source pads formats should be reset to the sink pads formats.</para></listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>Formats are not propagated across links, as that would involve
|
||||||
|
propagating them from one sub-device file handle to another. Applications
|
||||||
|
must then take care to configure both ends of every link explicitly with
|
||||||
|
compatible formats. Identical formats on the two ends of a link are
|
||||||
|
guaranteed to be compatible. Drivers are free to accept different formats
|
||||||
|
matching device requirements as being compatible.</para>
|
||||||
|
|
||||||
|
<para><xref linkend="sample-pipeline-config" />
|
||||||
|
shows a sample configuration sequence for the pipeline described in
|
||||||
|
<xref linkend="pipeline-scaling" /> (table
|
||||||
|
columns list entity names and pad numbers).</para>
|
||||||
|
|
||||||
|
<table pgwide="0" frame="none" id="sample-pipeline-config">
|
||||||
|
<title>Sample Pipeline Configuration</title>
|
||||||
|
<tgroup cols="3">
|
||||||
|
<colspec colname="what"/>
|
||||||
|
<colspec colname="sensor-0" />
|
||||||
|
<colspec colname="frontend-0" />
|
||||||
|
<colspec colname="frontend-1" />
|
||||||
|
<colspec colname="scaler-0" />
|
||||||
|
<colspec colname="scaler-1" />
|
||||||
|
<thead>
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>Sensor/0</entry>
|
||||||
|
<entry>Frontend/0</entry>
|
||||||
|
<entry>Frontend/1</entry>
|
||||||
|
<entry>Scaler/0</entry>
|
||||||
|
<entry>Scaler/1</entry>
|
||||||
|
</row>
|
||||||
|
</thead>
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry>Initial state</entry>
|
||||||
|
<entry>2048x1536</entry>
|
||||||
|
<entry>-</entry>
|
||||||
|
<entry>-</entry>
|
||||||
|
<entry>-</entry>
|
||||||
|
<entry>-</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>Configure frontend input</entry>
|
||||||
|
<entry>2048x1536</entry>
|
||||||
|
<entry><emphasis>2048x1536</emphasis></entry>
|
||||||
|
<entry><emphasis>2046x1534</emphasis></entry>
|
||||||
|
<entry>-</entry>
|
||||||
|
<entry>-</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>Configure scaler input</entry>
|
||||||
|
<entry>2048x1536</entry>
|
||||||
|
<entry>2048x1536</entry>
|
||||||
|
<entry>2046x1534</entry>
|
||||||
|
<entry><emphasis>2046x1534</emphasis></entry>
|
||||||
|
<entry><emphasis>2046x1534</emphasis></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>Configure scaler output</entry>
|
||||||
|
<entry>2048x1536</entry>
|
||||||
|
<entry>2048x1536</entry>
|
||||||
|
<entry>2046x1534</entry>
|
||||||
|
<entry>2046x1534</entry>
|
||||||
|
<entry><emphasis>1280x960</emphasis></entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
<orderedlist>
|
||||||
|
<listitem><para>Initial state. The sensor output is set to its native 3MP
|
||||||
|
resolution. Resolutions on the host frontend and scaler input and output
|
||||||
|
pads are undefined.</para></listitem>
|
||||||
|
<listitem><para>The application configures the frontend input pad resolution to
|
||||||
|
2048x1536. The driver propagates the format to the frontend output pad.
|
||||||
|
Note that the propagated output format can be different, as in this case,
|
||||||
|
than the input format, as the hardware might need to crop pixels (for
|
||||||
|
instance when converting a Bayer filter pattern to RGB or YUV).</para></listitem>
|
||||||
|
<listitem><para>The application configures the scaler input pad resolution to
|
||||||
|
2046x1534 to match the frontend output resolution. The driver propagates
|
||||||
|
the format to the scaler output pad.</para></listitem>
|
||||||
|
<listitem><para>The application configures the scaler output pad resolution to
|
||||||
|
1280x960.</para></listitem>
|
||||||
|
</orderedlist>
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>When satisfied with the try results, applications can set the active
|
||||||
|
formats by setting the <structfield>which</structfield> argument to
|
||||||
|
<constant>V4L2_SUBDEV_FORMAT_TRY</constant>. Active formats are changed
|
||||||
|
exactly as try formats by drivers. To avoid modifying the hardware state
|
||||||
|
during format negotiation, applications should negotiate try formats first
|
||||||
|
and then modify the active settings using the try formats returned during
|
||||||
|
the last negotiation iteration. This guarantees that the active format
|
||||||
|
will be applied as-is by the driver without being modified.
|
||||||
|
</para>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<title>Cropping and scaling</title>
|
||||||
|
|
||||||
|
<para>Many sub-devices support cropping frames on their input or output
|
||||||
|
pads (or possible even on both). Cropping is used to select the area of
|
||||||
|
interest in an image, typically on a video sensor or video decoder. It can
|
||||||
|
also be used as part of digital zoom implementations to select the area of
|
||||||
|
the image that will be scaled up.</para>
|
||||||
|
|
||||||
|
<para>Crop settings are defined by a crop rectangle and represented in a
|
||||||
|
&v4l2-rect; by the coordinates of the top left corner and the rectangle
|
||||||
|
size. Both the coordinates and sizes are expressed in pixels.</para>
|
||||||
|
|
||||||
|
<para>The crop rectangle is retrieved and set using the
|
||||||
|
&VIDIOC-SUBDEV-G-CROP; and &VIDIOC-SUBDEV-S-CROP; ioctls. Like for pad
|
||||||
|
formats, drivers store try and active crop rectangles. The format
|
||||||
|
negotiation mechanism applies to crop settings as well.</para>
|
||||||
|
|
||||||
|
<para>On input pads, cropping is applied relatively to the current pad
|
||||||
|
format. The pad format represents the image size as received by the
|
||||||
|
sub-device from the previous block in the pipeline, and the crop rectangle
|
||||||
|
represents the sub-image that will be transmitted further inside the
|
||||||
|
sub-device for processing. The crop rectangle be entirely containted
|
||||||
|
inside the input image size.</para>
|
||||||
|
|
||||||
|
<para>Input crop rectangle are reset to their default value when the input
|
||||||
|
image format is modified. Drivers should use the input image size as the
|
||||||
|
crop rectangle default value, but hardware requirements may prevent this.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>Cropping behaviour on output pads is not defined.</para>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
&sub-subdev-formats;
|
@ -45,7 +45,10 @@ just specify a <constant>NULL</constant> pointer here.</para>
|
|||||||
<listitem>
|
<listitem>
|
||||||
<para>Length of the memory area to map. This must be the
|
<para>Length of the memory area to map. This must be the
|
||||||
same value as returned by the driver in the &v4l2-buffer;
|
same value as returned by the driver in the &v4l2-buffer;
|
||||||
<structfield>length</structfield> field.</para>
|
<structfield>length</structfield> field for the
|
||||||
|
single-planar API, and the same value as returned by the driver
|
||||||
|
in the &v4l2-plane; <structfield>length</structfield> field for the
|
||||||
|
multi-planar API.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
@ -106,7 +109,10 @@ flag.</para>
|
|||||||
<listitem>
|
<listitem>
|
||||||
<para>Offset of the buffer in device memory. This must be the
|
<para>Offset of the buffer in device memory. This must be the
|
||||||
same value as returned by the driver in the &v4l2-buffer;
|
same value as returned by the driver in the &v4l2-buffer;
|
||||||
<structfield>m</structfield> union <structfield>offset</structfield> field.</para>
|
<structfield>m</structfield> union <structfield>offset</structfield> field for
|
||||||
|
the single-planar API, and the same value as returned by the driver
|
||||||
|
in the &v4l2-plane; <structfield>m</structfield> union
|
||||||
|
<structfield>mem_offset</structfield> field for the multi-planar API.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
</variablelist>
|
</variablelist>
|
||||||
|
@ -37,7 +37,8 @@
|
|||||||
<para>Length of the mapped buffer. This must be the same
|
<para>Length of the mapped buffer. This must be the same
|
||||||
value as given to <function>mmap()</function> and returned by the
|
value as given to <function>mmap()</function> and returned by the
|
||||||
driver in the &v4l2-buffer; <structfield>length</structfield>
|
driver in the &v4l2-buffer; <structfield>length</structfield>
|
||||||
field.</para>
|
field for the single-planar API and in the &v4l2-plane;
|
||||||
|
<structfield>length</structfield> field for the multi-planar API.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
</variablelist>
|
</variablelist>
|
||||||
|
@ -121,18 +121,22 @@ mapped.</para>
|
|||||||
<para>Before applications can access the buffers they must map
|
<para>Before applications can access the buffers they must map
|
||||||
them into their address space with the &func-mmap; function. The
|
them into their address space with the &func-mmap; function. The
|
||||||
location of the buffers in device memory can be determined with the
|
location of the buffers in device memory can be determined with the
|
||||||
&VIDIOC-QUERYBUF; ioctl. The <structfield>m.offset</structfield> and
|
&VIDIOC-QUERYBUF; ioctl. In the single-planar API case, the
|
||||||
<structfield>length</structfield> returned in a &v4l2-buffer; are
|
<structfield>m.offset</structfield> and <structfield>length</structfield>
|
||||||
passed as sixth and second parameter to the
|
returned in a &v4l2-buffer; are passed as sixth and second parameter to the
|
||||||
<function>mmap()</function> function. The offset and length values
|
<function>mmap()</function> function. When using the multi-planar API,
|
||||||
must not be modified. Remember the buffers are allocated in physical
|
struct &v4l2-buffer; contains an array of &v4l2-plane; structures, each
|
||||||
memory, as opposed to virtual memory which can be swapped out to disk.
|
containing its own <structfield>m.offset</structfield> and
|
||||||
Applications should free the buffers as soon as possible with the
|
<structfield>length</structfield>. When using the multi-planar API, every
|
||||||
&func-munmap; function.</para>
|
plane of every buffer has to be mapped separately, so the number of
|
||||||
|
calls to &func-mmap; should be equal to number of buffers times number of
|
||||||
|
planes in each buffer. The offset and length values must not be modified.
|
||||||
|
Remember, the buffers are allocated in physical memory, as opposed to virtual
|
||||||
|
memory, which can be swapped out to disk. Applications should free the buffers
|
||||||
|
as soon as possible with the &func-munmap; function.</para>
|
||||||
|
|
||||||
<example>
|
<example>
|
||||||
<title>Mapping buffers</title>
|
<title>Mapping buffers in the single-planar API</title>
|
||||||
|
|
||||||
<programlisting>
|
<programlisting>
|
||||||
&v4l2-requestbuffers; reqbuf;
|
&v4l2-requestbuffers; reqbuf;
|
||||||
struct {
|
struct {
|
||||||
@ -141,63 +145,145 @@ struct {
|
|||||||
} *buffers;
|
} *buffers;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
memset (&reqbuf, 0, sizeof (reqbuf));
|
memset(&reqbuf, 0, sizeof(reqbuf));
|
||||||
reqbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
reqbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||||
reqbuf.memory = V4L2_MEMORY_MMAP;
|
reqbuf.memory = V4L2_MEMORY_MMAP;
|
||||||
reqbuf.count = 20;
|
reqbuf.count = 20;
|
||||||
|
|
||||||
if (-1 == ioctl (fd, &VIDIOC-REQBUFS;, &reqbuf)) {
|
if (-1 == ioctl (fd, &VIDIOC-REQBUFS;, &reqbuf)) {
|
||||||
if (errno == EINVAL)
|
if (errno == EINVAL)
|
||||||
printf ("Video capturing or mmap-streaming is not supported\n");
|
printf("Video capturing or mmap-streaming is not supported\n");
|
||||||
else
|
else
|
||||||
perror ("VIDIOC_REQBUFS");
|
perror("VIDIOC_REQBUFS");
|
||||||
|
|
||||||
exit (EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We want at least five buffers. */
|
/* We want at least five buffers. */
|
||||||
|
|
||||||
if (reqbuf.count < 5) {
|
if (reqbuf.count < 5) {
|
||||||
/* You may need to free the buffers here. */
|
/* You may need to free the buffers here. */
|
||||||
printf ("Not enough buffer memory\n");
|
printf("Not enough buffer memory\n");
|
||||||
exit (EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
buffers = calloc (reqbuf.count, sizeof (*buffers));
|
buffers = calloc(reqbuf.count, sizeof(*buffers));
|
||||||
assert (buffers != NULL);
|
assert(buffers != NULL);
|
||||||
|
|
||||||
for (i = 0; i < reqbuf.count; i++) {
|
for (i = 0; i < reqbuf.count; i++) {
|
||||||
&v4l2-buffer; buffer;
|
&v4l2-buffer; buffer;
|
||||||
|
|
||||||
memset (&buffer, 0, sizeof (buffer));
|
memset(&buffer, 0, sizeof(buffer));
|
||||||
buffer.type = reqbuf.type;
|
buffer.type = reqbuf.type;
|
||||||
buffer.memory = V4L2_MEMORY_MMAP;
|
buffer.memory = V4L2_MEMORY_MMAP;
|
||||||
buffer.index = i;
|
buffer.index = i;
|
||||||
|
|
||||||
if (-1 == ioctl (fd, &VIDIOC-QUERYBUF;, &buffer)) {
|
if (-1 == ioctl (fd, &VIDIOC-QUERYBUF;, &buffer)) {
|
||||||
perror ("VIDIOC_QUERYBUF");
|
perror("VIDIOC_QUERYBUF");
|
||||||
exit (EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
buffers[i].length = buffer.length; /* remember for munmap() */
|
buffers[i].length = buffer.length; /* remember for munmap() */
|
||||||
|
|
||||||
buffers[i].start = mmap (NULL, buffer.length,
|
buffers[i].start = mmap(NULL, buffer.length,
|
||||||
PROT_READ | PROT_WRITE, /* recommended */
|
PROT_READ | PROT_WRITE, /* recommended */
|
||||||
MAP_SHARED, /* recommended */
|
MAP_SHARED, /* recommended */
|
||||||
fd, buffer.m.offset);
|
fd, buffer.m.offset);
|
||||||
|
|
||||||
if (MAP_FAILED == buffers[i].start) {
|
if (MAP_FAILED == buffers[i].start) {
|
||||||
/* If you do not exit here you should unmap() and free()
|
/* If you do not exit here you should unmap() and free()
|
||||||
the buffers mapped so far. */
|
the buffers mapped so far. */
|
||||||
perror ("mmap");
|
perror("mmap");
|
||||||
exit (EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Cleanup. */
|
/* Cleanup. */
|
||||||
|
|
||||||
for (i = 0; i < reqbuf.count; i++)
|
for (i = 0; i < reqbuf.count; i++)
|
||||||
munmap (buffers[i].start, buffers[i].length);
|
munmap(buffers[i].start, buffers[i].length);
|
||||||
|
</programlisting>
|
||||||
|
</example>
|
||||||
|
|
||||||
|
<example>
|
||||||
|
<title>Mapping buffers in the multi-planar API</title>
|
||||||
|
<programlisting>
|
||||||
|
&v4l2-requestbuffers; reqbuf;
|
||||||
|
/* Our current format uses 3 planes per buffer */
|
||||||
|
#define FMT_NUM_PLANES = 3;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
void *start[FMT_NUM_PLANES];
|
||||||
|
size_t length[FMT_NUM_PLANES];
|
||||||
|
} *buffers;
|
||||||
|
unsigned int i, j;
|
||||||
|
|
||||||
|
memset(&reqbuf, 0, sizeof(reqbuf));
|
||||||
|
reqbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
|
||||||
|
reqbuf.memory = V4L2_MEMORY_MMAP;
|
||||||
|
reqbuf.count = 20;
|
||||||
|
|
||||||
|
if (ioctl(fd, &VIDIOC-REQBUFS;, &reqbuf) < 0) {
|
||||||
|
if (errno == EINVAL)
|
||||||
|
printf("Video capturing or mmap-streaming is not supported\n");
|
||||||
|
else
|
||||||
|
perror("VIDIOC_REQBUFS");
|
||||||
|
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* We want at least five buffers. */
|
||||||
|
|
||||||
|
if (reqbuf.count < 5) {
|
||||||
|
/* You may need to free the buffers here. */
|
||||||
|
printf("Not enough buffer memory\n");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
buffers = calloc(reqbuf.count, sizeof(*buffers));
|
||||||
|
assert(buffers != NULL);
|
||||||
|
|
||||||
|
for (i = 0; i < reqbuf.count; i++) {
|
||||||
|
&v4l2-buffer; buffer;
|
||||||
|
&v4l2-plane; planes[FMT_NUM_PLANES];
|
||||||
|
|
||||||
|
memset(&buffer, 0, sizeof(buffer));
|
||||||
|
buffer.type = reqbuf.type;
|
||||||
|
buffer.memory = V4L2_MEMORY_MMAP;
|
||||||
|
buffer.index = i;
|
||||||
|
/* length in struct v4l2_buffer in multi-planar API stores the size
|
||||||
|
* of planes array. */
|
||||||
|
buffer.length = FMT_NUM_PLANES;
|
||||||
|
buffer.m.planes = planes;
|
||||||
|
|
||||||
|
if (ioctl(fd, &VIDIOC-QUERYBUF;, &buffer) < 0) {
|
||||||
|
perror("VIDIOC_QUERYBUF");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Every plane has to be mapped separately */
|
||||||
|
for (j = 0; j < FMT_NUM_PLANES; j++) {
|
||||||
|
buffers[i].length[j] = buffer.m.planes[j].length; /* remember for munmap() */
|
||||||
|
|
||||||
|
buffers[i].start[j] = mmap(NULL, buffer.m.planes[j].length,
|
||||||
|
PROT_READ | PROT_WRITE, /* recommended */
|
||||||
|
MAP_SHARED, /* recommended */
|
||||||
|
fd, buffer.m.planes[j].m.offset);
|
||||||
|
|
||||||
|
if (MAP_FAILED == buffers[i].start[j]) {
|
||||||
|
/* If you do not exit here you should unmap() and free()
|
||||||
|
the buffers and planes mapped so far. */
|
||||||
|
perror("mmap");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Cleanup. */
|
||||||
|
|
||||||
|
for (i = 0; i < reqbuf.count; i++)
|
||||||
|
for (j = 0; j < FMT_NUM_PLANES; j++)
|
||||||
|
munmap(buffers[i].start[j], buffers[i].length[j]);
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
|
|
||||||
@ -286,13 +372,13 @@ pointer method (not only memory mapping) is supported must be
|
|||||||
determined by calling the &VIDIOC-REQBUFS; ioctl.</para>
|
determined by calling the &VIDIOC-REQBUFS; ioctl.</para>
|
||||||
|
|
||||||
<para>This I/O method combines advantages of the read/write and
|
<para>This I/O method combines advantages of the read/write and
|
||||||
memory mapping methods. Buffers are allocated by the application
|
memory mapping methods. Buffers (planes) are allocated by the application
|
||||||
itself, and can reside for example in virtual or shared memory. Only
|
itself, and can reside for example in virtual or shared memory. Only
|
||||||
pointers to data are exchanged, these pointers and meta-information
|
pointers to data are exchanged, these pointers and meta-information
|
||||||
are passed in &v4l2-buffer;. The driver must be switched
|
are passed in &v4l2-buffer; (or in &v4l2-plane; in the multi-planar API case).
|
||||||
into user pointer I/O mode by calling the &VIDIOC-REQBUFS; with the
|
The driver must be switched into user pointer I/O mode by calling the
|
||||||
desired buffer type. No buffers are allocated beforehands,
|
&VIDIOC-REQBUFS; with the desired buffer type. No buffers (planes) are allocated
|
||||||
consequently they are not indexed and cannot be queried like mapped
|
beforehand, consequently they are not indexed and cannot be queried like mapped
|
||||||
buffers with the <constant>VIDIOC_QUERYBUF</constant> ioctl.</para>
|
buffers with the <constant>VIDIOC_QUERYBUF</constant> ioctl.</para>
|
||||||
|
|
||||||
<example>
|
<example>
|
||||||
@ -316,7 +402,7 @@ if (ioctl (fd, &VIDIOC-REQBUFS;, &reqbuf) == -1) {
|
|||||||
</programlisting>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
|
|
||||||
<para>Buffer addresses and sizes are passed on the fly with the
|
<para>Buffer (plane) addresses and sizes are passed on the fly with the
|
||||||
&VIDIOC-QBUF; ioctl. Although buffers are commonly cycled,
|
&VIDIOC-QBUF; ioctl. Although buffers are commonly cycled,
|
||||||
applications can pass different addresses and sizes at each
|
applications can pass different addresses and sizes at each
|
||||||
<constant>VIDIOC_QBUF</constant> call. If required by the hardware the
|
<constant>VIDIOC_QBUF</constant> call. If required by the hardware the
|
||||||
@ -396,11 +482,18 @@ rest should be evident.</para>
|
|||||||
<title>Buffers</title>
|
<title>Buffers</title>
|
||||||
|
|
||||||
<para>A buffer contains data exchanged by application and
|
<para>A buffer contains data exchanged by application and
|
||||||
driver using one of the Streaming I/O methods. Only pointers to
|
driver using one of the Streaming I/O methods. In the multi-planar API, the
|
||||||
buffers are exchanged, the data itself is not copied. These pointers,
|
data is held in planes, while the buffer structure acts as a container
|
||||||
together with meta-information like timestamps or field parity, are
|
for the planes. Only pointers to buffers (planes) are exchanged, the data
|
||||||
stored in a struct <structname>v4l2_buffer</structname>, argument to
|
itself is not copied. These pointers, together with meta-information like
|
||||||
the &VIDIOC-QUERYBUF;, &VIDIOC-QBUF; and &VIDIOC-DQBUF; ioctl.</para>
|
timestamps or field parity, are stored in a struct
|
||||||
|
<structname>v4l2_buffer</structname>, argument to
|
||||||
|
the &VIDIOC-QUERYBUF;, &VIDIOC-QBUF; and &VIDIOC-DQBUF; ioctl.
|
||||||
|
In the multi-planar API, some plane-specific members of struct
|
||||||
|
<structname>v4l2_buffer</structname>, such as pointers and sizes for each
|
||||||
|
plane, are stored in struct <structname>v4l2_plane</structname> instead.
|
||||||
|
In that case, struct <structname>v4l2_buffer</structname> contains an array of
|
||||||
|
plane structures.</para>
|
||||||
|
|
||||||
<para>Nominally timestamps refer to the first data byte transmitted.
|
<para>Nominally timestamps refer to the first data byte transmitted.
|
||||||
In practice however the wide range of hardware covered by the V4L2 API
|
In practice however the wide range of hardware covered by the V4L2 API
|
||||||
@ -551,26 +644,40 @@ in accordance with the selected I/O method.</entry>
|
|||||||
<entry></entry>
|
<entry></entry>
|
||||||
<entry>__u32</entry>
|
<entry>__u32</entry>
|
||||||
<entry><structfield>offset</structfield></entry>
|
<entry><structfield>offset</structfield></entry>
|
||||||
<entry>When <structfield>memory</structfield> is
|
<entry>For the single-planar API and when
|
||||||
<constant>V4L2_MEMORY_MMAP</constant> this is the offset of the buffer
|
<structfield>memory</structfield> is <constant>V4L2_MEMORY_MMAP</constant> this
|
||||||
from the start of the device memory. The value is returned by the
|
is the offset of the buffer from the start of the device memory. The value is
|
||||||
driver and apart of serving as parameter to the &func-mmap; function
|
returned by the driver and apart of serving as parameter to the &func-mmap;
|
||||||
not useful for applications. See <xref linkend="mmap" /> for details.</entry>
|
function not useful for applications. See <xref linkend="mmap" /> for details
|
||||||
|
</entry>
|
||||||
</row>
|
</row>
|
||||||
<row>
|
<row>
|
||||||
<entry></entry>
|
<entry></entry>
|
||||||
<entry>unsigned long</entry>
|
<entry>unsigned long</entry>
|
||||||
<entry><structfield>userptr</structfield></entry>
|
<entry><structfield>userptr</structfield></entry>
|
||||||
<entry>When <structfield>memory</structfield> is
|
<entry>For the single-planar API and when
|
||||||
<constant>V4L2_MEMORY_USERPTR</constant> this is a pointer to the
|
<structfield>memory</structfield> is <constant>V4L2_MEMORY_USERPTR</constant>
|
||||||
buffer (casted to unsigned long type) in virtual memory, set by the
|
this is a pointer to the buffer (casted to unsigned long type) in virtual
|
||||||
application. See <xref linkend="userp" /> for details.</entry>
|
memory, set by the application. See <xref linkend="userp" /> for details.
|
||||||
|
</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>struct v4l2_plane</entry>
|
||||||
|
<entry><structfield>*planes</structfield></entry>
|
||||||
|
<entry>When using the multi-planar API, contains a userspace pointer
|
||||||
|
to an array of &v4l2-plane;. The size of the array should be put
|
||||||
|
in the <structfield>length</structfield> field of this
|
||||||
|
<structname>v4l2_buffer</structname> structure.</entry>
|
||||||
</row>
|
</row>
|
||||||
<row>
|
<row>
|
||||||
<entry>__u32</entry>
|
<entry>__u32</entry>
|
||||||
<entry><structfield>length</structfield></entry>
|
<entry><structfield>length</structfield></entry>
|
||||||
<entry></entry>
|
<entry></entry>
|
||||||
<entry>Size of the buffer (not the payload) in bytes.</entry>
|
<entry>Size of the buffer (not the payload) in bytes for the
|
||||||
|
single-planar API. For the multi-planar API should contain the
|
||||||
|
number of elements in the <structfield>planes</structfield> array.
|
||||||
|
</entry>
|
||||||
</row>
|
</row>
|
||||||
<row>
|
<row>
|
||||||
<entry>__u32</entry>
|
<entry>__u32</entry>
|
||||||
@ -596,6 +703,66 @@ should set this to 0.</entry>
|
|||||||
</tgroup>
|
</tgroup>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
<table frame="none" pgwide="1" id="v4l2-plane">
|
||||||
|
<title>struct <structname>v4l2_plane</structname></title>
|
||||||
|
<tgroup cols="4">
|
||||||
|
&cs-ustr;
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>bytesused</structfield></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>The number of bytes occupied by data in the plane
|
||||||
|
(its payload).</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>length</structfield></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>Size in bytes of the plane (not its payload).</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>union</entry>
|
||||||
|
<entry><structfield>m</structfield></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>mem_offset</structfield></entry>
|
||||||
|
<entry>When the memory type in the containing &v4l2-buffer; is
|
||||||
|
<constant>V4L2_MEMORY_MMAP</constant>, this is the value that
|
||||||
|
should be passed to &func-mmap;, similar to the
|
||||||
|
<structfield>offset</structfield> field in &v4l2-buffer;.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>__unsigned long</entry>
|
||||||
|
<entry><structfield>userptr</structfield></entry>
|
||||||
|
<entry>When the memory type in the containing &v4l2-buffer; is
|
||||||
|
<constant>V4L2_MEMORY_USERPTR</constant>, this is a userspace
|
||||||
|
pointer to the memory allocated for this plane by an application.
|
||||||
|
</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>data_offset</structfield></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>Offset in bytes to video data in the plane, if applicable.
|
||||||
|
</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>reserved[11]</structfield></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>Reserved for future use. Should be zeroed by an
|
||||||
|
application.</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
|
||||||
<table frame="none" pgwide="1" id="v4l2-buf-type">
|
<table frame="none" pgwide="1" id="v4l2-buf-type">
|
||||||
<title>enum v4l2_buf_type</title>
|
<title>enum v4l2_buf_type</title>
|
||||||
<tgroup cols="3">
|
<tgroup cols="3">
|
||||||
@ -604,13 +771,27 @@ should set this to 0.</entry>
|
|||||||
<row>
|
<row>
|
||||||
<entry><constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant></entry>
|
<entry><constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant></entry>
|
||||||
<entry>1</entry>
|
<entry>1</entry>
|
||||||
<entry>Buffer of a video capture stream, see <xref
|
<entry>Buffer of a single-planar video capture stream, see <xref
|
||||||
|
linkend="capture" />.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry><constant>V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE</constant>
|
||||||
|
</entry>
|
||||||
|
<entry>9</entry>
|
||||||
|
<entry>Buffer of a multi-planar video capture stream, see <xref
|
||||||
linkend="capture" />.</entry>
|
linkend="capture" />.</entry>
|
||||||
</row>
|
</row>
|
||||||
<row>
|
<row>
|
||||||
<entry><constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant></entry>
|
<entry><constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant></entry>
|
||||||
<entry>2</entry>
|
<entry>2</entry>
|
||||||
<entry>Buffer of a video output stream, see <xref
|
<entry>Buffer of a single-planar video output stream, see <xref
|
||||||
|
linkend="output" />.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry><constant>V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE</constant>
|
||||||
|
</entry>
|
||||||
|
<entry>10</entry>
|
||||||
|
<entry>Buffer of a multi-planar video output stream, see <xref
|
||||||
linkend="output" />.</entry>
|
linkend="output" />.</entry>
|
||||||
</row>
|
</row>
|
||||||
<row>
|
<row>
|
||||||
|
@ -140,7 +140,7 @@ and is not locked sets the cid to the scaled value.
|
|||||||
<para>int v4l2_get_control(int fd, int cid) -
|
<para>int v4l2_get_control(int fd, int cid) -
|
||||||
This function returns a value of 0 - 65535, scaled to from the actual range
|
This function returns a value of 0 - 65535, scaled to from the actual range
|
||||||
of the given v4l control id. when the cid does not exist, could not be
|
of the given v4l control id. when the cid does not exist, could not be
|
||||||
accessed for some reason, or some error occured 0 is returned.
|
accessed for some reason, or some error occurred 0 is returned.
|
||||||
</para></listitem>
|
</para></listitem>
|
||||||
</itemizedlist>
|
</itemizedlist>
|
||||||
</section>
|
</section>
|
||||||
|
@ -45,7 +45,7 @@ describing an IR signal are read from the chardev.</para>
|
|||||||
<para>The data written to the chardev is a pulse/space sequence of integer
|
<para>The data written to the chardev is a pulse/space sequence of integer
|
||||||
values. Pulses and spaces are only marked implicitly by their position. The
|
values. Pulses and spaces are only marked implicitly by their position. The
|
||||||
data must start and end with a pulse, therefore, the data must always include
|
data must start and end with a pulse, therefore, the data must always include
|
||||||
an unevent number of samples. The write function must block until the data has
|
an uneven number of samples. The write function must block until the data has
|
||||||
been transmitted by the hardware.</para>
|
been transmitted by the hardware.</para>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
89
Documentation/DocBook/v4l/media-controller.xml
Normal file
89
Documentation/DocBook/v4l/media-controller.xml
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
<partinfo>
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<firstname>Laurent</firstname>
|
||||||
|
<surname>Pinchart</surname>
|
||||||
|
<affiliation><address><email>laurent.pinchart@ideasonboard.com</email></address></affiliation>
|
||||||
|
<contrib>Initial version.</contrib>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
<copyright>
|
||||||
|
<year>2010</year>
|
||||||
|
<holder>Laurent Pinchart</holder>
|
||||||
|
</copyright>
|
||||||
|
|
||||||
|
<revhistory>
|
||||||
|
<!-- Put document revisions here, newest first. -->
|
||||||
|
<revision>
|
||||||
|
<revnumber>1.0.0</revnumber>
|
||||||
|
<date>2010-11-10</date>
|
||||||
|
<authorinitials>lp</authorinitials>
|
||||||
|
<revremark>Initial revision</revremark>
|
||||||
|
</revision>
|
||||||
|
</revhistory>
|
||||||
|
</partinfo>
|
||||||
|
|
||||||
|
<title>Media Controller API</title>
|
||||||
|
|
||||||
|
<chapter id="media_controller">
|
||||||
|
<title>Media Controller</title>
|
||||||
|
|
||||||
|
<section id="media-controller-intro">
|
||||||
|
<title>Introduction</title>
|
||||||
|
<para>Media devices increasingly handle multiple related functions. Many USB
|
||||||
|
cameras include microphones, video capture hardware can also output video,
|
||||||
|
or SoC camera interfaces also perform memory-to-memory operations similar to
|
||||||
|
video codecs.</para>
|
||||||
|
<para>Independent functions, even when implemented in the same hardware, can
|
||||||
|
be modelled as separate devices. A USB camera with a microphone will be
|
||||||
|
presented to userspace applications as V4L2 and ALSA capture devices. The
|
||||||
|
devices' relationships (when using a webcam, end-users shouldn't have to
|
||||||
|
manually select the associated USB microphone), while not made available
|
||||||
|
directly to applications by the drivers, can usually be retrieved from
|
||||||
|
sysfs.</para>
|
||||||
|
<para>With more and more advanced SoC devices being introduced, the current
|
||||||
|
approach will not scale. Device topologies are getting increasingly complex
|
||||||
|
and can't always be represented by a tree structure. Hardware blocks are
|
||||||
|
shared between different functions, creating dependencies between seemingly
|
||||||
|
unrelated devices.</para>
|
||||||
|
<para>Kernel abstraction APIs such as V4L2 and ALSA provide means for
|
||||||
|
applications to access hardware parameters. As newer hardware expose an
|
||||||
|
increasingly high number of those parameters, drivers need to guess what
|
||||||
|
applications really require based on limited information, thereby
|
||||||
|
implementing policies that belong to userspace.</para>
|
||||||
|
<para>The media controller API aims at solving those problems.</para>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="media-controller-model">
|
||||||
|
<title>Media device model</title>
|
||||||
|
<para>Discovering a device internal topology, and configuring it at runtime,
|
||||||
|
is one of the goals of the media controller API. To achieve this, hardware
|
||||||
|
devices are modelled as an oriented graph of building blocks called entities
|
||||||
|
connected through pads.</para>
|
||||||
|
<para>An entity is a basic media hardware or software building block. It can
|
||||||
|
correspond to a large variety of logical blocks such as physical hardware
|
||||||
|
devices (CMOS sensor for instance), logical hardware devices (a building
|
||||||
|
block in a System-on-Chip image processing pipeline), DMA channels or
|
||||||
|
physical connectors.</para>
|
||||||
|
<para>A pad is a connection endpoint through which an entity can interact
|
||||||
|
with other entities. Data (not restricted to video) produced by an entity
|
||||||
|
flows from the entity's output to one or more entity inputs. Pads should not
|
||||||
|
be confused with physical pins at chip boundaries.</para>
|
||||||
|
<para>A link is a point-to-point oriented connection between two pads,
|
||||||
|
either on the same entity or on different entities. Data flows from a source
|
||||||
|
pad to a sink pad.</para>
|
||||||
|
</section>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<appendix id="media-user-func">
|
||||||
|
<title>Function Reference</title>
|
||||||
|
<!-- Keep this alphabetically sorted. -->
|
||||||
|
&sub-media-open;
|
||||||
|
&sub-media-close;
|
||||||
|
&sub-media-ioctl;
|
||||||
|
<!-- All ioctls go here. -->
|
||||||
|
&sub-media-ioc-device-info;
|
||||||
|
&sub-media-ioc-enum-entities;
|
||||||
|
&sub-media-ioc-enum-links;
|
||||||
|
&sub-media-ioc-setup-link;
|
||||||
|
</appendix>
|
59
Documentation/DocBook/v4l/media-func-close.xml
Normal file
59
Documentation/DocBook/v4l/media-func-close.xml
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
<refentry id="media-func-close">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>media close()</refentrytitle>
|
||||||
|
&manvol;
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv>
|
||||||
|
<refname>media-close</refname>
|
||||||
|
<refpurpose>Close a media device</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis>
|
||||||
|
<funcsynopsisinfo>#include <unistd.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>close</function></funcdef>
|
||||||
|
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Arguments</title>
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>fd</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>&fd;</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Description</title>
|
||||||
|
|
||||||
|
<para>Closes the media device. Resources associated with the file descriptor
|
||||||
|
are freed. The device configuration remain unchanged.</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Return Value</title>
|
||||||
|
|
||||||
|
<para><function>close</function> returns 0 on success. On error, -1 is
|
||||||
|
returned, and <varname>errno</varname> is set appropriately. Possible error
|
||||||
|
codes are:</para>
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>EBADF</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para><parameter>fd</parameter> is not a valid open file descriptor.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
116
Documentation/DocBook/v4l/media-func-ioctl.xml
Normal file
116
Documentation/DocBook/v4l/media-func-ioctl.xml
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
<refentry id="media-func-ioctl">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>media ioctl()</refentrytitle>
|
||||||
|
&manvol;
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv>
|
||||||
|
<refname>media-ioctl</refname>
|
||||||
|
<refpurpose>Control a media device</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis>
|
||||||
|
<funcsynopsisinfo>#include <sys/ioctl.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>ioctl</function></funcdef>
|
||||||
|
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>request</parameter></paramdef>
|
||||||
|
<paramdef>void *<parameter>argp</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Arguments</title>
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>fd</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>&fd;</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>request</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>Media ioctl request code as defined in the media.h header file,
|
||||||
|
for example MEDIA_IOC_SETUP_LINK.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>argp</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>Pointer to a request-specific structure.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Description</title>
|
||||||
|
<para>The <function>ioctl()</function> function manipulates media device
|
||||||
|
parameters. The argument <parameter>fd</parameter> must be an open file
|
||||||
|
descriptor.</para>
|
||||||
|
<para>The ioctl <parameter>request</parameter> code specifies the media
|
||||||
|
function to be called. It has encoded in it whether the argument is an
|
||||||
|
input, output or read/write parameter, and the size of the argument
|
||||||
|
<parameter>argp</parameter> in bytes.</para>
|
||||||
|
<para>Macros and structures definitions specifying media ioctl requests and
|
||||||
|
their parameters are located in the media.h header file. All media ioctl
|
||||||
|
requests, their respective function and parameters are specified in
|
||||||
|
<xref linkend="media-user-func" />.</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Return Value</title>
|
||||||
|
|
||||||
|
<para><function>ioctl()</function> returns <returnvalue>0</returnvalue> on
|
||||||
|
success. On failure, <returnvalue>-1</returnvalue> is returned, and the
|
||||||
|
<varname>errno</varname> variable is set appropriately. Generic error codes
|
||||||
|
are listed below, and request-specific error codes are listed in the
|
||||||
|
individual requests descriptions.</para>
|
||||||
|
<para>When an ioctl that takes an output or read/write parameter fails,
|
||||||
|
the parameter remains unmodified.</para>
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>EBADF</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para><parameter>fd</parameter> is not a valid open file descriptor.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>EFAULT</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para><parameter>argp</parameter> references an inaccessible memory
|
||||||
|
area.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>EINVAL</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para>The <parameter>request</parameter> or the data pointed to by
|
||||||
|
<parameter>argp</parameter> is not valid. This is a very common error
|
||||||
|
code, see the individual ioctl requests listed in
|
||||||
|
<xref linkend="media-user-func" /> for actual causes.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>ENOMEM</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para>Insufficient kernel memory was available to complete the
|
||||||
|
request.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>ENOTTY</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para><parameter>fd</parameter> is not associated with a character
|
||||||
|
special device.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
94
Documentation/DocBook/v4l/media-func-open.xml
Normal file
94
Documentation/DocBook/v4l/media-func-open.xml
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
<refentry id="media-func-open">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>media open()</refentrytitle>
|
||||||
|
&manvol;
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv>
|
||||||
|
<refname>media-open</refname>
|
||||||
|
<refpurpose>Open a media device</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis>
|
||||||
|
<funcsynopsisinfo>#include <fcntl.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>open</function></funcdef>
|
||||||
|
<paramdef>const char *<parameter>device_name</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>flags</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Arguments</title>
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>device_name</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>Device to be opened.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>flags</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>Open flags. Access mode must be either <constant>O_RDONLY</constant>
|
||||||
|
or <constant>O_RDWR</constant>. Other flags have no effect.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
<refsect1>
|
||||||
|
<title>Description</title>
|
||||||
|
<para>To open a media device applications call <function>open()</function>
|
||||||
|
with the desired device name. The function has no side effects; the device
|
||||||
|
configuration remain unchanged.</para>
|
||||||
|
<para>When the device is opened in read-only mode, attemps to modify its
|
||||||
|
configuration will result in an error, and <varname>errno</varname> will be
|
||||||
|
set to <errorcode>EBADF</errorcode>.</para>
|
||||||
|
</refsect1>
|
||||||
|
<refsect1>
|
||||||
|
<title>Return Value</title>
|
||||||
|
|
||||||
|
<para><function>open</function> returns the new file descriptor on success.
|
||||||
|
On error, -1 is returned, and <varname>errno</varname> is set appropriately.
|
||||||
|
Possible error codes are:</para>
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>EACCES</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para>The requested access to the file is not allowed.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>EMFILE</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para>The process already has the maximum number of files open.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>ENFILE</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para>The system limit on the total number of open files has been
|
||||||
|
reached.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>ENOMEM</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para>Insufficient kernel memory was available.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>ENXIO</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para>No device corresponding to this device special file exists.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
133
Documentation/DocBook/v4l/media-ioc-device-info.xml
Normal file
133
Documentation/DocBook/v4l/media-ioc-device-info.xml
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
<refentry id="media-ioc-device-info">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>ioctl MEDIA_IOC_DEVICE_INFO</refentrytitle>
|
||||||
|
&manvol;
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv>
|
||||||
|
<refname>MEDIA_IOC_DEVICE_INFO</refname>
|
||||||
|
<refpurpose>Query device information</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>ioctl</function></funcdef>
|
||||||
|
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>request</parameter></paramdef>
|
||||||
|
<paramdef>struct media_device_info *<parameter>argp</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Arguments</title>
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>fd</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>File descriptor returned by
|
||||||
|
<link linkend='media-func-open'><function>open()</function></link>.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>request</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>MEDIA_IOC_DEVICE_INFO</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>argp</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para></para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Description</title>
|
||||||
|
|
||||||
|
<para>All media devices must support the <constant>MEDIA_IOC_DEVICE_INFO</constant>
|
||||||
|
ioctl. To query device information, applications call the ioctl with a
|
||||||
|
pointer to a &media-device-info;. The driver fills the structure and returns
|
||||||
|
the information to the application.
|
||||||
|
The ioctl never fails.</para>
|
||||||
|
|
||||||
|
<table pgwide="1" frame="none" id="media-device-info">
|
||||||
|
<title>struct <structname>media_device_info</structname></title>
|
||||||
|
<tgroup cols="3">
|
||||||
|
&cs-str;
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry>char</entry>
|
||||||
|
<entry><structfield>driver</structfield>[16]</entry>
|
||||||
|
<entry><para>Name of the driver implementing the media API as a
|
||||||
|
NUL-terminated ASCII string. The driver version is stored in the
|
||||||
|
<structfield>driver_version</structfield> field.</para>
|
||||||
|
<para>Driver specific applications can use this information to
|
||||||
|
verify the driver identity. It is also useful to work around
|
||||||
|
known bugs, or to identify drivers in error reports.</para></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>char</entry>
|
||||||
|
<entry><structfield>model</structfield>[32]</entry>
|
||||||
|
<entry>Device model name as a NUL-terminated UTF-8 string. The
|
||||||
|
device version is stored in the <structfield>device_version</structfield>
|
||||||
|
field and is not be appended to the model name.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>char</entry>
|
||||||
|
<entry><structfield>serial</structfield>[40]</entry>
|
||||||
|
<entry>Serial number as a NUL-terminated ASCII string.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>char</entry>
|
||||||
|
<entry><structfield>bus_info</structfield>[32]</entry>
|
||||||
|
<entry>Location of the device in the system as a NUL-terminated
|
||||||
|
ASCII string. This includes the bus type name (PCI, USB, ...) and a
|
||||||
|
bus-specific identifier.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>media_version</structfield></entry>
|
||||||
|
<entry>Media API version, formatted with the
|
||||||
|
<constant>KERNEL_VERSION()</constant> macro.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>hw_revision</structfield></entry>
|
||||||
|
<entry>Hardware device revision in a driver-specific format.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>media_version</structfield></entry>
|
||||||
|
<entry>Media device driver version, formatted with the
|
||||||
|
<constant>KERNEL_VERSION()</constant> macro. Together with the
|
||||||
|
<structfield>driver</structfield> field this identifies a particular
|
||||||
|
driver.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>reserved</structfield>[31]</entry>
|
||||||
|
<entry>Reserved for future extensions. Drivers and applications must
|
||||||
|
set this array to zero.</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
<para>The <structfield>serial</structfield> and <structfield>bus_info</structfield>
|
||||||
|
fields can be used to distinguish between multiple instances of otherwise
|
||||||
|
identical hardware. The serial number takes precedence when provided and can
|
||||||
|
be assumed to be unique. If the serial number is an empty string, the
|
||||||
|
<structfield>bus_info</structfield> field can be used instead. The
|
||||||
|
<structfield>bus_info</structfield> field is guaranteed to be unique, but
|
||||||
|
can vary across reboots or device unplug/replug.</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Return value</title>
|
||||||
|
<para>This function doesn't return specific error codes.</para>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
308
Documentation/DocBook/v4l/media-ioc-enum-entities.xml
Normal file
308
Documentation/DocBook/v4l/media-ioc-enum-entities.xml
Normal file
@ -0,0 +1,308 @@
|
|||||||
|
<refentry id="media-ioc-enum-entities">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>ioctl MEDIA_IOC_ENUM_ENTITIES</refentrytitle>
|
||||||
|
&manvol;
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv>
|
||||||
|
<refname>MEDIA_IOC_ENUM_ENTITIES</refname>
|
||||||
|
<refpurpose>Enumerate entities and their properties</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>ioctl</function></funcdef>
|
||||||
|
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>request</parameter></paramdef>
|
||||||
|
<paramdef>struct media_entity_desc *<parameter>argp</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Arguments</title>
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>fd</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>File descriptor returned by
|
||||||
|
<link linkend='media-func-open'><function>open()</function></link>.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>request</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>MEDIA_IOC_ENUM_ENTITIES</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>argp</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para></para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Description</title>
|
||||||
|
<para>To query the attributes of an entity, applications set the id field
|
||||||
|
of a &media-entity-desc; structure and call the MEDIA_IOC_ENUM_ENTITIES
|
||||||
|
ioctl with a pointer to this structure. The driver fills the rest of the
|
||||||
|
structure or returns an &EINVAL; when the id is invalid.</para>
|
||||||
|
<para>Entities can be enumerated by or'ing the id with the
|
||||||
|
<constant>MEDIA_ENT_ID_FLAG_NEXT</constant> flag. The driver will return
|
||||||
|
information about the entity with the smallest id strictly larger than the
|
||||||
|
requested one ('next entity'), or the &EINVAL; if there is none.</para>
|
||||||
|
<para>Entity IDs can be non-contiguous. Applications must
|
||||||
|
<emphasis>not</emphasis> try to enumerate entities by calling
|
||||||
|
MEDIA_IOC_ENUM_ENTITIES with increasing id's until they get an error.</para>
|
||||||
|
<para>Two or more entities that share a common non-zero
|
||||||
|
<structfield>group_id</structfield> value are considered as logically
|
||||||
|
grouped. Groups are used to report
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem><para>ALSA, VBI and video nodes that carry the same media
|
||||||
|
stream</para></listitem>
|
||||||
|
<listitem><para>lens and flash controllers associated with a sensor</para></listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<table pgwide="1" frame="none" id="media-entity-desc">
|
||||||
|
<title>struct <structname>media_entity_desc</structname></title>
|
||||||
|
<tgroup cols="5">
|
||||||
|
<colspec colname="c1" />
|
||||||
|
<colspec colname="c2" />
|
||||||
|
<colspec colname="c3" />
|
||||||
|
<colspec colname="c4" />
|
||||||
|
<colspec colname="c5" />
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>id</structfield></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>Entity id, set by the application. When the id is or'ed with
|
||||||
|
<constant>MEDIA_ENT_ID_FLAG_NEXT</constant>, the driver clears the
|
||||||
|
flag and returns the first entity with a larger id.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>char</entry>
|
||||||
|
<entry><structfield>name</structfield>[32]</entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>Entity name as an UTF-8 NULL-terminated string.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>type</structfield></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>Entity type, see <xref linkend="media-entity-type" /> for details.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>revision</structfield></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>Entity revision in a driver/hardware specific format.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>flags</structfield></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>Entity flags, see <xref linkend="media-entity-flag" /> for details.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>group_id</structfield></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>Entity group ID</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u16</entry>
|
||||||
|
<entry><structfield>pads</structfield></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>Number of pads</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u16</entry>
|
||||||
|
<entry><structfield>links</structfield></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>Total number of outbound links. Inbound links are not counted
|
||||||
|
in this field.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>union</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>struct</entry>
|
||||||
|
<entry><structfield>v4l</structfield></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>Valid for V4L sub-devices and nodes only.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>major</structfield></entry>
|
||||||
|
<entry>V4L device node major number. For V4L sub-devices with no
|
||||||
|
device node, set by the driver to 0.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>minor</structfield></entry>
|
||||||
|
<entry>V4L device node minor number. For V4L sub-devices with no
|
||||||
|
device node, set by the driver to 0.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>struct</entry>
|
||||||
|
<entry><structfield>fb</structfield></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>Valid for frame buffer nodes only.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>major</structfield></entry>
|
||||||
|
<entry>Frame buffer device node major number.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>minor</structfield></entry>
|
||||||
|
<entry>Frame buffer device node minor number.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>struct</entry>
|
||||||
|
<entry><structfield>alsa</structfield></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>Valid for ALSA devices only.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>card</structfield></entry>
|
||||||
|
<entry>ALSA card number</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>device</structfield></entry>
|
||||||
|
<entry>ALSA device number</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>subdevice</structfield></entry>
|
||||||
|
<entry>ALSA sub-device number</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>int</entry>
|
||||||
|
<entry><structfield>dvb</structfield></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>DVB card number</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>__u8</entry>
|
||||||
|
<entry><structfield>raw</structfield>[180]</entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry></entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<table frame="none" pgwide="1" id="media-entity-type">
|
||||||
|
<title>Media entity types</title>
|
||||||
|
<tgroup cols="2">
|
||||||
|
<colspec colname="c1"/>
|
||||||
|
<colspec colname="c2"/>
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry><constant>MEDIA_ENT_T_DEVNODE</constant></entry>
|
||||||
|
<entry>Unknown device node</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry><constant>MEDIA_ENT_T_DEVNODE_V4L</constant></entry>
|
||||||
|
<entry>V4L video, radio or vbi device node</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry><constant>MEDIA_ENT_T_DEVNODE_FB</constant></entry>
|
||||||
|
<entry>Frame buffer device node</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry><constant>MEDIA_ENT_T_DEVNODE_ALSA</constant></entry>
|
||||||
|
<entry>ALSA card</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry><constant>MEDIA_ENT_T_DEVNODE_DVB</constant></entry>
|
||||||
|
<entry>DVB card</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry><constant>MEDIA_ENT_T_V4L2_SUBDEV</constant></entry>
|
||||||
|
<entry>Unknown V4L sub-device</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry><constant>MEDIA_ENT_T_V4L2_SUBDEV_SENSOR</constant></entry>
|
||||||
|
<entry>Video sensor</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry><constant>MEDIA_ENT_T_V4L2_SUBDEV_FLASH</constant></entry>
|
||||||
|
<entry>Flash controller</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry><constant>MEDIA_ENT_T_V4L2_SUBDEV_LENS</constant></entry>
|
||||||
|
<entry>Lens controller</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<table frame="none" pgwide="1" id="media-entity-flag">
|
||||||
|
<title>Media entity flags</title>
|
||||||
|
<tgroup cols="2">
|
||||||
|
<colspec colname="c1"/>
|
||||||
|
<colspec colname="c2"/>
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry><constant>MEDIA_ENT_FL_DEFAULT</constant></entry>
|
||||||
|
<entry>Default entity for its type. Used to discover the default
|
||||||
|
audio, VBI and video devices, the default camera sensor, ...</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
&return-value;
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>EINVAL</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para>The &media-entity-desc; <structfield>id</structfield> references
|
||||||
|
a non-existing entity.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
207
Documentation/DocBook/v4l/media-ioc-enum-links.xml
Normal file
207
Documentation/DocBook/v4l/media-ioc-enum-links.xml
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
<refentry id="media-ioc-enum-links">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>ioctl MEDIA_IOC_ENUM_LINKS</refentrytitle>
|
||||||
|
&manvol;
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv>
|
||||||
|
<refname>MEDIA_IOC_ENUM_LINKS</refname>
|
||||||
|
<refpurpose>Enumerate all pads and links for a given entity</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>ioctl</function></funcdef>
|
||||||
|
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>request</parameter></paramdef>
|
||||||
|
<paramdef>struct media_links_enum *<parameter>argp</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Arguments</title>
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>fd</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>File descriptor returned by
|
||||||
|
<link linkend='media-func-open'><function>open()</function></link>.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>request</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>MEDIA_IOC_ENUM_LINKS</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>argp</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para></para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Description</title>
|
||||||
|
|
||||||
|
<para>To enumerate pads and/or links for a given entity, applications set
|
||||||
|
the entity field of a &media-links-enum; structure and initialize the
|
||||||
|
&media-pad-desc; and &media-link-desc; structure arrays pointed by the
|
||||||
|
<structfield>pads</structfield> and <structfield>links</structfield> fields.
|
||||||
|
They then call the MEDIA_IOC_ENUM_LINKS ioctl with a pointer to this
|
||||||
|
structure.</para>
|
||||||
|
<para>If the <structfield>pads</structfield> field is not NULL, the driver
|
||||||
|
fills the <structfield>pads</structfield> array with information about the
|
||||||
|
entity's pads. The array must have enough room to store all the entity's
|
||||||
|
pads. The number of pads can be retrieved with the &MEDIA-IOC-ENUM-ENTITIES;
|
||||||
|
ioctl.</para>
|
||||||
|
<para>If the <structfield>links</structfield> field is not NULL, the driver
|
||||||
|
fills the <structfield>links</structfield> array with information about the
|
||||||
|
entity's outbound links. The array must have enough room to store all the
|
||||||
|
entity's outbound links. The number of outbound links can be retrieved with
|
||||||
|
the &MEDIA-IOC-ENUM-ENTITIES; ioctl.</para>
|
||||||
|
<para>Only forward links that originate at one of the entity's source pads
|
||||||
|
are returned during the enumeration process.</para>
|
||||||
|
|
||||||
|
<table pgwide="1" frame="none" id="media-links-enum">
|
||||||
|
<title>struct <structname>media_links_enum</structname></title>
|
||||||
|
<tgroup cols="3">
|
||||||
|
&cs-str;
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>entity</structfield></entry>
|
||||||
|
<entry>Entity id, set by the application.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>struct &media-pad-desc;</entry>
|
||||||
|
<entry>*<structfield>pads</structfield></entry>
|
||||||
|
<entry>Pointer to a pads array allocated by the application. Ignored
|
||||||
|
if NULL.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>struct &media-link-desc;</entry>
|
||||||
|
<entry>*<structfield>links</structfield></entry>
|
||||||
|
<entry>Pointer to a links array allocated by the application. Ignored
|
||||||
|
if NULL.</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<table pgwide="1" frame="none" id="media-pad-desc">
|
||||||
|
<title>struct <structname>media_pad_desc</structname></title>
|
||||||
|
<tgroup cols="3">
|
||||||
|
&cs-str;
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>entity</structfield></entry>
|
||||||
|
<entry>ID of the entity this pad belongs to.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u16</entry>
|
||||||
|
<entry><structfield>index</structfield></entry>
|
||||||
|
<entry>0-based pad index.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>flags</structfield></entry>
|
||||||
|
<entry>Pad flags, see <xref linkend="media-pad-flag" /> for more details.</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<table frame="none" pgwide="1" id="media-pad-flag">
|
||||||
|
<title>Media pad flags</title>
|
||||||
|
<tgroup cols="2">
|
||||||
|
<colspec colname="c1"/>
|
||||||
|
<colspec colname="c2"/>
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry><constant>MEDIA_PAD_FL_SINK</constant></entry>
|
||||||
|
<entry>Input pad, relative to the entity. Input pads sink data and
|
||||||
|
are targets of links.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry><constant>MEDIA_PAD_FL_SOURCE</constant></entry>
|
||||||
|
<entry>Output pad, relative to the entity. Output pads source data
|
||||||
|
and are origins of links.</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<table pgwide="1" frame="none" id="media-link-desc">
|
||||||
|
<title>struct <structname>media_links_desc</structname></title>
|
||||||
|
<tgroup cols="3">
|
||||||
|
&cs-str;
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry>struct &media-pad-desc;</entry>
|
||||||
|
<entry><structfield>source</structfield></entry>
|
||||||
|
<entry>Pad at the origin of this link.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>struct &media-pad-desc;</entry>
|
||||||
|
<entry><structfield>sink</structfield></entry>
|
||||||
|
<entry>Pad at the target of this link.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>flags</structfield></entry>
|
||||||
|
<entry>Link flags, see <xref linkend="media-link-flag" /> for more details.</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<table frame="none" pgwide="1" id="media-link-flag">
|
||||||
|
<title>Media link flags</title>
|
||||||
|
<tgroup cols="2">
|
||||||
|
<colspec colname="c1"/>
|
||||||
|
<colspec colname="c2"/>
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry><constant>MEDIA_LNK_FL_ENABLED</constant></entry>
|
||||||
|
<entry>The link is enabled and can be used to transfer media data.
|
||||||
|
When two or more links target a sink pad, only one of them can be
|
||||||
|
enabled at a time.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry><constant>MEDIA_LNK_FL_IMMUTABLE</constant></entry>
|
||||||
|
<entry>The link enabled state can't be modified at runtime. An
|
||||||
|
immutable link is always enabled.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry><constant>MEDIA_LNK_FL_DYNAMIC</constant></entry>
|
||||||
|
<entry>The link enabled state can be modified during streaming. This
|
||||||
|
flag is set by drivers and is read-only for applications.</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
<para>One and only one of <constant>MEDIA_PAD_FL_SINK</constant> and
|
||||||
|
<constant>MEDIA_PAD_FL_SOURCE</constant> must be set for every pad.</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
&return-value;
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>EINVAL</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para>The &media-links-enum; <structfield>id</structfield> references
|
||||||
|
a non-existing entity.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
93
Documentation/DocBook/v4l/media-ioc-setup-link.xml
Normal file
93
Documentation/DocBook/v4l/media-ioc-setup-link.xml
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
<refentry id="media-ioc-setup-link">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>ioctl MEDIA_IOC_SETUP_LINK</refentrytitle>
|
||||||
|
&manvol;
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv>
|
||||||
|
<refname>MEDIA_IOC_SETUP_LINK</refname>
|
||||||
|
<refpurpose>Modify the properties of a link</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>ioctl</function></funcdef>
|
||||||
|
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>request</parameter></paramdef>
|
||||||
|
<paramdef>struct media_link_desc *<parameter>argp</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Arguments</title>
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>fd</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>File descriptor returned by
|
||||||
|
<link linkend='media-func-open'><function>open()</function></link>.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>request</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>MEDIA_IOC_ENUM_LINKS</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>argp</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para></para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Description</title>
|
||||||
|
|
||||||
|
<para>To change link properties applications fill a &media-link-desc; with
|
||||||
|
link identification information (source and sink pad) and the new requested
|
||||||
|
link flags. They then call the MEDIA_IOC_SETUP_LINK ioctl with a pointer to
|
||||||
|
that structure.</para>
|
||||||
|
<para>The only configurable property is the <constant>ENABLED</constant>
|
||||||
|
link flag to enable/disable a link. Links marked with the
|
||||||
|
<constant>IMMUTABLE</constant> link flag can not be enabled or disabled.
|
||||||
|
</para>
|
||||||
|
<para>Link configuration has no side effect on other links. If an enabled
|
||||||
|
link at the sink pad prevents the link from being enabled, the driver
|
||||||
|
returns with an &EBUSY;.</para>
|
||||||
|
<para>Only links marked with the <constant>DYNAMIC</constant> link flag can
|
||||||
|
be enabled/disabled while streaming media data. Attempting to enable or
|
||||||
|
disable a streaming non-dynamic link will return an &EBUSY;.</para>
|
||||||
|
<para>If the specified link can't be found the driver returns with an
|
||||||
|
&EINVAL;.</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
&return-value;
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>EBUSY</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para>The link properties can't be changed because the link is
|
||||||
|
currently busy. This can be caused, for instance, by an active media
|
||||||
|
stream (audio or video) on the link. The ioctl shouldn't be retried if
|
||||||
|
no other action is performed before to fix the problem.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>EINVAL</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para>The &media-link-desc; references a non-existing link, or the
|
||||||
|
link is immutable and an attempt to modify its configuration was made.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
BIN
Documentation/DocBook/v4l/nv12mt.gif
Normal file
BIN
Documentation/DocBook/v4l/nv12mt.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.1 KiB |
BIN
Documentation/DocBook/v4l/nv12mt_example.gif
Normal file
BIN
Documentation/DocBook/v4l/nv12mt_example.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.7 KiB |
BIN
Documentation/DocBook/v4l/pipeline.pdf
Normal file
BIN
Documentation/DocBook/v4l/pipeline.pdf
Normal file
Binary file not shown.
BIN
Documentation/DocBook/v4l/pipeline.png
Normal file
BIN
Documentation/DocBook/v4l/pipeline.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
154
Documentation/DocBook/v4l/pixfmt-nv12m.xml
Normal file
154
Documentation/DocBook/v4l/pixfmt-nv12m.xml
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
<refentry id="V4L2-PIX-FMT-NV12M">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>V4L2_PIX_FMT_NV12M ('NV12M')</refentrytitle>
|
||||||
|
&manvol;
|
||||||
|
</refmeta>
|
||||||
|
<refnamediv>
|
||||||
|
<refname> <constant>V4L2_PIX_FMT_NV12M</constant></refname>
|
||||||
|
<refpurpose>Variation of <constant>V4L2_PIX_FMT_NV12</constant> with planes
|
||||||
|
non contiguous in memory. </refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
<refsect1>
|
||||||
|
<title>Description</title>
|
||||||
|
|
||||||
|
<para>This is a multi-planar, two-plane version of the YUV 4:2:0 format.
|
||||||
|
The three components are separated into two sub-images or planes.
|
||||||
|
<constant>V4L2_PIX_FMT_NV12M</constant> differs from <constant>V4L2_PIX_FMT_NV12
|
||||||
|
</constant> in that the two planes are non-contiguous in memory, i.e. the chroma
|
||||||
|
plane do not necessarily immediately follows the luma plane.
|
||||||
|
The luminance data occupies the first plane. The Y plane has one byte per pixel.
|
||||||
|
In the second plane there is a chrominance data with alternating chroma samples.
|
||||||
|
The CbCr plane is the same width, in bytes, as the Y plane (and of the image),
|
||||||
|
but is half as tall in pixels. Each CbCr pair belongs to four pixels. For example,
|
||||||
|
Cb<subscript>0</subscript>/Cr<subscript>0</subscript> belongs to
|
||||||
|
Y'<subscript>00</subscript>, Y'<subscript>01</subscript>,
|
||||||
|
Y'<subscript>10</subscript>, Y'<subscript>11</subscript>. </para>
|
||||||
|
|
||||||
|
<para><constant>V4L2_PIX_FMT_NV12M</constant> is intended to be
|
||||||
|
used only in drivers and applications that support the multi-planar API,
|
||||||
|
described in <xref linkend="planar-apis"/>. </para>
|
||||||
|
|
||||||
|
<para>If the Y plane has pad bytes after each row, then the
|
||||||
|
CbCr plane has as many pad bytes after its rows.</para>
|
||||||
|
|
||||||
|
<example>
|
||||||
|
<title><constant>V4L2_PIX_FMT_NV12M</constant> 4 × 4 pixel image</title>
|
||||||
|
|
||||||
|
<formalpara>
|
||||||
|
<title>Byte Order.</title>
|
||||||
|
<para>Each cell is one byte.
|
||||||
|
<informaltable frame="none">
|
||||||
|
<tgroup cols="5" align="center">
|
||||||
|
<colspec align="left" colwidth="2*" />
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry>start0 + 0:</entry>
|
||||||
|
<entry>Y'<subscript>00</subscript></entry>
|
||||||
|
<entry>Y'<subscript>01</subscript></entry>
|
||||||
|
<entry>Y'<subscript>02</subscript></entry>
|
||||||
|
<entry>Y'<subscript>03</subscript></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>start0 + 4:</entry>
|
||||||
|
<entry>Y'<subscript>10</subscript></entry>
|
||||||
|
<entry>Y'<subscript>11</subscript></entry>
|
||||||
|
<entry>Y'<subscript>12</subscript></entry>
|
||||||
|
<entry>Y'<subscript>13</subscript></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>start0 + 8:</entry>
|
||||||
|
<entry>Y'<subscript>20</subscript></entry>
|
||||||
|
<entry>Y'<subscript>21</subscript></entry>
|
||||||
|
<entry>Y'<subscript>22</subscript></entry>
|
||||||
|
<entry>Y'<subscript>23</subscript></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>start0 + 12:</entry>
|
||||||
|
<entry>Y'<subscript>30</subscript></entry>
|
||||||
|
<entry>Y'<subscript>31</subscript></entry>
|
||||||
|
<entry>Y'<subscript>32</subscript></entry>
|
||||||
|
<entry>Y'<subscript>33</subscript></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>start1 + 0:</entry>
|
||||||
|
<entry>Cb<subscript>00</subscript></entry>
|
||||||
|
<entry>Cr<subscript>00</subscript></entry>
|
||||||
|
<entry>Cb<subscript>01</subscript></entry>
|
||||||
|
<entry>Cr<subscript>01</subscript></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>start1 + 4:</entry>
|
||||||
|
<entry>Cb<subscript>10</subscript></entry>
|
||||||
|
<entry>Cr<subscript>10</subscript></entry>
|
||||||
|
<entry>Cb<subscript>11</subscript></entry>
|
||||||
|
<entry>Cr<subscript>11</subscript></entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</informaltable>
|
||||||
|
</para>
|
||||||
|
</formalpara>
|
||||||
|
|
||||||
|
<formalpara>
|
||||||
|
<title>Color Sample Location.</title>
|
||||||
|
<para>
|
||||||
|
<informaltable frame="none">
|
||||||
|
<tgroup cols="7" align="center">
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>0</entry><entry></entry><entry>1</entry><entry></entry>
|
||||||
|
<entry>2</entry><entry></entry><entry>3</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>0</entry>
|
||||||
|
<entry>Y</entry><entry></entry><entry>Y</entry><entry></entry>
|
||||||
|
<entry>Y</entry><entry></entry><entry>Y</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
<entry></entry><entry>C</entry><entry></entry><entry></entry>
|
||||||
|
<entry></entry><entry>C</entry><entry></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>1</entry>
|
||||||
|
<entry>Y</entry><entry></entry><entry>Y</entry><entry></entry>
|
||||||
|
<entry>Y</entry><entry></entry><entry>Y</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>2</entry>
|
||||||
|
<entry>Y</entry><entry></entry><entry>Y</entry><entry></entry>
|
||||||
|
<entry>Y</entry><entry></entry><entry>Y</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
<entry></entry><entry>C</entry><entry></entry><entry></entry>
|
||||||
|
<entry></entry><entry>C</entry><entry></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>3</entry>
|
||||||
|
<entry>Y</entry><entry></entry><entry>Y</entry><entry></entry>
|
||||||
|
<entry>Y</entry><entry></entry><entry>Y</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</informaltable>
|
||||||
|
</para>
|
||||||
|
</formalpara>
|
||||||
|
</example>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Local Variables:
|
||||||
|
mode: sgml
|
||||||
|
sgml-parent-document: "pixfmt.sgml"
|
||||||
|
indent-tabs-mode: nil
|
||||||
|
End:
|
||||||
|
-->
|
74
Documentation/DocBook/v4l/pixfmt-nv12mt.xml
Normal file
74
Documentation/DocBook/v4l/pixfmt-nv12mt.xml
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
<refentry>
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>V4L2_PIX_FMT_NV12MT ('TM12')</refentrytitle>
|
||||||
|
&manvol;
|
||||||
|
</refmeta>
|
||||||
|
<refnamediv>
|
||||||
|
<refname id="V4L2-PIX-FMT-NV12MT"><constant>V4L2_PIX_FMT_NV12MT
|
||||||
|
</constant></refname>
|
||||||
|
<refpurpose>Formats with ½ horizontal and vertical
|
||||||
|
chroma resolution. This format has two planes - one for luminance and one for
|
||||||
|
chrominance. Chroma samples are interleaved. The difference to
|
||||||
|
<constant>V4L2_PIX_FMT_NV12</constant> is the memory layout. Pixels are
|
||||||
|
grouped in macroblocks of 64x32 size. The order of macroblocks in memory is
|
||||||
|
also not standard.
|
||||||
|
</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
<refsect1>
|
||||||
|
<title>Description</title>
|
||||||
|
|
||||||
|
<para>This is the two-plane versions of the YUV 4:2:0 format where data
|
||||||
|
is grouped into 64x32 macroblocks. The three components are separated into two
|
||||||
|
sub-images or planes. The Y plane has one byte per pixel and pixels are grouped
|
||||||
|
into 64x32 macroblocks. The CbCr plane has the same width, in bytes, as the Y
|
||||||
|
plane (and the image), but is half as tall in pixels. The chroma plane is also
|
||||||
|
grouped into 64x32 macroblocks.</para>
|
||||||
|
<para>Width of the buffer has to be aligned to the multiple of 128, and
|
||||||
|
height alignment is 32. Every four adjactent buffers - two horizontally and two
|
||||||
|
vertically are grouped together and are located in memory in Z or flipped Z
|
||||||
|
order. </para>
|
||||||
|
<para>Layout of macroblocks in memory is presented in the following
|
||||||
|
figure.</para>
|
||||||
|
<para><figure id="nv12mt">
|
||||||
|
<title><constant>V4L2_PIX_FMT_NV12MT</constant> macroblock Z shape
|
||||||
|
memory layout</title>
|
||||||
|
<mediaobject>
|
||||||
|
<imageobject>
|
||||||
|
<imagedata fileref="nv12mt.gif" format="GIF" />
|
||||||
|
</imageobject>
|
||||||
|
</mediaobject>
|
||||||
|
</figure>
|
||||||
|
The requirement that width is multiple of 128 is implemented because,
|
||||||
|
the Z shape cannot be cut in half horizontally. In case the vertical resolution
|
||||||
|
of macroblocks is odd then the last row of macroblocks is arranged in a linear
|
||||||
|
order. </para>
|
||||||
|
<para>In case of chroma the layout is identical. Cb and Cr samples are
|
||||||
|
interleaved. Height of the buffer is aligned to 32.
|
||||||
|
</para>
|
||||||
|
<example>
|
||||||
|
<title>Memory layout of macroblocks in <constant>V4L2_PIX_FMT_NV12
|
||||||
|
</constant> format pixel image - extreme case</title>
|
||||||
|
<para>
|
||||||
|
<figure id="nv12mt_ex">
|
||||||
|
<title>Example <constant>V4L2_PIX_FMT_NV12MT</constant> memory
|
||||||
|
layout of macroblocks</title>
|
||||||
|
<mediaobject>
|
||||||
|
<imageobject>
|
||||||
|
<imagedata fileref="nv12mt_example.gif" format="GIF" />
|
||||||
|
</imageobject>
|
||||||
|
</mediaobject>
|
||||||
|
</figure>
|
||||||
|
Memory layout of macroblocks of <constant>V4L2_PIX_FMT_NV12MT
|
||||||
|
</constant> format in most extreme case.
|
||||||
|
</para>
|
||||||
|
</example>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Local Variables:
|
||||||
|
mode: sgml
|
||||||
|
sgml-parent-document: "pixfmt.sgml"
|
||||||
|
indent-tabs-mode: nil
|
||||||
|
End:
|
||||||
|
-->
|
90
Documentation/DocBook/v4l/pixfmt-srggb12.xml
Normal file
90
Documentation/DocBook/v4l/pixfmt-srggb12.xml
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
<refentry>
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>V4L2_PIX_FMT_SRGGB12 ('RG12'),
|
||||||
|
V4L2_PIX_FMT_SGRBG12 ('BA12'),
|
||||||
|
V4L2_PIX_FMT_SGBRG12 ('GB12'),
|
||||||
|
V4L2_PIX_FMT_SBGGR12 ('BG12'),
|
||||||
|
</refentrytitle>
|
||||||
|
&manvol;
|
||||||
|
</refmeta>
|
||||||
|
<refnamediv>
|
||||||
|
<refname id="V4L2-PIX-FMT-SRGGB12"><constant>V4L2_PIX_FMT_SRGGB12</constant></refname>
|
||||||
|
<refname id="V4L2-PIX-FMT-SGRBG12"><constant>V4L2_PIX_FMT_SGRBG12</constant></refname>
|
||||||
|
<refname id="V4L2-PIX-FMT-SGBRG12"><constant>V4L2_PIX_FMT_SGBRG12</constant></refname>
|
||||||
|
<refname id="V4L2-PIX-FMT-SBGGR12"><constant>V4L2_PIX_FMT_SBGGR12</constant></refname>
|
||||||
|
<refpurpose>12-bit Bayer formats expanded to 16 bits</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
<refsect1>
|
||||||
|
<title>Description</title>
|
||||||
|
|
||||||
|
<para>The following four pixel formats are raw sRGB / Bayer formats with
|
||||||
|
12 bits per colour. Each colour component is stored in a 16-bit word, with 6
|
||||||
|
unused high bits filled with zeros. Each n-pixel row contains n/2 green samples
|
||||||
|
and n/2 blue or red samples, with alternating red and blue rows. Bytes are
|
||||||
|
stored in memory in little endian order. They are conventionally described
|
||||||
|
as GRGR... BGBG..., RGRG... GBGB..., etc. Below is an example of one of these
|
||||||
|
formats</para>
|
||||||
|
|
||||||
|
<example>
|
||||||
|
<title><constant>V4L2_PIX_FMT_SBGGR12</constant> 4 × 4
|
||||||
|
pixel image</title>
|
||||||
|
|
||||||
|
<formalpara>
|
||||||
|
<title>Byte Order.</title>
|
||||||
|
<para>Each cell is one byte, high 6 bits in high bytes are 0.
|
||||||
|
<informaltable frame="none">
|
||||||
|
<tgroup cols="5" align="center">
|
||||||
|
<colspec align="left" colwidth="2*" />
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry>start + 0:</entry>
|
||||||
|
<entry>B<subscript>00low</subscript></entry>
|
||||||
|
<entry>B<subscript>00high</subscript></entry>
|
||||||
|
<entry>G<subscript>01low</subscript></entry>
|
||||||
|
<entry>G<subscript>01high</subscript></entry>
|
||||||
|
<entry>B<subscript>02low</subscript></entry>
|
||||||
|
<entry>B<subscript>02high</subscript></entry>
|
||||||
|
<entry>G<subscript>03low</subscript></entry>
|
||||||
|
<entry>G<subscript>03high</subscript></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>start + 8:</entry>
|
||||||
|
<entry>G<subscript>10low</subscript></entry>
|
||||||
|
<entry>G<subscript>10high</subscript></entry>
|
||||||
|
<entry>R<subscript>11low</subscript></entry>
|
||||||
|
<entry>R<subscript>11high</subscript></entry>
|
||||||
|
<entry>G<subscript>12low</subscript></entry>
|
||||||
|
<entry>G<subscript>12high</subscript></entry>
|
||||||
|
<entry>R<subscript>13low</subscript></entry>
|
||||||
|
<entry>R<subscript>13high</subscript></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>start + 16:</entry>
|
||||||
|
<entry>B<subscript>20low</subscript></entry>
|
||||||
|
<entry>B<subscript>20high</subscript></entry>
|
||||||
|
<entry>G<subscript>21low</subscript></entry>
|
||||||
|
<entry>G<subscript>21high</subscript></entry>
|
||||||
|
<entry>B<subscript>22low</subscript></entry>
|
||||||
|
<entry>B<subscript>22high</subscript></entry>
|
||||||
|
<entry>G<subscript>23low</subscript></entry>
|
||||||
|
<entry>G<subscript>23high</subscript></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>start + 24:</entry>
|
||||||
|
<entry>G<subscript>30low</subscript></entry>
|
||||||
|
<entry>G<subscript>30high</subscript></entry>
|
||||||
|
<entry>R<subscript>31low</subscript></entry>
|
||||||
|
<entry>R<subscript>31high</subscript></entry>
|
||||||
|
<entry>G<subscript>32low</subscript></entry>
|
||||||
|
<entry>G<subscript>32high</subscript></entry>
|
||||||
|
<entry>R<subscript>33low</subscript></entry>
|
||||||
|
<entry>R<subscript>33high</subscript></entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</informaltable>
|
||||||
|
</para>
|
||||||
|
</formalpara>
|
||||||
|
</example>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
162
Documentation/DocBook/v4l/pixfmt-yuv420m.xml
Normal file
162
Documentation/DocBook/v4l/pixfmt-yuv420m.xml
Normal file
@ -0,0 +1,162 @@
|
|||||||
|
<refentry id="V4L2-PIX-FMT-YUV420M">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>V4L2_PIX_FMT_YUV420M ('YU12M')</refentrytitle>
|
||||||
|
&manvol;
|
||||||
|
</refmeta>
|
||||||
|
<refnamediv>
|
||||||
|
<refname> <constant>V4L2_PIX_FMT_YUV420M</constant></refname>
|
||||||
|
<refpurpose>Variation of <constant>V4L2_PIX_FMT_YUV420</constant>
|
||||||
|
with planes non contiguous in memory. </refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Description</title>
|
||||||
|
|
||||||
|
<para>This is a multi-planar format, as opposed to a packed format.
|
||||||
|
The three components are separated into three sub- images or planes.
|
||||||
|
|
||||||
|
The Y plane is first. The Y plane has one byte per pixel. The Cb data
|
||||||
|
constitutes the second plane which is half the width and half
|
||||||
|
the height of the Y plane (and of the image). Each Cb belongs to four
|
||||||
|
pixels, a two-by-two square of the image. For example,
|
||||||
|
Cb<subscript>0</subscript> belongs to Y'<subscript>00</subscript>,
|
||||||
|
Y'<subscript>01</subscript>, Y'<subscript>10</subscript>, and
|
||||||
|
Y'<subscript>11</subscript>. The Cr data, just like the Cb plane, is
|
||||||
|
in the third plane. </para>
|
||||||
|
|
||||||
|
<para>If the Y plane has pad bytes after each row, then the Cb
|
||||||
|
and Cr planes have half as many pad bytes after their rows. In other
|
||||||
|
words, two Cx rows (including padding) is exactly as long as one Y row
|
||||||
|
(including padding).</para>
|
||||||
|
|
||||||
|
<para><constant>V4L2_PIX_FMT_NV12M</constant> is intended to be
|
||||||
|
used only in drivers and applications that support the multi-planar API,
|
||||||
|
described in <xref linkend="planar-apis"/>. </para>
|
||||||
|
|
||||||
|
<example>
|
||||||
|
<title><constant>V4L2_PIX_FMT_YVU420M</constant> 4 × 4
|
||||||
|
pixel image</title>
|
||||||
|
|
||||||
|
<formalpara>
|
||||||
|
<title>Byte Order.</title>
|
||||||
|
<para>Each cell is one byte.
|
||||||
|
<informaltable frame="none">
|
||||||
|
<tgroup cols="5" align="center">
|
||||||
|
<colspec align="left" colwidth="2*" />
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry>start0 + 0:</entry>
|
||||||
|
<entry>Y'<subscript>00</subscript></entry>
|
||||||
|
<entry>Y'<subscript>01</subscript></entry>
|
||||||
|
<entry>Y'<subscript>02</subscript></entry>
|
||||||
|
<entry>Y'<subscript>03</subscript></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>start0 + 4:</entry>
|
||||||
|
<entry>Y'<subscript>10</subscript></entry>
|
||||||
|
<entry>Y'<subscript>11</subscript></entry>
|
||||||
|
<entry>Y'<subscript>12</subscript></entry>
|
||||||
|
<entry>Y'<subscript>13</subscript></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>start0 + 8:</entry>
|
||||||
|
<entry>Y'<subscript>20</subscript></entry>
|
||||||
|
<entry>Y'<subscript>21</subscript></entry>
|
||||||
|
<entry>Y'<subscript>22</subscript></entry>
|
||||||
|
<entry>Y'<subscript>23</subscript></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>start0 + 12:</entry>
|
||||||
|
<entry>Y'<subscript>30</subscript></entry>
|
||||||
|
<entry>Y'<subscript>31</subscript></entry>
|
||||||
|
<entry>Y'<subscript>32</subscript></entry>
|
||||||
|
<entry>Y'<subscript>33</subscript></entry>
|
||||||
|
</row>
|
||||||
|
<row><entry></entry></row>
|
||||||
|
<row>
|
||||||
|
<entry>start1 + 0:</entry>
|
||||||
|
<entry>Cb<subscript>00</subscript></entry>
|
||||||
|
<entry>Cb<subscript>01</subscript></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>start1 + 2:</entry>
|
||||||
|
<entry>Cb<subscript>10</subscript></entry>
|
||||||
|
<entry>Cb<subscript>11</subscript></entry>
|
||||||
|
</row>
|
||||||
|
<row><entry></entry></row>
|
||||||
|
<row>
|
||||||
|
<entry>start2 + 0:</entry>
|
||||||
|
<entry>Cr<subscript>00</subscript></entry>
|
||||||
|
<entry>Cr<subscript>01</subscript></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>start2 + 2:</entry>
|
||||||
|
<entry>Cr<subscript>10</subscript></entry>
|
||||||
|
<entry>Cr<subscript>11</subscript></entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</informaltable>
|
||||||
|
</para>
|
||||||
|
</formalpara>
|
||||||
|
|
||||||
|
<formalpara>
|
||||||
|
<title>Color Sample Location.</title>
|
||||||
|
<para>
|
||||||
|
<informaltable frame="none">
|
||||||
|
<tgroup cols="7" align="center">
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>0</entry><entry></entry><entry>1</entry><entry></entry>
|
||||||
|
<entry>2</entry><entry></entry><entry>3</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>0</entry>
|
||||||
|
<entry>Y</entry><entry></entry><entry>Y</entry><entry></entry>
|
||||||
|
<entry>Y</entry><entry></entry><entry>Y</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
<entry></entry><entry>C</entry><entry></entry><entry></entry>
|
||||||
|
<entry></entry><entry>C</entry><entry></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>1</entry>
|
||||||
|
<entry>Y</entry><entry></entry><entry>Y</entry><entry></entry>
|
||||||
|
<entry>Y</entry><entry></entry><entry>Y</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>2</entry>
|
||||||
|
<entry>Y</entry><entry></entry><entry>Y</entry><entry></entry>
|
||||||
|
<entry>Y</entry><entry></entry><entry>Y</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
<entry></entry><entry>C</entry><entry></entry><entry></entry>
|
||||||
|
<entry></entry><entry>C</entry><entry></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>3</entry>
|
||||||
|
<entry>Y</entry><entry></entry><entry>Y</entry><entry></entry>
|
||||||
|
<entry>Y</entry><entry></entry><entry>Y</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</informaltable>
|
||||||
|
</para>
|
||||||
|
</formalpara>
|
||||||
|
</example>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Local Variables:
|
||||||
|
mode: sgml
|
||||||
|
sgml-parent-document: "pixfmt.sgml"
|
||||||
|
indent-tabs-mode: nil
|
||||||
|
End:
|
||||||
|
-->
|
@ -2,12 +2,16 @@
|
|||||||
|
|
||||||
<para>The V4L2 API was primarily designed for devices exchanging
|
<para>The V4L2 API was primarily designed for devices exchanging
|
||||||
image data with applications. The
|
image data with applications. The
|
||||||
<structname>v4l2_pix_format</structname> structure defines the format
|
<structname>v4l2_pix_format</structname> and <structname>v4l2_pix_format_mplane
|
||||||
and layout of an image in memory. Image formats are negotiated with
|
</structname> structures define the format and layout of an image in memory.
|
||||||
the &VIDIOC-S-FMT; ioctl. (The explanations here focus on video
|
The former is used with the single-planar API, while the latter is used with the
|
||||||
|
multi-planar version (see <xref linkend="planar-apis"/>). Image formats are
|
||||||
|
negotiated with the &VIDIOC-S-FMT; ioctl. (The explanations here focus on video
|
||||||
capturing and output, for overlay frame buffer formats see also
|
capturing and output, for overlay frame buffer formats see also
|
||||||
&VIDIOC-G-FBUF;.)</para>
|
&VIDIOC-G-FBUF;.)</para>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<title>Single-planar format structure</title>
|
||||||
<table pgwide="1" frame="none" id="v4l2-pix-format">
|
<table pgwide="1" frame="none" id="v4l2-pix-format">
|
||||||
<title>struct <structname>v4l2_pix_format</structname></title>
|
<title>struct <structname>v4l2_pix_format</structname></title>
|
||||||
<tgroup cols="3">
|
<tgroup cols="3">
|
||||||
@ -106,6 +110,98 @@ set this field to zero.</entry>
|
|||||||
</tbody>
|
</tbody>
|
||||||
</tgroup>
|
</tgroup>
|
||||||
</table>
|
</table>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<title>Multi-planar format structures</title>
|
||||||
|
<para>The <structname>v4l2_plane_pix_format</structname> structures define
|
||||||
|
size and layout for each of the planes in a multi-planar format.
|
||||||
|
The <structname>v4l2_pix_format_mplane</structname> structure contains
|
||||||
|
information common to all planes (such as image width and height) and
|
||||||
|
an array of <structname>v4l2_plane_pix_format</structname> structures,
|
||||||
|
describing all planes of that format.</para>
|
||||||
|
<table pgwide="1" frame="none" id="v4l2-plane-pix-format">
|
||||||
|
<title>struct <structname>vl42_plane_pix_format</structname></title>
|
||||||
|
<tgroup cols="3">
|
||||||
|
&cs-str;
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>sizeimage</structfield></entry>
|
||||||
|
<entry>Maximum size in bytes required for image data in this plane.
|
||||||
|
</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u16</entry>
|
||||||
|
<entry><structfield>bytesperline</structfield></entry>
|
||||||
|
<entry>Distance in bytes between the leftmost pixels in two adjacent
|
||||||
|
lines.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u16</entry>
|
||||||
|
<entry><structfield>reserved[7]</structfield></entry>
|
||||||
|
<entry>Reserved for future extensions. Should be zeroed by the
|
||||||
|
application.</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
<table pgwide="1" frame="none" id="v4l2-pix-format-mplane">
|
||||||
|
<title>struct <structname>v4l2_pix_format_mplane</structname></title>
|
||||||
|
<tgroup cols="3">
|
||||||
|
&cs-str;
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>width</structfield></entry>
|
||||||
|
<entry>Image width in pixels.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>height</structfield></entry>
|
||||||
|
<entry>Image height in pixels.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>pixelformat</structfield></entry>
|
||||||
|
<entry>The pixel format. Both single- and multi-planar four character
|
||||||
|
codes can be used.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>&v4l2-field;</entry>
|
||||||
|
<entry><structfield>field</structfield></entry>
|
||||||
|
<entry>See &v4l2-pix-format;.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>&v4l2-colorspace;</entry>
|
||||||
|
<entry><structfield>colorspace</structfield></entry>
|
||||||
|
<entry>See &v4l2-pix-format;.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>&v4l2-plane-pix-format;</entry>
|
||||||
|
<entry><structfield>plane_fmt[VIDEO_MAX_PLANES]</structfield></entry>
|
||||||
|
<entry>An array of structures describing format of each plane this
|
||||||
|
pixel format consists of. The number of valid entries in this array
|
||||||
|
has to be put in the <structfield>num_planes</structfield>
|
||||||
|
field.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u8</entry>
|
||||||
|
<entry><structfield>num_planes</structfield></entry>
|
||||||
|
<entry>Number of planes (i.e. separate memory buffers) for this format
|
||||||
|
and the number of valid entries in the
|
||||||
|
<structfield>plane_fmt</structfield> array.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u8</entry>
|
||||||
|
<entry><structfield>reserved[11]</structfield></entry>
|
||||||
|
<entry>Reserved for future extensions. Should be zeroed by the
|
||||||
|
application.</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
</section>
|
||||||
|
|
||||||
<section>
|
<section>
|
||||||
<title>Standard Image Formats</title>
|
<title>Standard Image Formats</title>
|
||||||
@ -142,11 +238,19 @@ leftmost pixel of the second row from the top, and so on. The last row
|
|||||||
has just as many pad bytes after it as the other rows.</para>
|
has just as many pad bytes after it as the other rows.</para>
|
||||||
|
|
||||||
<para>In V4L2 each format has an identifier which looks like
|
<para>In V4L2 each format has an identifier which looks like
|
||||||
<constant>PIX_FMT_XXX</constant>, defined in the <filename>videodev2.h</filename>
|
<constant>PIX_FMT_XXX</constant>, defined in the <link
|
||||||
header file. These identifiers
|
linkend="videodev">videodev.h</link> header file. These identifiers
|
||||||
represent <link linkend="v4l2-fourcc">four character codes</link>
|
represent <link linkend="v4l2-fourcc">four character (FourCC) codes</link>
|
||||||
which are also listed below, however they are not the same as those
|
which are also listed below, however they are not the same as those
|
||||||
used in the Windows world.</para>
|
used in the Windows world.</para>
|
||||||
|
|
||||||
|
<para>For some formats, data is stored in separate, discontiguous
|
||||||
|
memory buffers. Those formats are identified by a separate set of FourCC codes
|
||||||
|
and are referred to as "multi-planar formats". For example, a YUV422 frame is
|
||||||
|
normally stored in one memory buffer, but it can also be placed in two or three
|
||||||
|
separate buffers, with Y component in one buffer and CbCr components in another
|
||||||
|
in the 2-planar version or with each component in its own buffer in the
|
||||||
|
3-planar case. Those sub-buffers are referred to as "planes".</para>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section id="colorspaces">
|
<section id="colorspaces">
|
||||||
@ -599,10 +703,13 @@ information.</para>
|
|||||||
&sub-vyuy;
|
&sub-vyuy;
|
||||||
&sub-y41p;
|
&sub-y41p;
|
||||||
&sub-yuv420;
|
&sub-yuv420;
|
||||||
|
&sub-yuv420m;
|
||||||
&sub-yuv410;
|
&sub-yuv410;
|
||||||
&sub-yuv422p;
|
&sub-yuv422p;
|
||||||
&sub-yuv411p;
|
&sub-yuv411p;
|
||||||
&sub-nv12;
|
&sub-nv12;
|
||||||
|
&sub-nv12m;
|
||||||
|
&sub-nv12mt;
|
||||||
&sub-nv16;
|
&sub-nv16;
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
62
Documentation/DocBook/v4l/planar-apis.xml
Normal file
62
Documentation/DocBook/v4l/planar-apis.xml
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
<section id="planar-apis">
|
||||||
|
<title>Single- and multi-planar APIs</title>
|
||||||
|
|
||||||
|
<para>Some devices require data for each input or output video frame
|
||||||
|
to be placed in discontiguous memory buffers. In such cases, one
|
||||||
|
video frame has to be addressed using more than one memory address, i.e. one
|
||||||
|
pointer per "plane". A plane is a sub-buffer of the current frame. For
|
||||||
|
examples of such formats see <xref linkend="pixfmt" />.</para>
|
||||||
|
|
||||||
|
<para>Initially, V4L2 API did not support multi-planar buffers and a set of
|
||||||
|
extensions has been introduced to handle them. Those extensions constitute
|
||||||
|
what is being referred to as the "multi-planar API".</para>
|
||||||
|
|
||||||
|
<para>Some of the V4L2 API calls and structures are interpreted differently,
|
||||||
|
depending on whether single- or multi-planar API is being used. An application
|
||||||
|
can choose whether to use one or the other by passing a corresponding buffer
|
||||||
|
type to its ioctl calls. Multi-planar versions of buffer types are suffixed
|
||||||
|
with an `_MPLANE' string. For a list of available multi-planar buffer types
|
||||||
|
see &v4l2-buf-type;.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<title>Multi-planar formats</title>
|
||||||
|
<para>Multi-planar API introduces new multi-planar formats. Those formats
|
||||||
|
use a separate set of FourCC codes. It is important to distinguish between
|
||||||
|
the multi-planar API and a multi-planar format. Multi-planar API calls can
|
||||||
|
handle all single-planar formats as well (as long as they are passed in
|
||||||
|
multi-planar API structures), while the single-planar API cannot
|
||||||
|
handle multi-planar formats.</para>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<title>Calls that distinguish between single and multi-planar APIs</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>&VIDIOC-QUERYCAP;</term>
|
||||||
|
<listitem><para>Two additional multi-planar capabilities are added. They can
|
||||||
|
be set together with non-multi-planar ones for devices that handle
|
||||||
|
both single- and multi-planar formats.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>&VIDIOC-G-FMT;, &VIDIOC-S-FMT;, &VIDIOC-TRY-FMT;</term>
|
||||||
|
<listitem><para>New structures for describing multi-planar formats are added:
|
||||||
|
&v4l2-pix-format-mplane; and &v4l2-plane-pix-format;. Drivers may
|
||||||
|
define new multi-planar formats, which have distinct FourCC codes from
|
||||||
|
the existing single-planar ones.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>&VIDIOC-QBUF;, &VIDIOC-DQBUF;, &VIDIOC-QUERYBUF;</term>
|
||||||
|
<listitem><para>A new &v4l2-plane; structure for describing planes is added.
|
||||||
|
Arrays of this structure are passed in the new
|
||||||
|
<structfield>m.planes</structfield> field of &v4l2-buffer;.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>&VIDIOC-REQBUFS;</term>
|
||||||
|
<listitem><para>Will allocate multi-planar buffers as requested.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</section>
|
||||||
|
</section>
|
@ -133,7 +133,7 @@ different IR's. Due to that, V4L2 API now specifies a standard for mapping Media
|
|||||||
<row><entry><constant>KEY_LEFT</constant></entry><entry>Left key</entry><entry>LEFT</entry></row>
|
<row><entry><constant>KEY_LEFT</constant></entry><entry>Left key</entry><entry>LEFT</entry></row>
|
||||||
<row><entry><constant>KEY_RIGHT</constant></entry><entry>Right key</entry><entry>RIGHT</entry></row>
|
<row><entry><constant>KEY_RIGHT</constant></entry><entry>Right key</entry><entry>RIGHT</entry></row>
|
||||||
|
|
||||||
<row><entry><emphasis role="bold">Miscelaneous keys</emphasis></entry></row>
|
<row><entry><emphasis role="bold">Miscellaneous keys</emphasis></entry></row>
|
||||||
|
|
||||||
<row><entry><constant>KEY_DOT</constant></entry><entry>Return a dot</entry><entry>.</entry></row>
|
<row><entry><constant>KEY_DOT</constant></entry><entry>Return a dot</entry><entry>.</entry></row>
|
||||||
<row><entry><constant>KEY_FN</constant></entry><entry>Select a function</entry><entry>FUNCTION</entry></row>
|
<row><entry><constant>KEY_FN</constant></entry><entry>Select a function</entry><entry>FUNCTION</entry></row>
|
||||||
|
2467
Documentation/DocBook/v4l/subdev-formats.xml
Normal file
2467
Documentation/DocBook/v4l/subdev-formats.xml
Normal file
File diff suppressed because it is too large
Load Diff
@ -85,6 +85,17 @@ Remote Controller chapter.</contrib>
|
|||||||
</address>
|
</address>
|
||||||
</affiliation>
|
</affiliation>
|
||||||
</author>
|
</author>
|
||||||
|
|
||||||
|
<author>
|
||||||
|
<firstname>Pawel</firstname>
|
||||||
|
<surname>Osciak</surname>
|
||||||
|
<contrib>Designed and documented the multi-planar API.</contrib>
|
||||||
|
<affiliation>
|
||||||
|
<address>
|
||||||
|
<email>pawel AT osciak.com</email>
|
||||||
|
</address>
|
||||||
|
</affiliation>
|
||||||
|
</author>
|
||||||
</authorgroup>
|
</authorgroup>
|
||||||
|
|
||||||
<copyright>
|
<copyright>
|
||||||
@ -102,7 +113,8 @@ Remote Controller chapter.</contrib>
|
|||||||
<year>2010</year>
|
<year>2010</year>
|
||||||
<year>2011</year>
|
<year>2011</year>
|
||||||
<holder>Bill Dirks, Michael H. Schimek, Hans Verkuil, Martin
|
<holder>Bill Dirks, Michael H. Schimek, Hans Verkuil, Martin
|
||||||
Rubli, Andy Walls, Muralidharan Karicheri, Mauro Carvalho Chehab</holder>
|
Rubli, Andy Walls, Muralidharan Karicheri, Mauro Carvalho Chehab,
|
||||||
|
Pawel Osciak</holder>
|
||||||
</copyright>
|
</copyright>
|
||||||
<legalnotice>
|
<legalnotice>
|
||||||
<para>Except when explicitly stated as GPL, programming examples within
|
<para>Except when explicitly stated as GPL, programming examples within
|
||||||
@ -115,6 +127,13 @@ structs, ioctls) must be noted in more detail in the history chapter
|
|||||||
(compat.xml), along with the possible impact on existing drivers and
|
(compat.xml), along with the possible impact on existing drivers and
|
||||||
applications. -->
|
applications. -->
|
||||||
|
|
||||||
|
<revision>
|
||||||
|
<revnumber>2.6.39</revnumber>
|
||||||
|
<date>2011-03-01</date>
|
||||||
|
<authorinitials>mcc, po</authorinitials>
|
||||||
|
<revremark>Removed VIDIOC_*_OLD from videodev2.h header and update it to reflect latest changes. Added the <link linkend="planar-apis">multi-planar API</link>.</revremark>
|
||||||
|
</revision>
|
||||||
|
|
||||||
<revision>
|
<revision>
|
||||||
<revnumber>2.6.37</revnumber>
|
<revnumber>2.6.37</revnumber>
|
||||||
<date>2010-08-06</date>
|
<date>2010-08-06</date>
|
||||||
@ -382,7 +401,7 @@ and discussions on the V4L mailing list.</revremark>
|
|||||||
</partinfo>
|
</partinfo>
|
||||||
|
|
||||||
<title>Video for Linux Two API Specification</title>
|
<title>Video for Linux Two API Specification</title>
|
||||||
<subtitle>Revision 2.6.38</subtitle>
|
<subtitle>Revision 2.6.39</subtitle>
|
||||||
|
|
||||||
<chapter id="common">
|
<chapter id="common">
|
||||||
&sub-common;
|
&sub-common;
|
||||||
@ -411,6 +430,7 @@ and discussions on the V4L mailing list.</revremark>
|
|||||||
<section id="radio"> &sub-dev-radio; </section>
|
<section id="radio"> &sub-dev-radio; </section>
|
||||||
<section id="rds"> &sub-dev-rds; </section>
|
<section id="rds"> &sub-dev-rds; </section>
|
||||||
<section id="event"> &sub-dev-event; </section>
|
<section id="event"> &sub-dev-event; </section>
|
||||||
|
<section id="subdev"> &sub-dev-subdev; </section>
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
<chapter id="driver">
|
<chapter id="driver">
|
||||||
@ -478,6 +498,12 @@ and discussions on the V4L mailing list.</revremark>
|
|||||||
&sub-reqbufs;
|
&sub-reqbufs;
|
||||||
&sub-s-hw-freq-seek;
|
&sub-s-hw-freq-seek;
|
||||||
&sub-streamon;
|
&sub-streamon;
|
||||||
|
&sub-subdev-enum-frame-interval;
|
||||||
|
&sub-subdev-enum-frame-size;
|
||||||
|
&sub-subdev-enum-mbus-code;
|
||||||
|
&sub-subdev-g-crop;
|
||||||
|
&sub-subdev-g-fmt;
|
||||||
|
&sub-subdev-g-frame-interval;
|
||||||
&sub-subscribe-event;
|
&sub-subscribe-event;
|
||||||
<!-- End of ioctls. -->
|
<!-- End of ioctls. -->
|
||||||
&sub-mmap;
|
&sub-mmap;
|
||||||
|
@ -71,6 +71,7 @@
|
|||||||
* Moved from videodev.h
|
* Moved from videodev.h
|
||||||
*/
|
*/
|
||||||
#define VIDEO_MAX_FRAME 32
|
#define VIDEO_MAX_FRAME 32
|
||||||
|
#define VIDEO_MAX_PLANES 8
|
||||||
|
|
||||||
#ifndef __KERNEL__
|
#ifndef __KERNEL__
|
||||||
|
|
||||||
@ -158,9 +159,23 @@ enum <link linkend="v4l2-buf-type">v4l2_buf_type</link> {
|
|||||||
/* Experimental */
|
/* Experimental */
|
||||||
V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY = 8,
|
V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY = 8,
|
||||||
#endif
|
#endif
|
||||||
|
V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE = 9,
|
||||||
|
V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE = 10,
|
||||||
V4L2_BUF_TYPE_PRIVATE = 0x80,
|
V4L2_BUF_TYPE_PRIVATE = 0x80,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define V4L2_TYPE_IS_MULTIPLANAR(type) \
|
||||||
|
((type) == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE \
|
||||||
|
|| (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE)
|
||||||
|
|
||||||
|
#define V4L2_TYPE_IS_OUTPUT(type) \
|
||||||
|
((type) == V4L2_BUF_TYPE_VIDEO_OUTPUT \
|
||||||
|
|| (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE \
|
||||||
|
|| (type) == V4L2_BUF_TYPE_VIDEO_OVERLAY \
|
||||||
|
|| (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY \
|
||||||
|
|| (type) == V4L2_BUF_TYPE_VBI_OUTPUT \
|
||||||
|
|| (type) == V4L2_BUF_TYPE_SLICED_VBI_OUTPUT)
|
||||||
|
|
||||||
enum <link linkend="v4l2-tuner-type">v4l2_tuner_type</link> {
|
enum <link linkend="v4l2-tuner-type">v4l2_tuner_type</link> {
|
||||||
V4L2_TUNER_RADIO = 1,
|
V4L2_TUNER_RADIO = 1,
|
||||||
V4L2_TUNER_ANALOG_TV = 2,
|
V4L2_TUNER_ANALOG_TV = 2,
|
||||||
@ -246,6 +261,11 @@ struct <link linkend="v4l2-capability">v4l2_capability</link> {
|
|||||||
#define V4L2_CAP_HW_FREQ_SEEK 0x00000400 /* Can do hardware frequency seek */
|
#define V4L2_CAP_HW_FREQ_SEEK 0x00000400 /* Can do hardware frequency seek */
|
||||||
#define V4L2_CAP_RDS_OUTPUT 0x00000800 /* Is an RDS encoder */
|
#define V4L2_CAP_RDS_OUTPUT 0x00000800 /* Is an RDS encoder */
|
||||||
|
|
||||||
|
/* Is a video capture device that supports multiplanar formats */
|
||||||
|
#define V4L2_CAP_VIDEO_CAPTURE_MPLANE 0x00001000
|
||||||
|
/* Is a video output device that supports multiplanar formats */
|
||||||
|
#define V4L2_CAP_VIDEO_OUTPUT_MPLANE 0x00002000
|
||||||
|
|
||||||
#define V4L2_CAP_TUNER 0x00010000 /* has a tuner */
|
#define V4L2_CAP_TUNER 0x00010000 /* has a tuner */
|
||||||
#define V4L2_CAP_AUDIO 0x00020000 /* has audio support */
|
#define V4L2_CAP_AUDIO 0x00020000 /* has audio support */
|
||||||
#define V4L2_CAP_RADIO 0x00040000 /* is a radio device */
|
#define V4L2_CAP_RADIO 0x00040000 /* is a radio device */
|
||||||
@ -320,6 +340,13 @@ struct <link linkend="v4l2-pix-format">v4l2_pix_format</link> {
|
|||||||
#define <link linkend="V4L2-PIX-FMT-NV16">V4L2_PIX_FMT_NV16</link> v4l2_fourcc('N', 'V', '1', '6') /* 16 Y/CbCr 4:2:2 */
|
#define <link linkend="V4L2-PIX-FMT-NV16">V4L2_PIX_FMT_NV16</link> v4l2_fourcc('N', 'V', '1', '6') /* 16 Y/CbCr 4:2:2 */
|
||||||
#define <link linkend="V4L2-PIX-FMT-NV61">V4L2_PIX_FMT_NV61</link> v4l2_fourcc('N', 'V', '6', '1') /* 16 Y/CrCb 4:2:2 */
|
#define <link linkend="V4L2-PIX-FMT-NV61">V4L2_PIX_FMT_NV61</link> v4l2_fourcc('N', 'V', '6', '1') /* 16 Y/CrCb 4:2:2 */
|
||||||
|
|
||||||
|
/* two non contiguous planes - one Y, one Cr + Cb interleaved */
|
||||||
|
#define <link linkend="V4L2-PIX-FMT-NV12M">V4L2_PIX_FMT_NV12M</link> v4l2_fourcc('N', 'M', '1', '2') /* 12 Y/CbCr 4:2:0 */
|
||||||
|
#define <link linkend="V4L2-PIX-FMT-NV12MT">V4L2_PIX_FMT_NV12MT</link> v4l2_fourcc('T', 'M', '1', '2') /* 12 Y/CbCr 4:2:0 64x32 macroblocks */
|
||||||
|
|
||||||
|
/* three non contiguous planes - Y, Cb, Cr */
|
||||||
|
#define <link linkend="V4L2-PIX-FMT-YUV420M">V4L2_PIX_FMT_YUV420M</link> v4l2_fourcc('Y', 'M', '1', '2') /* 12 YUV420 planar */
|
||||||
|
|
||||||
/* Bayer formats - see http://www.siliconimaging.com/RGB%20Bayer.htm */
|
/* Bayer formats - see http://www.siliconimaging.com/RGB%20Bayer.htm */
|
||||||
#define <link linkend="V4L2-PIX-FMT-SBGGR8">V4L2_PIX_FMT_SBGGR8</link> v4l2_fourcc('B', 'A', '8', '1') /* 8 BGBG.. GRGR.. */
|
#define <link linkend="V4L2-PIX-FMT-SBGGR8">V4L2_PIX_FMT_SBGGR8</link> v4l2_fourcc('B', 'A', '8', '1') /* 8 BGBG.. GRGR.. */
|
||||||
#define <link linkend="V4L2-PIX-FMT-SGBRG8">V4L2_PIX_FMT_SGBRG8</link> v4l2_fourcc('G', 'B', 'R', 'G') /* 8 GBGB.. RGRG.. */
|
#define <link linkend="V4L2-PIX-FMT-SGBRG8">V4L2_PIX_FMT_SGBRG8</link> v4l2_fourcc('G', 'B', 'R', 'G') /* 8 GBGB.. RGRG.. */
|
||||||
@ -518,6 +545,62 @@ struct <link linkend="v4l2-requestbuffers">v4l2_requestbuffers</link> {
|
|||||||
__u32 reserved[2];
|
__u32 reserved[2];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct <link linkend="v4l2-plane">v4l2_plane</link> - plane info for multi-planar buffers
|
||||||
|
* @bytesused: number of bytes occupied by data in the plane (payload)
|
||||||
|
* @length: size of this plane (NOT the payload) in bytes
|
||||||
|
* @mem_offset: when memory in the associated struct <link linkend="v4l2-buffer">v4l2_buffer</link> is
|
||||||
|
* V4L2_MEMORY_MMAP, equals the offset from the start of
|
||||||
|
* the device memory for this plane (or is a "cookie" that
|
||||||
|
* should be passed to mmap() called on the video node)
|
||||||
|
* @userptr: when memory is V4L2_MEMORY_USERPTR, a userspace pointer
|
||||||
|
* pointing to this plane
|
||||||
|
* @data_offset: offset in the plane to the start of data; usually 0,
|
||||||
|
* unless there is a header in front of the data
|
||||||
|
*
|
||||||
|
* Multi-planar buffers consist of one or more planes, e.g. an YCbCr buffer
|
||||||
|
* with two planes can have one plane for Y, and another for interleaved CbCr
|
||||||
|
* components. Each plane can reside in a separate memory buffer, or even in
|
||||||
|
* a completely separate memory node (e.g. in embedded devices).
|
||||||
|
*/
|
||||||
|
struct <link linkend="v4l2-plane">v4l2_plane</link> {
|
||||||
|
__u32 bytesused;
|
||||||
|
__u32 length;
|
||||||
|
union {
|
||||||
|
__u32 mem_offset;
|
||||||
|
unsigned long userptr;
|
||||||
|
} m;
|
||||||
|
__u32 data_offset;
|
||||||
|
__u32 reserved[11];
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct <link linkend="v4l2-buffer">v4l2_buffer</link> - video buffer info
|
||||||
|
* @index: id number of the buffer
|
||||||
|
* @type: buffer type (type == *_MPLANE for multiplanar buffers)
|
||||||
|
* @bytesused: number of bytes occupied by data in the buffer (payload);
|
||||||
|
* unused (set to 0) for multiplanar buffers
|
||||||
|
* @flags: buffer informational flags
|
||||||
|
* @field: field order of the image in the buffer
|
||||||
|
* @timestamp: frame timestamp
|
||||||
|
* @timecode: frame timecode
|
||||||
|
* @sequence: sequence count of this frame
|
||||||
|
* @memory: the method, in which the actual video data is passed
|
||||||
|
* @offset: for non-multiplanar buffers with memory == V4L2_MEMORY_MMAP;
|
||||||
|
* offset from the start of the device memory for this plane,
|
||||||
|
* (or a "cookie" that should be passed to mmap() as offset)
|
||||||
|
* @userptr: for non-multiplanar buffers with memory == V4L2_MEMORY_USERPTR;
|
||||||
|
* a userspace pointer pointing to this buffer
|
||||||
|
* @planes: for multiplanar buffers; userspace pointer to the array of plane
|
||||||
|
* info structs for this buffer
|
||||||
|
* @length: size in bytes of the buffer (NOT its payload) for single-plane
|
||||||
|
* buffers (when type != *_MPLANE); number of elements in the
|
||||||
|
* planes array for multi-plane buffers
|
||||||
|
* @input: input number from which the video data has has been captured
|
||||||
|
*
|
||||||
|
* Contains data exchanged by application and driver using one of the Streaming
|
||||||
|
* I/O methods.
|
||||||
|
*/
|
||||||
struct <link linkend="v4l2-buffer">v4l2_buffer</link> {
|
struct <link linkend="v4l2-buffer">v4l2_buffer</link> {
|
||||||
__u32 index;
|
__u32 index;
|
||||||
enum <link linkend="v4l2-buf-type">v4l2_buf_type</link> type;
|
enum <link linkend="v4l2-buf-type">v4l2_buf_type</link> type;
|
||||||
@ -533,6 +616,7 @@ struct <link linkend="v4l2-buffer">v4l2_buffer</link> {
|
|||||||
union {
|
union {
|
||||||
__u32 offset;
|
__u32 offset;
|
||||||
unsigned long userptr;
|
unsigned long userptr;
|
||||||
|
struct <link linkend="v4l2-plane">v4l2_plane</link> *planes;
|
||||||
} m;
|
} m;
|
||||||
__u32 length;
|
__u32 length;
|
||||||
__u32 input;
|
__u32 input;
|
||||||
@ -1623,12 +1707,56 @@ struct <link linkend="v4l2-mpeg-vbi-fmt-ivtv">v4l2_mpeg_vbi_fmt_ivtv</link> {
|
|||||||
* A G G R E G A T E S T R U C T U R E S
|
* A G G R E G A T E S T R U C T U R E S
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Stream data format
|
/**
|
||||||
|
* struct <link linkend="v4l2-plane-pix-format">v4l2_plane_pix_format</link> - additional, per-plane format definition
|
||||||
|
* @sizeimage: maximum size in bytes required for data, for which
|
||||||
|
* this plane will be used
|
||||||
|
* @bytesperline: distance in bytes between the leftmost pixels in two
|
||||||
|
* adjacent lines
|
||||||
|
*/
|
||||||
|
struct <link linkend="v4l2-plane-pix-format">v4l2_plane_pix_format</link> {
|
||||||
|
__u32 sizeimage;
|
||||||
|
__u16 bytesperline;
|
||||||
|
__u16 reserved[7];
|
||||||
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct <link linkend="v4l2-pix-format-mplane">v4l2_pix_format_mplane</link> - multiplanar format definition
|
||||||
|
* @width: image width in pixels
|
||||||
|
* @height: image height in pixels
|
||||||
|
* @pixelformat: little endian four character code (fourcc)
|
||||||
|
* @field: field order (for interlaced video)
|
||||||
|
* @colorspace: supplemental to pixelformat
|
||||||
|
* @plane_fmt: per-plane information
|
||||||
|
* @num_planes: number of planes for this format
|
||||||
|
*/
|
||||||
|
struct <link linkend="v4l2-pix-format-mplane">v4l2_pix_format_mplane</link> {
|
||||||
|
__u32 width;
|
||||||
|
__u32 height;
|
||||||
|
__u32 pixelformat;
|
||||||
|
enum <link linkend="v4l2-field">v4l2_field</link> field;
|
||||||
|
enum <link linkend="v4l2-colorspace">v4l2_colorspace</link> colorspace;
|
||||||
|
|
||||||
|
struct <link linkend="v4l2-plane-pix-format">v4l2_plane_pix_format</link> plane_fmt[VIDEO_MAX_PLANES];
|
||||||
|
__u8 num_planes;
|
||||||
|
__u8 reserved[11];
|
||||||
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct <link linkend="v4l2-format">v4l2_format</link> - stream data format
|
||||||
|
* @type: type of the data stream
|
||||||
|
* @pix: definition of an image format
|
||||||
|
* @pix_mp: definition of a multiplanar image format
|
||||||
|
* @win: definition of an overlaid image
|
||||||
|
* @vbi: raw VBI capture or output parameters
|
||||||
|
* @sliced: sliced VBI capture or output parameters
|
||||||
|
* @raw_data: placeholder for future extensions and custom formats
|
||||||
*/
|
*/
|
||||||
struct <link linkend="v4l2-format">v4l2_format</link> {
|
struct <link linkend="v4l2-format">v4l2_format</link> {
|
||||||
enum <link linkend="v4l2-buf-type">v4l2_buf_type</link> type;
|
enum <link linkend="v4l2-buf-type">v4l2_buf_type</link> type;
|
||||||
union {
|
union {
|
||||||
struct <link linkend="v4l2-pix-format">v4l2_pix_format</link> pix; /* V4L2_BUF_TYPE_VIDEO_CAPTURE */
|
struct <link linkend="v4l2-pix-format">v4l2_pix_format</link> pix; /* V4L2_BUF_TYPE_VIDEO_CAPTURE */
|
||||||
|
struct <link linkend="v4l2-pix-format-mplane">v4l2_pix_format_mplane</link> pix_mp; /* V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE */
|
||||||
struct <link linkend="v4l2-window">v4l2_window</link> win; /* V4L2_BUF_TYPE_VIDEO_OVERLAY */
|
struct <link linkend="v4l2-window">v4l2_window</link> win; /* V4L2_BUF_TYPE_VIDEO_OVERLAY */
|
||||||
struct <link linkend="v4l2-vbi-format">v4l2_vbi_format</link> vbi; /* V4L2_BUF_TYPE_VBI_CAPTURE */
|
struct <link linkend="v4l2-vbi-format">v4l2_vbi_format</link> vbi; /* V4L2_BUF_TYPE_VBI_CAPTURE */
|
||||||
struct <link linkend="v4l2-sliced-vbi-format">v4l2_sliced_vbi_format</link> sliced; /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */
|
struct <link linkend="v4l2-sliced-vbi-format">v4l2_sliced_vbi_format</link> sliced; /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */
|
||||||
@ -1636,7 +1764,6 @@ struct <link linkend="v4l2-format">v4l2_format</link> {
|
|||||||
} fmt;
|
} fmt;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/* Stream type-dependent parameters
|
/* Stream type-dependent parameters
|
||||||
*/
|
*/
|
||||||
struct <link linkend="v4l2-streamparm">v4l2_streamparm</link> {
|
struct <link linkend="v4l2-streamparm">v4l2_streamparm</link> {
|
||||||
@ -1809,16 +1936,6 @@ struct <link linkend="v4l2-dbg-chip-ident">v4l2_dbg_chip_ident</link> {
|
|||||||
/* Reminder: when adding new ioctls please add support for them to
|
/* Reminder: when adding new ioctls please add support for them to
|
||||||
drivers/media/video/v4l2-compat-ioctl32.c as well! */
|
drivers/media/video/v4l2-compat-ioctl32.c as well! */
|
||||||
|
|
||||||
#ifdef __OLD_VIDIOC_
|
|
||||||
/* for compatibility, will go away some day */
|
|
||||||
#define VIDIOC_OVERLAY_OLD _IOWR('V', 14, int)
|
|
||||||
#define VIDIOC_S_PARM_OLD _IOW('V', 22, struct <link linkend="v4l2-streamparm">v4l2_streamparm</link>)
|
|
||||||
#define VIDIOC_S_CTRL_OLD _IOW('V', 28, struct <link linkend="v4l2-control">v4l2_control</link>)
|
|
||||||
#define VIDIOC_G_AUDIO_OLD _IOWR('V', 33, struct <link linkend="v4l2-audio">v4l2_audio</link>)
|
|
||||||
#define VIDIOC_G_AUDOUT_OLD _IOWR('V', 49, struct <link linkend="v4l2-audioout">v4l2_audioout</link>)
|
|
||||||
#define VIDIOC_CROPCAP_OLD _IOR('V', 58, struct <link linkend="v4l2-cropcap">v4l2_cropcap</link>)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define BASE_VIDIOC_PRIVATE 192 /* 192-255 are private */
|
#define BASE_VIDIOC_PRIVATE 192 /* 192-255 are private */
|
||||||
|
|
||||||
#endif /* __LINUX_VIDEODEV2_H */
|
#endif /* __LINUX_VIDEODEV2_H */
|
||||||
|
@ -76,7 +76,9 @@ pixelformat</structfield> field.</entry>
|
|||||||
<entry>Type of the data stream, set by the application.
|
<entry>Type of the data stream, set by the application.
|
||||||
Only these types are valid here:
|
Only these types are valid here:
|
||||||
<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant>,
|
<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant>,
|
||||||
|
<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE</constant>,
|
||||||
<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant>,
|
<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant>,
|
||||||
|
<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE</constant>,
|
||||||
<constant>V4L2_BUF_TYPE_VIDEO_OVERLAY</constant>, and custom (driver
|
<constant>V4L2_BUF_TYPE_VIDEO_OVERLAY</constant>, and custom (driver
|
||||||
defined) types with code <constant>V4L2_BUF_TYPE_PRIVATE</constant>
|
defined) types with code <constant>V4L2_BUF_TYPE_PRIVATE</constant>
|
||||||
and higher.</entry>
|
and higher.</entry>
|
||||||
|
@ -60,11 +60,13 @@ application.</para>
|
|||||||
<structfield>type</structfield> field of a struct
|
<structfield>type</structfield> field of a struct
|
||||||
<structname>v4l2_format</structname> to the respective buffer (stream)
|
<structname>v4l2_format</structname> to the respective buffer (stream)
|
||||||
type. For example video capture devices use
|
type. For example video capture devices use
|
||||||
<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant>. When the application
|
<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant> or
|
||||||
|
<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE</constant>. When the application
|
||||||
calls the <constant>VIDIOC_G_FMT</constant> ioctl with a pointer to
|
calls the <constant>VIDIOC_G_FMT</constant> ioctl with a pointer to
|
||||||
this structure the driver fills the respective member of the
|
this structure the driver fills the respective member of the
|
||||||
<structfield>fmt</structfield> union. In case of video capture devices
|
<structfield>fmt</structfield> union. In case of video capture devices
|
||||||
that is the &v4l2-pix-format; <structfield>pix</structfield> member.
|
that is either the &v4l2-pix-format; <structfield>pix</structfield> or
|
||||||
|
the &v4l2-pix-format-mplane; <structfield>pix_mp</structfield> member.
|
||||||
When the requested buffer type is not supported drivers return an
|
When the requested buffer type is not supported drivers return an
|
||||||
&EINVAL;.</para>
|
&EINVAL;.</para>
|
||||||
|
|
||||||
@ -131,6 +133,15 @@ this ioctl.</para>
|
|||||||
<entry>Definition of an image format, see <xref
|
<entry>Definition of an image format, see <xref
|
||||||
linkend="pixfmt" />, used by video capture and output
|
linkend="pixfmt" />, used by video capture and output
|
||||||
devices.</entry>
|
devices.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>&v4l2-pix-format-mplane;</entry>
|
||||||
|
<entry><structfield>pix_mp</structfield></entry>
|
||||||
|
<entry>Definition of an image format, see <xref
|
||||||
|
linkend="pixfmt" />, used by video capture and output
|
||||||
|
devices that support the <link linkend="planar-apis">multi-planar
|
||||||
|
version of the API</link>.</entry>
|
||||||
</row>
|
</row>
|
||||||
<row>
|
<row>
|
||||||
<entry></entry>
|
<entry></entry>
|
||||||
|
@ -64,7 +64,8 @@ zero to the number of buffers allocated with &VIDIOC-REQBUFS;
|
|||||||
contents of the struct <structname>v4l2_buffer</structname> returned
|
contents of the struct <structname>v4l2_buffer</structname> returned
|
||||||
by a &VIDIOC-QUERYBUF; ioctl will do as well. When the buffer is
|
by a &VIDIOC-QUERYBUF; ioctl will do as well. When the buffer is
|
||||||
intended for output (<structfield>type</structfield> is
|
intended for output (<structfield>type</structfield> is
|
||||||
<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant> or
|
<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant>,
|
||||||
|
<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE</constant>, or
|
||||||
<constant>V4L2_BUF_TYPE_VBI_OUTPUT</constant>) applications must also
|
<constant>V4L2_BUF_TYPE_VBI_OUTPUT</constant>) applications must also
|
||||||
initialize the <structfield>bytesused</structfield>,
|
initialize the <structfield>bytesused</structfield>,
|
||||||
<structfield>field</structfield> and
|
<structfield>field</structfield> and
|
||||||
@ -75,7 +76,11 @@ supports capturing from specific video inputs and you want to specify a video
|
|||||||
input, then <structfield>flags</structfield> should be set to
|
input, then <structfield>flags</structfield> should be set to
|
||||||
<constant>V4L2_BUF_FLAG_INPUT</constant> and the field
|
<constant>V4L2_BUF_FLAG_INPUT</constant> and the field
|
||||||
<structfield>input</structfield> must be initialized to the desired input.
|
<structfield>input</structfield> must be initialized to the desired input.
|
||||||
The <structfield>reserved</structfield> field must be set to 0.
|
The <structfield>reserved</structfield> field must be set to 0. When using
|
||||||
|
the <link linkend="planar-apis">multi-planar API</link>, the
|
||||||
|
<structfield>m.planes</structfield> field must contain a userspace pointer
|
||||||
|
to a filled-in array of &v4l2-plane; and the <structfield>length</structfield>
|
||||||
|
field must be set to the number of elements in that array.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>To enqueue a <link linkend="mmap">memory mapped</link>
|
<para>To enqueue a <link linkend="mmap">memory mapped</link>
|
||||||
@ -93,10 +98,13 @@ structure the driver sets the
|
|||||||
buffer applications set the <structfield>memory</structfield>
|
buffer applications set the <structfield>memory</structfield>
|
||||||
field to <constant>V4L2_MEMORY_USERPTR</constant>, the
|
field to <constant>V4L2_MEMORY_USERPTR</constant>, the
|
||||||
<structfield>m.userptr</structfield> field to the address of the
|
<structfield>m.userptr</structfield> field to the address of the
|
||||||
buffer and <structfield>length</structfield> to its size.
|
buffer and <structfield>length</structfield> to its size. When the multi-planar
|
||||||
When <constant>VIDIOC_QBUF</constant> is called with a pointer to this
|
API is used, <structfield>m.userptr</structfield> and
|
||||||
structure the driver sets the <constant>V4L2_BUF_FLAG_QUEUED</constant>
|
<structfield>length</structfield> members of the passed array of &v4l2-plane;
|
||||||
flag and clears the <constant>V4L2_BUF_FLAG_MAPPED</constant> and
|
have to be used instead. When <constant>VIDIOC_QBUF</constant> is called with
|
||||||
|
a pointer to this structure the driver sets the
|
||||||
|
<constant>V4L2_BUF_FLAG_QUEUED</constant> flag and clears the
|
||||||
|
<constant>V4L2_BUF_FLAG_MAPPED</constant> and
|
||||||
<constant>V4L2_BUF_FLAG_DONE</constant> flags in the
|
<constant>V4L2_BUF_FLAG_DONE</constant> flags in the
|
||||||
<structfield>flags</structfield> field, or it returns an error code.
|
<structfield>flags</structfield> field, or it returns an error code.
|
||||||
This ioctl locks the memory pages of the buffer in physical memory,
|
This ioctl locks the memory pages of the buffer in physical memory,
|
||||||
@ -115,7 +123,9 @@ remaining fields or returns an error code. The driver may also set
|
|||||||
<constant>V4L2_BUF_FLAG_ERROR</constant> in the <structfield>flags</structfield>
|
<constant>V4L2_BUF_FLAG_ERROR</constant> in the <structfield>flags</structfield>
|
||||||
field. It indicates a non-critical (recoverable) streaming error. In such case
|
field. It indicates a non-critical (recoverable) streaming error. In such case
|
||||||
the application may continue as normal, but should be aware that data in the
|
the application may continue as normal, but should be aware that data in the
|
||||||
dequeued buffer might be corrupted.</para>
|
dequeued buffer might be corrupted. When using the multi-planar API, the
|
||||||
|
planes array does not have to be passed; the <structfield>m.planes</structfield>
|
||||||
|
member must be set to NULL in that case.</para>
|
||||||
|
|
||||||
<para>By default <constant>VIDIOC_DQBUF</constant> blocks when no
|
<para>By default <constant>VIDIOC_DQBUF</constant> blocks when no
|
||||||
buffer is in the outgoing queue. When the
|
buffer is in the outgoing queue. When the
|
||||||
|
@ -61,6 +61,10 @@ buffer at any time after buffers have been allocated with the
|
|||||||
to the number of buffers allocated with &VIDIOC-REQBUFS;
|
to the number of buffers allocated with &VIDIOC-REQBUFS;
|
||||||
(&v4l2-requestbuffers; <structfield>count</structfield>) minus one.
|
(&v4l2-requestbuffers; <structfield>count</structfield>) minus one.
|
||||||
The <structfield>reserved</structfield> field should to set to 0.
|
The <structfield>reserved</structfield> field should to set to 0.
|
||||||
|
When using the <link linkend="planar-apis">multi-planar API</link>, the
|
||||||
|
<structfield>m.planes</structfield> field must contain a userspace pointer to an
|
||||||
|
array of &v4l2-plane; and the <structfield>length</structfield> field has
|
||||||
|
to be set to the number of elements in that array.
|
||||||
After calling <constant>VIDIOC_QUERYBUF</constant> with a pointer to
|
After calling <constant>VIDIOC_QUERYBUF</constant> with a pointer to
|
||||||
this structure drivers return an error code or fill the rest of
|
this structure drivers return an error code or fill the rest of
|
||||||
the structure.</para>
|
the structure.</para>
|
||||||
@ -70,11 +74,13 @@ the structure.</para>
|
|||||||
<constant>V4L2_BUF_FLAG_QUEUED</constant> and
|
<constant>V4L2_BUF_FLAG_QUEUED</constant> and
|
||||||
<constant>V4L2_BUF_FLAG_DONE</constant> flags will be valid. The
|
<constant>V4L2_BUF_FLAG_DONE</constant> flags will be valid. The
|
||||||
<structfield>memory</structfield> field will be set to the current
|
<structfield>memory</structfield> field will be set to the current
|
||||||
I/O method, the <structfield>m.offset</structfield>
|
I/O method. For the single-planar API, the <structfield>m.offset</structfield>
|
||||||
contains the offset of the buffer from the start of the device memory,
|
contains the offset of the buffer from the start of the device memory,
|
||||||
the <structfield>length</structfield> field its size. The driver may
|
the <structfield>length</structfield> field its size. For the multi-planar API,
|
||||||
or may not set the remaining fields and flags, they are meaningless in
|
fields <structfield>m.mem_offset</structfield> and
|
||||||
this context.</para>
|
<structfield>length</structfield> in the <structfield>m.planes</structfield>
|
||||||
|
array elements will be used instead. The driver may or may not set the remaining
|
||||||
|
fields and flags, they are meaningless in this context.</para>
|
||||||
|
|
||||||
<para>The <structname>v4l2_buffer</structname> structure is
|
<para>The <structname>v4l2_buffer</structname> structure is
|
||||||
specified in <xref linkend="buffer" />.</para>
|
specified in <xref linkend="buffer" />.</para>
|
||||||
|
@ -142,15 +142,29 @@ this array to zero.</entry>
|
|||||||
<row>
|
<row>
|
||||||
<entry><constant>V4L2_CAP_VIDEO_CAPTURE</constant></entry>
|
<entry><constant>V4L2_CAP_VIDEO_CAPTURE</constant></entry>
|
||||||
<entry>0x00000001</entry>
|
<entry>0x00000001</entry>
|
||||||
<entry>The device supports the <link
|
<entry>The device supports the single-planar API through the <link
|
||||||
linkend="capture">Video Capture</link> interface.</entry>
|
linkend="capture">Video Capture</link> interface.</entry>
|
||||||
</row>
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry><constant>V4L2_CAP_VIDEO_CAPTURE_MPLANE</constant></entry>
|
||||||
|
<entry>0x00001000</entry>
|
||||||
|
<entry>The device supports the
|
||||||
|
<link linkend="planar-apis">multi-planar API</link> through the
|
||||||
|
<link linkend="capture">Video Capture</link> interface.</entry>
|
||||||
|
</row>
|
||||||
<row>
|
<row>
|
||||||
<entry><constant>V4L2_CAP_VIDEO_OUTPUT</constant></entry>
|
<entry><constant>V4L2_CAP_VIDEO_OUTPUT</constant></entry>
|
||||||
<entry>0x00000002</entry>
|
<entry>0x00000002</entry>
|
||||||
<entry>The device supports the <link
|
<entry>The device supports the single-planar API through the <link
|
||||||
linkend="output">Video Output</link> interface.</entry>
|
linkend="output">Video Output</link> interface.</entry>
|
||||||
</row>
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry><constant>V4L2_CAP_VIDEO_OUTPUT_MPLANE</constant></entry>
|
||||||
|
<entry>0x00002000</entry>
|
||||||
|
<entry>The device supports the
|
||||||
|
<link linkend="planar-apis">multi-planar API</link> through the
|
||||||
|
<link linkend="output">Video Output</link> interface.</entry>
|
||||||
|
</row>
|
||||||
<row>
|
<row>
|
||||||
<entry><constant>V4L2_CAP_VIDEO_OVERLAY</constant></entry>
|
<entry><constant>V4L2_CAP_VIDEO_OVERLAY</constant></entry>
|
||||||
<entry>0x00000004</entry>
|
<entry>0x00000004</entry>
|
||||||
|
@ -93,6 +93,15 @@ synchronize with other events.</para>
|
|||||||
been allocated (memory mapping) or enqueued (output) yet.</para>
|
been allocated (memory mapping) or enqueued (output) yet.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>EPIPE</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para>The driver implements <link
|
||||||
|
linkend="pad-level-formats">pad-level format configuration</link> and
|
||||||
|
the pipeline configuration is invalid.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
</variablelist>
|
</variablelist>
|
||||||
</refsect1>
|
</refsect1>
|
||||||
</refentry>
|
</refentry>
|
||||||
|
152
Documentation/DocBook/v4l/vidioc-subdev-enum-frame-interval.xml
Normal file
152
Documentation/DocBook/v4l/vidioc-subdev-enum-frame-interval.xml
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
<refentry id="vidioc-subdev-enum-frame-interval">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>ioctl VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL</refentrytitle>
|
||||||
|
&manvol;
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv>
|
||||||
|
<refname>VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL</refname>
|
||||||
|
<refpurpose>Enumerate frame intervals</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>ioctl</function></funcdef>
|
||||||
|
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>request</parameter></paramdef>
|
||||||
|
<paramdef>struct v4l2_subdev_frame_interval_enum *
|
||||||
|
<parameter>argp</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Arguments</title>
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>fd</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>&fd;</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>request</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>argp</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para></para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Description</title>
|
||||||
|
|
||||||
|
<note>
|
||||||
|
<title>Experimental</title>
|
||||||
|
<para>This is an <link linkend="experimental">experimental</link>
|
||||||
|
interface and may change in the future.</para>
|
||||||
|
</note>
|
||||||
|
|
||||||
|
<para>This ioctl lets applications enumerate available frame intervals on a
|
||||||
|
given sub-device pad. Frame intervals only makes sense for sub-devices that
|
||||||
|
can control the frame period on their own. This includes, for instance,
|
||||||
|
image sensors and TV tuners.</para>
|
||||||
|
|
||||||
|
<para>For the common use case of image sensors, the frame intervals
|
||||||
|
available on the sub-device output pad depend on the frame format and size
|
||||||
|
on the same pad. Applications must thus specify the desired format and size
|
||||||
|
when enumerating frame intervals.</para>
|
||||||
|
|
||||||
|
<para>To enumerate frame intervals applications initialize the
|
||||||
|
<structfield>index</structfield>, <structfield>pad</structfield>,
|
||||||
|
<structfield>code</structfield>, <structfield>width</structfield> and
|
||||||
|
<structfield>height</structfield> fields of
|
||||||
|
&v4l2-subdev-frame-interval-enum; and call the
|
||||||
|
<constant>VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL</constant> ioctl with a pointer
|
||||||
|
to this structure. Drivers fill the rest of the structure or return
|
||||||
|
an &EINVAL; if one of the input fields is invalid. All frame intervals are
|
||||||
|
enumerable by beginning at index zero and incrementing by one until
|
||||||
|
<errorcode>EINVAL</errorcode> is returned.</para>
|
||||||
|
|
||||||
|
<para>Available frame intervals may depend on the current 'try' formats
|
||||||
|
at other pads of the sub-device, as well as on the current active links. See
|
||||||
|
&VIDIOC-SUBDEV-G-FMT; for more information about the try formats.</para>
|
||||||
|
|
||||||
|
<para>Sub-devices that support the frame interval enumeration ioctl should
|
||||||
|
implemented it on a single pad only. Its behaviour when supported on
|
||||||
|
multiple pads of the same sub-device is not defined.</para>
|
||||||
|
|
||||||
|
<table pgwide="1" frame="none" id="v4l2-subdev-frame-interval-enum">
|
||||||
|
<title>struct <structname>v4l2_subdev_frame_interval_enum</structname></title>
|
||||||
|
<tgroup cols="3">
|
||||||
|
&cs-str;
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>index</structfield></entry>
|
||||||
|
<entry>Number of the format in the enumeration, set by the
|
||||||
|
application.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>pad</structfield></entry>
|
||||||
|
<entry>Pad number as reported by the media controller API.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>code</structfield></entry>
|
||||||
|
<entry>The media bus format code, as defined in
|
||||||
|
<xref linkend="v4l2-mbus-format" />.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>width</structfield></entry>
|
||||||
|
<entry>Frame width, in pixels.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>height</structfield></entry>
|
||||||
|
<entry>Frame height, in pixels.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>&v4l2-fract;</entry>
|
||||||
|
<entry><structfield>interval</structfield></entry>
|
||||||
|
<entry>Period, in seconds, between consecutive video frames.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>reserved</structfield>[9]</entry>
|
||||||
|
<entry>Reserved for future extensions. Applications and drivers must
|
||||||
|
set the array to zero.</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
&return-value;
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>EINVAL</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para>The &v4l2-subdev-frame-interval-enum;
|
||||||
|
<structfield>pad</structfield> references a non-existing pad, one of
|
||||||
|
the <structfield>code</structfield>, <structfield>width</structfield>
|
||||||
|
or <structfield>height</structfield> fields are invalid for the given
|
||||||
|
pad or the <structfield>index</structfield> field is out of bounds.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
154
Documentation/DocBook/v4l/vidioc-subdev-enum-frame-size.xml
Normal file
154
Documentation/DocBook/v4l/vidioc-subdev-enum-frame-size.xml
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
<refentry id="vidioc-subdev-enum-frame-size">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>ioctl VIDIOC_SUBDEV_ENUM_FRAME_SIZE</refentrytitle>
|
||||||
|
&manvol;
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv>
|
||||||
|
<refname>VIDIOC_SUBDEV_ENUM_FRAME_SIZE</refname>
|
||||||
|
<refpurpose>Enumerate media bus frame sizes</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>ioctl</function></funcdef>
|
||||||
|
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>request</parameter></paramdef>
|
||||||
|
<paramdef>struct v4l2_subdev_frame_size_enum *
|
||||||
|
<parameter>argp</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Arguments</title>
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>fd</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>&fd;</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>request</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>VIDIOC_SUBDEV_ENUM_FRAME_SIZE</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>argp</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para></para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Description</title>
|
||||||
|
|
||||||
|
<note>
|
||||||
|
<title>Experimental</title>
|
||||||
|
<para>This is an <link linkend="experimental">experimental</link>
|
||||||
|
interface and may change in the future.</para>
|
||||||
|
</note>
|
||||||
|
|
||||||
|
<para>This ioctl allows applications to enumerate all frame sizes
|
||||||
|
supported by a sub-device on the given pad for the given media bus format.
|
||||||
|
Supported formats can be retrieved with the &VIDIOC-SUBDEV-ENUM-MBUS-CODE;
|
||||||
|
ioctl.</para>
|
||||||
|
|
||||||
|
<para>To enumerate frame sizes applications initialize the
|
||||||
|
<structfield>pad</structfield>, <structfield>code</structfield> and
|
||||||
|
<structfield>index</structfield> fields of the
|
||||||
|
&v4l2-subdev-mbus-code-enum; and call the
|
||||||
|
<constant>VIDIOC_SUBDEV_ENUM_FRAME_SIZE</constant> ioctl with a pointer to
|
||||||
|
the structure. Drivers fill the minimum and maximum frame sizes or return
|
||||||
|
an &EINVAL; if one of the input parameters is invalid.</para>
|
||||||
|
|
||||||
|
<para>Sub-devices that only support discrete frame sizes (such as most
|
||||||
|
sensors) will return one or more frame sizes with identical minimum and
|
||||||
|
maximum values.</para>
|
||||||
|
|
||||||
|
<para>Not all possible sizes in given [minimum, maximum] ranges need to be
|
||||||
|
supported. For instance, a scaler that uses a fixed-point scaling ratio
|
||||||
|
might not be able to produce every frame size between the minimum and
|
||||||
|
maximum values. Applications must use the &VIDIOC-SUBDEV-S-FMT; ioctl to
|
||||||
|
try the sub-device for an exact supported frame size.</para>
|
||||||
|
|
||||||
|
<para>Available frame sizes may depend on the current 'try' formats at other
|
||||||
|
pads of the sub-device, as well as on the current active links and the
|
||||||
|
current values of V4L2 controls. See &VIDIOC-SUBDEV-G-FMT; for more
|
||||||
|
information about try formats.</para>
|
||||||
|
|
||||||
|
<table pgwide="1" frame="none" id="v4l2-subdev-frame-size-enum">
|
||||||
|
<title>struct <structname>v4l2_subdev_frame_size_enum</structname></title>
|
||||||
|
<tgroup cols="3">
|
||||||
|
&cs-str;
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>index</structfield></entry>
|
||||||
|
<entry>Number of the format in the enumeration, set by the
|
||||||
|
application.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>pad</structfield></entry>
|
||||||
|
<entry>Pad number as reported by the media controller API.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>code</structfield></entry>
|
||||||
|
<entry>The media bus format code, as defined in
|
||||||
|
<xref linkend="v4l2-mbus-format" />.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>min_width</structfield></entry>
|
||||||
|
<entry>Minimum frame width, in pixels.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>max_width</structfield></entry>
|
||||||
|
<entry>Maximum frame width, in pixels.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>min_height</structfield></entry>
|
||||||
|
<entry>Minimum frame height, in pixels.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>max_height</structfield></entry>
|
||||||
|
<entry>Maximum frame height, in pixels.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>reserved</structfield>[9]</entry>
|
||||||
|
<entry>Reserved for future extensions. Applications and drivers must
|
||||||
|
set the array to zero.</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
&return-value;
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>EINVAL</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para>The &v4l2-subdev-frame-size-enum; <structfield>pad</structfield>
|
||||||
|
references a non-existing pad, the <structfield>code</structfield> is
|
||||||
|
invalid for the given pad or the <structfield>index</structfield>
|
||||||
|
field is out of bounds.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
119
Documentation/DocBook/v4l/vidioc-subdev-enum-mbus-code.xml
Normal file
119
Documentation/DocBook/v4l/vidioc-subdev-enum-mbus-code.xml
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
<refentry id="vidioc-subdev-enum-mbus-code">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>ioctl VIDIOC_SUBDEV_ENUM_MBUS_CODE</refentrytitle>
|
||||||
|
&manvol;
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv>
|
||||||
|
<refname>VIDIOC_SUBDEV_ENUM_MBUS_CODE</refname>
|
||||||
|
<refpurpose>Enumerate media bus formats</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>ioctl</function></funcdef>
|
||||||
|
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>request</parameter></paramdef>
|
||||||
|
<paramdef>struct v4l2_subdev_mbus_code_enum *
|
||||||
|
<parameter>argp</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Arguments</title>
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>fd</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>&fd;</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>request</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>VIDIOC_SUBDEV_ENUM_MBUS_CODE</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>argp</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para></para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Description</title>
|
||||||
|
|
||||||
|
<note>
|
||||||
|
<title>Experimental</title>
|
||||||
|
<para>This is an <link linkend="experimental">experimental</link>
|
||||||
|
interface and may change in the future.</para>
|
||||||
|
</note>
|
||||||
|
|
||||||
|
<para>To enumerate media bus formats available at a given sub-device pad
|
||||||
|
applications initialize the <structfield>pad</structfield> and
|
||||||
|
<structfield>index</structfield> fields of &v4l2-subdev-mbus-code-enum; and
|
||||||
|
call the <constant>VIDIOC_SUBDEV_ENUM_MBUS_CODE</constant> ioctl with a
|
||||||
|
pointer to this structure. Drivers fill the rest of the structure or return
|
||||||
|
an &EINVAL; if either the <structfield>pad</structfield> or
|
||||||
|
<structfield>index</structfield> are invalid. All media bus formats are
|
||||||
|
enumerable by beginning at index zero and incrementing by one until
|
||||||
|
<errorcode>EINVAL</errorcode> is returned.</para>
|
||||||
|
|
||||||
|
<para>Available media bus formats may depend on the current 'try' formats
|
||||||
|
at other pads of the sub-device, as well as on the current active links. See
|
||||||
|
&VIDIOC-SUBDEV-G-FMT; for more information about the try formats.</para>
|
||||||
|
|
||||||
|
<table pgwide="1" frame="none" id="v4l2-subdev-mbus-code-enum">
|
||||||
|
<title>struct <structname>v4l2_subdev_mbus_code_enum</structname></title>
|
||||||
|
<tgroup cols="3">
|
||||||
|
&cs-str;
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>pad</structfield></entry>
|
||||||
|
<entry>Pad number as reported by the media controller API.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>index</structfield></entry>
|
||||||
|
<entry>Number of the format in the enumeration, set by the
|
||||||
|
application.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>code</structfield></entry>
|
||||||
|
<entry>The media bus format code, as defined in
|
||||||
|
<xref linkend="v4l2-mbus-format" />.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>reserved</structfield>[9]</entry>
|
||||||
|
<entry>Reserved for future extensions. Applications and drivers must
|
||||||
|
set the array to zero.</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
&return-value;
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>EINVAL</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para>The &v4l2-subdev-mbus-code-enum; <structfield>pad</structfield>
|
||||||
|
references a non-existing pad, or the <structfield>index</structfield>
|
||||||
|
field is out of bounds.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
155
Documentation/DocBook/v4l/vidioc-subdev-g-crop.xml
Normal file
155
Documentation/DocBook/v4l/vidioc-subdev-g-crop.xml
Normal file
@ -0,0 +1,155 @@
|
|||||||
|
<refentry id="vidioc-subdev-g-crop">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>ioctl VIDIOC_SUBDEV_G_CROP, VIDIOC_SUBDEV_S_CROP</refentrytitle>
|
||||||
|
&manvol;
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv>
|
||||||
|
<refname>VIDIOC_SUBDEV_G_CROP</refname>
|
||||||
|
<refname>VIDIOC_SUBDEV_S_CROP</refname>
|
||||||
|
<refpurpose>Get or set the crop rectangle on a subdev pad</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>ioctl</function></funcdef>
|
||||||
|
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>request</parameter></paramdef>
|
||||||
|
<paramdef>struct v4l2_subdev_crop *<parameter>argp</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
<funcsynopsis>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>ioctl</function></funcdef>
|
||||||
|
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>request</parameter></paramdef>
|
||||||
|
<paramdef>const struct v4l2_subdev_crop *<parameter>argp</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Arguments</title>
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>fd</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>&fd;</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>request</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>VIDIOC_SUBDEV_G_CROP, VIDIOC_SUBDEV_S_CROP</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>argp</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para></para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Description</title>
|
||||||
|
|
||||||
|
<note>
|
||||||
|
<title>Experimental</title>
|
||||||
|
<para>This is an <link linkend="experimental">experimental</link>
|
||||||
|
interface and may change in the future.</para>
|
||||||
|
</note>
|
||||||
|
|
||||||
|
<para>To retrieve the current crop rectangle applications set the
|
||||||
|
<structfield>pad</structfield> field of a &v4l2-subdev-crop; to the
|
||||||
|
desired pad number as reported by the media API and the
|
||||||
|
<structfield>which</structfield> field to
|
||||||
|
<constant>V4L2_SUBDEV_FORMAT_ACTIVE</constant>. They then call the
|
||||||
|
<constant>VIDIOC_SUBDEV_G_CROP</constant> ioctl with a pointer to this
|
||||||
|
structure. The driver fills the members of the <structfield>rect</structfield>
|
||||||
|
field or returns &EINVAL; if the input arguments are invalid, or if cropping
|
||||||
|
is not supported on the given pad.</para>
|
||||||
|
|
||||||
|
<para>To change the current crop rectangle applications set both the
|
||||||
|
<structfield>pad</structfield> and <structfield>which</structfield> fields
|
||||||
|
and all members of the <structfield>rect</structfield> field. They then call
|
||||||
|
the <constant>VIDIOC_SUBDEV_S_CROP</constant> ioctl with a pointer to this
|
||||||
|
structure. The driver verifies the requested crop rectangle, adjusts it
|
||||||
|
based on the hardware capabilities and configures the device. Upon return
|
||||||
|
the &v4l2-subdev-crop; contains the current format as would be returned
|
||||||
|
by a <constant>VIDIOC_SUBDEV_G_CROP</constant> call.</para>
|
||||||
|
|
||||||
|
<para>Applications can query the device capabilities by setting the
|
||||||
|
<structfield>which</structfield> to
|
||||||
|
<constant>V4L2_SUBDEV_FORMAT_TRY</constant>. When set, 'try' crop
|
||||||
|
rectangles are not applied to the device by the driver, but are mangled
|
||||||
|
exactly as active crop rectangles and stored in the sub-device file handle.
|
||||||
|
Two applications querying the same sub-device would thus not interact with
|
||||||
|
each other.</para>
|
||||||
|
|
||||||
|
<para>Drivers must not return an error solely because the requested crop
|
||||||
|
rectangle doesn't match the device capabilities. They must instead modify
|
||||||
|
the rectangle to match what the hardware can provide. The modified format
|
||||||
|
should be as close as possible to the original request.</para>
|
||||||
|
|
||||||
|
<table pgwide="1" frame="none" id="v4l2-subdev-crop">
|
||||||
|
<title>struct <structname>v4l2_subdev_crop</structname></title>
|
||||||
|
<tgroup cols="3">
|
||||||
|
&cs-str;
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>pad</structfield></entry>
|
||||||
|
<entry>Pad number as reported by the media framework.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>which</structfield></entry>
|
||||||
|
<entry>Crop rectangle to get or set, from
|
||||||
|
&v4l2-subdev-format-whence;.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>&v4l2-rect;</entry>
|
||||||
|
<entry><structfield>rect</structfield></entry>
|
||||||
|
<entry>Crop rectangle boundaries, in pixels.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>reserved</structfield>[8]</entry>
|
||||||
|
<entry>Reserved for future extensions. Applications and drivers must
|
||||||
|
set the array to zero.</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
&return-value;
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>EBUSY</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para>The crop rectangle can't be changed because the pad is currently
|
||||||
|
busy. This can be caused, for instance, by an active video stream on
|
||||||
|
the pad. The ioctl must not be retried without performing another
|
||||||
|
action to fix the problem first. Only returned by
|
||||||
|
<constant>VIDIOC_SUBDEV_S_CROP</constant></para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>EINVAL</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para>The &v4l2-subdev-crop; <structfield>pad</structfield>
|
||||||
|
references a non-existing pad, the <structfield>which</structfield>
|
||||||
|
field references a non-existing format, or cropping is not supported
|
||||||
|
on the given subdev pad.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
180
Documentation/DocBook/v4l/vidioc-subdev-g-fmt.xml
Normal file
180
Documentation/DocBook/v4l/vidioc-subdev-g-fmt.xml
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
<refentry id="vidioc-subdev-g-fmt">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>ioctl VIDIOC_SUBDEV_G_FMT, VIDIOC_SUBDEV_S_FMT</refentrytitle>
|
||||||
|
&manvol;
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv>
|
||||||
|
<refname>VIDIOC_SUBDEV_G_FMT</refname>
|
||||||
|
<refname>VIDIOC_SUBDEV_S_FMT</refname>
|
||||||
|
<refpurpose>Get or set the data format on a subdev pad</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>ioctl</function></funcdef>
|
||||||
|
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>request</parameter></paramdef>
|
||||||
|
<paramdef>struct v4l2_subdev_format *<parameter>argp</parameter>
|
||||||
|
</paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Arguments</title>
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>fd</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>&fd;</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>request</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>VIDIOC_SUBDEV_G_FMT, VIDIOC_SUBDEV_S_FMT</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>argp</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para></para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Description</title>
|
||||||
|
|
||||||
|
<note>
|
||||||
|
<title>Experimental</title>
|
||||||
|
<para>This is an <link linkend="experimental">experimental</link>
|
||||||
|
interface and may change in the future.</para>
|
||||||
|
</note>
|
||||||
|
|
||||||
|
<para>These ioctls are used to negotiate the frame format at specific
|
||||||
|
subdev pads in the image pipeline.</para>
|
||||||
|
|
||||||
|
<para>To retrieve the current format applications set the
|
||||||
|
<structfield>pad</structfield> field of a &v4l2-subdev-format; to the
|
||||||
|
desired pad number as reported by the media API and the
|
||||||
|
<structfield>which</structfield> field to
|
||||||
|
<constant>V4L2_SUBDEV_FORMAT_ACTIVE</constant>. When they call the
|
||||||
|
<constant>VIDIOC_SUBDEV_G_FMT</constant> ioctl with a pointer to this
|
||||||
|
structure the driver fills the members of the <structfield>format</structfield>
|
||||||
|
field.</para>
|
||||||
|
|
||||||
|
<para>To change the current format applications set both the
|
||||||
|
<structfield>pad</structfield> and <structfield>which</structfield> fields
|
||||||
|
and all members of the <structfield>format</structfield> field. When they
|
||||||
|
call the <constant>VIDIOC_SUBDEV_S_FMT</constant> ioctl with a pointer to this
|
||||||
|
structure the driver verifies the requested format, adjusts it based on the
|
||||||
|
hardware capabilities and configures the device. Upon return the
|
||||||
|
&v4l2-subdev-format; contains the current format as would be returned by a
|
||||||
|
<constant>VIDIOC_SUBDEV_G_FMT</constant> call.</para>
|
||||||
|
|
||||||
|
<para>Applications can query the device capabilities by setting the
|
||||||
|
<structfield>which</structfield> to
|
||||||
|
<constant>V4L2_SUBDEV_FORMAT_TRY</constant>. When set, 'try' formats are not
|
||||||
|
applied to the device by the driver, but are changed exactly as active
|
||||||
|
formats and stored in the sub-device file handle. Two applications querying
|
||||||
|
the same sub-device would thus not interact with each other.</para>
|
||||||
|
|
||||||
|
<para>For instance, to try a format at the output pad of a sub-device,
|
||||||
|
applications would first set the try format at the sub-device input with the
|
||||||
|
<constant>VIDIOC_SUBDEV_S_FMT</constant> ioctl. They would then either
|
||||||
|
retrieve the default format at the output pad with the
|
||||||
|
<constant>VIDIOC_SUBDEV_G_FMT</constant> ioctl, or set the desired output
|
||||||
|
pad format with the <constant>VIDIOC_SUBDEV_S_FMT</constant> ioctl and check
|
||||||
|
the returned value.</para>
|
||||||
|
|
||||||
|
<para>Try formats do not depend on active formats, but can depend on the
|
||||||
|
current links configuration or sub-device controls value. For instance, a
|
||||||
|
low-pass noise filter might crop pixels at the frame boundaries, modifying
|
||||||
|
its output frame size.</para>
|
||||||
|
|
||||||
|
<para>Drivers must not return an error solely because the requested format
|
||||||
|
doesn't match the device capabilities. They must instead modify the format
|
||||||
|
to match what the hardware can provide. The modified format should be as
|
||||||
|
close as possible to the original request.</para>
|
||||||
|
|
||||||
|
<table pgwide="1" frame="none" id="v4l2-subdev-format">
|
||||||
|
<title>struct <structname>v4l2_subdev_format</structname></title>
|
||||||
|
<tgroup cols="3">
|
||||||
|
&cs-str;
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>pad</structfield></entry>
|
||||||
|
<entry>Pad number as reported by the media controller API.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>which</structfield></entry>
|
||||||
|
<entry>Format to modified, from &v4l2-subdev-format-whence;.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>&v4l2-mbus-framefmt;</entry>
|
||||||
|
<entry><structfield>format</structfield></entry>
|
||||||
|
<entry>Definition of an image format, see <xref
|
||||||
|
linkend="v4l2-mbus-framefmt" /> for details.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>reserved</structfield>[8]</entry>
|
||||||
|
<entry>Reserved for future extensions. Applications and drivers must
|
||||||
|
set the array to zero.</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<table pgwide="1" frame="none" id="v4l2-subdev-format-whence">
|
||||||
|
<title>enum <structname>v4l2_subdev_format_whence</structname></title>
|
||||||
|
<tgroup cols="3">
|
||||||
|
&cs-def;
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry>V4L2_SUBDEV_FORMAT_TRY</entry>
|
||||||
|
<entry>0</entry>
|
||||||
|
<entry>Try formats, used for querying device capabilities.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>V4L2_SUBDEV_FORMAT_ACTIVE</entry>
|
||||||
|
<entry>1</entry>
|
||||||
|
<entry>Active formats, applied to the hardware.</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
&return-value;
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>EBUSY</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para>The format can't be changed because the pad is currently busy.
|
||||||
|
This can be caused, for instance, by an active video stream on the
|
||||||
|
pad. The ioctl must not be retried without performing another action
|
||||||
|
to fix the problem first. Only returned by
|
||||||
|
<constant>VIDIOC_SUBDEV_S_FMT</constant></para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>EINVAL</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para>The &v4l2-subdev-format; <structfield>pad</structfield>
|
||||||
|
references a non-existing pad, or the <structfield>which</structfield>
|
||||||
|
field references a non-existing format.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
141
Documentation/DocBook/v4l/vidioc-subdev-g-frame-interval.xml
Normal file
141
Documentation/DocBook/v4l/vidioc-subdev-g-frame-interval.xml
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
<refentry id="vidioc-subdev-g-frame-interval">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>ioctl VIDIOC_SUBDEV_G_FRAME_INTERVAL, VIDIOC_SUBDEV_S_FRAME_INTERVAL</refentrytitle>
|
||||||
|
&manvol;
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv>
|
||||||
|
<refname>VIDIOC_SUBDEV_G_FRAME_INTERVAL</refname>
|
||||||
|
<refname>VIDIOC_SUBDEV_S_FRAME_INTERVAL</refname>
|
||||||
|
<refpurpose>Get or set the frame interval on a subdev pad</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>ioctl</function></funcdef>
|
||||||
|
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>request</parameter></paramdef>
|
||||||
|
<paramdef>struct v4l2_subdev_frame_interval *<parameter>argp</parameter>
|
||||||
|
</paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Arguments</title>
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>fd</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>&fd;</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>request</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>VIDIOC_SUBDEV_G_FRAME_INTERVAL, VIDIOC_SUBDEV_S_FRAME_INTERVAL</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>argp</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para></para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Description</title>
|
||||||
|
|
||||||
|
<note>
|
||||||
|
<title>Experimental</title>
|
||||||
|
<para>This is an <link linkend="experimental">experimental</link>
|
||||||
|
interface and may change in the future.</para>
|
||||||
|
</note>
|
||||||
|
|
||||||
|
<para>These ioctls are used to get and set the frame interval at specific
|
||||||
|
subdev pads in the image pipeline. The frame interval only makes sense for
|
||||||
|
sub-devices that can control the frame period on their own. This includes,
|
||||||
|
for instance, image sensors and TV tuners. Sub-devices that don't support
|
||||||
|
frame intervals must not implement these ioctls.</para>
|
||||||
|
|
||||||
|
<para>To retrieve the current frame interval applications set the
|
||||||
|
<structfield>pad</structfield> field of a &v4l2-subdev-frame-interval; to
|
||||||
|
the desired pad number as reported by the media controller API. When they
|
||||||
|
call the <constant>VIDIOC_SUBDEV_G_FRAME_INTERVAL</constant> ioctl with a
|
||||||
|
pointer to this structure the driver fills the members of the
|
||||||
|
<structfield>interval</structfield> field.</para>
|
||||||
|
|
||||||
|
<para>To change the current frame interval applications set both the
|
||||||
|
<structfield>pad</structfield> field and all members of the
|
||||||
|
<structfield>interval</structfield> field. When they call the
|
||||||
|
<constant>VIDIOC_SUBDEV_S_FRAME_INTERVAL</constant> ioctl with a pointer to
|
||||||
|
this structure the driver verifies the requested interval, adjusts it based
|
||||||
|
on the hardware capabilities and configures the device. Upon return the
|
||||||
|
&v4l2-subdev-frame-interval; contains the current frame interval as would be
|
||||||
|
returned by a <constant>VIDIOC_SUBDEV_G_FRAME_INTERVAL</constant> call.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>Drivers must not return an error solely because the requested interval
|
||||||
|
doesn't match the device capabilities. They must instead modify the interval
|
||||||
|
to match what the hardware can provide. The modified interval should be as
|
||||||
|
close as possible to the original request.</para>
|
||||||
|
|
||||||
|
<para>Sub-devices that support the frame interval ioctls should implement
|
||||||
|
them on a single pad only. Their behaviour when supported on multiple pads
|
||||||
|
of the same sub-device is not defined.</para>
|
||||||
|
|
||||||
|
<table pgwide="1" frame="none" id="v4l2-subdev-frame-interval">
|
||||||
|
<title>struct <structname>v4l2_subdev_frame_interval</structname></title>
|
||||||
|
<tgroup cols="3">
|
||||||
|
&cs-str;
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>pad</structfield></entry>
|
||||||
|
<entry>Pad number as reported by the media controller API.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>&v4l2-fract;</entry>
|
||||||
|
<entry><structfield>interval</structfield></entry>
|
||||||
|
<entry>Period, in seconds, between consecutive video frames.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>reserved</structfield>[9]</entry>
|
||||||
|
<entry>Reserved for future extensions. Applications and drivers must
|
||||||
|
set the array to zero.</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
&return-value;
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>EBUSY</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para>The frame interval can't be changed because the pad is currently
|
||||||
|
busy. This can be caused, for instance, by an active video stream on
|
||||||
|
the pad. The ioctl must not be retried without performing another
|
||||||
|
action to fix the problem first. Only returned by
|
||||||
|
<constant>VIDIOC_SUBDEV_S_FRAME_INTERVAL</constant></para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>EINVAL</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para>The &v4l2-subdev-frame-interval; <structfield>pad</structfield>
|
||||||
|
references a non-existing pad, or the pad doesn't support frame
|
||||||
|
intervals.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
@ -4784,7 +4784,7 @@ struct _snd_pcm_runtime {
|
|||||||
FM registers can be directly accessed through the direct-FM API,
|
FM registers can be directly accessed through the direct-FM API,
|
||||||
defined in <filename><sound/asound_fm.h></filename>. In
|
defined in <filename><sound/asound_fm.h></filename>. In
|
||||||
ALSA native mode, FM registers are accessed through
|
ALSA native mode, FM registers are accessed through
|
||||||
the Hardware-Dependant Device direct-FM extension API, whereas in
|
the Hardware-Dependent Device direct-FM extension API, whereas in
|
||||||
OSS compatible mode, FM registers can be accessed with the OSS
|
OSS compatible mode, FM registers can be accessed with the OSS
|
||||||
direct-FM compatible API in <filename>/dev/dmfmX</filename> device.
|
direct-FM compatible API in <filename>/dev/dmfmX</filename> device.
|
||||||
</para>
|
</para>
|
||||||
|
@ -253,8 +253,8 @@ In constrast, MSI is restricted to a maximum of 32 interrupts (and
|
|||||||
must be a power of two). In addition, the MSI interrupt vectors must
|
must be a power of two). In addition, the MSI interrupt vectors must
|
||||||
be allocated consecutively, so the system may not be able to allocate
|
be allocated consecutively, so the system may not be able to allocate
|
||||||
as many vectors for MSI as it could for MSI-X. On some platforms, MSI
|
as many vectors for MSI as it could for MSI-X. On some platforms, MSI
|
||||||
interrupts must all be targetted at the same set of CPUs whereas MSI-X
|
interrupts must all be targeted at the same set of CPUs whereas MSI-X
|
||||||
interrupts can all be targetted at different CPUs.
|
interrupts can all be targeted at different CPUs.
|
||||||
|
|
||||||
4.5.2 Spinlocks
|
4.5.2 Spinlocks
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ expect these delays to be short, measurable in days, not weeks or months.
|
|||||||
A disclosure date is negotiated by the security team working with the
|
A disclosure date is negotiated by the security team working with the
|
||||||
bug submitter as well as vendors. However, the kernel security team
|
bug submitter as well as vendors. However, the kernel security team
|
||||||
holds the final say when setting a disclosure date. The timeframe for
|
holds the final say when setting a disclosure date. The timeframe for
|
||||||
disclosure is from immediate (esp. if it's already publically known)
|
disclosure is from immediate (esp. if it's already publicly known)
|
||||||
to a few weeks. As a basic default policy, we expect report date to
|
to a few weeks. As a basic default policy, we expect report date to
|
||||||
disclosure date to be on the order of 7 days.
|
disclosure date to be on the order of 7 days.
|
||||||
|
|
||||||
|
@ -101,7 +101,7 @@ PM support: Since Linux is used on many portable and desktop systems, your
|
|||||||
complete overview of the power management issues related to
|
complete overview of the power management issues related to
|
||||||
drivers see Documentation/power/devices.txt .
|
drivers see Documentation/power/devices.txt .
|
||||||
|
|
||||||
Control: In general if there is active maintainance of a driver by
|
Control: In general if there is active maintenance of a driver by
|
||||||
the author then patches will be redirected to them unless
|
the author then patches will be redirected to them unless
|
||||||
they are totally obvious and without need of checking.
|
they are totally obvious and without need of checking.
|
||||||
If you want to be the contact and update point for the
|
If you want to be the contact and update point for the
|
||||||
|
@ -729,7 +729,7 @@ Linus Torvalds's mail on the canonical patch format:
|
|||||||
<http://lkml.org/lkml/2005/4/7/183>
|
<http://lkml.org/lkml/2005/4/7/183>
|
||||||
|
|
||||||
Andi Kleen, "On submitting kernel patches"
|
Andi Kleen, "On submitting kernel patches"
|
||||||
Some strategies to get difficult or controversal changes in.
|
Some strategies to get difficult or controversial changes in.
|
||||||
http://halobates.de/on-submitting-patches.pdf
|
http://halobates.de/on-submitting-patches.pdf
|
||||||
|
|
||||||
--
|
--
|
||||||
|
@ -92,6 +92,11 @@ vendor_id: <integer>, device_id: <integer>
|
|||||||
class_code: <integer>]
|
class_code: <integer>]
|
||||||
[serial number: <integer>, <integer>]
|
[serial number: <integer>, <integer>]
|
||||||
[bridge: secondary_status: <integer>, control: <integer>]
|
[bridge: secondary_status: <integer>, control: <integer>]
|
||||||
|
[aer_status: <integer>, aer_mask: <integer>
|
||||||
|
<aer status string>
|
||||||
|
[aer_uncor_severity: <integer>]
|
||||||
|
aer_layer=<aer layer string>, aer_agent=<aer agent string>
|
||||||
|
aer_tlp_header: <integer> <integer> <integer> <integer>]
|
||||||
|
|
||||||
<pcie port type string>* := PCIe end point | legacy PCI end point | \
|
<pcie port type string>* := PCIe end point | legacy PCI end point | \
|
||||||
unknown | unknown | root port | upstream switch port | \
|
unknown | unknown | root port | upstream switch port | \
|
||||||
@ -99,6 +104,26 @@ downstream switch port | PCIe to PCI/PCI-X bridge | \
|
|||||||
PCI/PCI-X to PCIe bridge | root complex integrated endpoint device | \
|
PCI/PCI-X to PCIe bridge | root complex integrated endpoint device | \
|
||||||
root complex event collector
|
root complex event collector
|
||||||
|
|
||||||
|
if section severity is fatal or recoverable
|
||||||
|
<aer status string># :=
|
||||||
|
unknown | unknown | unknown | unknown | Data Link Protocol | \
|
||||||
|
unknown | unknown | unknown | unknown | unknown | unknown | unknown | \
|
||||||
|
Poisoned TLP | Flow Control Protocol | Completion Timeout | \
|
||||||
|
Completer Abort | Unexpected Completion | Receiver Overflow | \
|
||||||
|
Malformed TLP | ECRC | Unsupported Request
|
||||||
|
else
|
||||||
|
<aer status string># :=
|
||||||
|
Receiver Error | unknown | unknown | unknown | unknown | unknown | \
|
||||||
|
Bad TLP | Bad DLLP | RELAY_NUM Rollover | unknown | unknown | unknown | \
|
||||||
|
Replay Timer Timeout | Advisory Non-Fatal
|
||||||
|
fi
|
||||||
|
|
||||||
|
<aer layer string> :=
|
||||||
|
Physical Layer | Data Link Layer | Transaction Layer
|
||||||
|
|
||||||
|
<aer agent string> :=
|
||||||
|
Receiver ID | Requester ID | Completer ID | Transmitter ID
|
||||||
|
|
||||||
Where, [] designate corresponding content is optional
|
Where, [] designate corresponding content is optional
|
||||||
|
|
||||||
All <field string> description with * has the following format:
|
All <field string> description with * has the following format:
|
||||||
|
@ -36,7 +36,7 @@ Linux currently supports the following features on the IXP4xx chips:
|
|||||||
- Timers (watchdog, OS)
|
- Timers (watchdog, OS)
|
||||||
|
|
||||||
The following components of the chips are not supported by Linux and
|
The following components of the chips are not supported by Linux and
|
||||||
require the use of Intel's propietary CSR softare:
|
require the use of Intel's proprietary CSR softare:
|
||||||
|
|
||||||
- USB device interface
|
- USB device interface
|
||||||
- Network interfaces (HSS, Utopia, NPEs, etc)
|
- Network interfaces (HSS, Utopia, NPEs, etc)
|
||||||
@ -47,7 +47,7 @@ software from:
|
|||||||
|
|
||||||
http://developer.intel.com/design/network/products/npfamily/ixp425.htm
|
http://developer.intel.com/design/network/products/npfamily/ixp425.htm
|
||||||
|
|
||||||
DO NOT POST QUESTIONS TO THE LINUX MAILING LISTS REGARDING THE PROPIETARY
|
DO NOT POST QUESTIONS TO THE LINUX MAILING LISTS REGARDING THE PROPRIETARY
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
|
|
||||||
There are several websites that provide directions/pointers on using
|
There are several websites that provide directions/pointers on using
|
||||||
|
@ -116,7 +116,7 @@ Configuration
|
|||||||
Allows the entire memory to be checksummed before and after the
|
Allows the entire memory to be checksummed before and after the
|
||||||
suspend to see if there has been any corruption of the contents.
|
suspend to see if there has been any corruption of the contents.
|
||||||
|
|
||||||
Note, the time to calculate the CRC is dependant on the CPU speed
|
Note, the time to calculate the CRC is dependent on the CPU speed
|
||||||
and the size of memory. For an 64Mbyte RAM area on an 200MHz
|
and the size of memory. For an 64Mbyte RAM area on an 200MHz
|
||||||
S3C2410, this can take approximately 4 seconds to complete.
|
S3C2410, this can take approximately 4 seconds to complete.
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ Introduction
|
|||||||
------------
|
------------
|
||||||
|
|
||||||
This outlines the Samsung GPIO implementation and the architecture
|
This outlines the Samsung GPIO implementation and the architecture
|
||||||
specfic calls provided alongisde the drivers/gpio core.
|
specific calls provided alongisde the drivers/gpio core.
|
||||||
|
|
||||||
|
|
||||||
S3C24XX (Legacy)
|
S3C24XX (Legacy)
|
||||||
|
@ -497,7 +497,7 @@ The scatter gather list is in the form of an array of <page, offset, len>
|
|||||||
entries with their corresponding dma address mappings filled in at the
|
entries with their corresponding dma address mappings filled in at the
|
||||||
appropriate time. As an optimization, contiguous physical pages can be
|
appropriate time. As an optimization, contiguous physical pages can be
|
||||||
covered by a single entry where <page> refers to the first page and <len>
|
covered by a single entry where <page> refers to the first page and <len>
|
||||||
covers the range of pages (upto 16 contiguous pages could be covered this
|
covers the range of pages (up to 16 contiguous pages could be covered this
|
||||||
way). There is a helper routine (blk_rq_map_sg) which drivers can use to build
|
way). There is a helper routine (blk_rq_map_sg) which drivers can use to build
|
||||||
the sg list.
|
the sg list.
|
||||||
|
|
||||||
@ -565,7 +565,7 @@ struct request {
|
|||||||
.
|
.
|
||||||
int tag; /* command tag associated with request */
|
int tag; /* command tag associated with request */
|
||||||
void *special; /* same as before */
|
void *special; /* same as before */
|
||||||
char *buffer; /* valid only for low memory buffers upto
|
char *buffer; /* valid only for low memory buffers up to
|
||||||
current_nr_sectors */
|
current_nr_sectors */
|
||||||
.
|
.
|
||||||
.
|
.
|
||||||
@ -963,11 +963,6 @@ elevator_dispatch_fn* fills the dispatch queue with ready requests.
|
|||||||
|
|
||||||
elevator_add_req_fn* called to add a new request into the scheduler
|
elevator_add_req_fn* called to add a new request into the scheduler
|
||||||
|
|
||||||
elevator_queue_empty_fn returns true if the merge queue is empty.
|
|
||||||
Drivers shouldn't use this, but rather check
|
|
||||||
if elv_next_request is NULL (without losing the
|
|
||||||
request if one exists!)
|
|
||||||
|
|
||||||
elevator_former_req_fn
|
elevator_former_req_fn
|
||||||
elevator_latter_req_fn These return the request before or after the
|
elevator_latter_req_fn These return the request before or after the
|
||||||
one specified in disk sort order. Used by the
|
one specified in disk sort order. Used by the
|
||||||
|
@ -140,7 +140,7 @@ Proportional weight policy files
|
|||||||
- Specifies per cgroup weight. This is default weight of the group
|
- Specifies per cgroup weight. This is default weight of the group
|
||||||
on all the devices until and unless overridden by per device rule.
|
on all the devices until and unless overridden by per device rule.
|
||||||
(See blkio.weight_device).
|
(See blkio.weight_device).
|
||||||
Currently allowed range of weights is from 100 to 1000.
|
Currently allowed range of weights is from 10 to 1000.
|
||||||
|
|
||||||
- blkio.weight_device
|
- blkio.weight_device
|
||||||
- One can specify per cgroup per device rules using this interface.
|
- One can specify per cgroup per device rules using this interface.
|
||||||
@ -343,34 +343,6 @@ Common files among various policies
|
|||||||
|
|
||||||
CFQ sysfs tunable
|
CFQ sysfs tunable
|
||||||
=================
|
=================
|
||||||
/sys/block/<disk>/queue/iosched/group_isolation
|
|
||||||
-----------------------------------------------
|
|
||||||
|
|
||||||
If group_isolation=1, it provides stronger isolation between groups at the
|
|
||||||
expense of throughput. By default group_isolation is 0. In general that
|
|
||||||
means that if group_isolation=0, expect fairness for sequential workload
|
|
||||||
only. Set group_isolation=1 to see fairness for random IO workload also.
|
|
||||||
|
|
||||||
Generally CFQ will put random seeky workload in sync-noidle category. CFQ
|
|
||||||
will disable idling on these queues and it does a collective idling on group
|
|
||||||
of such queues. Generally these are slow moving queues and if there is a
|
|
||||||
sync-noidle service tree in each group, that group gets exclusive access to
|
|
||||||
disk for certain period. That means it will bring the throughput down if
|
|
||||||
group does not have enough IO to drive deeper queue depths and utilize disk
|
|
||||||
capacity to the fullest in the slice allocated to it. But the flip side is
|
|
||||||
that even a random reader should get better latencies and overall throughput
|
|
||||||
if there are lots of sequential readers/sync-idle workload running in the
|
|
||||||
system.
|
|
||||||
|
|
||||||
If group_isolation=0, then CFQ automatically moves all the random seeky queues
|
|
||||||
in the root group. That means there will be no service differentiation for
|
|
||||||
that kind of workload. This leads to better throughput as we do collective
|
|
||||||
idling on root sync-noidle tree.
|
|
||||||
|
|
||||||
By default one should run with group_isolation=0. If that is not sufficient
|
|
||||||
and one wants stronger isolation between groups, then set group_isolation=1
|
|
||||||
but this will come at cost of reduced throughput.
|
|
||||||
|
|
||||||
/sys/block/<disk>/queue/iosched/slice_idle
|
/sys/block/<disk>/queue/iosched/slice_idle
|
||||||
------------------------------------------
|
------------------------------------------
|
||||||
On a faster hardware CFQ can be slow, especially with sequential workload.
|
On a faster hardware CFQ can be slow, especially with sequential workload.
|
||||||
|
@ -110,22 +110,22 @@ university server with various users - students, professors, system
|
|||||||
tasks etc. The resource planning for this server could be along the
|
tasks etc. The resource planning for this server could be along the
|
||||||
following lines:
|
following lines:
|
||||||
|
|
||||||
CPU : Top cpuset
|
CPU : "Top cpuset"
|
||||||
/ \
|
/ \
|
||||||
CPUSet1 CPUSet2
|
CPUSet1 CPUSet2
|
||||||
| |
|
| |
|
||||||
(Profs) (Students)
|
(Professors) (Students)
|
||||||
|
|
||||||
In addition (system tasks) are attached to topcpuset (so
|
In addition (system tasks) are attached to topcpuset (so
|
||||||
that they can run anywhere) with a limit of 20%
|
that they can run anywhere) with a limit of 20%
|
||||||
|
|
||||||
Memory : Professors (50%), students (30%), system (20%)
|
Memory : Professors (50%), Students (30%), system (20%)
|
||||||
|
|
||||||
Disk : Prof (50%), students (30%), system (20%)
|
Disk : Professors (50%), Students (30%), system (20%)
|
||||||
|
|
||||||
Network : WWW browsing (20%), Network File System (60%), others (20%)
|
Network : WWW browsing (20%), Network File System (60%), others (20%)
|
||||||
/ \
|
/ \
|
||||||
Prof (15%) students (5%)
|
Professors (15%) students (5%)
|
||||||
|
|
||||||
Browsers like Firefox/Lynx go into the WWW network class, while (k)nfsd go
|
Browsers like Firefox/Lynx go into the WWW network class, while (k)nfsd go
|
||||||
into NFS network class.
|
into NFS network class.
|
||||||
|
@ -196,7 +196,7 @@ the state as 0 when a cpu if offline and 1 when its online.
|
|||||||
#To display the current cpu state.
|
#To display the current cpu state.
|
||||||
#cat /sys/devices/system/cpu/cpuX/online
|
#cat /sys/devices/system/cpu/cpuX/online
|
||||||
|
|
||||||
Q: Why cant i remove CPU0 on some systems?
|
Q: Why can't i remove CPU0 on some systems?
|
||||||
A: Some architectures may have some special dependency on a certain CPU.
|
A: Some architectures may have some special dependency on a certain CPU.
|
||||||
|
|
||||||
For e.g in IA64 platforms we have ability to sent platform interrupts to the
|
For e.g in IA64 platforms we have ability to sent platform interrupts to the
|
||||||
|
@ -62,7 +62,7 @@ image file and then arrange all these packets back to back in to one single
|
|||||||
file.
|
file.
|
||||||
This file is then copied to /sys/class/firmware/dell_rbu/data.
|
This file is then copied to /sys/class/firmware/dell_rbu/data.
|
||||||
Once this file gets to the driver, the driver extracts packet_size data from
|
Once this file gets to the driver, the driver extracts packet_size data from
|
||||||
the file and spreads it accross the physical memory in contiguous packet_sized
|
the file and spreads it across the physical memory in contiguous packet_sized
|
||||||
space.
|
space.
|
||||||
This method makes sure that all the packets get to the driver in a single operation.
|
This method makes sure that all the packets get to the driver in a single operation.
|
||||||
|
|
||||||
|
@ -56,13 +56,13 @@ information on kernel development.
|
|||||||
|
|
||||||
1.2: WHAT THIS DOCUMENT IS ABOUT
|
1.2: WHAT THIS DOCUMENT IS ABOUT
|
||||||
|
|
||||||
The Linux kernel, at over 6 million lines of code and well over 1000 active
|
The Linux kernel, at over 8 million lines of code and well over 1000
|
||||||
contributors, is one of the largest and most active free software projects
|
contributors to each release, is one of the largest and most active free
|
||||||
in existence. Since its humble beginning in 1991, this kernel has evolved
|
software projects in existence. Since its humble beginning in 1991, this
|
||||||
into a best-of-breed operating system component which runs on pocket-sized
|
kernel has evolved into a best-of-breed operating system component which
|
||||||
digital music players, desktop PCs, the largest supercomputers in
|
runs on pocket-sized digital music players, desktop PCs, the largest
|
||||||
existence, and all types of systems in between. It is a robust, efficient,
|
supercomputers in existence, and all types of systems in between. It is a
|
||||||
and scalable solution for almost any situation.
|
robust, efficient, and scalable solution for almost any situation.
|
||||||
|
|
||||||
With the growth of Linux has come an increase in the number of developers
|
With the growth of Linux has come an increase in the number of developers
|
||||||
(and companies) wishing to participate in its development. Hardware
|
(and companies) wishing to participate in its development. Hardware
|
||||||
@ -115,7 +115,7 @@ This document was written by Jonathan Corbet, corbet@lwn.net. It has been
|
|||||||
improved by comments from Johannes Berg, James Berry, Alex Chiang, Roland
|
improved by comments from Johannes Berg, James Berry, Alex Chiang, Roland
|
||||||
Dreier, Randy Dunlap, Jake Edge, Jiri Kosina, Matt Mackall, Arthur Marsh,
|
Dreier, Randy Dunlap, Jake Edge, Jiri Kosina, Matt Mackall, Arthur Marsh,
|
||||||
Amanda McPherson, Andrew Morton, Andrew Price, Tsugikazu Shibata, and
|
Amanda McPherson, Andrew Morton, Andrew Price, Tsugikazu Shibata, and
|
||||||
Jochen Voß.
|
Jochen Voß.
|
||||||
|
|
||||||
This work was supported by the Linux Foundation; thanks especially to
|
This work was supported by the Linux Foundation; thanks especially to
|
||||||
Amanda McPherson, who saw the value of this effort and made it all happen.
|
Amanda McPherson, who saw the value of this effort and made it all happen.
|
||||||
@ -221,7 +221,7 @@ include:
|
|||||||
- Everything that was said above about code review applies doubly to
|
- Everything that was said above about code review applies doubly to
|
||||||
closed-source code. Since this code is not available at all, it cannot
|
closed-source code. Since this code is not available at all, it cannot
|
||||||
have been reviewed by the community and will, beyond doubt, have serious
|
have been reviewed by the community and will, beyond doubt, have serious
|
||||||
problems.
|
problems.
|
||||||
|
|
||||||
Makers of embedded systems, in particular, may be tempted to disregard much
|
Makers of embedded systems, in particular, may be tempted to disregard much
|
||||||
of what has been said in this section in the belief that they are shipping
|
of what has been said in this section in the belief that they are shipping
|
||||||
|
@ -14,16 +14,15 @@ The kernel developers use a loosely time-based release process, with a new
|
|||||||
major kernel release happening every two or three months. The recent
|
major kernel release happening every two or three months. The recent
|
||||||
release history looks like this:
|
release history looks like this:
|
||||||
|
|
||||||
2.6.26 July 13, 2008
|
2.6.38 March 14, 2011
|
||||||
2.6.25 April 16, 2008
|
2.6.37 January 4, 2011
|
||||||
2.6.24 January 24, 2008
|
2.6.36 October 20, 2010
|
||||||
2.6.23 October 9, 2007
|
2.6.35 August 1, 2010
|
||||||
2.6.22 July 8, 2007
|
2.6.34 May 15, 2010
|
||||||
2.6.21 April 25, 2007
|
2.6.33 February 24, 2010
|
||||||
2.6.20 February 4, 2007
|
|
||||||
|
|
||||||
Every 2.6.x release is a major kernel release with new features, internal
|
Every 2.6.x release is a major kernel release with new features, internal
|
||||||
API changes, and more. A typical 2.6 release can contain over 10,000
|
API changes, and more. A typical 2.6 release can contain nearly 10,000
|
||||||
changesets with changes to several hundred thousand lines of code. 2.6 is
|
changesets with changes to several hundred thousand lines of code. 2.6 is
|
||||||
thus the leading edge of Linux kernel development; the kernel uses a
|
thus the leading edge of Linux kernel development; the kernel uses a
|
||||||
rolling development model which is continually integrating major changes.
|
rolling development model which is continually integrating major changes.
|
||||||
@ -42,13 +41,13 @@ merge window do not come out of thin air; they have been collected, tested,
|
|||||||
and staged ahead of time. How that process works will be described in
|
and staged ahead of time. How that process works will be described in
|
||||||
detail later on).
|
detail later on).
|
||||||
|
|
||||||
The merge window lasts for two weeks. At the end of this time, Linus
|
The merge window lasts for approximately two weeks. At the end of this
|
||||||
Torvalds will declare that the window is closed and release the first of
|
time, Linus Torvalds will declare that the window is closed and release the
|
||||||
the "rc" kernels. For the kernel which is destined to be 2.6.26, for
|
first of the "rc" kernels. For the kernel which is destined to be 2.6.40,
|
||||||
example, the release which happens at the end of the merge window will be
|
for example, the release which happens at the end of the merge window will
|
||||||
called 2.6.26-rc1. The -rc1 release is the signal that the time to merge
|
be called 2.6.40-rc1. The -rc1 release is the signal that the time to
|
||||||
new features has passed, and that the time to stabilize the next kernel has
|
merge new features has passed, and that the time to stabilize the next
|
||||||
begun.
|
kernel has begun.
|
||||||
|
|
||||||
Over the next six to ten weeks, only patches which fix problems should be
|
Over the next six to ten weeks, only patches which fix problems should be
|
||||||
submitted to the mainline. On occasion a more significant change will be
|
submitted to the mainline. On occasion a more significant change will be
|
||||||
@ -66,20 +65,19 @@ will get up to somewhere between -rc6 and -rc9 before the kernel is
|
|||||||
considered to be sufficiently stable and the final 2.6.x release is made.
|
considered to be sufficiently stable and the final 2.6.x release is made.
|
||||||
At that point the whole process starts over again.
|
At that point the whole process starts over again.
|
||||||
|
|
||||||
As an example, here is how the 2.6.25 development cycle went (all dates in
|
As an example, here is how the 2.6.38 development cycle went (all dates in
|
||||||
2008):
|
2011):
|
||||||
|
|
||||||
January 24 2.6.24 stable release
|
January 4 2.6.37 stable release
|
||||||
February 10 2.6.25-rc1, merge window closes
|
January 18 2.6.38-rc1, merge window closes
|
||||||
February 15 2.6.25-rc2
|
January 21 2.6.38-rc2
|
||||||
February 24 2.6.25-rc3
|
February 1 2.6.38-rc3
|
||||||
March 4 2.6.25-rc4
|
February 7 2.6.38-rc4
|
||||||
March 9 2.6.25-rc5
|
February 15 2.6.38-rc5
|
||||||
March 16 2.6.25-rc6
|
February 21 2.6.38-rc6
|
||||||
March 25 2.6.25-rc7
|
March 1 2.6.38-rc7
|
||||||
April 1 2.6.25-rc8
|
March 7 2.6.38-rc8
|
||||||
April 11 2.6.25-rc9
|
March 14 2.6.38 stable release
|
||||||
April 16 2.6.25 stable release
|
|
||||||
|
|
||||||
How do the developers decide when to close the development cycle and create
|
How do the developers decide when to close the development cycle and create
|
||||||
the stable release? The most significant metric used is the list of
|
the stable release? The most significant metric used is the list of
|
||||||
@ -87,7 +85,7 @@ regressions from previous releases. No bugs are welcome, but those which
|
|||||||
break systems which worked in the past are considered to be especially
|
break systems which worked in the past are considered to be especially
|
||||||
serious. For this reason, patches which cause regressions are looked upon
|
serious. For this reason, patches which cause regressions are looked upon
|
||||||
unfavorably and are quite likely to be reverted during the stabilization
|
unfavorably and are quite likely to be reverted during the stabilization
|
||||||
period.
|
period.
|
||||||
|
|
||||||
The developers' goal is to fix all known regressions before the stable
|
The developers' goal is to fix all known regressions before the stable
|
||||||
release is made. In the real world, this kind of perfection is hard to
|
release is made. In the real world, this kind of perfection is hard to
|
||||||
@ -99,26 +97,34 @@ kernels go out with a handful of known regressions though, hopefully, none
|
|||||||
of them are serious.
|
of them are serious.
|
||||||
|
|
||||||
Once a stable release is made, its ongoing maintenance is passed off to the
|
Once a stable release is made, its ongoing maintenance is passed off to the
|
||||||
"stable team," currently comprised of Greg Kroah-Hartman and Chris Wright.
|
"stable team," currently consisting of Greg Kroah-Hartman. The stable team
|
||||||
The stable team will release occasional updates to the stable release using
|
will release occasional updates to the stable release using the 2.6.x.y
|
||||||
the 2.6.x.y numbering scheme. To be considered for an update release, a
|
numbering scheme. To be considered for an update release, a patch must (1)
|
||||||
patch must (1) fix a significant bug, and (2) already be merged into the
|
fix a significant bug, and (2) already be merged into the mainline for the
|
||||||
mainline for the next development kernel. Continuing our 2.6.25 example,
|
next development kernel. Kernels will typically receive stable updates for
|
||||||
the history (as of this writing) is:
|
a little more than one development cycle past their initial release. So,
|
||||||
|
for example, the 2.6.36 kernel's history looked like:
|
||||||
|
|
||||||
May 1 2.6.25.1
|
October 10 2.6.36 stable release
|
||||||
May 6 2.6.25.2
|
November 22 2.6.36.1
|
||||||
May 9 2.6.25.3
|
December 9 2.6.36.2
|
||||||
May 15 2.6.25.4
|
January 7 2.6.36.3
|
||||||
June 7 2.6.25.5
|
February 17 2.6.36.4
|
||||||
June 9 2.6.25.6
|
|
||||||
June 16 2.6.25.7
|
|
||||||
June 21 2.6.25.8
|
|
||||||
June 24 2.6.25.9
|
|
||||||
|
|
||||||
Stable updates for a given kernel are made for approximately six months;
|
2.6.36.4 was the final stable update for the 2.6.36 release.
|
||||||
after that, the maintenance of stable releases is solely the responsibility
|
|
||||||
of the distributors which have shipped that particular kernel.
|
Some kernels are designated "long term" kernels; they will receive support
|
||||||
|
for a longer period. As of this writing, the current long term kernels
|
||||||
|
and their maintainers are:
|
||||||
|
|
||||||
|
2.6.27 Willy Tarreau (Deep-frozen stable kernel)
|
||||||
|
2.6.32 Greg Kroah-Hartman
|
||||||
|
2.6.35 Andi Kleen (Embedded flag kernel)
|
||||||
|
|
||||||
|
The selection of a kernel for long-term support is purely a matter of a
|
||||||
|
maintainer having the need and the time to maintain that release. There
|
||||||
|
are no known plans for long-term support for any specific upcoming
|
||||||
|
release.
|
||||||
|
|
||||||
|
|
||||||
2.2: THE LIFECYCLE OF A PATCH
|
2.2: THE LIFECYCLE OF A PATCH
|
||||||
@ -130,7 +136,7 @@ each patch implements a change which is desirable to have in the mainline.
|
|||||||
This process can happen quickly for minor fixes, or, in the case of large
|
This process can happen quickly for minor fixes, or, in the case of large
|
||||||
and controversial changes, go on for years. Much developer frustration
|
and controversial changes, go on for years. Much developer frustration
|
||||||
comes from a lack of understanding of this process or from attempts to
|
comes from a lack of understanding of this process or from attempts to
|
||||||
circumvent it.
|
circumvent it.
|
||||||
|
|
||||||
In the hopes of reducing that frustration, this document will describe how
|
In the hopes of reducing that frustration, this document will describe how
|
||||||
a patch gets into the kernel. What follows below is an introduction which
|
a patch gets into the kernel. What follows below is an introduction which
|
||||||
@ -193,8 +199,8 @@ involved.
|
|||||||
2.3: HOW PATCHES GET INTO THE KERNEL
|
2.3: HOW PATCHES GET INTO THE KERNEL
|
||||||
|
|
||||||
There is exactly one person who can merge patches into the mainline kernel
|
There is exactly one person who can merge patches into the mainline kernel
|
||||||
repository: Linus Torvalds. But, of the over 12,000 patches which went
|
repository: Linus Torvalds. But, of the over 9,500 patches which went
|
||||||
into the 2.6.25 kernel, only 250 (around 2%) were directly chosen by Linus
|
into the 2.6.38 kernel, only 112 (around 1.3%) were directly chosen by Linus
|
||||||
himself. The kernel project has long since grown to a size where no single
|
himself. The kernel project has long since grown to a size where no single
|
||||||
developer could possibly inspect and select every patch unassisted. The
|
developer could possibly inspect and select every patch unassisted. The
|
||||||
way the kernel developers have addressed this growth is through the use of
|
way the kernel developers have addressed this growth is through the use of
|
||||||
@ -229,7 +235,7 @@ first in trees dedicated to network device drivers, wireless networking,
|
|||||||
etc. This chain of repositories can be arbitrarily long, though it rarely
|
etc. This chain of repositories can be arbitrarily long, though it rarely
|
||||||
exceeds two or three links. Since each maintainer in the chain trusts
|
exceeds two or three links. Since each maintainer in the chain trusts
|
||||||
those managing lower-level trees, this process is known as the "chain of
|
those managing lower-level trees, this process is known as the "chain of
|
||||||
trust."
|
trust."
|
||||||
|
|
||||||
Clearly, in a system like this, getting patches into the kernel depends on
|
Clearly, in a system like this, getting patches into the kernel depends on
|
||||||
finding the right maintainer. Sending patches directly to Linus is not
|
finding the right maintainer. Sending patches directly to Linus is not
|
||||||
@ -254,7 +260,7 @@ The answer comes in the form of -next trees, where subsystem trees are
|
|||||||
collected for testing and review. The older of these trees, maintained by
|
collected for testing and review. The older of these trees, maintained by
|
||||||
Andrew Morton, is called "-mm" (for memory management, which is how it got
|
Andrew Morton, is called "-mm" (for memory management, which is how it got
|
||||||
started). The -mm tree integrates patches from a long list of subsystem
|
started). The -mm tree integrates patches from a long list of subsystem
|
||||||
trees; it also has some patches aimed at helping with debugging.
|
trees; it also has some patches aimed at helping with debugging.
|
||||||
|
|
||||||
Beyond that, -mm contains a significant collection of patches which have
|
Beyond that, -mm contains a significant collection of patches which have
|
||||||
been selected by Andrew directly. These patches may have been posted on a
|
been selected by Andrew directly. These patches may have been posted on a
|
||||||
@ -264,8 +270,8 @@ subsystem tree of last resort; if there is no other obvious path for a
|
|||||||
patch into the mainline, it is likely to end up in -mm. Miscellaneous
|
patch into the mainline, it is likely to end up in -mm. Miscellaneous
|
||||||
patches which accumulate in -mm will eventually either be forwarded on to
|
patches which accumulate in -mm will eventually either be forwarded on to
|
||||||
an appropriate subsystem tree or be sent directly to Linus. In a typical
|
an appropriate subsystem tree or be sent directly to Linus. In a typical
|
||||||
development cycle, approximately 10% of the patches going into the mainline
|
development cycle, approximately 5-10% of the patches going into the
|
||||||
get there via -mm.
|
mainline get there via -mm.
|
||||||
|
|
||||||
The current -mm patch is available in the "mmotm" (-mm of the moment)
|
The current -mm patch is available in the "mmotm" (-mm of the moment)
|
||||||
directory at:
|
directory at:
|
||||||
@ -275,7 +281,7 @@ directory at:
|
|||||||
Use of the MMOTM tree is likely to be a frustrating experience, though;
|
Use of the MMOTM tree is likely to be a frustrating experience, though;
|
||||||
there is a definite chance that it will not even compile.
|
there is a definite chance that it will not even compile.
|
||||||
|
|
||||||
The other -next tree, started more recently, is linux-next, maintained by
|
The primary tree for next-cycle patch merging is linux-next, maintained by
|
||||||
Stephen Rothwell. The linux-next tree is, by design, a snapshot of what
|
Stephen Rothwell. The linux-next tree is, by design, a snapshot of what
|
||||||
the mainline is expected to look like after the next merge window closes.
|
the mainline is expected to look like after the next merge window closes.
|
||||||
Linux-next trees are announced on the linux-kernel and linux-next mailing
|
Linux-next trees are announced on the linux-kernel and linux-next mailing
|
||||||
@ -287,25 +293,14 @@ Some information about linux-next has been gathered at:
|
|||||||
|
|
||||||
http://linux.f-seidel.de/linux-next/pmwiki/
|
http://linux.f-seidel.de/linux-next/pmwiki/
|
||||||
|
|
||||||
How the linux-next tree will fit into the development process is still
|
Linux-next has become an integral part of the kernel development process;
|
||||||
changing. As of this writing, the first full development cycle involving
|
all patches merged during a given merge window should really have found
|
||||||
linux-next (2.6.26) is coming to an end; thus far, it has proved to be a
|
their way into linux-next some time before the merge window opens.
|
||||||
valuable resource for finding and fixing integration problems before the
|
|
||||||
beginning of the merge window. See http://lwn.net/Articles/287155/ for
|
|
||||||
more information on how linux-next has worked to set up the 2.6.27 merge
|
|
||||||
window.
|
|
||||||
|
|
||||||
Some developers have begun to suggest that linux-next should be used as the
|
|
||||||
target for future development as well. The linux-next tree does tend to be
|
|
||||||
far ahead of the mainline and is more representative of the tree into which
|
|
||||||
any new work will be merged. The downside to this idea is that the
|
|
||||||
volatility of linux-next tends to make it a difficult development target.
|
|
||||||
See http://lwn.net/Articles/289013/ for more information on this topic, and
|
|
||||||
stay tuned; much is still in flux where linux-next is involved.
|
|
||||||
|
|
||||||
2.4.1: STAGING TREES
|
2.4.1: STAGING TREES
|
||||||
|
|
||||||
The kernel source tree now contains the drivers/staging/ directory, where
|
The kernel source tree contains the drivers/staging/ directory, where
|
||||||
many sub-directories for drivers or filesystems that are on their way to
|
many sub-directories for drivers or filesystems that are on their way to
|
||||||
being added to the kernel tree live. They remain in drivers/staging while
|
being added to the kernel tree live. They remain in drivers/staging while
|
||||||
they still need more work; once complete, they can be moved into the
|
they still need more work; once complete, they can be moved into the
|
||||||
@ -313,15 +308,23 @@ kernel proper. This is a way to keep track of drivers that aren't
|
|||||||
up to Linux kernel coding or quality standards, but people may want to use
|
up to Linux kernel coding or quality standards, but people may want to use
|
||||||
them and track development.
|
them and track development.
|
||||||
|
|
||||||
Greg Kroah-Hartman currently (as of 2.6.36) maintains the staging tree.
|
Greg Kroah-Hartman currently maintains the staging tree. Drivers that
|
||||||
Drivers that still need work are sent to him, with each driver having
|
still need work are sent to him, with each driver having its own
|
||||||
its own subdirectory in drivers/staging/. Along with the driver source
|
subdirectory in drivers/staging/. Along with the driver source files, a
|
||||||
files, a TODO file should be present in the directory as well. The TODO
|
TODO file should be present in the directory as well. The TODO file lists
|
||||||
file lists the pending work that the driver needs for acceptance into
|
the pending work that the driver needs for acceptance into the kernel
|
||||||
the kernel proper, as well as a list of people that should be Cc'd for any
|
proper, as well as a list of people that should be Cc'd for any patches to
|
||||||
patches to the driver. Staging drivers that don't currently build should
|
the driver. Current rules require that drivers contributed to staging
|
||||||
have their config entries depend upon CONFIG_BROKEN. Once they can
|
must, at a minimum, compile properly.
|
||||||
be successfully built without outside patches, CONFIG_BROKEN can be removed.
|
|
||||||
|
Staging can be a relatively easy way to get new drivers into the mainline
|
||||||
|
where, with luck, they will come to the attention of other developers and
|
||||||
|
improve quickly. Entry into staging is not the end of the story, though;
|
||||||
|
code in staging which is not seeing regular progress will eventually be
|
||||||
|
removed. Distributors also tend to be relatively reluctant to enable
|
||||||
|
staging drivers. So staging is, at best, a stop on the way toward becoming
|
||||||
|
a proper mainline driver.
|
||||||
|
|
||||||
|
|
||||||
2.5: TOOLS
|
2.5: TOOLS
|
||||||
|
|
||||||
@ -347,11 +350,7 @@ page at:
|
|||||||
|
|
||||||
http://git-scm.com/
|
http://git-scm.com/
|
||||||
|
|
||||||
That page has pointers to documentation and tutorials. One should be
|
That page has pointers to documentation and tutorials.
|
||||||
aware, in particular, of the Kernel Hacker's Guide to git, which has
|
|
||||||
information specific to kernel development:
|
|
||||||
|
|
||||||
http://linux.yyz.us/git-howto.html
|
|
||||||
|
|
||||||
Among the kernel developers who do not use git, the most popular choice is
|
Among the kernel developers who do not use git, the most popular choice is
|
||||||
almost certainly Mercurial:
|
almost certainly Mercurial:
|
||||||
@ -408,7 +407,7 @@ There are a few hints which can help with linux-kernel survival:
|
|||||||
important to filter on both the topic of interest (though note that
|
important to filter on both the topic of interest (though note that
|
||||||
long-running conversations can drift away from the original subject
|
long-running conversations can drift away from the original subject
|
||||||
without changing the email subject line) and the people who are
|
without changing the email subject line) and the people who are
|
||||||
participating.
|
participating.
|
||||||
|
|
||||||
- Do not feed the trolls. If somebody is trying to stir up an angry
|
- Do not feed the trolls. If somebody is trying to stir up an angry
|
||||||
response, ignore them.
|
response, ignore them.
|
||||||
|
@ -110,8 +110,8 @@ the kernel community's standards. Some examples include:
|
|||||||
|
|
||||||
- The AppArmor security module made use of internal virtual filesystem
|
- The AppArmor security module made use of internal virtual filesystem
|
||||||
data structures in ways which were considered to be unsafe and
|
data structures in ways which were considered to be unsafe and
|
||||||
unreliable. This code has since been significantly reworked, but
|
unreliable. This concern (among others) kept AppArmor out of the
|
||||||
remains outside of the mainline.
|
mainline for years.
|
||||||
|
|
||||||
In each of these cases, a great deal of pain and extra work could have been
|
In each of these cases, a great deal of pain and extra work could have been
|
||||||
avoided with some early discussion with the kernel developers.
|
avoided with some early discussion with the kernel developers.
|
||||||
@ -138,6 +138,19 @@ patches, and who, if anybody, is attaching Signed-off-by lines to those
|
|||||||
patches. Those are the people who will be best placed to help with a new
|
patches. Those are the people who will be best placed to help with a new
|
||||||
development project.
|
development project.
|
||||||
|
|
||||||
|
The task of finding the right maintainer is sometimes challenging enough
|
||||||
|
that the kernel developers have added a script to ease the process:
|
||||||
|
|
||||||
|
.../scripts/get_maintainer.pl
|
||||||
|
|
||||||
|
This script will return the current maintainer(s) for a given file or
|
||||||
|
directory when given the "-f" option. If passed a patch on the
|
||||||
|
command line, it will list the maintainers who should probably receive
|
||||||
|
copies of the patch. There are a number of options regulating how hard
|
||||||
|
get_maintainer.pl will search for maintainers; please be careful about
|
||||||
|
using the more aggressive options as you may end up including developers
|
||||||
|
who have no real interest in the code you are modifying.
|
||||||
|
|
||||||
If all else fails, talking to Andrew Morton can be an effective way to
|
If all else fails, talking to Andrew Morton can be an effective way to
|
||||||
track down a maintainer for a specific piece of code.
|
track down a maintainer for a specific piece of code.
|
||||||
|
|
||||||
@ -155,11 +168,15 @@ reaction, but, instead, little or no reaction at all. The sad truth of the
|
|||||||
matter is (1) kernel developers tend to be busy, (2) there is no shortage
|
matter is (1) kernel developers tend to be busy, (2) there is no shortage
|
||||||
of people with grand plans and little code (or even prospect of code) to
|
of people with grand plans and little code (or even prospect of code) to
|
||||||
back them up, and (3) nobody is obligated to review or comment on ideas
|
back them up, and (3) nobody is obligated to review or comment on ideas
|
||||||
posted by others. If a request-for-comments posting yields little in the
|
posted by others. Beyond that, high-level designs often hide problems
|
||||||
way of comments, do not assume that it means there is no interest in the
|
which are only reviewed when somebody actually tries to implement those
|
||||||
project. Unfortunately, you also cannot assume that there are no problems
|
designs; for that reason, kernel developers would rather see the code.
|
||||||
with your idea. The best thing to do in this situation is to proceed,
|
|
||||||
keeping the community informed as you go.
|
If a request-for-comments posting yields little in the way of comments, do
|
||||||
|
not assume that it means there is no interest in the project.
|
||||||
|
Unfortunately, you also cannot assume that there are no problems with your
|
||||||
|
idea. The best thing to do in this situation is to proceed, keeping the
|
||||||
|
community informed as you go.
|
||||||
|
|
||||||
|
|
||||||
3.5: GETTING OFFICIAL BUY-IN
|
3.5: GETTING OFFICIAL BUY-IN
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user