From 4af75df6a410ce76d9f60f27b07e5645ecc2c5ed Mon Sep 17 00:00:00 2001 From: James Bottomley Date: Thu, 25 Feb 2016 08:32:51 -0800 Subject: binfmt_misc: add F option description to documentation Signed-off-by: James Bottomley --- Documentation/binfmt_misc.txt | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'Documentation') diff --git a/Documentation/binfmt_misc.txt b/Documentation/binfmt_misc.txt index 6b1de7058371..ec83bbce547a 100644 --- a/Documentation/binfmt_misc.txt +++ b/Documentation/binfmt_misc.txt @@ -66,6 +66,13 @@ Here is what the fields mean: This feature should be used with care as the interpreter will run with root permissions when a setuid binary owned by root is run with binfmt_misc. + 'F' - fix binary. The usual behaviour of binfmt_misc is to spawn the + binary lazily when the misc format file is invoked. However, + this doesn't work very well in the face of mount namespaces and + changeroots, so the F mode opens the binary as soon as the + emulation is installed and uses the opened image to spawn the + emulator, meaning it is always available once installed, + regardless of how the environment changes. There are some restrictions: -- cgit v1.2.3-59-g8ed1b From 1a366fe9153f445e950a7a344932b7419aa83094 Mon Sep 17 00:00:00 2001 From: Lee Jones Date: Wed, 8 Jun 2016 10:21:25 +0100 Subject: pwm: sysfs: Add PWM capture support Allow a user to read PWM capture results from sysfs. To start a capture and read the result, simply read the file: $ cat $PWMCHIP/capture The output format is " ". Signed-off-by: Lee Jones Signed-off-by: Thierry Reding --- Documentation/ABI/testing/sysfs-class-pwm | 9 +++++++++ drivers/pwm/sysfs.c | 17 +++++++++++++++++ 2 files changed, 26 insertions(+) (limited to 'Documentation') diff --git a/Documentation/ABI/testing/sysfs-class-pwm b/Documentation/ABI/testing/sysfs-class-pwm index c479d77b67c5..c20e61354561 100644 --- a/Documentation/ABI/testing/sysfs-class-pwm +++ b/Documentation/ABI/testing/sysfs-class-pwm @@ -77,3 +77,12 @@ Description: Enable/disable the PWM signal. 0 is disabled 1 is enabled + +What: /sys/class/pwm/pwmchipN/pwmX/capture +Date: June 2016 +KernelVersion: 4.8 +Contact: Lee Jones +Description: + Capture information about a PWM signal. The output format is a + pair unsigned integers (period and duty cycle), separated by a + single space. diff --git a/drivers/pwm/sysfs.c b/drivers/pwm/sysfs.c index d98599249a05..c3b1b563480e 100644 --- a/drivers/pwm/sysfs.c +++ b/drivers/pwm/sysfs.c @@ -208,16 +208,33 @@ static ssize_t polarity_store(struct device *child, return ret ? : size; } +static ssize_t capture_show(struct device *child, + struct device_attribute *attr, + char *buf) +{ + struct pwm_device *pwm = child_to_pwm_device(child); + struct pwm_capture result; + int ret; + + ret = pwm_capture(pwm, &result, jiffies_to_msecs(HZ)); + if (ret) + return ret; + + return sprintf(buf, "%u %u\n", result.period, result.duty_cycle); +} + static DEVICE_ATTR_RW(period); static DEVICE_ATTR_RW(duty_cycle); static DEVICE_ATTR_RW(enable); static DEVICE_ATTR_RW(polarity); +static DEVICE_ATTR_RO(capture); static struct attribute *pwm_attrs[] = { &dev_attr_period.attr, &dev_attr_duty_cycle.attr, &dev_attr_enable.attr, &dev_attr_polarity.attr, + &dev_attr_capture.attr, NULL }; ATTRIBUTE_GROUPS(pwm); -- cgit v1.2.3-59-g8ed1b From e1aaf89a5415ab6514cb6798148c7fe04c0ee138 Mon Sep 17 00:00:00 2001 From: "Cooper Jr., Franklin" Date: Thu, 17 Mar 2016 20:15:23 -0500 Subject: pwm: pwm-tiehrpwm: Update DT binding document to use generic node name Now that the node name has been changed from ehrpwm to pwm the document should show this proper usage. Also change the unit address in the example from 0 to the proper physical address value that should be used. Signed-off-by: Franklin S Cooper Jr Acked-by: Rob Herring Signed-off-by: Thierry Reding --- Documentation/devicetree/bindings/pwm/pwm-tiehrpwm.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Documentation') diff --git a/Documentation/devicetree/bindings/pwm/pwm-tiehrpwm.txt b/Documentation/devicetree/bindings/pwm/pwm-tiehrpwm.txt index 9c100b2c5b23..0f9ba509ebd6 100644 --- a/Documentation/devicetree/bindings/pwm/pwm-tiehrpwm.txt +++ b/Documentation/devicetree/bindings/pwm/pwm-tiehrpwm.txt @@ -15,14 +15,14 @@ Optional properties: Example: -ehrpwm0: ehrpwm@0 { /* EHRPWM on am33xx */ +ehrpwm0: pwm@48300200 { /* EHRPWM on am33xx */ compatible = "ti,am33xx-ehrpwm"; #pwm-cells = <3>; reg = <0x48300200 0x100>; ti,hwmods = "ehrpwm0"; }; -ehrpwm0: ehrpwm@0 { /* EHRPWM on da850 */ +ehrpwm0: pwm@300000 { /* EHRPWM on da850 */ compatible = "ti,da850-ehrpwm", "ti,am33xx-ehrpwm"; #pwm-cells = <3>; reg = <0x300000 0x2000>; -- cgit v1.2.3-59-g8ed1b From f734f6ddbc12364021603d4bc8ba031b782508a5 Mon Sep 17 00:00:00 2001 From: Yendapally Reddy Dhananjaya Reddy Date: Tue, 5 Jul 2016 02:00:24 -0400 Subject: dt-bindings: pwm: Add Broadcom iProc PWM controller binding Add a device tree binding for Broadcom iProc PWM controller. Signed-off-by: Yendapally Reddy Dhananjaya Reddy Acked-by: Rob Herring Signed-off-by: Thierry Reding --- .../devicetree/bindings/pwm/brcm,iproc-pwm.txt | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Documentation/devicetree/bindings/pwm/brcm,iproc-pwm.txt (limited to 'Documentation') diff --git a/Documentation/devicetree/bindings/pwm/brcm,iproc-pwm.txt b/Documentation/devicetree/bindings/pwm/brcm,iproc-pwm.txt new file mode 100644 index 000000000000..21f75bbd6dae --- /dev/null +++ b/Documentation/devicetree/bindings/pwm/brcm,iproc-pwm.txt @@ -0,0 +1,21 @@ +Broadcom iProc PWM controller device tree bindings + +This controller has 4 channels. + +Required Properties : +- compatible: must be "brcm,iproc-pwm" +- reg: physical base address and length of the controller's registers +- clocks: phandle + clock specifier pair for the external clock +- #pwm-cells: Should be 3. See pwm.txt in this directory for a + description of the cells format. + +Refer to clocks/clock-bindings.txt for generic clock consumer properties. + +Example: + +pwm: pwm@18031000 { + compatible = "brcm,iproc-pwm"; + reg = <0x18031000 0x28>; + clocks = <&osc>; + #pwm-cells = <3>; +}; -- cgit v1.2.3-59-g8ed1b From 27e8c8f3512371772b1fdd099466a8c198d05897 Mon Sep 17 00:00:00 2001 From: Linus Walleij Date: Tue, 5 Apr 2016 23:22:29 +0200 Subject: dt-bindings: pwm: Add DT bindings for STMPE PWM This adds fairly standard device tree bindings for the STMPE PWM found in STMPE24xx multi-purpose expanders. Cc: devicetree@vger.kernel.org Acked-by: Rob Herring Signed-off-by: Linus Walleij Signed-off-by: Thierry Reding --- Documentation/devicetree/bindings/pwm/st,stmpe-pwm.txt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Documentation/devicetree/bindings/pwm/st,stmpe-pwm.txt (limited to 'Documentation') diff --git a/Documentation/devicetree/bindings/pwm/st,stmpe-pwm.txt b/Documentation/devicetree/bindings/pwm/st,stmpe-pwm.txt new file mode 100644 index 000000000000..cb209646bf13 --- /dev/null +++ b/Documentation/devicetree/bindings/pwm/st,stmpe-pwm.txt @@ -0,0 +1,18 @@ +== ST STMPE PWM controller == + +This is a PWM block embedded in the ST Microelectronics STMPE +(ST Multi-Purpose Expander) chips. The PWM is registered as a +subdevices of the STMPE MFD device. + +Required properties: +- compatible: should be: + - "st,stmpe-pwm" +- #pwm-cells: should be 2. See pwm.txt in this directory for a description of + the cells format. + +Example: + +pwm0: pwm { + compatible = "st,stmpe-pwm"; + #pwm-cells = <2>; +}; -- cgit v1.2.3-59-g8ed1b From 57dfd17edaf353d0880bea494be05e8cda82ebc0 Mon Sep 17 00:00:00 2001 From: Laxman Dewangan Date: Wed, 22 Jun 2016 17:17:22 +0530 Subject: dt-bindings: pwm: tegra: Add compatible string for Tegra186 Tegra186 has 8 different PWM controllers and each controller has only one output. Earlier SoC generations have 4 PWM outputs per controller. Add a device tree compatible string for Tegra186 to be able to differentiate between the two. Signed-off-by: Laxman Dewangan Signed-off-by: Thierry Reding --- Documentation/devicetree/bindings/pwm/nvidia,tegra20-pwm.txt | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'Documentation') diff --git a/Documentation/devicetree/bindings/pwm/nvidia,tegra20-pwm.txt b/Documentation/devicetree/bindings/pwm/nvidia,tegra20-pwm.txt index c52f03b5032f..b4e73778dda3 100644 --- a/Documentation/devicetree/bindings/pwm/nvidia,tegra20-pwm.txt +++ b/Documentation/devicetree/bindings/pwm/nvidia,tegra20-pwm.txt @@ -1,10 +1,14 @@ Tegra SoC PWFM controller Required properties: -- compatible: For Tegra20, must contain "nvidia,tegra20-pwm". For Tegra30, - must contain "nvidia,tegra30-pwm". Otherwise, must contain - "nvidia,-pwm", plus one of the above, where is tegra114, - tegra124, tegra132, or tegra210. +- compatible: Must be: + - "nvidia,tegra20-pwm": for Tegra20 + - "nvidia,tegra30-pwm", "nvidia,tegra20-pwm": for Tegra30 + - "nvidia,tegra114-pwm", "nvidia,tegra20-pwm": for Tegra114 + - "nvidia,tegra124-pwm", "nvidia,tegra20-pwm": for Tegra124 + - "nvidia,tegra132-pwm", "nvidia,tegra20-pwm": for Tegra132 + - "nvidia,tegra210-pwm", "nvidia,tegra20-pwm": for Tegra210 + - "nvidia,tegra186-pwm": for Tegra186 - reg: physical base address and length of the controller's registers - #pwm-cells: should be 2. See pwm.txt in this directory for a description of the cells format. -- cgit v1.2.3-59-g8ed1b From 396d502c5167da69096c683c4566388ba42d2623 Mon Sep 17 00:00:00 2001 From: Ulrich Hecht Date: Thu, 31 Mar 2016 13:39:15 +0200 Subject: dt-bindings: pwm: Add R-Car H3 device tree bindings Add device tree bindings for the PWM controller found on R-Car H3 SoCs. The controller is compatible with the one found in earlier generations of R-Car SoCs. Signed-off-by: Ulrich Hecht Acked-by: Geert Uytterhoeven Acked-by: Simon Horman Signed-off-by: Thierry Reding --- Documentation/devicetree/bindings/pwm/renesas,pwm-rcar.txt | 1 + 1 file changed, 1 insertion(+) (limited to 'Documentation') diff --git a/Documentation/devicetree/bindings/pwm/renesas,pwm-rcar.txt b/Documentation/devicetree/bindings/pwm/renesas,pwm-rcar.txt index 0822a083fc57..d6de64335022 100644 --- a/Documentation/devicetree/bindings/pwm/renesas,pwm-rcar.txt +++ b/Documentation/devicetree/bindings/pwm/renesas,pwm-rcar.txt @@ -7,6 +7,7 @@ Required Properties: - "renesas,pwm-r8a7790": for R-Car H2 - "renesas,pwm-r8a7791": for R-Car M2-W - "renesas,pwm-r8a7794": for R-Car E2 + - "renesas,pwm-r8a7795": for R-Car H3 - reg: base address and length of the registers block for the PWM. - #pwm-cells: should be 2. See pwm.txt in this directory for a description of the cells format. -- cgit v1.2.3-59-g8ed1b From ff3ac5c3dc2323ba54c3d9ef30ef4942a71b251d Mon Sep 17 00:00:00 2001 From: Trond Myklebust Date: Fri, 24 Jun 2016 10:55:50 -0400 Subject: SUNRPC: Add a server side per-connection limit Allow the user to limit the number of requests serviced through a single connection, to help prevent faster clients from starving slower clients. Signed-off-by: Trond Myklebust Signed-off-by: J. Bruce Fields --- Documentation/kernel-parameters.txt | 6 ++++++ include/linux/sunrpc/svc.h | 1 + include/linux/sunrpc/svc_xprt.h | 1 + net/sunrpc/svc_xprt.c | 39 ++++++++++++++++++++++++++++++++++--- 4 files changed, 44 insertions(+), 3 deletions(-) (limited to 'Documentation') diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 82b42c958d1c..48ba6d2e670a 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt @@ -3832,6 +3832,12 @@ bytes respectively. Such letter suffixes can also be entirely omitted. using these two parameters to set the minimum and maximum port values. + sunrpc.svc_rpc_per_connection_limit= + [NFS,SUNRPC] + Limit the number of requests that the server will + process in parallel from a single connection. + The default value is 0 (no limit). + sunrpc.pool_mode= [NFS] Control how the NFS server code allocates CPUs to diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h index 7ca44fb5b675..7321ae933867 100644 --- a/include/linux/sunrpc/svc.h +++ b/include/linux/sunrpc/svc.h @@ -268,6 +268,7 @@ struct svc_rqst { * cache pages */ #define RQ_VICTIM (5) /* about to be shut down */ #define RQ_BUSY (6) /* request is busy */ +#define RQ_DATA (7) /* request has data */ unsigned long rq_flags; /* flags field */ void * rq_argp; /* decoded arguments */ diff --git a/include/linux/sunrpc/svc_xprt.h b/include/linux/sunrpc/svc_xprt.h index 79ba50856707..ad899ffed3be 100644 --- a/include/linux/sunrpc/svc_xprt.h +++ b/include/linux/sunrpc/svc_xprt.h @@ -69,6 +69,7 @@ struct svc_xprt { struct svc_serv *xpt_server; /* service for transport */ atomic_t xpt_reserved; /* space on outq that is rsvd */ + atomic_t xpt_nr_rqsts; /* Number of requests */ struct mutex xpt_mutex; /* to serialize sending data */ spinlock_t xpt_lock; /* protects sk_deferred * and xpt_auth_cache */ diff --git a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c index e7082a4aeb56..2adc8db6aaf5 100644 --- a/net/sunrpc/svc_xprt.c +++ b/net/sunrpc/svc_xprt.c @@ -21,6 +21,10 @@ #define RPCDBG_FACILITY RPCDBG_SVCXPRT +static unsigned int svc_rpc_per_connection_limit __read_mostly; +module_param(svc_rpc_per_connection_limit, uint, 0644); + + static struct svc_deferred_req *svc_deferred_dequeue(struct svc_xprt *xprt); static int svc_deferred_recv(struct svc_rqst *rqstp); static struct cache_deferred_req *svc_defer(struct cache_req *req); @@ -329,12 +333,41 @@ char *svc_print_addr(struct svc_rqst *rqstp, char *buf, size_t len) } EXPORT_SYMBOL_GPL(svc_print_addr); +static bool svc_xprt_slots_in_range(struct svc_xprt *xprt) +{ + unsigned int limit = svc_rpc_per_connection_limit; + int nrqsts = atomic_read(&xprt->xpt_nr_rqsts); + + return limit == 0 || (nrqsts >= 0 && nrqsts < limit); +} + +static bool svc_xprt_reserve_slot(struct svc_rqst *rqstp, struct svc_xprt *xprt) +{ + if (!test_bit(RQ_DATA, &rqstp->rq_flags)) { + if (!svc_xprt_slots_in_range(xprt)) + return false; + atomic_inc(&xprt->xpt_nr_rqsts); + set_bit(RQ_DATA, &rqstp->rq_flags); + } + return true; +} + +static void svc_xprt_release_slot(struct svc_rqst *rqstp) +{ + struct svc_xprt *xprt = rqstp->rq_xprt; + if (test_and_clear_bit(RQ_DATA, &rqstp->rq_flags)) { + atomic_dec(&xprt->xpt_nr_rqsts); + svc_xprt_enqueue(xprt); + } +} + static bool svc_xprt_has_something_to_do(struct svc_xprt *xprt) { if (xprt->xpt_flags & ((1<xpt_flags & ((1<xpt_ops->xpo_has_wspace(xprt)) + if (xprt->xpt_ops->xpo_has_wspace(xprt) && + svc_xprt_slots_in_range(xprt)) return true; trace_svc_xprt_no_write_space(xprt); return false; @@ -516,8 +549,8 @@ static void svc_xprt_release(struct svc_rqst *rqstp) rqstp->rq_res.head[0].iov_len = 0; svc_reserve(rqstp, 0); + svc_xprt_release_slot(rqstp); rqstp->rq_xprt = NULL; - svc_xprt_put(xprt); } @@ -785,7 +818,7 @@ static int svc_handle_xprt(struct svc_rqst *rqstp, struct svc_xprt *xprt) svc_add_new_temp_xprt(serv, newxpt); else module_put(xprt->xpt_class->xcl_owner); - } else { + } else if (svc_xprt_reserve_slot(rqstp, xprt)) { /* XPT_DATA|XPT_DEFERRED case: */ dprintk("svc: server %p, pool %u, transport %p, inuse=%d\n", rqstp, rqstp->rq_pool->sp_id, xprt, -- cgit v1.2.3-59-g8ed1b From 76a10b86785c5e3fc49bcee355502d035b07e47a Mon Sep 17 00:00:00 2001 From: Eric Auger Date: Fri, 22 Jul 2016 16:20:37 +0000 Subject: KVM: api: Pass the devid in the msi routing entry MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On ARM, the MSI msg (address and data) comes along with out-of-band device ID information. The device ID encodes the device that writes the MSI msg. Let's convey the device id in kvm_irq_routing_msi and use KVM_MSI_VALID_DEVID flag value in kvm_irq_routing_entry to indicate the msi devid is populated. Signed-off-by: Eric Auger Reviewed-by: Andre Przywara Acked-by: Radim Krčmář Signed-off-by: Marc Zyngier --- Documentation/virtual/kvm/api.txt | 19 +++++++++++++++++-- include/uapi/linux/kvm.h | 5 ++++- 2 files changed, 21 insertions(+), 3 deletions(-) (limited to 'Documentation') diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt index 07049eadb124..415cde1647e9 100644 --- a/Documentation/virtual/kvm/api.txt +++ b/Documentation/virtual/kvm/api.txt @@ -1468,7 +1468,11 @@ struct kvm_irq_routing_entry { #define KVM_IRQ_ROUTING_S390_ADAPTER 3 #define KVM_IRQ_ROUTING_HV_SINT 4 -No flags are specified so far, the corresponding field must be set to zero. +flags: +- KVM_MSI_VALID_DEVID: used along with KVM_IRQ_ROUTING_MSI + routing entry type, specifies that the devid field contains + a valid value. +- zero otherwise struct kvm_irq_routing_irqchip { __u32 irqchip; @@ -1479,9 +1483,20 @@ struct kvm_irq_routing_msi { __u32 address_lo; __u32 address_hi; __u32 data; - __u32 pad; + union { + __u32 pad; + __u32 devid; + }; }; +devid: If KVM_MSI_VALID_DEVID is set, contains a unique device identifier + for the device that wrote the MSI message. + For PCI, this is usually a BFD identifier in the lower 16 bits. + +The per-VM KVM_CAP_MSI_DEVID capability advertises the requirement to +provide the device ID. If this capability is not set, userland cannot +rely on the kernel to allow the KVM_MSI_VALID_DEVID flag being set. + struct kvm_irq_routing_s390_adapter { __u64 ind_addr; __u64 summary_addr; diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h index d8c4c324cfae..eb2220895c6e 100644 --- a/include/uapi/linux/kvm.h +++ b/include/uapi/linux/kvm.h @@ -879,7 +879,10 @@ struct kvm_irq_routing_msi { __u32 address_lo; __u32 address_hi; __u32 data; - __u32 pad; + union { + __u32 pad; + __u32 devid; + }; }; struct kvm_irq_routing_s390_adapter { -- cgit v1.2.3-59-g8ed1b From 180ae7b1182344ca617d8b5200306b02a6b5075d Mon Sep 17 00:00:00 2001 From: Eric Auger Date: Fri, 22 Jul 2016 16:20:41 +0000 Subject: KVM: arm/arm64: Enable irqchip routing This patch adds compilation and link against irqchip. Main motivation behind using irqchip code is to enable MSI routing code. In the future irqchip routing may also be useful when targeting multiple irqchips. Routing standard callbacks now are implemented in vgic-irqfd: - kvm_set_routing_entry - kvm_set_irq - kvm_set_msi They only are supported with new_vgic code. Both HAVE_KVM_IRQCHIP and HAVE_KVM_IRQ_ROUTING are defined. KVM_CAP_IRQ_ROUTING is advertised and KVM_SET_GSI_ROUTING is allowed. So from now on IRQCHIP routing is enabled and a routing table entry must exist for irqfd injection to succeed for a given SPI. This patch builds a default flat irqchip routing table (gsi=irqchip.pin) covering all the VGIC SPI indexes. This routing table is overwritten by the first first user-space call to KVM_SET_GSI_ROUTING ioctl. MSI routing setup is not yet allowed. Signed-off-by: Eric Auger Signed-off-by: Marc Zyngier --- Documentation/virtual/kvm/api.txt | 12 +++-- arch/arm/kvm/Kconfig | 2 + arch/arm/kvm/Makefile | 1 + arch/arm/kvm/irq.h | 19 ++++++++ arch/arm64/kvm/Kconfig | 2 + arch/arm64/kvm/Makefile | 1 + arch/arm64/kvm/irq.h | 19 ++++++++ include/kvm/arm_vgic.h | 7 +++ virt/kvm/arm/vgic/vgic-init.c | 4 ++ virt/kvm/arm/vgic/vgic-irqfd.c | 100 +++++++++++++++++++++++++++++++------- virt/kvm/arm/vgic/vgic.c | 7 --- 11 files changed, 145 insertions(+), 29 deletions(-) create mode 100644 arch/arm/kvm/irq.h create mode 100644 arch/arm64/kvm/irq.h (limited to 'Documentation') diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt index 415cde1647e9..7e5f9afcc693 100644 --- a/Documentation/virtual/kvm/api.txt +++ b/Documentation/virtual/kvm/api.txt @@ -1433,13 +1433,16 @@ KVM_ASSIGN_DEV_IRQ. Partial deassignment of host or guest IRQ is allowed. 4.52 KVM_SET_GSI_ROUTING Capability: KVM_CAP_IRQ_ROUTING -Architectures: x86 s390 +Architectures: x86 s390 arm arm64 Type: vm ioctl Parameters: struct kvm_irq_routing (in) Returns: 0 on success, -1 on error Sets the GSI routing table entries, overwriting any previously set entries. +On arm/arm64, GSI routing has the following limitation: +- GSI routing does not apply to KVM_IRQ_LINE but only to KVM_IRQFD. + struct kvm_irq_routing { __u32 nr; __u32 flags; @@ -2374,9 +2377,10 @@ Note that closing the resamplefd is not sufficient to disable the irqfd. The KVM_IRQFD_FLAG_RESAMPLE is only necessary on assignment and need not be specified with KVM_IRQFD_FLAG_DEASSIGN. -On ARM/ARM64, the gsi field in the kvm_irqfd struct specifies the Shared -Peripheral Interrupt (SPI) index, such that the GIC interrupt ID is -given by gsi + 32. +On arm/arm64, gsi routing being supported, the following can happen: +- in case no routing entry is associated to this gsi, injection fails +- in case the gsi is associated to an irqchip routing entry, + irqchip.pin + 32 corresponds to the injected SPI ID. 4.76 KVM_PPC_ALLOCATE_HTAB diff --git a/arch/arm/kvm/Kconfig b/arch/arm/kvm/Kconfig index 95a000515e43..3e1cd0452d67 100644 --- a/arch/arm/kvm/Kconfig +++ b/arch/arm/kvm/Kconfig @@ -32,6 +32,8 @@ config KVM select KVM_VFIO select HAVE_KVM_EVENTFD select HAVE_KVM_IRQFD + select HAVE_KVM_IRQCHIP + select HAVE_KVM_IRQ_ROUTING depends on ARM_VIRT_EXT && ARM_LPAE && ARM_ARCH_TIMER ---help--- Support hosting virtualized guest machines. diff --git a/arch/arm/kvm/Makefile b/arch/arm/kvm/Makefile index 5e28df80dca7..10d77a66cad5 100644 --- a/arch/arm/kvm/Makefile +++ b/arch/arm/kvm/Makefile @@ -29,4 +29,5 @@ obj-y += $(KVM)/arm/vgic/vgic-v2.o obj-y += $(KVM)/arm/vgic/vgic-mmio.o obj-y += $(KVM)/arm/vgic/vgic-mmio-v2.o obj-y += $(KVM)/arm/vgic/vgic-kvm-device.o +obj-y += $(KVM)/irqchip.o obj-y += $(KVM)/arm/arch_timer.o diff --git a/arch/arm/kvm/irq.h b/arch/arm/kvm/irq.h new file mode 100644 index 000000000000..b74099b905fd --- /dev/null +++ b/arch/arm/kvm/irq.h @@ -0,0 +1,19 @@ +/* + * irq.h: in kernel interrupt controller related definitions + * Copyright (c) 2016 Red Hat, Inc. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This header is included by irqchip.c. However, on ARM, interrupt + * controller declarations are located in include/kvm/arm_vgic.h since + * they are mostly shared between arm and arm64. + */ + +#ifndef __IRQ_H +#define __IRQ_H + +#include + +#endif diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig index 9d2eff0b3ad3..9c9edc98d271 100644 --- a/arch/arm64/kvm/Kconfig +++ b/arch/arm64/kvm/Kconfig @@ -37,6 +37,8 @@ config KVM select KVM_ARM_VGIC_V3 select KVM_ARM_PMU if HW_PERF_EVENTS select HAVE_KVM_MSI + select HAVE_KVM_IRQCHIP + select HAVE_KVM_IRQ_ROUTING ---help--- Support hosting virtualized guest machines. We don't support KVM with 16K page tables yet, due to the multiple diff --git a/arch/arm64/kvm/Makefile b/arch/arm64/kvm/Makefile index a5b96642a9cb..695eb3c7ef41 100644 --- a/arch/arm64/kvm/Makefile +++ b/arch/arm64/kvm/Makefile @@ -30,5 +30,6 @@ kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-mmio-v2.o kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-mmio-v3.o kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-kvm-device.o kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-its.o +kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/irqchip.o kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/arch_timer.o kvm-$(CONFIG_KVM_ARM_PMU) += $(KVM)/arm/pmu.o diff --git a/arch/arm64/kvm/irq.h b/arch/arm64/kvm/irq.h new file mode 100644 index 000000000000..b74099b905fd --- /dev/null +++ b/arch/arm64/kvm/irq.h @@ -0,0 +1,19 @@ +/* + * irq.h: in kernel interrupt controller related definitions + * Copyright (c) 2016 Red Hat, Inc. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This header is included by irqchip.c. However, on ARM, interrupt + * controller declarations are located in include/kvm/arm_vgic.h since + * they are mostly shared between arm and arm64. + */ + +#ifndef __IRQ_H +#define __IRQ_H + +#include + +#endif diff --git a/include/kvm/arm_vgic.h b/include/kvm/arm_vgic.h index 540da5149ba7..19b698ef3336 100644 --- a/include/kvm/arm_vgic.h +++ b/include/kvm/arm_vgic.h @@ -34,6 +34,7 @@ #define VGIC_MAX_SPI 1019 #define VGIC_MAX_RESERVED 1023 #define VGIC_MIN_LPI 8192 +#define KVM_IRQCHIP_NUM_PINS (1020 - 32) enum vgic_type { VGIC_V2, /* Good ol' GICv2 */ @@ -314,4 +315,10 @@ static inline int kvm_vgic_get_max_vcpus(void) int kvm_send_userspace_msi(struct kvm *kvm, struct kvm_msi *msi); +/** + * kvm_vgic_setup_default_irq_routing: + * Setup a default flat gsi routing table mapping all SPIs + */ +int kvm_vgic_setup_default_irq_routing(struct kvm *kvm); + #endif /* __KVM_ARM_VGIC_H */ diff --git a/virt/kvm/arm/vgic/vgic-init.c b/virt/kvm/arm/vgic/vgic-init.c index 01a60dcd05d6..1aba785cd498 100644 --- a/virt/kvm/arm/vgic/vgic-init.c +++ b/virt/kvm/arm/vgic/vgic-init.c @@ -264,6 +264,10 @@ int vgic_init(struct kvm *kvm) kvm_for_each_vcpu(i, vcpu, kvm) kvm_vgic_vcpu_init(vcpu); + ret = kvm_vgic_setup_default_irq_routing(kvm); + if (ret) + goto out; + dist->initialized = true; out: return ret; diff --git a/virt/kvm/arm/vgic/vgic-irqfd.c b/virt/kvm/arm/vgic/vgic-irqfd.c index c675513270bb..6e84d530d9f7 100644 --- a/virt/kvm/arm/vgic/vgic-irqfd.c +++ b/virt/kvm/arm/vgic/vgic-irqfd.c @@ -17,36 +17,100 @@ #include #include #include +#include +#include "vgic.h" -int kvm_irq_map_gsi(struct kvm *kvm, - struct kvm_kernel_irq_routing_entry *entries, - int gsi) +/** + * vgic_irqfd_set_irq: inject the IRQ corresponding to the + * irqchip routing entry + * + * This is the entry point for irqfd IRQ injection + */ +static int vgic_irqfd_set_irq(struct kvm_kernel_irq_routing_entry *e, + struct kvm *kvm, int irq_source_id, + int level, bool line_status) { - return 0; + unsigned int spi_id = e->irqchip.pin + VGIC_NR_PRIVATE_IRQS; + + if (!vgic_valid_spi(kvm, spi_id)) + return -EINVAL; + return kvm_vgic_inject_irq(kvm, 0, spi_id, level); } -int kvm_irq_map_chip_pin(struct kvm *kvm, unsigned int irqchip, - unsigned int pin) +/** + * kvm_set_routing_entry: populate a kvm routing entry + * from a user routing entry + * + * @e: kvm kernel routing entry handle + * @ue: user api routing entry handle + * return 0 on success, -EINVAL on errors. + */ +int kvm_set_routing_entry(struct kvm_kernel_irq_routing_entry *e, + const struct kvm_irq_routing_entry *ue) { - return pin; + int r = -EINVAL; + + switch (ue->type) { + case KVM_IRQ_ROUTING_IRQCHIP: + e->set = vgic_irqfd_set_irq; + e->irqchip.irqchip = ue->u.irqchip.irqchip; + e->irqchip.pin = ue->u.irqchip.pin; + if ((e->irqchip.pin >= KVM_IRQCHIP_NUM_PINS) || + (e->irqchip.irqchip >= KVM_NR_IRQCHIPS)) + goto out; + break; + default: + goto out; + } + r = 0; +out: + return r; } -int kvm_set_irq(struct kvm *kvm, int irq_source_id, - u32 irq, int level, bool line_status) +/** + * kvm_set_msi: inject the MSI corresponding to the + * MSI routing entry + * + * This is the entry point for irqfd MSI injection + * and userspace MSI injection. + */ +int kvm_set_msi(struct kvm_kernel_irq_routing_entry *e, + struct kvm *kvm, int irq_source_id, + int level, bool line_status) { - unsigned int spi = irq + VGIC_NR_PRIVATE_IRQS; + struct kvm_msi msi; - trace_kvm_set_irq(irq, level, irq_source_id); + msi.address_lo = e->msi.address_lo; + msi.address_hi = e->msi.address_hi; + msi.data = e->msi.data; + msi.flags = e->msi.flags; + msi.devid = e->msi.devid; - BUG_ON(!vgic_initialized(kvm)); + if (!vgic_has_its(kvm)) + return -ENODEV; - return kvm_vgic_inject_irq(kvm, 0, spi, level); + return vgic_its_inject_msi(kvm, &msi); } -/* MSI not implemented yet */ -int kvm_set_msi(struct kvm_kernel_irq_routing_entry *e, - struct kvm *kvm, int irq_source_id, - int level, bool line_status) +int kvm_vgic_setup_default_irq_routing(struct kvm *kvm) { - return 0; + struct kvm_irq_routing_entry *entries; + struct vgic_dist *dist = &kvm->arch.vgic; + u32 nr = dist->nr_spis; + int i, ret; + + entries = kcalloc(nr, sizeof(struct kvm_kernel_irq_routing_entry), + GFP_KERNEL); + if (!entries) + return -ENOMEM; + + for (i = 0; i < nr; i++) { + entries[i].gsi = i; + entries[i].type = KVM_IRQ_ROUTING_IRQCHIP; + entries[i].u.irqchip.irqchip = 0; + entries[i].u.irqchip.pin = i; + } + ret = kvm_set_irq_routing(kvm, entries, nr, 0); + kfree(entries); + return ret; } diff --git a/virt/kvm/arm/vgic/vgic.c b/virt/kvm/arm/vgic/vgic.c index 39f3358c6d91..e7aeac719e09 100644 --- a/virt/kvm/arm/vgic/vgic.c +++ b/virt/kvm/arm/vgic/vgic.c @@ -711,10 +711,3 @@ bool kvm_vgic_map_is_active(struct kvm_vcpu *vcpu, unsigned int virt_irq) return map_is_active; } -int kvm_send_userspace_msi(struct kvm *kvm, struct kvm_msi *msi) -{ - if (vgic_has_its(kvm)) - return vgic_its_inject_msi(kvm, msi); - else - return -ENODEV; -} -- cgit v1.2.3-59-g8ed1b From 995a0ee9809b6948bb7bfea77f129fe1d5157cc1 Mon Sep 17 00:00:00 2001 From: Eric Auger Date: Fri, 22 Jul 2016 16:20:42 +0000 Subject: KVM: arm/arm64: Enable MSI routing Up to now, only irqchip routing entries could be set. This patch adds the capability to insert MSI routing entries. For ARM64, let's also increase KVM_MAX_IRQ_ROUTES to 4096: this include SPI irqchip routes plus MSI routes. In the future this might be extended. Signed-off-by: Eric Auger Reviewed-by: Andre Przywara Signed-off-by: Marc Zyngier --- Documentation/virtual/kvm/api.txt | 3 +++ include/linux/kvm_host.h | 2 ++ virt/kvm/arm/vgic/vgic-irqfd.c | 8 ++++++++ virt/kvm/irqchip.c | 24 +++++++++++++++--------- 4 files changed, 28 insertions(+), 9 deletions(-) (limited to 'Documentation') diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt index 7e5f9afcc693..7a04216d7278 100644 --- a/Documentation/virtual/kvm/api.txt +++ b/Documentation/virtual/kvm/api.txt @@ -2381,6 +2381,9 @@ On arm/arm64, gsi routing being supported, the following can happen: - in case no routing entry is associated to this gsi, injection fails - in case the gsi is associated to an irqchip routing entry, irqchip.pin + 32 corresponds to the injected SPI ID. +- in case the gsi is associated to an MSI routing entry, the MSI + message and device ID are translated into an LPI (support restricted + to GICv3 ITS in-kernel emulation). 4.76 KVM_PPC_ALLOCATE_HTAB diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index a7eb5c48251e..a318c3b21608 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -1048,6 +1048,8 @@ static inline int mmu_notifier_retry(struct kvm *kvm, unsigned long mmu_seq) #ifdef CONFIG_S390 #define KVM_MAX_IRQ_ROUTES 4096 //FIXME: we can have more than that... +#elif defined(CONFIG_ARM64) +#define KVM_MAX_IRQ_ROUTES 4096 #else #define KVM_MAX_IRQ_ROUTES 1024 #endif diff --git a/virt/kvm/arm/vgic/vgic-irqfd.c b/virt/kvm/arm/vgic/vgic-irqfd.c index 6e84d530d9f7..683a589711b0 100644 --- a/virt/kvm/arm/vgic/vgic-irqfd.c +++ b/virt/kvm/arm/vgic/vgic-irqfd.c @@ -59,6 +59,14 @@ int kvm_set_routing_entry(struct kvm_kernel_irq_routing_entry *e, (e->irqchip.irqchip >= KVM_NR_IRQCHIPS)) goto out; break; + case KVM_IRQ_ROUTING_MSI: + e->set = kvm_set_msi; + e->msi.address_lo = ue->u.msi.address_lo; + e->msi.address_hi = ue->u.msi.address_hi; + e->msi.data = ue->u.msi.data; + e->msi.flags = ue->flags; + e->msi.devid = ue->u.msi.devid; + break; default: goto out; } diff --git a/virt/kvm/irqchip.c b/virt/kvm/irqchip.c index 0c000546aedc..c6202199e505 100644 --- a/virt/kvm/irqchip.c +++ b/virt/kvm/irqchip.c @@ -178,6 +178,7 @@ int kvm_set_irq_routing(struct kvm *kvm, unsigned flags) { struct kvm_irq_routing_table *new, *old; + struct kvm_kernel_irq_routing_entry *e; u32 i, j, nr_rt_entries = 0; int r; @@ -201,23 +202,25 @@ int kvm_set_irq_routing(struct kvm *kvm, new->chip[i][j] = -1; for (i = 0; i < nr; ++i) { - struct kvm_kernel_irq_routing_entry *e; - r = -ENOMEM; e = kzalloc(sizeof(*e), GFP_KERNEL); if (!e) goto out; r = -EINVAL; - if (ue->flags) { - kfree(e); - goto out; + switch (ue->type) { + case KVM_IRQ_ROUTING_MSI: + if (ue->flags & ~KVM_MSI_VALID_DEVID) + goto free_entry; + break; + default: + if (ue->flags) + goto free_entry; + break; } r = setup_routing_entry(new, e, ue); - if (r) { - kfree(e); - goto out; - } + if (r) + goto free_entry; ++ue; } @@ -234,7 +237,10 @@ int kvm_set_irq_routing(struct kvm *kvm, new = old; r = 0; + goto out; +free_entry: + kfree(e); out: free_irq_routing_table(new); -- cgit v1.2.3-59-g8ed1b From 9e60f50b4a79ae2df791d89d08cf2b78ad7629bd Mon Sep 17 00:00:00 2001 From: Brian Norris Date: Fri, 15 Jul 2016 16:28:43 -0700 Subject: dt-bindings: pwm: Add binding for ChromeOS EC PWM The ChromeOS Embedded Controller can support controlling its attached PWMs via its host-command interface. The number of supported PWMs varies on a per-board basis, but we can autodetect this by checking the error codes, so we don't need an extra property for this. And because the EC only allows specifying the duty cycle and not the period, we don't specify the period via pwm-cells, and instead have only support for one cell -- to specify the index. Signed-off-by: Brian Norris Acked-by: Rob Herring Signed-off-by: Thierry Reding --- .../devicetree/bindings/pwm/google,cros-ec-pwm.txt | 23 ++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Documentation/devicetree/bindings/pwm/google,cros-ec-pwm.txt (limited to 'Documentation') diff --git a/Documentation/devicetree/bindings/pwm/google,cros-ec-pwm.txt b/Documentation/devicetree/bindings/pwm/google,cros-ec-pwm.txt new file mode 100644 index 000000000000..472bd46ab5a4 --- /dev/null +++ b/Documentation/devicetree/bindings/pwm/google,cros-ec-pwm.txt @@ -0,0 +1,23 @@ +* PWM controlled by ChromeOS EC + +Google's ChromeOS EC PWM is a simple PWM attached to the Embedded Controller +(EC) and controlled via a host-command interface. + +An EC PWM node should be only found as a sub-node of the EC node (see +Documentation/devicetree/bindings/mfd/cros-ec.txt). + +Required properties: +- compatible: Must contain "google,cros-ec-pwm" +- #pwm-cells: Should be 1. The cell specifies the PWM index. + +Example: + cros-ec@0 { + compatible = "google,cros-ec-spi"; + + ... + + cros_ec_pwm: ec-pwm { + compatible = "google,cros-ec-pwm"; + #pwm-cells = <1>; + }; + }; -- cgit v1.2.3-59-g8ed1b From 58fd822b2e344edae6b4dbc09b19bd0c4a2f8f60 Mon Sep 17 00:00:00 2001 From: Boris Brezillon Date: Tue, 14 Jun 2016 11:13:22 +0200 Subject: regulator: pwm: Document pwm-dutycycle-unit and pwm-dutycycle-range Document the pwm-dutycycle-unit and pwm-dutycycle-range properties. Signed-off-by: Boris Brezillon Acked-by: Brian Norris Acked-by: Rob Herring Acked-by: Mark Brown Signed-off-by: Thierry Reding --- .../devicetree/bindings/regulator/pwm-regulator.txt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'Documentation') diff --git a/Documentation/devicetree/bindings/regulator/pwm-regulator.txt b/Documentation/devicetree/bindings/regulator/pwm-regulator.txt index dd6f59cf1455..3aeba9f86ed8 100644 --- a/Documentation/devicetree/bindings/regulator/pwm-regulator.txt +++ b/Documentation/devicetree/bindings/regulator/pwm-regulator.txt @@ -34,6 +34,18 @@ Only required for Voltage Table Mode: First cell is voltage in microvolts (uV) Second cell is duty-cycle in percent (%) +Optional properties for Continuous mode: +- pwm-dutycycle-unit: Integer value encoding the duty cycle unit. If not + defined, <100> is assumed, meaning that + pwm-dutycycle-range contains values expressed in + percent. + +- pwm-dutycycle-range: Should contain 2 entries. The first entry is encoding + the dutycycle for regulator-min-microvolt and the + second one the dutycycle for regulator-max-microvolt. + Duty cycle values are expressed in pwm-dutycycle-unit. + If not defined, <0 100> is assumed. + NB: To be clear, if voltage-table is provided, then the device will be used in Voltage Table Mode. If no voltage-table is provided, then the device will be used in Continuous Voltage Mode. @@ -53,6 +65,13 @@ Continuous Voltage With Enable GPIO Example: regulator-min-microvolt = <1016000>; regulator-max-microvolt = <1114000>; regulator-name = "vdd_logic"; + /* unit == per-mille */ + pwm-dutycycle-unit = <1000>; + /* + * Inverted PWM logic, and the duty cycle range is limited + * to 30%-70%. + */ + pwm-dutycycle-range <700 300>; /* */ }; Voltage Table Example: -- cgit v1.2.3-59-g8ed1b From b8612e517c3c9809e1200b72c474dbfd969e5a83 Mon Sep 17 00:00:00 2001 From: Ben Hutchings Date: Thu, 28 Apr 2016 09:24:05 +0930 Subject: Documentation/module-signing.txt: Note need for version info if reusing a key Signing a module should only make it trusted by the specific kernel it was built for, not anything else. If a module signing key is used for multiple ABI-incompatible kernels, the modules need to include enough version information to distinguish them. Signed-off-by: Ben Hutchings Cc: stable@vger.kernel.org Signed-off-by: Rusty Russell --- Documentation/module-signing.txt | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'Documentation') diff --git a/Documentation/module-signing.txt b/Documentation/module-signing.txt index 696d5caf4fd8..f0e3361db20c 100644 --- a/Documentation/module-signing.txt +++ b/Documentation/module-signing.txt @@ -271,3 +271,9 @@ Since the private key is used to sign modules, viruses and malware could use the private key to sign modules and compromise the operating system. The private key must be either destroyed or moved to a secure location and not kept in the root node of the kernel source tree. + +If you use the same private key to sign modules for multiple kernel +configurations, you must ensure that the module version information is +sufficient to prevent loading a module into a different kernel. Either +set CONFIG_MODVERSIONS=y or ensure that each configuration has a different +kernel release string by changing EXTRAVERSION or CONFIG_LOCALVERSION. -- cgit v1.2.3-59-g8ed1b From d205a2185938e38c8667405dc44cd6221c71682e Mon Sep 17 00:00:00 2001 From: Uwe Kleine-König Date: Wed, 27 Jul 2016 14:36:26 -0700 Subject: Input: rotary_encoder - support binary encoding of states MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It's not advisable to use this encoding, but to support existing devices add support for this to the driver. Signed-off-by: Uwe Kleine-König Acked-by: Rob Herring Signed-off-by: Dmitry Torokhov --- .../devicetree/bindings/input/rotary-encoder.txt | 4 ++++ drivers/input/misc/rotary_encoder.c | 23 +++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) (limited to 'Documentation') diff --git a/Documentation/devicetree/bindings/input/rotary-encoder.txt b/Documentation/devicetree/bindings/input/rotary-encoder.txt index 6c9f0c8a846c..e85ce3dea480 100644 --- a/Documentation/devicetree/bindings/input/rotary-encoder.txt +++ b/Documentation/devicetree/bindings/input/rotary-encoder.txt @@ -20,6 +20,8 @@ Optional properties: 2: Half-period mode 4: Quarter-period mode - wakeup-source: Boolean, rotary encoder can wake up the system. +- rotary-encoder,encoding: String, the method used to encode steps. + Supported are "gray" (the default and more common) and "binary". Deprecated properties: - rotary-encoder,half-period: Makes the driver work on half-period mode. @@ -34,6 +36,7 @@ Example: compatible = "rotary-encoder"; gpios = <&gpio 19 1>, <&gpio 20 0>; /* GPIO19 is inverted */ linux,axis = <0>; /* REL_X */ + rotary-encoder,encoding = "gray"; rotary-encoder,relative-axis; }; @@ -42,5 +45,6 @@ Example: gpios = <&gpio 21 0>, <&gpio 22 0>; linux,axis = <1>; /* ABS_Y */ rotary-encoder,steps = <24>; + rotary-encoder,encoding = "binary"; rotary-encoder,rollover; }; diff --git a/drivers/input/misc/rotary_encoder.c b/drivers/input/misc/rotary_encoder.c index c7fc8d4fb080..1588aecafff7 100644 --- a/drivers/input/misc/rotary_encoder.c +++ b/drivers/input/misc/rotary_encoder.c @@ -28,6 +28,11 @@ #define DRV_NAME "rotary-encoder" +enum rotary_encoder_encoding { + ROTENC_GRAY, + ROTENC_BINARY, +}; + struct rotary_encoder { struct input_dev *input; @@ -37,6 +42,7 @@ struct rotary_encoder { u32 axis; bool relative_axis; bool rollover; + enum rotary_encoder_encoding encoding; unsigned int pos; @@ -57,8 +63,9 @@ static unsigned int rotary_encoder_get_state(struct rotary_encoder *encoder) for (i = 0; i < encoder->gpios->ndescs; ++i) { int val = gpiod_get_value_cansleep(encoder->gpios->desc[i]); + /* convert from gray encoding to normal */ - if (ret & 1) + if (encoder->encoding == ROTENC_GRAY && ret & 1) val = !val; ret = ret << 1 | val; @@ -213,6 +220,20 @@ static int rotary_encoder_probe(struct platform_device *pdev) encoder->rollover = device_property_read_bool(dev, "rotary-encoder,rollover"); + if (!device_property_present(dev, "rotary-encoder,encoding") || + !device_property_match_string(dev, "rotary-encoder,encoding", + "gray")) { + dev_info(dev, "gray"); + encoder->encoding = ROTENC_GRAY; + } else if (!device_property_match_string(dev, "rotary-encoder,encoding", + "binary")) { + dev_info(dev, "binary"); + encoder->encoding = ROTENC_BINARY; + } else { + dev_err(dev, "unknown encoding setting\n"); + return -EINVAL; + } + device_property_read_u32(dev, "linux,axis", &encoder->axis); encoder->relative_axis = device_property_read_bool(dev, "rotary-encoder,relative-axis"); -- cgit v1.2.3-59-g8ed1b From 43f71d93a0cb342f0c918fba3f6abb7661e40ad2 Mon Sep 17 00:00:00 2001 From: Mauro Carvalho Chehab Date: Wed, 27 Jul 2016 06:32:31 -0300 Subject: doc-rst: Remove the media docbook Now that all media documentation was converted to Sphinx, we should get rid of the old DocBook one, as we don't want people to submit patches against the old stuff. Signed-off-by: Mauro Carvalho Chehab Acked-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab --- Documentation/DocBook/Makefile | 10 +- Documentation/DocBook/media/.gitignore | 1 - Documentation/DocBook/media/Makefile | 427 -- Documentation/DocBook/media/bayer.png.b64 | 171 - Documentation/DocBook/media/constraints.png.b64 | 59 - Documentation/DocBook/media/crop.gif.b64 | 105 - Documentation/DocBook/media/dvb/.gitignore | 1 - Documentation/DocBook/media/dvb/audio.xml | 1314 ----- Documentation/DocBook/media/dvb/ca.xml | 582 --- Documentation/DocBook/media/dvb/demux.xml | 1162 ----- Documentation/DocBook/media/dvb/dvbapi.xml | 156 - Documentation/DocBook/media/dvb/dvbproperty.xml | 1680 ------ Documentation/DocBook/media/dvb/dvbstb.pdf | Bin 1881 -> 0 bytes Documentation/DocBook/media/dvb/examples.xml | 367 -- .../media/dvb/fe-diseqc-recv-slave-reply.xml | 78 - .../DocBook/media/dvb/fe-diseqc-reset-overload.xml | 51 - .../DocBook/media/dvb/fe-diseqc-send-burst.xml | 89 - .../media/dvb/fe-diseqc-send-master-cmd.xml | 72 - .../media/dvb/fe-enable-high-lnb-voltage.xml | 61 - Documentation/DocBook/media/dvb/fe-get-info.xml | 266 - .../DocBook/media/dvb/fe-get-property.xml | 81 - Documentation/DocBook/media/dvb/fe-read-status.xml | 107 - .../media/dvb/fe-set-frontend-tune-mode.xml | 64 - Documentation/DocBook/media/dvb/fe-set-tone.xml | 91 - Documentation/DocBook/media/dvb/fe-set-voltage.xml | 69 - Documentation/DocBook/media/dvb/frontend.xml | 269 - .../DocBook/media/dvb/frontend_legacy_api.xml | 654 --- Documentation/DocBook/media/dvb/intro.xml | 211 - Documentation/DocBook/media/dvb/net.xml | 238 - Documentation/DocBook/media/dvb/video.xml | 1968 ------- Documentation/DocBook/media/dvbstb.png.b64 | 398 -- Documentation/DocBook/media/fieldseq_bt.gif.b64 | 447 -- Documentation/DocBook/media/fieldseq_tb.gif.b64 | 445 -- Documentation/DocBook/media/nv12mt.gif.b64 | 37 - Documentation/DocBook/media/nv12mt_example.gif.b64 | 121 - Documentation/DocBook/media/pipeline.png.b64 | 213 - Documentation/DocBook/media/selection.png.b64 | 206 - .../DocBook/media/typical_media_device.svg | 28 - Documentation/DocBook/media/v4l/.gitignore | 1 - Documentation/DocBook/media/v4l/biblio.xml | 381 -- Documentation/DocBook/media/v4l/capture.c.xml | 659 --- Documentation/DocBook/media/v4l/cec-api.xml | 75 - Documentation/DocBook/media/v4l/cec-func-close.xml | 64 - Documentation/DocBook/media/v4l/cec-func-ioctl.xml | 78 - Documentation/DocBook/media/v4l/cec-func-open.xml | 104 - Documentation/DocBook/media/v4l/cec-func-poll.xml | 94 - .../DocBook/media/v4l/cec-ioc-adap-g-caps.xml | 151 - .../DocBook/media/v4l/cec-ioc-adap-g-log-addrs.xml | 329 -- .../DocBook/media/v4l/cec-ioc-adap-g-phys-addr.xml | 86 - .../DocBook/media/v4l/cec-ioc-dqevent.xml | 202 - Documentation/DocBook/media/v4l/cec-ioc-g-mode.xml | 255 - .../DocBook/media/v4l/cec-ioc-receive.xml | 274 - Documentation/DocBook/media/v4l/common.xml | 1102 ---- Documentation/DocBook/media/v4l/compat.xml | 2723 ---------- Documentation/DocBook/media/v4l/controls.xml | 5505 -------------------- Documentation/DocBook/media/v4l/crop.pdf | Bin 5846 -> 0 bytes Documentation/DocBook/media/v4l/dev-capture.xml | 110 - Documentation/DocBook/media/v4l/dev-codec.xml | 27 - Documentation/DocBook/media/v4l/dev-effect.xml | 17 - Documentation/DocBook/media/v4l/dev-event.xml | 43 - Documentation/DocBook/media/v4l/dev-osd.xml | 149 - Documentation/DocBook/media/v4l/dev-output.xml | 106 - Documentation/DocBook/media/v4l/dev-overlay.xml | 368 -- Documentation/DocBook/media/v4l/dev-radio.xml | 49 - Documentation/DocBook/media/v4l/dev-raw-vbi.xml | 345 -- Documentation/DocBook/media/v4l/dev-rds.xml | 196 - Documentation/DocBook/media/v4l/dev-sdr.xml | 126 - Documentation/DocBook/media/v4l/dev-sliced-vbi.xml | 706 --- Documentation/DocBook/media/v4l/dev-subdev.xml | 478 -- Documentation/DocBook/media/v4l/dev-teletext.xml | 29 - Documentation/DocBook/media/v4l/driver.xml | 200 - Documentation/DocBook/media/v4l/fdl-appendix.xml | 671 --- Documentation/DocBook/media/v4l/fieldseq_bt.pdf | Bin 9185 -> 0 bytes Documentation/DocBook/media/v4l/fieldseq_tb.pdf | Bin 9173 -> 0 bytes Documentation/DocBook/media/v4l/func-close.xml | 62 - Documentation/DocBook/media/v4l/func-ioctl.xml | 71 - Documentation/DocBook/media/v4l/func-mmap.xml | 183 - Documentation/DocBook/media/v4l/func-munmap.xml | 76 - Documentation/DocBook/media/v4l/func-open.xml | 113 - Documentation/DocBook/media/v4l/func-poll.xml | 142 - Documentation/DocBook/media/v4l/func-read.xml | 181 - Documentation/DocBook/media/v4l/func-select.xml | 130 - Documentation/DocBook/media/v4l/func-write.xml | 128 - Documentation/DocBook/media/v4l/gen-errors.xml | 77 - Documentation/DocBook/media/v4l/io.xml | 1545 ------ Documentation/DocBook/media/v4l/keytable.c.xml | 172 - Documentation/DocBook/media/v4l/libv4l.xml | 160 - .../DocBook/media/v4l/lirc_device_interface.xml | 255 - .../DocBook/media/v4l/media-controller.xml | 105 - .../DocBook/media/v4l/media-func-close.xml | 59 - .../DocBook/media/v4l/media-func-ioctl.xml | 73 - .../DocBook/media/v4l/media-func-open.xml | 94 - .../DocBook/media/v4l/media-ioc-device-info.xml | 132 - .../DocBook/media/v4l/media-ioc-enum-entities.xml | 180 - .../DocBook/media/v4l/media-ioc-enum-links.xml | 160 - .../DocBook/media/v4l/media-ioc-g-topology.xml | 391 -- .../DocBook/media/v4l/media-ioc-setup-link.xml | 84 - Documentation/DocBook/media/v4l/media-types.xml | 379 -- Documentation/DocBook/media/v4l/pipeline.pdf | Bin 20276 -> 0 bytes Documentation/DocBook/media/v4l/pixfmt-grey.xml | 62 - Documentation/DocBook/media/v4l/pixfmt-m420.xml | 139 - Documentation/DocBook/media/v4l/pixfmt-nv12.xml | 143 - Documentation/DocBook/media/v4l/pixfmt-nv12m.xml | 153 - Documentation/DocBook/media/v4l/pixfmt-nv12mt.xml | 66 - Documentation/DocBook/media/v4l/pixfmt-nv16.xml | 166 - Documentation/DocBook/media/v4l/pixfmt-nv16m.xml | 170 - Documentation/DocBook/media/v4l/pixfmt-nv24.xml | 121 - .../DocBook/media/v4l/pixfmt-packed-rgb.xml | 937 ---- .../DocBook/media/v4l/pixfmt-packed-yuv.xml | 236 - Documentation/DocBook/media/v4l/pixfmt-sbggr16.xml | 83 - Documentation/DocBook/media/v4l/pixfmt-sbggr8.xml | 67 - .../DocBook/media/v4l/pixfmt-sdr-cs08.xml | 44 - .../DocBook/media/v4l/pixfmt-sdr-cs14le.xml | 47 - .../DocBook/media/v4l/pixfmt-sdr-cu08.xml | 44 - .../DocBook/media/v4l/pixfmt-sdr-cu16le.xml | 46 - .../DocBook/media/v4l/pixfmt-sdr-ru12le.xml | 40 - Documentation/DocBook/media/v4l/pixfmt-sgbrg8.xml | 67 - Documentation/DocBook/media/v4l/pixfmt-sgrbg8.xml | 67 - Documentation/DocBook/media/v4l/pixfmt-srggb10.xml | 90 - .../DocBook/media/v4l/pixfmt-srggb10alaw8.xml | 34 - .../DocBook/media/v4l/pixfmt-srggb10dpcm8.xml | 28 - .../DocBook/media/v4l/pixfmt-srggb10p.xml | 99 - Documentation/DocBook/media/v4l/pixfmt-srggb12.xml | 90 - Documentation/DocBook/media/v4l/pixfmt-srggb8.xml | 67 - Documentation/DocBook/media/v4l/pixfmt-uv8.xml | 62 - Documentation/DocBook/media/v4l/pixfmt-uyvy.xml | 120 - Documentation/DocBook/media/v4l/pixfmt-vyuy.xml | 120 - Documentation/DocBook/media/v4l/pixfmt-y10.xml | 79 - Documentation/DocBook/media/v4l/pixfmt-y10b.xml | 43 - Documentation/DocBook/media/v4l/pixfmt-y12.xml | 79 - Documentation/DocBook/media/v4l/pixfmt-y12i.xml | 49 - Documentation/DocBook/media/v4l/pixfmt-y16-be.xml | 81 - Documentation/DocBook/media/v4l/pixfmt-y16.xml | 81 - Documentation/DocBook/media/v4l/pixfmt-y41p.xml | 149 - Documentation/DocBook/media/v4l/pixfmt-y8i.xml | 80 - Documentation/DocBook/media/v4l/pixfmt-yuv410.xml | 133 - Documentation/DocBook/media/v4l/pixfmt-yuv411p.xml | 147 - Documentation/DocBook/media/v4l/pixfmt-yuv420.xml | 149 - Documentation/DocBook/media/v4l/pixfmt-yuv420m.xml | 162 - Documentation/DocBook/media/v4l/pixfmt-yuv422m.xml | 166 - Documentation/DocBook/media/v4l/pixfmt-yuv422p.xml | 153 - Documentation/DocBook/media/v4l/pixfmt-yuv444m.xml | 177 - Documentation/DocBook/media/v4l/pixfmt-yuyv.xml | 120 - Documentation/DocBook/media/v4l/pixfmt-yvyu.xml | 120 - Documentation/DocBook/media/v4l/pixfmt-z16.xml | 81 - Documentation/DocBook/media/v4l/pixfmt.xml | 2003 ------- Documentation/DocBook/media/v4l/planar-apis.xml | 62 - .../DocBook/media/v4l/remote_controllers.xml | 320 -- Documentation/DocBook/media/v4l/selection-api.xml | 317 -- .../DocBook/media/v4l/selections-common.xml | 180 - Documentation/DocBook/media/v4l/subdev-formats.xml | 4040 -------------- .../media/v4l/subdev-image-processing-crop.dia | 614 --- .../media/v4l/subdev-image-processing-crop.svg | 63 - .../media/v4l/subdev-image-processing-full.dia | 1588 ------ .../media/v4l/subdev-image-processing-full.svg | 163 - ...ubdev-image-processing-scaling-multi-source.dia | 1152 ---- ...ubdev-image-processing-scaling-multi-source.svg | 116 - Documentation/DocBook/media/v4l/v4l2.xml | 728 --- Documentation/DocBook/media/v4l/v4l2grab.c.xml | 164 - Documentation/DocBook/media/v4l/vbi_525.pdf | Bin 3395 -> 0 bytes Documentation/DocBook/media/v4l/vbi_625.pdf | Bin 3683 -> 0 bytes Documentation/DocBook/media/v4l/vbi_hsync.pdf | Bin 7405 -> 0 bytes .../DocBook/media/v4l/vidioc-create-bufs.xml | 158 - Documentation/DocBook/media/v4l/vidioc-cropcap.xml | 166 - .../DocBook/media/v4l/vidioc-dbg-g-chip-info.xml | 207 - .../DocBook/media/v4l/vidioc-dbg-g-register.xml | 227 - .../DocBook/media/v4l/vidioc-decoder-cmd.xml | 259 - Documentation/DocBook/media/v4l/vidioc-dqevent.xml | 471 -- .../DocBook/media/v4l/vidioc-dv-timings-cap.xml | 210 - .../DocBook/media/v4l/vidioc-encoder-cmd.xml | 197 - .../DocBook/media/v4l/vidioc-enum-dv-timings.xml | 128 - .../DocBook/media/v4l/vidioc-enum-fmt.xml | 159 - .../media/v4l/vidioc-enum-frameintervals.xml | 260 - .../DocBook/media/v4l/vidioc-enum-framesizes.xml | 265 - .../DocBook/media/v4l/vidioc-enum-freq-bands.xml | 175 - .../DocBook/media/v4l/vidioc-enumaudio.xml | 76 - .../DocBook/media/v4l/vidioc-enumaudioout.xml | 79 - .../DocBook/media/v4l/vidioc-enuminput.xml | 316 -- .../DocBook/media/v4l/vidioc-enumoutput.xml | 201 - Documentation/DocBook/media/v4l/vidioc-enumstd.xml | 389 -- Documentation/DocBook/media/v4l/vidioc-expbuf.xml | 205 - Documentation/DocBook/media/v4l/vidioc-g-audio.xml | 172 - .../DocBook/media/v4l/vidioc-g-audioout.xml | 138 - Documentation/DocBook/media/v4l/vidioc-g-crop.xml | 129 - Documentation/DocBook/media/v4l/vidioc-g-ctrl.xml | 133 - .../DocBook/media/v4l/vidioc-g-dv-timings.xml | 343 -- Documentation/DocBook/media/v4l/vidioc-g-edid.xml | 173 - .../DocBook/media/v4l/vidioc-g-enc-index.xml | 189 - .../DocBook/media/v4l/vidioc-g-ext-ctrls.xml | 456 -- Documentation/DocBook/media/v4l/vidioc-g-fbuf.xml | 459 -- Documentation/DocBook/media/v4l/vidioc-g-fmt.xml | 204 - .../DocBook/media/v4l/vidioc-g-frequency.xml | 148 - Documentation/DocBook/media/v4l/vidioc-g-input.xml | 83 - .../DocBook/media/v4l/vidioc-g-jpegcomp.xml | 175 - .../DocBook/media/v4l/vidioc-g-modulator.xml | 252 - .../DocBook/media/v4l/vidioc-g-output.xml | 85 - Documentation/DocBook/media/v4l/vidioc-g-parm.xml | 314 -- .../DocBook/media/v4l/vidioc-g-priority.xml | 135 - .../DocBook/media/v4l/vidioc-g-selection.xml | 233 - .../DocBook/media/v4l/vidioc-g-sliced-vbi-cap.xml | 255 - Documentation/DocBook/media/v4l/vidioc-g-std.xml | 98 - Documentation/DocBook/media/v4l/vidioc-g-tuner.xml | 594 --- .../DocBook/media/v4l/vidioc-log-status.xml | 41 - Documentation/DocBook/media/v4l/vidioc-overlay.xml | 74 - .../DocBook/media/v4l/vidioc-prepare-buf.xml | 88 - Documentation/DocBook/media/v4l/vidioc-qbuf.xml | 202 - .../DocBook/media/v4l/vidioc-query-dv-timings.xml | 115 - .../DocBook/media/v4l/vidioc-querybuf.xml | 106 - .../DocBook/media/v4l/vidioc-querycap.xml | 350 -- .../DocBook/media/v4l/vidioc-queryctrl.xml | 661 --- .../DocBook/media/v4l/vidioc-querystd.xml | 85 - Documentation/DocBook/media/v4l/vidioc-reqbufs.xml | 137 - .../DocBook/media/v4l/vidioc-s-hw-freq-seek.xml | 188 - .../DocBook/media/v4l/vidioc-streamon.xml | 136 - .../v4l/vidioc-subdev-enum-frame-interval.xml | 151 - .../media/v4l/vidioc-subdev-enum-frame-size.xml | 153 - .../media/v4l/vidioc-subdev-enum-mbus-code.xml | 118 - .../DocBook/media/v4l/vidioc-subdev-g-crop.xml | 158 - .../DocBook/media/v4l/vidioc-subdev-g-fmt.xml | 177 - .../media/v4l/vidioc-subdev-g-frame-interval.xml | 135 - .../media/v4l/vidioc-subdev-g-selection.xml | 159 - .../DocBook/media/v4l/vidioc-subscribe-event.xml | 130 - Documentation/DocBook/media/vbi_525.gif.b64 | 84 - Documentation/DocBook/media/vbi_625.gif.b64 | 90 - Documentation/DocBook/media/vbi_hsync.gif.b64 | 43 - Documentation/DocBook/media_api.tmpl | 121 - Documentation/Makefile.sphinx | 1 - Makefile | 2 +- 228 files changed, 3 insertions(+), 62539 deletions(-) delete mode 100644 Documentation/DocBook/media/.gitignore delete mode 100644 Documentation/DocBook/media/Makefile delete mode 100644 Documentation/DocBook/media/bayer.png.b64 delete mode 100644 Documentation/DocBook/media/constraints.png.b64 delete mode 100644 Documentation/DocBook/media/crop.gif.b64 delete mode 100644 Documentation/DocBook/media/dvb/.gitignore delete mode 100644 Documentation/DocBook/media/dvb/audio.xml delete mode 100644 Documentation/DocBook/media/dvb/ca.xml delete mode 100644 Documentation/DocBook/media/dvb/demux.xml delete mode 100644 Documentation/DocBook/media/dvb/dvbapi.xml delete mode 100644 Documentation/DocBook/media/dvb/dvbproperty.xml delete mode 100644 Documentation/DocBook/media/dvb/dvbstb.pdf delete mode 100644 Documentation/DocBook/media/dvb/examples.xml delete mode 100644 Documentation/DocBook/media/dvb/fe-diseqc-recv-slave-reply.xml delete mode 100644 Documentation/DocBook/media/dvb/fe-diseqc-reset-overload.xml delete mode 100644 Documentation/DocBook/media/dvb/fe-diseqc-send-burst.xml delete mode 100644 Documentation/DocBook/media/dvb/fe-diseqc-send-master-cmd.xml delete mode 100644 Documentation/DocBook/media/dvb/fe-enable-high-lnb-voltage.xml delete mode 100644 Documentation/DocBook/media/dvb/fe-get-info.xml delete mode 100644 Documentation/DocBook/media/dvb/fe-get-property.xml delete mode 100644 Documentation/DocBook/media/dvb/fe-read-status.xml delete mode 100644 Documentation/DocBook/media/dvb/fe-set-frontend-tune-mode.xml delete mode 100644 Documentation/DocBook/media/dvb/fe-set-tone.xml delete mode 100644 Documentation/DocBook/media/dvb/fe-set-voltage.xml delete mode 100644 Documentation/DocBook/media/dvb/frontend.xml delete mode 100644 Documentation/DocBook/media/dvb/frontend_legacy_api.xml delete mode 100644 Documentation/DocBook/media/dvb/intro.xml delete mode 100644 Documentation/DocBook/media/dvb/net.xml delete mode 100644 Documentation/DocBook/media/dvb/video.xml delete mode 100644 Documentation/DocBook/media/dvbstb.png.b64 delete mode 100644 Documentation/DocBook/media/fieldseq_bt.gif.b64 delete mode 100644 Documentation/DocBook/media/fieldseq_tb.gif.b64 delete mode 100644 Documentation/DocBook/media/nv12mt.gif.b64 delete mode 100644 Documentation/DocBook/media/nv12mt_example.gif.b64 delete mode 100644 Documentation/DocBook/media/pipeline.png.b64 delete mode 100644 Documentation/DocBook/media/selection.png.b64 delete mode 100644 Documentation/DocBook/media/typical_media_device.svg delete mode 100644 Documentation/DocBook/media/v4l/.gitignore delete mode 100644 Documentation/DocBook/media/v4l/biblio.xml delete mode 100644 Documentation/DocBook/media/v4l/capture.c.xml delete mode 100644 Documentation/DocBook/media/v4l/cec-api.xml delete mode 100644 Documentation/DocBook/media/v4l/cec-func-close.xml delete mode 100644 Documentation/DocBook/media/v4l/cec-func-ioctl.xml delete mode 100644 Documentation/DocBook/media/v4l/cec-func-open.xml delete mode 100644 Documentation/DocBook/media/v4l/cec-func-poll.xml delete mode 100644 Documentation/DocBook/media/v4l/cec-ioc-adap-g-caps.xml delete mode 100644 Documentation/DocBook/media/v4l/cec-ioc-adap-g-log-addrs.xml delete mode 100644 Documentation/DocBook/media/v4l/cec-ioc-adap-g-phys-addr.xml delete mode 100644 Documentation/DocBook/media/v4l/cec-ioc-dqevent.xml delete mode 100644 Documentation/DocBook/media/v4l/cec-ioc-g-mode.xml delete mode 100644 Documentation/DocBook/media/v4l/cec-ioc-receive.xml delete mode 100644 Documentation/DocBook/media/v4l/common.xml delete mode 100644 Documentation/DocBook/media/v4l/compat.xml delete mode 100644 Documentation/DocBook/media/v4l/controls.xml delete mode 100644 Documentation/DocBook/media/v4l/crop.pdf delete mode 100644 Documentation/DocBook/media/v4l/dev-capture.xml delete mode 100644 Documentation/DocBook/media/v4l/dev-codec.xml delete mode 100644 Documentation/DocBook/media/v4l/dev-effect.xml delete mode 100644 Documentation/DocBook/media/v4l/dev-event.xml delete mode 100644 Documentation/DocBook/media/v4l/dev-osd.xml delete mode 100644 Documentation/DocBook/media/v4l/dev-output.xml delete mode 100644 Documentation/DocBook/media/v4l/dev-overlay.xml delete mode 100644 Documentation/DocBook/media/v4l/dev-radio.xml delete mode 100644 Documentation/DocBook/media/v4l/dev-raw-vbi.xml delete mode 100644 Documentation/DocBook/media/v4l/dev-rds.xml delete mode 100644 Documentation/DocBook/media/v4l/dev-sdr.xml delete mode 100644 Documentation/DocBook/media/v4l/dev-sliced-vbi.xml delete mode 100644 Documentation/DocBook/media/v4l/dev-subdev.xml delete mode 100644 Documentation/DocBook/media/v4l/dev-teletext.xml delete mode 100644 Documentation/DocBook/media/v4l/driver.xml delete mode 100644 Documentation/DocBook/media/v4l/fdl-appendix.xml delete mode 100644 Documentation/DocBook/media/v4l/fieldseq_bt.pdf delete mode 100644 Documentation/DocBook/media/v4l/fieldseq_tb.pdf delete mode 100644 Documentation/DocBook/media/v4l/func-close.xml delete mode 100644 Documentation/DocBook/media/v4l/func-ioctl.xml delete mode 100644 Documentation/DocBook/media/v4l/func-mmap.xml delete mode 100644 Documentation/DocBook/media/v4l/func-munmap.xml delete mode 100644 Documentation/DocBook/media/v4l/func-open.xml delete mode 100644 Documentation/DocBook/media/v4l/func-poll.xml delete mode 100644 Documentation/DocBook/media/v4l/func-read.xml delete mode 100644 Documentation/DocBook/media/v4l/func-select.xml delete mode 100644 Documentation/DocBook/media/v4l/func-write.xml delete mode 100644 Documentation/DocBook/media/v4l/gen-errors.xml delete mode 100644 Documentation/DocBook/media/v4l/io.xml delete mode 100644 Documentation/DocBook/media/v4l/keytable.c.xml delete mode 100644 Documentation/DocBook/media/v4l/libv4l.xml delete mode 100644 Documentation/DocBook/media/v4l/lirc_device_interface.xml delete mode 100644 Documentation/DocBook/media/v4l/media-controller.xml delete mode 100644 Documentation/DocBook/media/v4l/media-func-close.xml delete mode 100644 Documentation/DocBook/media/v4l/media-func-ioctl.xml delete mode 100644 Documentation/DocBook/media/v4l/media-func-open.xml delete mode 100644 Documentation/DocBook/media/v4l/media-ioc-device-info.xml delete mode 100644 Documentation/DocBook/media/v4l/media-ioc-enum-entities.xml delete mode 100644 Documentation/DocBook/media/v4l/media-ioc-enum-links.xml delete mode 100644 Documentation/DocBook/media/v4l/media-ioc-g-topology.xml delete mode 100644 Documentation/DocBook/media/v4l/media-ioc-setup-link.xml delete mode 100644 Documentation/DocBook/media/v4l/media-types.xml delete mode 100644 Documentation/DocBook/media/v4l/pipeline.pdf delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-grey.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-m420.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-nv12.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-nv12m.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-nv12mt.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-nv16.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-nv16m.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-nv24.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-packed-rgb.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-packed-yuv.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-sbggr16.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-sbggr8.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-sdr-cs08.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-sdr-cs14le.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-sdr-cu08.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-sdr-cu16le.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-sdr-ru12le.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-sgbrg8.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-sgrbg8.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-srggb10.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-srggb10alaw8.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-srggb10dpcm8.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-srggb10p.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-srggb12.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-srggb8.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-uv8.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-uyvy.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-vyuy.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-y10.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-y10b.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-y12.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-y12i.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-y16-be.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-y16.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-y41p.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-y8i.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-yuv410.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-yuv411p.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-yuv420.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-yuv420m.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-yuv422m.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-yuv422p.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-yuv444m.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-yuyv.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-yvyu.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt-z16.xml delete mode 100644 Documentation/DocBook/media/v4l/pixfmt.xml delete mode 100644 Documentation/DocBook/media/v4l/planar-apis.xml delete mode 100644 Documentation/DocBook/media/v4l/remote_controllers.xml delete mode 100644 Documentation/DocBook/media/v4l/selection-api.xml delete mode 100644 Documentation/DocBook/media/v4l/selections-common.xml delete mode 100644 Documentation/DocBook/media/v4l/subdev-formats.xml delete mode 100644 Documentation/DocBook/media/v4l/subdev-image-processing-crop.dia delete mode 100644 Documentation/DocBook/media/v4l/subdev-image-processing-crop.svg delete mode 100644 Documentation/DocBook/media/v4l/subdev-image-processing-full.dia delete mode 100644 Documentation/DocBook/media/v4l/subdev-image-processing-full.svg delete mode 100644 Documentation/DocBook/media/v4l/subdev-image-processing-scaling-multi-source.dia delete mode 100644 Documentation/DocBook/media/v4l/subdev-image-processing-scaling-multi-source.svg delete mode 100644 Documentation/DocBook/media/v4l/v4l2.xml delete mode 100644 Documentation/DocBook/media/v4l/v4l2grab.c.xml delete mode 100644 Documentation/DocBook/media/v4l/vbi_525.pdf delete mode 100644 Documentation/DocBook/media/v4l/vbi_625.pdf delete mode 100644 Documentation/DocBook/media/v4l/vbi_hsync.pdf delete mode 100644 Documentation/DocBook/media/v4l/vidioc-create-bufs.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-cropcap.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-dbg-g-chip-info.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-dbg-g-register.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-decoder-cmd.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-dqevent.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-dv-timings-cap.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-encoder-cmd.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-enum-dv-timings.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-enum-fmt.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-enum-frameintervals.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-enum-framesizes.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-enum-freq-bands.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-enumaudio.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-enumaudioout.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-enuminput.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-enumoutput.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-enumstd.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-expbuf.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-g-audio.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-g-audioout.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-g-crop.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-g-ctrl.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-g-dv-timings.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-g-edid.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-g-enc-index.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-g-ext-ctrls.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-g-fbuf.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-g-fmt.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-g-frequency.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-g-input.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-g-jpegcomp.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-g-modulator.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-g-output.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-g-parm.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-g-priority.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-g-selection.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-g-sliced-vbi-cap.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-g-std.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-g-tuner.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-log-status.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-overlay.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-prepare-buf.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-qbuf.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-query-dv-timings.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-querybuf.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-querycap.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-queryctrl.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-querystd.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-reqbufs.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-s-hw-freq-seek.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-streamon.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-subdev-enum-frame-interval.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-subdev-enum-frame-size.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-subdev-enum-mbus-code.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-subdev-g-crop.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-subdev-g-fmt.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-subdev-g-frame-interval.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-subdev-g-selection.xml delete mode 100644 Documentation/DocBook/media/v4l/vidioc-subscribe-event.xml delete mode 100644 Documentation/DocBook/media/vbi_525.gif.b64 delete mode 100644 Documentation/DocBook/media/vbi_625.gif.b64 delete mode 100644 Documentation/DocBook/media/vbi_hsync.gif.b64 delete mode 100644 Documentation/DocBook/media_api.tmpl (limited to 'Documentation') diff --git a/Documentation/DocBook/Makefile b/Documentation/DocBook/Makefile index 01bab5014a4a..2bfd664b5e35 100644 --- a/Documentation/DocBook/Makefile +++ b/Documentation/DocBook/Makefile @@ -16,11 +16,9 @@ DOCBOOKS := z8530book.xml device-drivers.xml \ genericirq.xml s390-drivers.xml uio-howto.xml scsi.xml \ 80211.xml debugobjects.xml sh.xml regulator.xml \ alsa-driver-api.xml writing-an-alsa-driver.xml \ - tracepoint.xml gpu.xml media_api.xml w1.xml \ + tracepoint.xml gpu.xml w1.xml \ writing_musb_glue_layer.xml crypto-API.xml iio.xml -include Documentation/DocBook/media/Makefile - ### # The build process is as follows (targets): # (xmldocs) [by docproc] @@ -49,7 +47,6 @@ pdfdocs: $(PDF) HTML := $(sort $(patsubst %.xml, %.html, $(BOOKS))) htmldocs: $(HTML) $(call cmd,build_main_index) - $(call install_media_images) MAN := $(patsubst %.xml, %.9, $(BOOKS)) mandocs: $(MAN) @@ -219,9 +216,6 @@ silent_gen_xml = : else -# Needed, due to cleanmediadocs -include Documentation/DocBook/media/Makefile - htmldocs: pdfdocs: psdocs: @@ -269,7 +263,7 @@ clean-files := $(DOCBOOKS) \ clean-dirs := $(patsubst %.xml,%,$(DOCBOOKS)) man -cleandocs: cleanmediadocs +cleandocs: $(Q)rm -f $(call objectify, $(clean-files)) $(Q)rm -rf $(call objectify, $(clean-dirs)) diff --git a/Documentation/DocBook/media/.gitignore b/Documentation/DocBook/media/.gitignore deleted file mode 100644 index e461c585fde8..000000000000 --- a/Documentation/DocBook/media/.gitignore +++ /dev/null @@ -1 +0,0 @@ -!*.svg diff --git a/Documentation/DocBook/media/Makefile b/Documentation/DocBook/media/Makefile deleted file mode 100644 index fdc138624800..000000000000 --- a/Documentation/DocBook/media/Makefile +++ /dev/null @@ -1,427 +0,0 @@ -### -# Media build rules - Auto-generates media contents/indexes and *.h xml's -# - -SHELL=/bin/bash - -MEDIA_OBJ_DIR=$(objtree)/Documentation/DocBook/ -MEDIA_SRC_DIR=$(srctree)/Documentation/DocBook/media - -MEDIA_TEMP = media-entities.tmpl \ - media-indices.tmpl \ - videodev2.h.xml \ - v4l2.xml \ - audio.h.xml \ - ca.h.xml \ - dmx.h.xml \ - frontend.h.xml \ - net.h.xml \ - video.h.xml \ - -IMGFILES := $(patsubst %.b64,%, $(notdir $(shell ls $(MEDIA_SRC_DIR)/*.b64))) -OBJIMGFILES := $(addprefix $(MEDIA_OBJ_DIR)/, $(IMGFILES)) -GENFILES := $(addprefix $(MEDIA_OBJ_DIR)/, $(MEDIA_TEMP)) - -PHONY += cleanmediadocs - -cleanmediadocs: - -@rm -f `find $(MEDIA_OBJ_DIR) -type l` $(GENFILES) $(OBJIMGFILES) 2>/dev/null - -$(obj)/media_api.xml: $(GENFILES) FORCE - -#$(MEDIA_OBJ_DIR)/media_api.html: $(MEDIA_OBJ_DIR)/media_api.xml -#$(MEDIA_OBJ_DIR)/media_api.pdf: $(MEDIA_OBJ_DIR)/media_api.xml -#$(MEDIA_OBJ_DIR)/media_api.ps: $(MEDIA_OBJ_DIR)/media_api.xml - -V4L_SGMLS = \ - $(shell ls $(MEDIA_SRC_DIR)/v4l/*.xml|perl -ne 'print "$$1 " if (m,.*/(.*)\n,)') \ - capture.c.xml \ - keytable.c.xml \ - v4l2grab.c.xml - -DVB_SGMLS = \ - $(shell ls $(MEDIA_SRC_DIR)/dvb/*.xml|perl -ne 'print "$$1 " if (m,.*/(.*)\n,)') - -MEDIA_SGMLS = $(addprefix ./,$(V4L_SGMLS)) $(addprefix ./,$(DVB_SGMLS)) $(addprefix ./,$(MEDIA_TEMP)) - -FUNCS = \ - close \ - ioctl \ - mmap \ - munmap \ - open \ - poll \ - read \ - select \ - write \ - -IOCTLS = \ - $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/videodev2.h) \ - $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/audio.h) \ - $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/ca.h) \ - $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/dmx.h) \ - $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/frontend.h) \ - $(shell perl -ne 'print "$$1 " if /\#define\s+([A-Z][^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/net.h) \ - $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/video.h) \ - $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/media.h) \ - $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/cec.h) \ - $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/v4l2-subdev.h) \ - -DEFINES = \ - $(shell perl -ne 'print "$$1 " if /\#define\s+(DTV_[^\s]+)\s+/' $(srctree)/include/uapi/linux/dvb/frontend.h) \ - -TYPES = \ - $(shell perl -ne 'print "$$1 " if /^typedef\s+.*\s+(\S+)\;/' $(srctree)/include/uapi/linux/videodev2.h) \ - $(shell perl -ne 'print "$$1 " if /^typedef\s+.*\s+(\S+)\;/' $(srctree)/include/uapi/linux/dvb/frontend.h) - -ENUMS = \ - $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' \ - $(srctree)/include/uapi/linux/videodev2.h \ - $(srctree)/include/uapi/linux/dvb/audio.h \ - $(srctree)/include/uapi/linux/dvb/ca.h \ - $(srctree)/include/uapi/linux/dvb/dmx.h \ - $(srctree)/include/uapi/linux/dvb/frontend.h \ - $(srctree)/include/uapi/linux/dvb/net.h \ - $(srctree)/include/uapi/linux/dvb/video.h \ - $(srctree)/include/uapi/linux/media.h \ - $(srctree)/include/uapi/linux/v4l2-mediabus.h \ - $(srctree)/include/uapi/linux/v4l2-subdev.h) - -ENUM_DEFS = \ - $(shell perl -e 'open IN,"cat @ARGV| cpp -fpreprocessed |"; while () { if ($$enum) {print "$$1\n" if (/\s*([A-Z]\S+)\b/); } $$enum = 0 if ($$enum && /^\}/); $$enum = 1 if(/^\s*enum\s/); }; close IN;' \ - $(srctree)/include/uapi/linux/dvb/dmx.h \ - $(srctree)/include/uapi/linux/dvb/frontend.h) - -STRUCTS = \ - $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/videodev2.h) \ - $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s\{]+)\s*/)' $(srctree)/include/uapi/linux/dvb/audio.h) \ - $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/ca.h) \ - $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/dmx.h) \ - $(shell perl -ne 'print "$$1 " if (!/dtv\_cmds\_h/ && /^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/frontend.h) \ - $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/ && !/_old/)' $(srctree)/include/uapi/linux/dvb/net.h) \ - $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/video.h) \ - $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/media.h) \ - $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/linux/cec.h) \ - $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/v4l2-subdev.h) \ - $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/v4l2-mediabus.h) - -ERRORS = \ - E2BIG \ - EACCES \ - EAGAIN \ - EBADF \ - EBADFD \ - EBADR \ - EBADRQC \ - EBUSY \ - ECHILD \ - ECONNRESET \ - EDEADLK \ - EDOM \ - EEXIST \ - EFAULT \ - EFBIG \ - EILSEQ \ - EINIT \ - EINPROGRESS \ - EINTR \ - EINVAL \ - EIO \ - EMFILE \ - ENFILE \ - ENOBUFS \ - ENODATA \ - ENODEV \ - ENOENT \ - ENOIOCTLCMD \ - ENOMEM \ - ENOSPC \ - ENOSR \ - ENOSYS \ - ENOTSUP \ - ENOTSUPP \ - ENOTTY \ - ENXIO \ - EOPNOTSUPP \ - EOVERFLOW \ - EPERM \ - EPIPE \ - EPROTO \ - ERANGE \ - EREMOTE \ - EREMOTEIO \ - ERESTART \ - ERESTARTSYS \ - ESHUTDOWN \ - ESPIPE \ - ETIME \ - ETIMEDOUT \ - EUSERS \ - EWOULDBLOCK \ - EXDEV \ - -ESCAPE = \ - -e "s/&/\\&/g" \ - -e "s//\\>/g" - -FILENAME = \ - -e s,"^[^\/]*/",, \ - -e s/"\\.xml"// \ - -e s/"\\.tmpl"// \ - -e s/\\\./-/g \ - -e s/"^func-"// \ - -e s/"^pixfmt-"// \ - -e s/"^vidioc-"// - -# Generate references to these structs in videodev2.h.xml. -DOCUMENTED = \ - -e "s/\(enum *\)v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1v4l2_mpeg_cx2341x_video_\2<\/link>/g" \ - -e "s/\(\(enum\|struct\) *\)\(v4l2_[a-zA-Z0-9_]*\)/\1\3<\/link>/g" \ - -e "s/\(V4L2_PIX_FMT_[A-Z0-9_]\+\)\(\s\+v4l2_fourcc\)/\1<\/link>\2/g" \ - -e ":a;s/\(linkend=\".*\)_\(.*\">\)/\1-\2/;ta" \ - -e "s/v4l2\-mpeg\-vbi\-ITV0/v4l2-mpeg-vbi-itv0-1/g" - -DVB_DOCUMENTED = \ - -e "s,\(struct\s\+\)\([a-z0-9_]\+\)\(\s\+{\),\1\\2\<\/link\>\3,g" \ - -e "s,\(}\s\+\)\([a-z0-9_]\+_t\+\),\1\\2\<\/link\>,g" \ - -e "s,\(define\s\+\)\(DTV_[A-Z0-9_]\+\)\(\s\+[0-9]\+\),\1\\2\<\/link\>\3,g" \ - -e "s,\(DTV_IOCTL_MAX_MSGS\|dtv_cmds_h\|__.*_old\)<\/link>,\1,g" \ - -e ":a;s/\(linkend=\".*\)_\(.*\">\)/\1-\2/;ta" \ - -e "s,\(audio-mixer\|audio-karaoke\|audio-status\|ca-slot-info\|ca-descr-info\|ca-caps\|ca-msg\|ca-descr\|ca-pid\|dmx-filter\|dmx-caps\|video-system\|video-highlight\|video-spu\|video-spu-palette\|video-navi-pack\)-t,\1,g" \ - -e "s,DTV-ISDBT-LAYER[A-C],DTV-ISDBT-LAYER,g" \ - -e "s,\(define\s\+\)\([A-Z0-9_]\+\)\(\s\+_IO\),\1\\2\<\/link\>\3,g" \ - -e "s,\(define\s\+\)\(DTV_[A-Z0-9_]\+\)\(\s\+\),\1\\2\<\/link\>\3,g" \ - -e "s,\(__.*_OLD\)<\/link>,\1,g" \ - -e "s/\(linkend\=\"\)FE_SET_PROPERTY/\1FE_GET_PROPERTY/g" \ - -e "s,\(DTV_ISDBS_TS_ID_LEGACY\|DTV_MAX_COMMAND\|DTV_IOCTL_MAX_MSGS\)<\/link>,\1,g" \ - -# -# Media targets and dependencies -# - -install_media_images = \ - $(Q)if [ "x$(findstring media_api.xml,$(DOCBOOKS))" != "x" ]; then \ - mkdir -p $(MEDIA_OBJ_DIR)/media_api; \ - cp $(OBJIMGFILES) $(MEDIA_SRC_DIR)/*.svg $(MEDIA_SRC_DIR)/v4l/*.svg $(MEDIA_OBJ_DIR)/media_api; \ - fi - -$(MEDIA_OBJ_DIR)/%: $(MEDIA_SRC_DIR)/%.b64 - $(Q)base64 -d $< >$@ - -$(MEDIA_OBJ_DIR)/v4l2.xml: $(OBJIMGFILES) - @$($(quiet)gen_xml) - @(ln -sf `cd $(MEDIA_SRC_DIR) && /bin/pwd`/v4l/*xml $(MEDIA_OBJ_DIR)/) - @(ln -sf `cd $(MEDIA_SRC_DIR) && /bin/pwd`/dvb/*xml $(MEDIA_OBJ_DIR)/) - -$(MEDIA_OBJ_DIR)/videodev2.h.xml: $(srctree)/include/uapi/linux/videodev2.h $(MEDIA_OBJ_DIR)/v4l2.xml - @$($(quiet)gen_xml) - @( \ - echo "") > $@ - @( \ - expand --tabs=8 < $< | \ - sed $(ESCAPE) $(DOCUMENTED) | \ - sed 's/i\.e\./&ie;/') >> $@ - @( \ - echo "") >> $@ - -$(MEDIA_OBJ_DIR)/audio.h.xml: $(srctree)/include/uapi/linux/dvb/audio.h $(MEDIA_OBJ_DIR)/v4l2.xml - @$($(quiet)gen_xml) - @( \ - echo "") > $@ - @( \ - expand --tabs=8 < $< | \ - sed $(ESCAPE) $(DVB_DOCUMENTED) | \ - sed 's/i\.e\./&ie;/') >> $@ - @( \ - echo "") >> $@ - -$(MEDIA_OBJ_DIR)/ca.h.xml: $(srctree)/include/uapi/linux/dvb/ca.h $(MEDIA_OBJ_DIR)/v4l2.xml - @$($(quiet)gen_xml) - @( \ - echo "") > $@ - @( \ - expand --tabs=8 < $< | \ - sed $(ESCAPE) $(DVB_DOCUMENTED) | \ - sed 's/i\.e\./&ie;/') >> $@ - @( \ - echo "") >> $@ - -$(MEDIA_OBJ_DIR)/dmx.h.xml: $(srctree)/include/uapi/linux/dvb/dmx.h $(MEDIA_OBJ_DIR)/v4l2.xml - @$($(quiet)gen_xml) - @( \ - echo "") > $@ - @( \ - for ident in $(ENUM_DEFS) ; do \ - entity=`echo $$ident | tr _ -` ; \ - r="$$r s/([^\w\-])$$ident([^\w\-])/\1\&$$entity\;\2/g;";\ - done; \ - expand --tabs=8 < $< | \ - sed $(ESCAPE) $(DVB_DOCUMENTED) | \ - sed 's/i\.e\./&ie;/' | \ - perl -ne "$$r print $$_;") >> $@ - @( \ - echo "") >> $@ - -$(MEDIA_OBJ_DIR)/frontend.h.xml: $(srctree)/include/uapi/linux/dvb/frontend.h $(MEDIA_OBJ_DIR)/v4l2.xml - @$($(quiet)gen_xml) - @( \ - echo "") > $@ - @( \ - for ident in $(ENUM_DEFS) ; do \ - entity=`echo $$ident | tr _ -` ; \ - r="$$r s/([^\w\-])$$ident([^\w\-])/\1\&$$entity\;\2/g;";\ - done; \ - expand --tabs=8 < $< | \ - sed $(ESCAPE) $(DVB_DOCUMENTED) | \ - sed 's/i\.e\./&ie;/' | \ - perl -ne "$$r print $$_;") >> $@ - @( \ - echo "") >> $@ - -$(MEDIA_OBJ_DIR)/net.h.xml: $(srctree)/include/uapi/linux/dvb/net.h $(MEDIA_OBJ_DIR)/v4l2.xml - @$($(quiet)gen_xml) - @( \ - echo "") > $@ - @( \ - expand --tabs=8 < $< | \ - sed $(ESCAPE) $(DVB_DOCUMENTED) | \ - sed 's/i\.e\./&ie;/') >> $@ - @( \ - echo "") >> $@ - -$(MEDIA_OBJ_DIR)/video.h.xml: $(srctree)/include/uapi/linux/dvb/video.h $(MEDIA_OBJ_DIR)/v4l2.xml - @$($(quiet)gen_xml) - @( \ - echo "") > $@ - @( \ - expand --tabs=8 < $< | \ - sed $(ESCAPE) $(DVB_DOCUMENTED) | \ - sed 's/i\.e\./&ie;/') >> $@ - @( \ - echo "") >> $@ - -$(MEDIA_OBJ_DIR)/media-entities.tmpl: $(MEDIA_OBJ_DIR)/v4l2.xml - @$($(quiet)gen_xml) - @( \ - echo "") >$@ - @( \ - echo -e "\n") >>$@ - @( \ - for ident in $(FUNCS) ; do \ - entity=`echo $$ident | tr _ -` ; \ - echo "$$ident()\">" \ - >>$@ ; \ - done) - @( \ - echo -e "\n") >>$@ - @( \ - for ident in `echo $(IOCTLS) | sed -e "s,VIDIOC_RESERVED,,"`; do\ - entity=`echo $$ident | tr _ -` ; \ - id=`grep -e "$$ident" -e "
$$ident\">" \ - >>$@ ; else \ - echo "Warning: undocumented ioctl: $$ident. Please document it at the media DocBook!" >&2; \ - fi; \ - done) - @( \ - echo -e "\n") >>$@ - @( \ - for ident in $(DEFINES) ; do \ - entity=`echo $$ident | tr _ -` ; \ - echo "$$ident\">" \ - >>$@ ; \ - done) - @( \ - echo -e "\n") >>$@ - @( \ - for ident in $(TYPES) ; do \ - entity=`echo $$ident | tr _ -` ; \ - echo "$$ident\">" >>$@ ; \ - done) - @( \ - echo -e "\n") >>$@ - @( \ - for ident in $(ENUMS) ; do \ - entity=`echo $$ident | sed -e "s/v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1/" | tr _ -` ; \ - echo "$$ident\">" >>$@ ; \ - done) - @( \ - echo -e "\n") >>$@ - @( \ - for ident in $(ENUM_DEFS) ; do \ - entity=`echo $$ident | tr _ -` ; \ - echo "$$ident\">" \ - >>$@ ; \ - done) - @( \ - echo -e "\n") >>$@ - @( \ - for ident in $(STRUCTS) ; do \ - entity=`echo $$ident | tr _ - | sed s/v4l2-mpeg-vbi-ITV0/v4l2-mpeg-vbi-itv0-1/g` ; \ - echo "$$ident\">" >>$@ ; \ - done) - @( \ - echo -e "\n") >>$@ - @( \ - for ident in $(ERRORS) ; do \ - echo "$$ident" \ - "error code\">" >>$@ ; \ - done) - @( \ - echo -e "\n") >>$@ - @( \ - for file in $(MEDIA_SGMLS) ; do \ - entity=`echo "$$file" | sed $(FILENAME) -e s/"^([^-]*)"/sub\1/` ; \ - if ! echo "$$file" | \ - grep -q -E -e '^(func|vidioc|pixfmt)-' ; then \ - echo "" >>$@ ; \ - fi ; \ - done) - @( \ - echo -e "\n") >>$@ - @( \ - for file in $(MEDIA_SGMLS) ; do \ - if echo "$$file" | \ - grep -q -E -e '(func|vidioc|pixfmt)-' ; then \ - entity=`echo "$$file" |sed $(FILENAME)` ; \ - echo "" >>$@ ; \ - fi ; \ - done) - -# Jade can auto-generate a list-of-tables, which includes all structs, -# but we only want data types, all types, and sorted please. -$(MEDIA_OBJ_DIR)/media-indices.tmpl: $(MEDIA_OBJ_DIR)/v4l2.xml - @$($(quiet)gen_xml) - @( \ - echo "") >$@ - @( \ - echo -e "\nList of Types") >>$@ - @( \ - for ident in $(TYPES) ; do \ - id=`echo $$ident | tr _ -` ; \ - echo "$$ident" >>$@ ; \ - done) - @( \ - for ident in $(ENUMS) ; do \ - id=`echo $$ident | sed -e "s/v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1/" | tr _ -`; \ - echo "enum $$ident" >>$@ ; \ - done) - @( \ - for ident in $(STRUCTS) ; do \ - id=`echo $$ident | tr _ - | sed s/v4l2-mpeg-vbi-ITV0/v4l2-mpeg-vbi-itv0-1/g` ; \ - echo "struct $$ident" >>$@ ; \ - done) - @( \ - echo "") >>$@ - diff --git a/Documentation/DocBook/media/bayer.png.b64 b/Documentation/DocBook/media/bayer.png.b64 deleted file mode 100644 index ccdf2bcda95c..000000000000 --- a/Documentation/DocBook/media/bayer.png.b64 +++ /dev/null @@ -1,171 +0,0 @@ -iVBORw0KGgoAAAANSUhEUgAAAlgAAACqCAMAAABGfcHVAAAAAXNSR0IArs4c6QAAAwBQTFRFAAIA -CAICAAQVEQEBAgsAJgECAAogAwsTAQopHQYBNAEAAAxNARQAERIQAhoDABwAABZEHRQKGRYKQw0F -ACMBACUAERwpHR4cVRAFBR5rZhADACR2JiIhBDAGAiWGgQ4AcxQABDYACSeQMSYlJykmESxYlQ4A -PSYZIS05OSsJHS5JOC8kAEMDUC8SADXLNDUzADbEAEsAADX/2RABCFIAAD/qxB0AAD//BFgAK0Vp -WT4r3hwA3RsTRERAAEf/5CIA2iYCCUv+WUgz7iIAOk5g3CgVSU5SiD8uB2sABm8AE1X/U1RQOFyL -4jkfIlz/RV98M1j+G2H/fVk23jtD4T0pXl9ieFtGcV894UIiYWJfAIwA50gOV2p+4kssO2j+dGZx -bG1qVmj/OHH/aHJzfnBX5lQ7B50AZnahdXd0AKUG5V1ARnz/6mErCqgAAKsAent46GBIW4GhAK0A -AK8B42FtALIOin9/ALUAiIOBALkAVIf/6WxWg4eBi4SKJrEAmoVtdY2geoP/rYVXhoyOqYVuJbUh -IrgWX5D/jo6J7nszP7gAsI9S63xnN70zZqO/fZzCOb4+cZr+64dy8otYnJ6b7ImDRcM56IqcWMEo -oJb/N8ZoTMRL7Y9/QchcsaOTo6eohaj/7ZqKXspXj6v9xal+oK+7d7vTUM+Afco5r7CumLTVStKV -bs9ukbb/9qx/9q9l8queoLv/e9R66beG7rDImNRhi9aDwsPAs8bWzcK2cd67jtqP5MWUodyB8b+1 -tMr/z8L/j9+kbOXWnN2ZstD7yc7Rzs7Ly9xb183UwdD/+si/qeOmvuKIx9fj4tPCtuWiqOrL+tS2 -y9v++NPK2dvZt+m0ueq80+Wo3OeSwuy/yezG+d7f/eS/z/DS3uf/6Ono4PC71O39xPb02vPZ/+nR -+Ori6e399+vt+PGz+ur65fL55/Xb4vbh7ffX/PPY8vP9+vLy6Pf36fjr/PfM8vjr//f+/vn48P36 -9vv+/vzf+fv4/fvu//z7+v7//P/7/v/8//QpxAAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAFY8AABWW -AQ2TT8cAAAAHdElNRQfaCRQXGSltwbPRAAAgAElEQVR42u2dDXwU1bXAZwEJtEaNH1nbh68fpoWK -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 diff --git a/Documentation/DocBook/media/constraints.png.b64 b/Documentation/DocBook/media/constraints.png.b64 deleted file mode 100644 index 125b4a94962c..000000000000 --- a/Documentation/DocBook/media/constraints.png.b64 +++ /dev/null @@ -1,59 +0,0 @@ -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 -RU5ErkJggg== diff --git a/Documentation/DocBook/media/crop.gif.b64 b/Documentation/DocBook/media/crop.gif.b64 deleted file mode 100644 index 11d936ae72e8..000000000000 --- a/Documentation/DocBook/media/crop.gif.b64 +++ /dev/null @@ -1,105 +0,0 @@ -R0lGODlhuQJGAeMAAAAAAH9/fwCvAP8AANEA0dEAAK8Ar////wCOAAAA0QAA//////////////// -/////ywAAAAAuQJGAQAE/vDISau9OOvNu/9gKI5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqP -yKRyyWw6n9CodEqtWq/YrHbL7Xq/4LB4TC6bz+i0es1uu9/wuHxOr9vv+Lx+z+/7/4CBgoOEhYaH -iImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6gQC9vr/A -wcLDxMXGx8jJysvMzc7P0NHS09TV1tfYxbth2d3e3+DRAePk5ebn6Onl4ezt7u3q8fLqANtg7/j5 -+s/z/f4B+wIKHAjsn8F09ex5IciwobuDEM1Bi0ixosWLGDNqrJhQIZdk/htDihxJsiTJiSZTqlzJ -MmNHj1q+tRznsKbNmzhzDoz3EiYWmTN7+vQJgOfQmN5mAjzKtCg9pj+TBoU61ClCqlaAthSKVZdV -dFy7NtHKMqxYW1/PmT2bhOzKtWxlpZUYF4pblXDrvpq7Tq+Tu+UGCB5MuLDhw4gTK17MuLHjx5Aj -S55MubLly5gza95MmVxev0EAkxsg8jNoVXNJ0zy9RPQ41RtNsz6V2vPstlLTwdYo+zap2qt9G3Ed -YLdL4bGAL0VOhLhxjL2Zf1IeXboM56Wtt6KuPXRudM8vVu+eiTt5H9hDjj9vyfyIXrTW80gfO4OC -+/jz69/Pv7///wAG/ijggAQWaOCBCCao4IIMNujggRe4J4IwBxBg4YUYZqjhhhx26OGHIIYo4ogk -loihMBbi1k084VlklgLsWQKjBRJqgIwEBJRyY4UqZsNidhjMGOMkQlLgnjERwkdBjuVpk2QFTB5B -H2/2DUlJkRNYhWQKUTKyJQpdFjHlcUFaSaQxo9nGQph/fCkDm0OMCV2VZh7iZpbnwCYfBnDKcecO -fXq3ojotckRnnXr8SQGWEtQIphuKEhEoEHKKdygHCUiQ6QEJdDrEphWA2oGo3UXaAaMHOHrCpFmY -2gSr6H2XJ5AXoHqBp5xyuimpPfCa6we+6uWqCaiqagKsTAxrBbLz/slqTqEUvWgBqLviSqqvnXpq -rbbZTpDtt9ziSsG3unKraabkltutWMq+UOyswa3A7A/tfjGvDpW6eKm3v+a667i38vvvuQLzW7Cm -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 diff --git a/Documentation/DocBook/media/dvb/.gitignore b/Documentation/DocBook/media/dvb/.gitignore deleted file mode 100644 index d7ec32eafac9..000000000000 --- a/Documentation/DocBook/media/dvb/.gitignore +++ /dev/null @@ -1 +0,0 @@ -!*.xml diff --git a/Documentation/DocBook/media/dvb/audio.xml b/Documentation/DocBook/media/dvb/audio.xml deleted file mode 100644 index ea56743ddbe7..000000000000 --- a/Documentation/DocBook/media/dvb/audio.xml +++ /dev/null @@ -1,1314 +0,0 @@ -DVB Audio Device -The DVB audio device controls the MPEG2 audio decoder of the DVB hardware. It -can be accessed through /dev/dvb/adapter?/audio?. Data types and and -ioctl definitions can be accessed by including linux/dvb/audio.h in your -application. - -Please note that some DVB cards don’t have their own MPEG decoder, which results in -the omission of the audio and video device. - - -These ioctls were also used by V4L2 to control MPEG decoders implemented in V4L2. The use -of these ioctls for that purpose has been made obsolete and proper V4L2 ioctls or controls -have been created to replace that functionality. - -
-Audio Data Types -This section describes the structures, data types and defines used when talking to the -audio device. - - -
-audio_stream_source_t -The audio stream source is set through the AUDIO_SELECT_SOURCE call and can take -the following values, depending on whether we are replaying from an internal (demux) or -external (user write) source. - - -typedef enum { - AUDIO_SOURCE_DEMUX, - AUDIO_SOURCE_MEMORY -} audio_stream_source_t; - -AUDIO_SOURCE_DEMUX selects the demultiplexer (fed either by the frontend or the -DVR device) as the source of the video stream. If AUDIO_SOURCE_MEMORY -is selected the stream comes from the application through the write() system -call. - - -
-
-audio_play_state_t -The following values can be returned by the AUDIO_GET_STATUS call representing the -state of audio playback. - - -typedef enum { - AUDIO_STOPPED, - AUDIO_PLAYING, - AUDIO_PAUSED -} audio_play_state_t; - - -
-
-audio_channel_select_t -The audio channel selected via AUDIO_CHANNEL_SELECT is determined by the -following values. - - -typedef enum { - AUDIO_STEREO, - AUDIO_MONO_LEFT, - AUDIO_MONO_RIGHT, - AUDIO_MONO, - AUDIO_STEREO_SWAPPED -} audio_channel_select_t; - - -
-
-struct audio_status -The AUDIO_GET_STATUS call returns the following structure informing about various -states of the playback operation. - - -typedef struct audio_status { - boolean AV_sync_state; - boolean mute_state; - audio_play_state_t play_state; - audio_stream_source_t stream_source; - audio_channel_select_t channel_select; - boolean bypass_mode; - audio_mixer_t mixer_state; -} audio_status_t; - - -
-
-struct audio_mixer -The following structure is used by the AUDIO_SET_MIXER call to set the audio -volume. - - -typedef struct audio_mixer { - unsigned int volume_left; - unsigned int volume_right; -} audio_mixer_t; - - -
-
-audio encodings -A call to AUDIO_GET_CAPABILITIES returns an unsigned integer with the following -bits set according to the hardwares capabilities. - - - #define AUDIO_CAP_DTS 1 - #define AUDIO_CAP_LPCM 2 - #define AUDIO_CAP_MP1 4 - #define AUDIO_CAP_MP2 8 - #define AUDIO_CAP_MP3 16 - #define AUDIO_CAP_AAC 32 - #define AUDIO_CAP_OGG 64 - #define AUDIO_CAP_SDDS 128 - #define AUDIO_CAP_AC3 256 - - -
-
-struct audio_karaoke -The ioctl AUDIO_SET_KARAOKE uses the following format: - - -typedef -struct audio_karaoke { - int vocal1; - int vocal2; - int melody; -} audio_karaoke_t; - -If Vocal1 or Vocal2 are non-zero, they get mixed into left and right t at 70% each. If both, -Vocal1 and Vocal2 are non-zero, Vocal1 gets mixed into the left channel and Vocal2 into the -right channel at 100% each. Ff Melody is non-zero, the melody channel gets mixed into left -and right. - - -
-
-audio attributes -The following attributes can be set by a call to AUDIO_SET_ATTRIBUTES: - - - typedef uint16_t audio_attributes_t; - /⋆ bits: descr. ⋆/ - /⋆ 15-13 audio coding mode (0=ac3, 2=mpeg1, 3=mpeg2ext, 4=LPCM, 6=DTS, ⋆/ - /⋆ 12 multichannel extension ⋆/ - /⋆ 11-10 audio type (0=not spec, 1=language included) ⋆/ - /⋆ 9- 8 audio application mode (0=not spec, 1=karaoke, 2=surround) ⋆/ - /⋆ 7- 6 Quantization / DRC (mpeg audio: 1=DRC exists)(lpcm: 0=16bit, ⋆/ - /⋆ 5- 4 Sample frequency fs (0=48kHz, 1=96kHz) ⋆/ - /⋆ 2- 0 number of audio channels (n+1 channels) ⋆/ - -
-
-Audio Function Calls - - -
-open() -DESCRIPTION - - -This system call opens a named audio device (e.g. /dev/dvb/adapter0/audio0) - for subsequent use. When an open() call has succeeded, the device will be ready - for use. The significance of blocking or non-blocking mode is described in the - documentation for functions where there is a difference. It does not affect the - semantics of the open() call itself. A device opened in blocking mode can later - be put into non-blocking mode (and vice versa) using the F_SETFL command - of the fcntl system call. This is a standard system call, documented in the Linux - manual page for fcntl. Only one user can open the Audio Device in O_RDWR - mode. All other attempts to open the device in this mode will fail, and an error - code will be returned. If the Audio Device is opened in O_RDONLY mode, the - only ioctl call that can be used is AUDIO_GET_STATUS. All other call will - return with an error code. - - -SYNOPSIS - - -int open(const char ⋆deviceName, int flags); - - -PARAMETERS - - -const char - *deviceName - -Name of specific audio device. - - -int flags - -A bit-wise OR of the following flags: - - - -O_RDONLY read-only access - - - -O_RDWR read/write access - - - -O_NONBLOCK open in non-blocking mode - - - -(blocking mode is the default) - - -RETURN VALUE - -ENODEV - -Device driver not loaded/available. - - -EBUSY - -Device or resource busy. - - -EINVAL - -Invalid argument. - - - -
-
-close() -DESCRIPTION - - -This system call closes a previously opened audio device. - - -SYNOPSIS - - -int close(int fd); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -RETURN VALUE - -EBADF - -fd is not a valid open file descriptor. - - - -
-
-write() -DESCRIPTION - - -This system call can only be used if AUDIO_SOURCE_MEMORY is selected - in the ioctl call AUDIO_SELECT_SOURCE. The data provided shall be in - PES format. If O_NONBLOCK is not specified the function will block until - buffer space is available. The amount of data to be transferred is implied by - count. - - -SYNOPSIS - - -size_t write(int fd, const void ⋆buf, size_t count); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -void *buf - -Pointer to the buffer containing the PES data. - - -size_t count - -Size of buf. - - -RETURN VALUE - -EPERM - -Mode AUDIO_SOURCE_MEMORY not selected. - - -ENOMEM - -Attempted to write more data than the internal buffer can - hold. - - -EBADF - -fd is not a valid open file descriptor. - - - -
AUDIO_STOP -DESCRIPTION - - -This ioctl call asks the Audio Device to stop playing the current stream. - - -SYNOPSIS - - -int ioctl(int fd, int request = AUDIO_STOP); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals AUDIO_STOP for this command. - - -&return-value-dvb; - -
AUDIO_PLAY -DESCRIPTION - - -This ioctl call asks the Audio Device to start playing an audio stream from the - selected source. - - -SYNOPSIS - - -int ioctl(int fd, int request = AUDIO_PLAY); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals AUDIO_PLAY for this command. - - -&return-value-dvb; - -
AUDIO_PAUSE -DESCRIPTION - - -This ioctl call suspends the audio stream being played. Decoding and playing - are paused. It is then possible to restart again decoding and playing process of - the audio stream using AUDIO_CONTINUE command. - - -If AUDIO_SOURCE_MEMORY is selected in the ioctl call - AUDIO_SELECT_SOURCE, the DVB-subsystem will not decode (consume) - any more data until the ioctl call AUDIO_CONTINUE or AUDIO_PLAY is - performed. - - -SYNOPSIS - - -int ioctl(int fd, int request = AUDIO_PAUSE); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals AUDIO_PAUSE for this command. - - -&return-value-dvb; - -
AUDIO_CONTINUE -DESCRIPTION - - -This ioctl restarts the decoding and playing process previously paused -with AUDIO_PAUSE command. - - -It only works if the stream were previously stopped with AUDIO_PAUSE - - -SYNOPSIS - - -int ioctl(int fd, int request = AUDIO_CONTINUE); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals AUDIO_CONTINUE for this command. - - -&return-value-dvb; - -
AUDIO_SELECT_SOURCE -DESCRIPTION - - -This ioctl call informs the audio device which source shall be used - for the input data. The possible sources are demux or memory. If - AUDIO_SOURCE_MEMORY is selected, the data is fed to the Audio Device - through the write command. - - -SYNOPSIS - - -int ioctl(int fd, int request = AUDIO_SELECT_SOURCE, - audio_stream_source_t source); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals AUDIO_SELECT_SOURCE for this command. - - -audio_stream_source_t - source - -Indicates the source that shall be used for the Audio - stream. - - -&return-value-dvb; - -
AUDIO_SET_MUTE -DESCRIPTION - -This ioctl is for DVB devices only. To control a V4L2 decoder use the V4L2 -&VIDIOC-DECODER-CMD; with the V4L2_DEC_CMD_START_MUTE_AUDIO flag instead. - -This ioctl call asks the audio device to mute the stream that is currently being - played. - - -SYNOPSIS - - -int ioctl(int fd, int request = AUDIO_SET_MUTE, - boolean state); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals AUDIO_SET_MUTE for this command. - - -boolean state - -Indicates if audio device shall mute or not. - - - -TRUE Audio Mute - - - -FALSE Audio Un-mute - - -&return-value-dvb; - -
AUDIO_SET_AV_SYNC -DESCRIPTION - - -This ioctl call asks the Audio Device to turn ON or OFF A/V synchronization. - - -SYNOPSIS - - -int ioctl(int fd, int request = AUDIO_SET_AV_SYNC, - boolean state); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals AUDIO_AV_SYNC for this command. - - -boolean state - -Tells the DVB subsystem if A/V synchronization shall be - ON or OFF. - - - -TRUE AV-sync ON - - - -FALSE AV-sync OFF - - -&return-value-dvb; - -
AUDIO_SET_BYPASS_MODE -DESCRIPTION - - -This ioctl call asks the Audio Device to bypass the Audio decoder and forward - the stream without decoding. This mode shall be used if streams that can’t be - handled by the DVB system shall be decoded. Dolby DigitalTM streams are - automatically forwarded by the DVB subsystem if the hardware can handle it. - - -SYNOPSIS - - -int ioctl(int fd, int request = - AUDIO_SET_BYPASS_MODE, boolean mode); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals AUDIO_SET_BYPASS_MODE for this - command. - - -boolean mode - -Enables or disables the decoding of the current Audio - stream in the DVB subsystem. - - - -TRUE Bypass is disabled - - - -FALSE Bypass is enabled - - -&return-value-dvb; - -
AUDIO_CHANNEL_SELECT -DESCRIPTION - -This ioctl is for DVB devices only. To control a V4L2 decoder use the V4L2 -V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK control instead. - -This ioctl call asks the Audio Device to select the requested channel if possible. - - -SYNOPSIS - - -int ioctl(int fd, int request = - AUDIO_CHANNEL_SELECT, audio_channel_select_t); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals AUDIO_CHANNEL_SELECT for this - command. - - -audio_channel_select_t - ch - -Select the output format of the audio (mono left/right, - stereo). - - -&return-value-dvb; - -
AUDIO_BILINGUAL_CHANNEL_SELECT -DESCRIPTION - -This ioctl is obsolete. Do not use in new drivers. It has been replaced by -the V4L2 V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK control -for MPEG decoders controlled through V4L2. - -This ioctl call asks the Audio Device to select the requested channel for bilingual streams if possible. - - -SYNOPSIS - - -int ioctl(int fd, int request = - AUDIO_BILINGUAL_CHANNEL_SELECT, audio_channel_select_t); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals AUDIO_BILINGUAL_CHANNEL_SELECT for this - command. - - -audio_channel_select_t -ch - -Select the output format of the audio (mono left/right, - stereo). - - - -&return-value-dvb; - -
AUDIO_GET_PTS -DESCRIPTION - -This ioctl is obsolete. Do not use in new drivers. If you need this functionality, -then please contact the linux-media mailing list (&v4l-ml;). - -This ioctl call asks the Audio Device to return the current PTS timestamp. - - -SYNOPSIS - - -int ioctl(int fd, int request = - AUDIO_GET_PTS, __u64 *pts); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals AUDIO_GET_PTS for this - command. - - -__u64 *pts - - -Returns the 33-bit timestamp as defined in ITU T-REC-H.222.0 / ISO/IEC 13818-1. - - -The PTS should belong to the currently played -frame if possible, but may also be a value close to it -like the PTS of the last decoded frame or the last PTS -extracted by the PES parser. - - -&return-value-dvb; - -
AUDIO_GET_STATUS -DESCRIPTION - - -This ioctl call asks the Audio Device to return the current state of the Audio - Device. - - -SYNOPSIS - - -int ioctl(int fd, int request = AUDIO_GET_STATUS, - struct audio_status ⋆status); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals AUDIO_GET_STATUS for this command. - - -struct audio_status - *status - -Returns the current state of Audio Device. - - -&return-value-dvb; - -
AUDIO_GET_CAPABILITIES -DESCRIPTION - - -This ioctl call asks the Audio Device to tell us about the decoding capabilities - of the audio hardware. - - -SYNOPSIS - - -int ioctl(int fd, int request = - AUDIO_GET_CAPABILITIES, unsigned int ⋆cap); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals AUDIO_GET_CAPABILITIES for this - command. - - -unsigned int *cap - -Returns a bit array of supported sound formats. - - -&return-value-dvb; - -
AUDIO_CLEAR_BUFFER -DESCRIPTION - - -This ioctl call asks the Audio Device to clear all software and hardware buffers - of the audio decoder device. - - -SYNOPSIS - - -int ioctl(int fd, int request = AUDIO_CLEAR_BUFFER); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals AUDIO_CLEAR_BUFFER for this command. - - -&return-value-dvb; - -
AUDIO_SET_ID -DESCRIPTION - - -This ioctl selects which sub-stream is to be decoded if a program or system - stream is sent to the video device. If no audio stream type is set the id has to be - in [0xC0,0xDF] for MPEG sound, in [0x80,0x87] for AC3 and in [0xA0,0xA7] - for LPCM. More specifications may follow for other stream types. If the stream - type is set the id just specifies the substream id of the audio stream and only - the first 5 bits are recognized. - - -SYNOPSIS - - -int ioctl(int fd, int request = AUDIO_SET_ID, int - id); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals AUDIO_SET_ID for this command. - - -int id - -audio sub-stream id - - -&return-value-dvb; - -
AUDIO_SET_MIXER -DESCRIPTION - - -This ioctl lets you adjust the mixer settings of the audio decoder. - - -SYNOPSIS - - -int ioctl(int fd, int request = AUDIO_SET_MIXER, - audio_mixer_t ⋆mix); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals AUDIO_SET_ID for this command. - - -audio_mixer_t *mix - -mixer settings. - - -&return-value-dvb; - -
AUDIO_SET_STREAMTYPE -DESCRIPTION - - -This ioctl tells the driver which kind of audio stream to expect. This is useful - if the stream offers several audio sub-streams like LPCM and AC3. - - -SYNOPSIS - - -int ioctl(fd, int request = AUDIO_SET_STREAMTYPE, - int type); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals AUDIO_SET_STREAMTYPE for this - command. - - -int type - -stream type - - -&return-value-dvb; - -EINVAL - -type is not a valid or supported stream type. - - - -
AUDIO_SET_EXT_ID -DESCRIPTION - - -This ioctl can be used to set the extension id for MPEG streams in DVD - playback. Only the first 3 bits are recognized. - - -SYNOPSIS - - -int ioctl(fd, int request = AUDIO_SET_EXT_ID, int - id); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals AUDIO_SET_EXT_ID for this command. - - -int id - -audio sub_stream_id - - -&return-value-dvb; - -EINVAL - -id is not a valid id. - - - -
AUDIO_SET_ATTRIBUTES -DESCRIPTION - - -This ioctl is intended for DVD playback and allows you to set certain - information about the audio stream. - - -SYNOPSIS - - -int ioctl(fd, int request = AUDIO_SET_ATTRIBUTES, - audio_attributes_t attr ); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals AUDIO_SET_ATTRIBUTES for this command. - - -audio_attributes_t - attr - -audio attributes according to section ?? - - -&return-value-dvb; - -EINVAL - -attr is not a valid or supported attribute setting. - - - -
AUDIO_SET_KARAOKE -DESCRIPTION - - -This ioctl allows one to set the mixer settings for a karaoke DVD. - - -SYNOPSIS - - -int ioctl(fd, int request = AUDIO_SET_KARAOKE, - audio_karaoke_t ⋆karaoke); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals AUDIO_SET_KARAOKE for this - command. - - -audio_karaoke_t - *karaoke - -karaoke settings according to section ??. - - -&return-value-dvb; - -EINVAL - -karaoke is not a valid or supported karaoke setting. - - -
-
diff --git a/Documentation/DocBook/media/dvb/ca.xml b/Documentation/DocBook/media/dvb/ca.xml deleted file mode 100644 index d0b07e763908..000000000000 --- a/Documentation/DocBook/media/dvb/ca.xml +++ /dev/null @@ -1,582 +0,0 @@ -DVB CA Device -The DVB CA device controls the conditional access hardware. It can be accessed through -/dev/dvb/adapter?/ca?. Data types and and ioctl definitions can be accessed by -including linux/dvb/ca.h in your application. - - -
-CA Data Types - - -
-ca_slot_info_t - -typedef struct ca_slot_info { - int num; /⋆ slot number ⋆/ - - int type; /⋆ CA interface this slot supports ⋆/ -#define CA_CI 1 /⋆ CI high level interface ⋆/ -#define CA_CI_LINK 2 /⋆ CI link layer level interface ⋆/ -#define CA_CI_PHYS 4 /⋆ CI physical layer level interface ⋆/ -#define CA_DESCR 8 /⋆ built-in descrambler ⋆/ -#define CA_SC 128 /⋆ simple smart card interface ⋆/ - - unsigned int flags; -#define CA_CI_MODULE_PRESENT 1 /⋆ module (or card) inserted ⋆/ -#define CA_CI_MODULE_READY 2 -} ca_slot_info_t; - - -
-
-ca_descr_info_t - -typedef struct ca_descr_info { - unsigned int num; /⋆ number of available descramblers (keys) ⋆/ - unsigned int type; /⋆ type of supported scrambling system ⋆/ -#define CA_ECD 1 -#define CA_NDS 2 -#define CA_DSS 4 -} ca_descr_info_t; - - -
-
-ca_caps_t - -typedef struct ca_caps { - unsigned int slot_num; /⋆ total number of CA card and module slots ⋆/ - unsigned int slot_type; /⋆ OR of all supported types ⋆/ - unsigned int descr_num; /⋆ total number of descrambler slots (keys) ⋆/ - unsigned int descr_type;/⋆ OR of all supported types ⋆/ - } ca_cap_t; - - -
-
-ca_msg_t - -/⋆ a message to/from a CI-CAM ⋆/ -typedef struct ca_msg { - unsigned int index; - unsigned int type; - unsigned int length; - unsigned char msg[256]; -} ca_msg_t; - - -
-
-ca_descr_t - -typedef struct ca_descr { - unsigned int index; - unsigned int parity; - unsigned char cw[8]; -} ca_descr_t; - -
- -
-ca-pid - -typedef struct ca_pid { - unsigned int pid; - int index; /⋆ -1 == disable⋆/ -} ca_pid_t; - -
- -
-CA Function Calls - - -
-open() -DESCRIPTION - - -This system call opens a named ca device (e.g. /dev/ost/ca) for subsequent use. -When an open() call has succeeded, the device will be ready for use. - The significance of blocking or non-blocking mode is described in the - documentation for functions where there is a difference. It does not affect the - semantics of the open() call itself. A device opened in blocking mode can later - be put into non-blocking mode (and vice versa) using the F_SETFL command - of the fcntl system call. This is a standard system call, documented in the Linux - manual page for fcntl. Only one user can open the CA Device in O_RDWR - mode. All other attempts to open the device in this mode will fail, and an error - code will be returned. - - -SYNOPSIS - - -int open(const char ⋆deviceName, int flags); - - -PARAMETERS - - -const char - *deviceName - -Name of specific video device. - - -int flags - -A bit-wise OR of the following flags: - - - -O_RDONLY read-only access - - - -O_RDWR read/write access - - - -O_NONBLOCK open in non-blocking mode - - - -(blocking mode is the default) - - -RETURN VALUE - -ENODEV - -Device driver not loaded/available. - - -EINTERNAL - -Internal error. - - -EBUSY - -Device or resource busy. - - -EINVAL - -Invalid argument. - - - -
-
-close() -DESCRIPTION - - -This system call closes a previously opened audio device. - - -SYNOPSIS - - -int close(int fd); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -RETURN VALUE - -EBADF - -fd is not a valid open file descriptor. - - -
- -
CA_RESET -DESCRIPTION - - -This ioctl is undocumented. Documentation is welcome. - - -SYNOPSIS - - -int ioctl(fd, int request = CA_RESET); - - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals CA_RESET for this command. - - -&return-value-dvb; -
- -
CA_GET_CAP -DESCRIPTION - - -This ioctl is undocumented. Documentation is welcome. - - -SYNOPSIS - - -int ioctl(fd, int request = CA_GET_CAP, - ca_caps_t *); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals CA_GET_CAP for this command. - - -ca_caps_t * - - -Undocumented. - - -&return-value-dvb; -
- -
CA_GET_SLOT_INFO -DESCRIPTION - - -This ioctl is undocumented. Documentation is welcome. - - -SYNOPSIS - - -int ioctl(fd, int request = CA_GET_SLOT_INFO, - ca_slot_info_t *); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals CA_GET_SLOT_INFO for this command. - - -ca_slot_info_t * - - -Undocumented. - - -&return-value-dvb; -
- -
CA_GET_DESCR_INFO -DESCRIPTION - - -This ioctl is undocumented. Documentation is welcome. - - -SYNOPSIS - - -int ioctl(fd, int request = CA_GET_DESCR_INFO, - ca_descr_info_t *); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals CA_GET_DESCR_INFO for this command. - - -ca_descr_info_t * - - -Undocumented. - - -&return-value-dvb; -
- -
CA_GET_MSG -DESCRIPTION - - -This ioctl is undocumented. Documentation is welcome. - - -SYNOPSIS - - -int ioctl(fd, int request = CA_GET_MSG, - ca_msg_t *); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals CA_GET_MSG for this command. - - -ca_msg_t * - - -Undocumented. - - -&return-value-dvb; -
- -
CA_SEND_MSG -DESCRIPTION - - -This ioctl is undocumented. Documentation is welcome. - - -SYNOPSIS - - -int ioctl(fd, int request = CA_SEND_MSG, - ca_msg_t *); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals CA_SEND_MSG for this command. - - -ca_msg_t * - - -Undocumented. - - -&return-value-dvb; -
- -
CA_SET_DESCR -DESCRIPTION - - -This ioctl is undocumented. Documentation is welcome. - - -SYNOPSIS - - -int ioctl(fd, int request = CA_SET_DESCR, - ca_descr_t *); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals CA_SET_DESCR for this command. - - -ca_descr_t * - - -Undocumented. - - -&return-value-dvb; -
- -
CA_SET_PID -DESCRIPTION - - -This ioctl is undocumented. Documentation is welcome. - - -SYNOPSIS - - -int ioctl(fd, int request = CA_SET_PID, - ca_pid_t *); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals CA_SET_PID for this command. - - -ca_pid_t * - - -Undocumented. - - -&return-value-dvb; -
- -
diff --git a/Documentation/DocBook/media/dvb/demux.xml b/Documentation/DocBook/media/dvb/demux.xml deleted file mode 100644 index 34f2fb1cd601..000000000000 --- a/Documentation/DocBook/media/dvb/demux.xml +++ /dev/null @@ -1,1162 +0,0 @@ -DVB Demux Device - -The DVB demux device controls the filters of the DVB hardware/software. It can be -accessed through /dev/adapter?/demux?. Data types and and ioctl definitions can be -accessed by including linux/dvb/dmx.h in your application. - -
-Demux Data Types - -
-Output for the demux - - - enum dmx_output - - &cs-def; - - - ID - Description - - - - - DMX_OUT_DECODER - Streaming directly to decoder. - - DMX_OUT_TAP - Output going to a memory buffer (to be retrieved via the - read command). Delivers the stream output to the demux - device on which the ioctl is called. - - DMX_OUT_TS_TAP - Output multiplexed into a new TS (to be retrieved by - reading from the logical DVR device). Routes output to the - logical DVR device /dev/dvb/adapter?/dvr?, - which delivers a TS multiplexed from all filters for which - DMX_OUT_TS_TAP was specified. - - DMX_OUT_TSDEMUX_TAP - Like &DMX-OUT-TS-TAP; but retrieved from the DMX - device. - - - -
- -
- -
-dmx_input_t - -typedef enum -{ - DMX_IN_FRONTEND, /⋆ Input from a front-end device. ⋆/ - DMX_IN_DVR /⋆ Input from the logical DVR device. ⋆/ -} dmx_input_t; - -
- -
-dmx_pes_type_t - -typedef enum -{ - DMX_PES_AUDIO0, - DMX_PES_VIDEO0, - DMX_PES_TELETEXT0, - DMX_PES_SUBTITLE0, - DMX_PES_PCR0, - - DMX_PES_AUDIO1, - DMX_PES_VIDEO1, - DMX_PES_TELETEXT1, - DMX_PES_SUBTITLE1, - DMX_PES_PCR1, - - DMX_PES_AUDIO2, - DMX_PES_VIDEO2, - DMX_PES_TELETEXT2, - DMX_PES_SUBTITLE2, - DMX_PES_PCR2, - - DMX_PES_AUDIO3, - DMX_PES_VIDEO3, - DMX_PES_TELETEXT3, - DMX_PES_SUBTITLE3, - DMX_PES_PCR3, - - DMX_PES_OTHER -} dmx_pes_type_t; - -
- -
-struct dmx_filter - - typedef struct dmx_filter -{ - __u8 filter[DMX_FILTER_SIZE]; - __u8 mask[DMX_FILTER_SIZE]; - __u8 mode[DMX_FILTER_SIZE]; -} dmx_filter_t; - -
- -
-struct dmx_sct_filter_params - -struct dmx_sct_filter_params -{ - __u16 pid; - dmx_filter_t filter; - __u32 timeout; - __u32 flags; -#define DMX_CHECK_CRC 1 -#define DMX_ONESHOT 2 -#define DMX_IMMEDIATE_START 4 -#define DMX_KERNEL_CLIENT 0x8000 -}; - -
- -
-struct dmx_pes_filter_params - -struct dmx_pes_filter_params -{ - __u16 pid; - dmx_input_t input; - dmx_output_t output; - dmx_pes_type_t pes_type; - __u32 flags; -}; - -
- -
-struct dmx_event - - struct dmx_event - { - dmx_event_t event; - time_t timeStamp; - union - { - dmx_scrambling_status_t scrambling; - } u; - }; - -
- -
-struct dmx_stc - -struct dmx_stc { - unsigned int num; /⋆ input : which STC? 0..N ⋆/ - unsigned int base; /⋆ output: divisor for stc to get 90 kHz clock ⋆/ - __u64 stc; /⋆ output: stc in 'base'⋆90 kHz units ⋆/ -}; - -
- -
-struct dmx_caps - - typedef struct dmx_caps { - __u32 caps; - int num_decoders; -} dmx_caps_t; - -
- -
-enum dmx_source_t - -typedef enum { - DMX_SOURCE_FRONT0 = 0, - DMX_SOURCE_FRONT1, - DMX_SOURCE_FRONT2, - DMX_SOURCE_FRONT3, - DMX_SOURCE_DVR0 = 16, - DMX_SOURCE_DVR1, - DMX_SOURCE_DVR2, - DMX_SOURCE_DVR3 -} dmx_source_t; - -
- -
-
-Demux Function Calls - -
-open() -DESCRIPTION - - -This system call, used with a device name of /dev/dvb/adapter0/demux0, - allocates a new filter and returns a handle which can be used for subsequent - control of that filter. This call has to be made for each filter to be used, i.e. every - returned file descriptor is a reference to a single filter. /dev/dvb/adapter0/dvr0 - is a logical device to be used for retrieving Transport Streams for digital - video recording. When reading from this device a transport stream containing - the packets from all PES filters set in the corresponding demux device - (/dev/dvb/adapter0/demux0) having the output set to DMX_OUT_TS_TAP. A - recorded Transport Stream is replayed by writing to this device. -The significance of blocking or non-blocking mode is described in the - documentation for functions where there is a difference. It does not affect the - semantics of the open() call itself. A device opened in blocking mode can later - be put into non-blocking mode (and vice versa) using the F_SETFL command - of the fcntl system call. - - -SYNOPSIS - - -int open(const char ⋆deviceName, int flags); - - -PARAMETERS - - -const char - *deviceName - -Name of demux device. - - -int flags - -A bit-wise OR of the following flags: - - - -O_RDWR read/write access - - - -O_NONBLOCK open in non-blocking mode - - - -(blocking mode is the default) - - -RETURN VALUE - -ENODEV - -Device driver not loaded/available. - - -EINVAL - -Invalid argument. - - -EMFILE - -“Too many open files”, i.e. no more filters available. - - -ENOMEM - -The driver failed to allocate enough memory. - - -
- -
-close() -DESCRIPTION - - -This system call deactivates and deallocates a filter that was previously - allocated via the open() call. - - -SYNOPSIS - - -int close(int fd); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -RETURN VALUE - -EBADF - -fd is not a valid open file descriptor. - - -
- -
-read() -DESCRIPTION - - -This system call returns filtered data, which might be section or PES data. The - filtered data is transferred from the driver’s internal circular buffer to buf. The - maximum amount of data to be transferred is implied by count. - - -When returning section data the driver always tries to return a complete single - section (even though buf would provide buffer space for more data). If the size - of the buffer is smaller than the section as much as possible will be returned, - and the remaining data will be provided in subsequent calls. - - -The size of the internal buffer is 2 * 4096 bytes (the size of two maximum - sized sections) by default. The size of this buffer may be changed by using the - DMX_SET_BUFFER_SIZE function. If the buffer is not large enough, or if - the read operations are not performed fast enough, this may result in a buffer - overflow error. In this case EOVERFLOW will be returned, and the circular - buffer will be emptied. This call is blocking if there is no data to return, i.e. the - process will be put to sleep waiting for data, unless the O_NONBLOCK flag - is specified. - - -Note that in order to be able to read, the filtering process has to be started - by defining either a section or a PES filter by means of the ioctl functions, - and then starting the filtering process via the DMX_START ioctl function - or by setting the DMX_IMMEDIATE_START flag. If the reading is done - from a logical DVR demux device, the data will constitute a Transport Stream - including the packets from all PES filters in the corresponding demux device - /dev/dvb/adapter0/demux0 having the output set to DMX_OUT_TS_TAP. - - -SYNOPSIS - - -size_t read(int fd, void ⋆buf, size_t count); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -void *buf - -Pointer to the buffer to be used for returned filtered data. - - -size_t count - -Size of buf. - - -RETURN VALUE - -EWOULDBLOCK - -No data to return and O_NONBLOCK was specified. - - -EBADF - -fd is not a valid open file descriptor. - - -ECRC - -Last section had a CRC error - no data returned. The - buffer is flushed. - - -EOVERFLOW - - - - -The filtered data was not read from the buffer in due - time, resulting in non-read data being lost. The buffer is - flushed. - - -ETIMEDOUT - -The section was not loaded within the stated timeout - period. See ioctl DMX_SET_FILTER for how to set a - timeout. - - -EFAULT - -The driver failed to write to the callers buffer due to an - invalid *buf pointer. - - -
- -
-write() -DESCRIPTION - - -This system call is only provided by the logical device /dev/dvb/adapter0/dvr0, - associated with the physical demux device that provides the actual DVR - functionality. It is used for replay of a digitally recorded Transport Stream. - Matching filters have to be defined in the corresponding physical demux - device, /dev/dvb/adapter0/demux0. The amount of data to be transferred is - implied by count. - - -SYNOPSIS - - -ssize_t write(int fd, const void ⋆buf, size_t - count); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -void *buf - -Pointer to the buffer containing the Transport Stream. - - -size_t count - -Size of buf. - - -RETURN VALUE - -EWOULDBLOCK - -No data was written. This - might happen if O_NONBLOCK was specified and there - is no more buffer space available (if O_NONBLOCK is - not specified the function will block until buffer space is - available). - - -EBUSY - -This error code indicates that there are conflicting - requests. The corresponding demux device is setup to - receive data from the front- end. Make sure that these - filters are stopped and that the filters with input set to - DMX_IN_DVR are started. - - -EBADF - -fd is not a valid open file descriptor. - - -
- -
-DMX_START -DESCRIPTION - - -This ioctl call is used to start the actual filtering operation defined via the ioctl - calls DMX_SET_FILTER or DMX_SET_PES_FILTER. - - -SYNOPSIS - - -int ioctl( int fd, int request = DMX_START); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals DMX_START for this command. - - -&return-value-dvb; - -EINVAL - -Invalid argument, i.e. no filtering parameters provided via - the DMX_SET_FILTER or DMX_SET_PES_FILTER - functions. - - -EBUSY - -This error code indicates that there are conflicting - requests. There are active filters filtering data from - another input source. Make sure that these filters are - stopped before starting this filter. - - -
- -
-DMX_STOP -DESCRIPTION - - -This ioctl call is used to stop the actual filtering operation defined via the - ioctl calls DMX_SET_FILTER or DMX_SET_PES_FILTER and started via - the DMX_START command. - - -SYNOPSIS - - -int ioctl( int fd, int request = DMX_STOP); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals DMX_STOP for this command. - - -&return-value-dvb; -
- -
-DMX_SET_FILTER -DESCRIPTION - - -This ioctl call sets up a filter according to the filter and mask parameters - provided. A timeout may be defined stating number of seconds to wait for a - section to be loaded. A value of 0 means that no timeout should be applied. - Finally there is a flag field where it is possible to state whether a section should - be CRC-checked, whether the filter should be a ”one-shot” filter, i.e. if the - filtering operation should be stopped after the first section is received, and - whether the filtering operation should be started immediately (without waiting - for a DMX_START ioctl call). If a filter was previously set-up, this filter will - be canceled, and the receive buffer will be flushed. - - -SYNOPSIS - - -int ioctl( int fd, int request = DMX_SET_FILTER, - struct dmx_sct_filter_params ⋆params); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals DMX_SET_FILTER for this command. - - -struct - dmx_sct_filter_params - *params - -Pointer to structure containing filter parameters. - - -&return-value-dvb; -
- -
-DMX_SET_PES_FILTER -DESCRIPTION - - -This ioctl call sets up a PES filter according to the parameters provided. By a - PES filter is meant a filter that is based just on the packet identifier (PID), i.e. - no PES header or payload filtering capability is supported. - - -The transport stream destination for the filtered output may be set. Also the - PES type may be stated in order to be able to e.g. direct a video stream directly - to the video decoder. Finally there is a flag field where it is possible to state - whether the filtering operation should be started immediately (without waiting - for a DMX_START ioctl call). If a filter was previously set-up, this filter will - be cancelled, and the receive buffer will be flushed. - - -SYNOPSIS - - -int ioctl( int fd, int request = DMX_SET_PES_FILTER, - struct dmx_pes_filter_params ⋆params); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals DMX_SET_PES_FILTER for this command. - - -struct - dmx_pes_filter_params - *params - -Pointer to structure containing filter parameters. - - -&return-value-dvb; - -EBUSY - -This error code indicates that there are conflicting - requests. There are active filters filtering data from - another input source. Make sure that these filters are - stopped before starting this filter. - - -
- -
-DMX_SET_BUFFER_SIZE -DESCRIPTION - - -This ioctl call is used to set the size of the circular buffer used for filtered data. - The default size is two maximum sized sections, i.e. if this function is not called - a buffer size of 2 * 4096 bytes will be used. - - -SYNOPSIS - - -int ioctl( int fd, int request = - DMX_SET_BUFFER_SIZE, unsigned long size); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals DMX_SET_BUFFER_SIZE for this command. - - -unsigned long size - -Size of circular buffer. - - -&return-value-dvb; -
- -
-DMX_GET_EVENT -DESCRIPTION - - -This ioctl call returns an event if available. If an event is not available, - the behavior depends on whether the device is in blocking or non-blocking - mode. In the latter case, the call fails immediately with errno set to - EWOULDBLOCK. In the former case, the call blocks until an event becomes - available. - - -The standard Linux poll() and/or select() system calls can be used with the - device file descriptor to watch for new events. For select(), the file descriptor - should be included in the exceptfds argument, and for poll(), POLLPRI should - be specified as the wake-up condition. Only the latest event for each filter is - saved. - - -SYNOPSIS - - -int ioctl( int fd, int request = DMX_GET_EVENT, - struct dmx_event ⋆ev); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals DMX_GET_EVENT for this command. - - -struct dmx_event *ev - -Pointer to the location where the event is to be stored. - - -&return-value-dvb; - -EWOULDBLOCK - -There is no event pending, and the device is in - non-blocking mode. - - -
- -
-DMX_GET_STC -DESCRIPTION - - -This ioctl call returns the current value of the system time counter (which is driven - by a PES filter of type DMX_PES_PCR). Some hardware supports more than one - STC, so you must specify which one by setting the num field of stc before the ioctl - (range 0...n). The result is returned in form of a ratio with a 64 bit numerator - and a 32 bit denominator, so the real 90kHz STC value is stc->stc / - stc->base - . - - -SYNOPSIS - - -int ioctl( int fd, int request = DMX_GET_STC, struct - dmx_stc ⋆stc); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals DMX_GET_STC for this command. - - -struct dmx_stc *stc - -Pointer to the location where the stc is to be stored. - - -&return-value-dvb; - -EINVAL - -Invalid stc number. - - -
- -
DMX_GET_PES_PIDS -DESCRIPTION - - -This ioctl is undocumented. Documentation is welcome. - - -SYNOPSIS - - -int ioctl(fd, int request = DMX_GET_PES_PIDS, - __u16[5]); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals DMX_GET_PES_PIDS for this command. - - -__u16[5] - - -Undocumented. - - -&return-value-dvb; -
- -
DMX_GET_CAPS -DESCRIPTION - - -This ioctl is undocumented. Documentation is welcome. - - -SYNOPSIS - - -int ioctl(fd, int request = DMX_GET_CAPS, - dmx_caps_t *); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals DMX_GET_CAPS for this command. - - -dmx_caps_t * - - -Undocumented. - - -&return-value-dvb; -
- -
DMX_SET_SOURCE -DESCRIPTION - - -This ioctl is undocumented. Documentation is welcome. - - -SYNOPSIS - - -int ioctl(fd, int request = DMX_SET_SOURCE, - dmx_source_t *); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals DMX_SET_SOURCE for this command. - - -dmx_source_t * - - -Undocumented. - - -&return-value-dvb; -
- -
DMX_ADD_PID -DESCRIPTION - - -This ioctl call allows to add multiple PIDs to a transport stream filter -previously set up with DMX_SET_PES_FILTER and output equal to DMX_OUT_TSDEMUX_TAP. - -It is used by readers of /dev/dvb/adapterX/demuxY. - -It may be called at any time, i.e. before or after the first filter on the -shared file descriptor was started. It makes it possible to record multiple -services without the need to de-multiplex or re-multiplex TS packets. - - -SYNOPSIS - - -int ioctl(fd, int request = DMX_ADD_PID, - __u16 *); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals DMX_ADD_PID for this command. - - -__u16 * - - -PID number to be filtered. - - -&return-value-dvb; -
- -
DMX_REMOVE_PID -DESCRIPTION - - -This ioctl call allows to remove a PID when multiple PIDs are set on a -transport stream filter, e. g. a filter previously set up with output equal to -DMX_OUT_TSDEMUX_TAP, created via either DMX_SET_PES_FILTER or DMX_ADD_PID. - -It is used by readers of /dev/dvb/adapterX/demuxY. - -It may be called at any time, i.e. before or after the first filter on the -shared file descriptor was started. It makes it possible to record multiple -services without the need to de-multiplex or re-multiplex TS packets. - - -SYNOPSIS - - -int ioctl(fd, int request = DMX_REMOVE_PID, - __u16 *); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals DMX_REMOVE_PID for this command. - - -__u16 * - - -PID of the PES filter to be removed. - - -&return-value-dvb; -
- - -
diff --git a/Documentation/DocBook/media/dvb/dvbapi.xml b/Documentation/DocBook/media/dvb/dvbapi.xml deleted file mode 100644 index 8576481e20ae..000000000000 --- a/Documentation/DocBook/media/dvb/dvbapi.xml +++ /dev/null @@ -1,156 +0,0 @@ - - - -Ralph -Metzler -J. K. -
rjkm@metzlerbros.de
-
- -Marcus -Metzler -O. C. -
rjkm@metzlerbros.de
-
-
- - -Mauro -Carvalho -Chehab -
m.chehab@samsung.com
-Ported document to Docbook XML. -
-
- - 2002 - 2003 - Convergence GmbH - - - 2009-2015 - Mauro Carvalho Chehab - - - - - - 2.1.0 - 2015-05-29 - mcc - - DocBook improvements and cleanups, in order to document the - system calls on a more standard way and provide more description - about the current DVB API. - - - - 2.0.4 - 2011-05-06 - mcc - - Add more information about DVB APIv5, better describing the frontend GET/SET props ioctl's. - - - - 2.0.3 - 2010-07-03 - mcc - - Add some frontend capabilities flags, present on kernel, but missing at the specs. - - - - 2.0.2 - 2009-10-25 - mcc - - documents FE_SET_FRONTEND_TUNE_MODE and FE_DISHETWORK_SEND_LEGACY_CMD ioctls. - - - -2.0.1 -2009-09-16 -mcc - -Added ISDB-T test originally written by Patrick Boettcher - - - -2.0.0 -2009-09-06 -mcc -Conversion from LaTex to DocBook XML. The - contents is the same as the original LaTex version. - - -1.0.0 -2003-07-24 -rjkm -Initial revision on LaTEX. - - -
- - -LINUX DVB API -Version 5.10 - - - &sub-intro; - - - &sub-frontend; - - - &sub-demux; - - - &sub-ca; - - - &sub-net; - - - DVB Deprecated APIs - The APIs described here are kept only for historical reasons. There's - just one driver for a very legacy hardware that uses this API. No - modern drivers should use it. Instead, audio and video should be using - the V4L2 and ALSA APIs, and the pipelines should be set using the - Media Controller API -
- &sub-video; -
-
- &sub-audio; -
-
- - &sub-examples; - - - - DVB Audio Header File - &sub-audio-h; - - - DVB Conditional Access Header File - &sub-ca-h; - - - DVB Demux Header File - &sub-dmx-h; - - - DVB Frontend Header File - &sub-frontend-h; - - - DVB Network Header File - &sub-net-h; - - - DVB Video Header File - &sub-video-h; - - diff --git a/Documentation/DocBook/media/dvb/dvbproperty.xml b/Documentation/DocBook/media/dvb/dvbproperty.xml deleted file mode 100644 index e579ae5088ae..000000000000 --- a/Documentation/DocBook/media/dvb/dvbproperty.xml +++ /dev/null @@ -1,1680 +0,0 @@ -
-DVB Frontend properties -Tuning into a Digital TV physical channel and starting decoding it - requires changing a set of parameters, in order to control the - tuner, the demodulator, the Linear Low-noise Amplifier (LNA) and to set the - antenna subsystem via Satellite Equipment Control (SEC), on satellite - systems. The actual parameters are specific to each particular digital - TV standards, and may change as the digital TV specs evolves. -In the past, the strategy used was to have a union with the parameters - needed to tune for DVB-S, DVB-C, DVB-T and ATSC delivery systems grouped - there. The problem is that, as the second generation standards appeared, - those structs were not big enough to contain the additional parameters. - Also, the union didn't have any space left to be expanded without breaking - userspace. So, the decision was to deprecate the legacy union/struct based - approach, in favor of a properties set approach. - -NOTE: on Linux DVB API version 3, setting a frontend were done via - struct dvb_frontend_parameters. - This got replaced on version 5 (also called "S2API", as this API were - added originally_enabled to provide support for DVB-S2), because the old - API has a very limited support to new standards and new hardware. This - section describes the new and recommended way to set the frontend, with - suppports all digital TV delivery systems. - -Example: with the properties based approach, in order to set the tuner - to a DVB-C channel at 651 kHz, modulated with 256-QAM, FEC 3/4 and symbol - rate of 5.217 Mbauds, those properties should be sent to - FE_SET_PROPERTY ioctl: - - &DTV-DELIVERY-SYSTEM; = SYS_DVBC_ANNEX_A - &DTV-FREQUENCY; = 651000000 - &DTV-MODULATION; = QAM_256 - &DTV-INVERSION; = INVERSION_AUTO - &DTV-SYMBOL-RATE; = 5217000 - &DTV-INNER-FEC; = FEC_3_4 - &DTV-TUNE; - - -The code that would do the above is: - -#include <stdio.h> -#include <fcntl.h> -#include <sys/ioctl.h> -#include <linux/dvb/frontend.h> - -static struct dtv_property props[] = { - { .cmd = DTV_DELIVERY_SYSTEM, .u.data = SYS_DVBC_ANNEX_A }, - { .cmd = DTV_FREQUENCY, .u.data = 651000000 }, - { .cmd = DTV_MODULATION, .u.data = QAM_256 }, - { .cmd = DTV_INVERSION, .u.data = INVERSION_AUTO }, - { .cmd = DTV_SYMBOL_RATE, .u.data = 5217000 }, - { .cmd = DTV_INNER_FEC, .u.data = FEC_3_4 }, - { .cmd = DTV_TUNE } -}; - -static struct dtv_properties dtv_prop = { - .num = 6, .props = props -}; - -int main(void) -{ - int fd = open("/dev/dvb/adapter0/frontend0", O_RDWR); - - if (!fd) { - perror ("open"); - return -1; - } - if (ioctl(fd, FE_SET_PROPERTY, &dtv_prop) == -1) { - perror("ioctl"); - return -1; - } - printf("Frontend set\n"); - return 0; -} - - -NOTE: While it is possible to directly call the Kernel code like the - above example, it is strongly recommended to use - libdvbv5, - as it provides abstraction to work with the supported digital TV standards - and provides methods for usual operations like program scanning and to - read/write channel descriptor files. - -
-struct <structname>dtv_stats</structname> - -struct dtv_stats { - __u8 scale; /* enum fecap_scale_params type */ - union { - __u64 uvalue; /* for counters and relative scales */ - __s64 svalue; /* for 1/1000 dB measures */ - }; -} __packed; - -
-
-struct <structname>dtv_fe_stats</structname> - -#define MAX_DTV_STATS 4 - -struct dtv_fe_stats { - __u8 len; - &dtv-stats; stat[MAX_DTV_STATS]; -} __packed; - -
- -
-struct <structname>dtv_property</structname> - -/* Reserved fields should be set to 0 */ - -struct dtv_property { - __u32 cmd; - __u32 reserved[3]; - union { - __u32 data; - &dtv-fe-stats; st; - struct { - __u8 data[32]; - __u32 len; - __u32 reserved1[3]; - void *reserved2; - } buffer; - } u; - int result; -} __attribute__ ((packed)); - -/* num of properties cannot exceed DTV_IOCTL_MAX_MSGS per ioctl */ -#define DTV_IOCTL_MAX_MSGS 64 - -
-
-struct <structname>dtv_properties</structname> - -struct dtv_properties { - __u32 num; - &dtv-property; *props; -}; - -
- -
- Property types - -On FE_GET_PROPERTY and FE_SET_PROPERTY, -the actual action is determined by the dtv_property cmd/data pairs. With one single ioctl, is possible to -get/set up to 64 properties. The actual meaning of each property is described on the next sections. - - -The available frontend property types are shown on the next section. -
- -
- Digital TV property parameters -
- <constant>DTV_UNDEFINED</constant> - Used internally. A GET/SET operation for it won't change or return anything. -
-
- <constant>DTV_TUNE</constant> - Interpret the cache of data, build either a traditional frontend tunerequest so we can pass validation in the FE_SET_FRONTEND ioctl. -
-
- <constant>DTV_CLEAR</constant> - Reset a cache of data specific to the frontend here. This does not effect hardware. -
-
- <constant>DTV_FREQUENCY</constant> - - Central frequency of the channel. - - Notes: - 1)For satellite delivery systems, it is measured in kHz. - For the other ones, it is measured in Hz. - 2)For ISDB-T, the channels are usually transmitted with an offset of 143kHz. - E.g. a valid frequency could be 474143 kHz. The stepping is bound to the bandwidth of - the channel which is 6MHz. - - 3)As in ISDB-Tsb the channel consists of only one or three segments the - frequency step is 429kHz, 3*429 respectively. As for ISDB-T the - central frequency of the channel is expected. -
-
- <constant>DTV_MODULATION</constant> -Specifies the frontend modulation type for delivery systems that supports - more than one modulation type. The modulation can be one of the types - defined by &fe-modulation;. - - -
-Modulation property - -Most of the digital TV standards currently offers more than one possible - modulation (sometimes called as "constellation" on some standards). This - enum contains the values used by the Kernel. Please note that not all - modulations are supported by a given standard. - - - enum fe_modulation - - &cs-def; - - - ID - Description - - - - - QPSK - QPSK modulation - - QAM_16 - 16-QAM modulation - - QAM_32 - 32-QAM modulation - - QAM_64 - 64-QAM modulation - - QAM_128 - 128-QAM modulation - - QAM_256 - 256-QAM modulation - - QAM_AUTO - Autodetect QAM modulation - - VSB_8 - 8-VSB modulation - - VSB_16 - 16-VSB modulation - - PSK_8 - 8-PSK modulation - - APSK_16 - 16-APSK modulation - - APSK_32 - 32-APSK modulation - - DQPSK - DQPSK modulation - - QAM_4_NR - 4-QAM-NR modulation - - - -
-
- -
-
- <constant>DTV_BANDWIDTH_HZ</constant> - - Bandwidth for the channel, in HZ. - - Possible values: - 1712000, - 5000000, - 6000000, - 7000000, - 8000000, - 10000000. - - - Notes: - - 1) For ISDB-T it should be always 6000000Hz (6MHz) - 2) For ISDB-Tsb it can vary depending on the number of connected segments - 3) Bandwidth doesn't apply for DVB-C transmissions, as the bandwidth - for DVB-C depends on the symbol rate - 4) Bandwidth in ISDB-T is fixed (6MHz) or can be easily derived from - other parameters (DTV_ISDBT_SB_SEGMENT_IDX, - DTV_ISDBT_SB_SEGMENT_COUNT). - 5) DVB-T supports 6, 7 and 8MHz. - 6) In addition, DVB-T2 supports 1.172, 5 and 10MHz. -
-
- <constant>DTV_INVERSION</constant> - - Specifies if the frontend should do spectral inversion or not. - -
-enum fe_modulation: Frontend spectral inversion - -This parameter indicates if spectral inversion should be presumed or not. - In the automatic setting (INVERSION_AUTO) the hardware - will try to figure out the correct setting by itself. If the hardware - doesn't support, the DVB core will try to lock at the carrier first with - inversion off. If it fails, it will try to enable inversion. - - - - enum fe_modulation - - &cs-def; - - - ID - Description - - - - - INVERSION_OFF - Don't do spectral band inversion. - - INVERSION_ON - Do spectral band inversion. - - INVERSION_AUTO - Autodetect spectral band inversion. - - - -
-
- -
-
- <constant>DTV_DISEQC_MASTER</constant> - Currently not implemented. -
-
- <constant>DTV_SYMBOL_RATE</constant> - Digital TV symbol rate, in bauds (symbols/second). Used on cable standards. -
-
- <constant>DTV_INNER_FEC</constant> - Used cable/satellite transmissions. The acceptable values are: - -
-enum fe_code_rate: type of the Forward Error Correction. - - - enum fe_code_rate - - &cs-def; - - - ID - Description - - - - - FEC_NONE - No Forward Error Correction Code - - FEC_AUTO - Autodetect Error Correction Code - - FEC_1_2 - Forward Error Correction Code 1/2 - - FEC_2_3 - Forward Error Correction Code 2/3 - - FEC_3_4 - Forward Error Correction Code 3/4 - - FEC_4_5 - Forward Error Correction Code 4/5 - - FEC_5_6 - Forward Error Correction Code 5/6 - - FEC_6_7 - Forward Error Correction Code 6/7 - - FEC_7_8 - Forward Error Correction Code 7/8 - - FEC_8_9 - Forward Error Correction Code 8/9 - - FEC_9_10 - Forward Error Correction Code 9/10 - - FEC_2_5 - Forward Error Correction Code 2/5 - - FEC_3_5 - Forward Error Correction Code 3/5 - - - -
-
-
-
- <constant>DTV_VOLTAGE</constant> - The voltage is usually used with non-DiSEqC capable LNBs to switch - the polarzation (horizontal/vertical). When using DiSEqC epuipment this - voltage has to be switched consistently to the DiSEqC commands as - described in the DiSEqC spec. - - - enum fe_sec_voltage - - &cs-def; - - - ID - Description - - - - - SEC_VOLTAGE_13 - Set DC voltage level to 13V - - SEC_VOLTAGE_18 - Set DC voltage level to 18V - - SEC_VOLTAGE_OFF - Don't send any voltage to the antenna - - - -
-
-
- <constant>DTV_TONE</constant> - Currently not used. -
-
- <constant>DTV_PILOT</constant> - Sets DVB-S2 pilot -
- fe_pilot type - - enum fe_pilot - - &cs-def; - - - ID - Description - - - - - PILOT_ON - Pilot tones enabled - - PILOT_OFF - Pilot tones disabled - - PILOT_AUTO - Autodetect pilot tones - - - -
-
-
-
- <constant>DTV_ROLLOFF</constant> - Sets DVB-S2 rolloff - -
- fe_rolloff type - - enum fe_rolloff - - &cs-def; - - - ID - Description - - - - - ROLLOFF_35 - Roloff factor: α=35% - - ROLLOFF_20 - Roloff factor: α=20% - - ROLLOFF_25 - Roloff factor: α=25% - - ROLLOFF_AUTO - Auto-detect the roloff factor. - - - -
-
-
-
- <constant>DTV_DISEQC_SLAVE_REPLY</constant> - Currently not implemented. -
-
- <constant>DTV_FE_CAPABILITY_COUNT</constant> - Currently not implemented. -
-
- <constant>DTV_FE_CAPABILITY</constant> - Currently not implemented. -
-
- <constant>DTV_DELIVERY_SYSTEM</constant> - Specifies the type of Delivery system -
- fe_delivery_system type - Possible values: - - - enum fe_delivery_system - - &cs-def; - - - ID - Description - - - - - SYS_UNDEFINED - Undefined standard. Generally, indicates an error - - SYS_DVBC_ANNEX_A - Cable TV: DVB-C following ITU-T J.83 Annex A spec - - SYS_DVBC_ANNEX_B - Cable TV: DVB-C following ITU-T J.83 Annex B spec (ClearQAM) - - SYS_DVBC_ANNEX_C - Cable TV: DVB-C following ITU-T J.83 Annex C spec - - SYS_ISDBC - Cable TV: ISDB-C (no drivers yet) - - SYS_DVBT - Terrestral TV: DVB-T - - SYS_DVBT2 - Terrestral TV: DVB-T2 - - SYS_ISDBT - Terrestral TV: ISDB-T - - SYS_ATSC - Terrestral TV: ATSC - - SYS_ATSCMH - Terrestral TV (mobile): ATSC-M/H - - SYS_DTMB - Terrestrial TV: DTMB - - SYS_DVBS - Satellite TV: DVB-S - - SYS_DVBS2 - Satellite TV: DVB-S2 - - SYS_TURBO - Satellite TV: DVB-S Turbo - - SYS_ISDBS - Satellite TV: ISDB-S - - SYS_DAB - Digital audio: DAB (not fully supported) - - SYS_DSS - Satellite TV:"DSS (not fully supported) - - SYS_CMMB - Terrestral TV (mobile):CMMB (not fully supported) - - SYS_DVBH - Terrestral TV (mobile): DVB-H (standard deprecated) - - - -
- - -
-
-
- <constant>DTV_ISDBT_PARTIAL_RECEPTION</constant> - - If DTV_ISDBT_SOUND_BROADCASTING is '0' this bit-field represents whether - the channel is in partial reception mode or not. - - If '1' DTV_ISDBT_LAYERA_* values are assigned to the center segment and - DTV_ISDBT_LAYERA_SEGMENT_COUNT has to be '1'. - - If in addition DTV_ISDBT_SOUND_BROADCASTING is '1' - DTV_ISDBT_PARTIAL_RECEPTION represents whether this ISDB-Tsb channel - is consisting of one segment and layer or three segments and two layers. - - Possible values: 0, 1, -1 (AUTO) -
-
- <constant>DTV_ISDBT_SOUND_BROADCASTING</constant> - - This field represents whether the other DTV_ISDBT_*-parameters are - referring to an ISDB-T and an ISDB-Tsb channel. (See also - DTV_ISDBT_PARTIAL_RECEPTION). - - Possible values: 0, 1, -1 (AUTO) -
-
- <constant>DTV_ISDBT_SB_SUBCHANNEL_ID</constant> - - This field only applies if DTV_ISDBT_SOUND_BROADCASTING is '1'. - - (Note of the author: This might not be the correct description of the - SUBCHANNEL-ID in all details, but it is my understanding of the technical - background needed to program a device) - - An ISDB-Tsb channel (1 or 3 segments) can be broadcasted alone or in a - set of connected ISDB-Tsb channels. In this set of channels every - channel can be received independently. The number of connected - ISDB-Tsb segment can vary, e.g. depending on the frequency spectrum - bandwidth available. - - Example: Assume 8 ISDB-Tsb connected segments are broadcasted. The - broadcaster has several possibilities to put those channels in the - air: Assuming a normal 13-segment ISDB-T spectrum he can align the 8 - segments from position 1-8 to 5-13 or anything in between. - - The underlying layer of segments are subchannels: each segment is - consisting of several subchannels with a predefined IDs. A sub-channel - is used to help the demodulator to synchronize on the channel. - - An ISDB-T channel is always centered over all sub-channels. As for - the example above, in ISDB-Tsb it is no longer as simple as that. - - The DTV_ISDBT_SB_SUBCHANNEL_ID parameter is used to give the - sub-channel ID of the segment to be demodulated. - - Possible values: 0 .. 41, -1 (AUTO) -
-
- <constant>DTV_ISDBT_SB_SEGMENT_IDX</constant> - This field only applies if DTV_ISDBT_SOUND_BROADCASTING is '1'. - DTV_ISDBT_SB_SEGMENT_IDX gives the index of the segment to be - demodulated for an ISDB-Tsb channel where several of them are - transmitted in the connected manner. - Possible values: 0 .. DTV_ISDBT_SB_SEGMENT_COUNT - 1 - Note: This value cannot be determined by an automatic channel search. -
-
- <constant>DTV_ISDBT_SB_SEGMENT_COUNT</constant> - This field only applies if DTV_ISDBT_SOUND_BROADCASTING is '1'. - DTV_ISDBT_SB_SEGMENT_COUNT gives the total count of connected ISDB-Tsb - channels. - Possible values: 1 .. 13 - Note: This value cannot be determined by an automatic channel search. -
-
- <constant>DTV-ISDBT-LAYER*</constant> parameters - ISDB-T channels can be coded hierarchically. As opposed to DVB-T in - ISDB-T hierarchical layers can be decoded simultaneously. For that - reason a ISDB-T demodulator has 3 Viterbi and 3 Reed-Solomon decoders. - ISDB-T has 3 hierarchical layers which each can use a part of the - available segments. The total number of segments over all layers has - to 13 in ISDB-T. - There are 3 parameter sets, for Layers A, B and C. -
- <constant>DTV_ISDBT_LAYER_ENABLED</constant> - Hierarchical reception in ISDB-T is achieved by enabling or disabling - layers in the decoding process. Setting all bits of - DTV_ISDBT_LAYER_ENABLED to '1' forces all layers (if applicable) to be - demodulated. This is the default. - If the channel is in the partial reception mode - (DTV_ISDBT_PARTIAL_RECEPTION = 1) the central segment can be decoded - independently of the other 12 segments. In that mode layer A has to - have a SEGMENT_COUNT of 1. - In ISDB-Tsb only layer A is used, it can be 1 or 3 in ISDB-Tsb - according to DTV_ISDBT_PARTIAL_RECEPTION. SEGMENT_COUNT must be filled - accordingly. - Possible values: 0x1, 0x2, 0x4 (|-able) - DTV_ISDBT_LAYER_ENABLED[0:0] - layer A - DTV_ISDBT_LAYER_ENABLED[1:1] - layer B - DTV_ISDBT_LAYER_ENABLED[2:2] - layer C - DTV_ISDBT_LAYER_ENABLED[31:3] unused -
-
- <constant>DTV_ISDBT_LAYER*_FEC</constant> - Possible values: FEC_AUTO, FEC_1_2, FEC_2_3, FEC_3_4, FEC_5_6, FEC_7_8 -
-
- <constant>DTV_ISDBT_LAYER*_MODULATION</constant> - Possible values: QAM_AUTO, QPSK, QAM_16, QAM_64, DQPSK - Note: If layer C is DQPSK layer B has to be DQPSK. If layer B is DQPSK - and DTV_ISDBT_PARTIAL_RECEPTION=0 layer has to be DQPSK. -
-
- <constant>DTV_ISDBT_LAYER*_SEGMENT_COUNT</constant> - Possible values: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, -1 (AUTO) - Note: Truth table for DTV_ISDBT_SOUND_BROADCASTING and - DTV_ISDBT_PARTIAL_RECEPTION and LAYER*_SEGMENT_COUNT - - - - - PR - SB - Layer A width - Layer B width - Layer C width - total width - - - 0 - 0 - 1 .. 13 - 1 .. 13 - 1 .. 13 - 13 - - - 1 - 0 - 1 - 1 .. 13 - 1 .. 13 - 13 - - - 0 - 1 - 1 - 0 - 0 - 1 - - - 1 - 1 - 1 - 2 - 0 - 13 - - - - -
-
- <constant>DTV_ISDBT_LAYER*_TIME_INTERLEAVING</constant> - Valid values: 0, 1, 2, 4, -1 (AUTO) - when DTV_ISDBT_SOUND_BROADCASTING is active, value 8 is also valid. - Note: The real time interleaving length depends on the mode (fft-size). The values - here are referring to what can be found in the TMCC-structure, as shown in the table below. - - - - - DTV_ISDBT_LAYER*_TIME_INTERLEAVING - Mode 1 (2K FFT) - Mode 2 (4K FFT) - Mode 3 (8K FFT) - - - 0 - 0 - 0 - 0 - - - 1 - 4 - 2 - 1 - - - 2 - 8 - 4 - 2 - - - 4 - 16 - 8 - 4 - - - - -
-
- <constant>DTV_ATSCMH_FIC_VER</constant> - Version number of the FIC (Fast Information Channel) signaling data. - FIC is used for relaying information to allow rapid service acquisition by the receiver. - Possible values: 0, 1, 2, 3, ..., 30, 31 -
-
- <constant>DTV_ATSCMH_PARADE_ID</constant> - Parade identification number - A parade is a collection of up to eight MH groups, conveying one or two ensembles. - Possible values: 0, 1, 2, 3, ..., 126, 127 -
-
- <constant>DTV_ATSCMH_NOG</constant> - Number of MH groups per MH subframe for a designated parade. - Possible values: 1, 2, 3, 4, 5, 6, 7, 8 -
-
- <constant>DTV_ATSCMH_TNOG</constant> - Total number of MH groups including all MH groups belonging to all MH parades in one MH subframe. - Possible values: 0, 1, 2, 3, ..., 30, 31 -
-
- <constant>DTV_ATSCMH_SGN</constant> - Start group number. - Possible values: 0, 1, 2, 3, ..., 14, 15 -
-
- <constant>DTV_ATSCMH_PRC</constant> - Parade repetition cycle. - Possible values: 1, 2, 3, 4, 5, 6, 7, 8 -
-
- <constant>DTV_ATSCMH_RS_FRAME_MODE</constant> - Reed Solomon (RS) frame mode. - Possible values are: - - enum atscmh_rs_frame_mode - - &cs-def; - - - ID - Description - - - - - ATSCMH_RSFRAME_PRI_ONLY - Single Frame: There is only a primary RS Frame for all - Group Regions. - - ATSCMH_RSFRAME_PRI_SEC - Dual Frame: There are two separate RS Frames: Primary RS - Frame for Group Region A and B and Secondary RS Frame for Group - Region C and D. - - - -
-
-
- <constant>DTV_ATSCMH_RS_FRAME_ENSEMBLE</constant> - Reed Solomon(RS) frame ensemble. - Possible values are: - - enum atscmh_rs_frame_ensemble - - &cs-def; - - - ID - Description - - - - - ATSCMH_RSFRAME_ENS_PRI - Primary Ensemble. - - AATSCMH_RSFRAME_PRI_SEC - Secondary Ensemble. - - AATSCMH_RSFRAME_RES - Reserved. Shouldn't be used. - - - -
-
-
- <constant>DTV_ATSCMH_RS_CODE_MODE_PRI</constant> - Reed Solomon (RS) code mode (primary). - Possible values are: - - enum atscmh_rs_code_mode - - &cs-def; - - - ID - Description - - - - - ATSCMH_RSCODE_211_187 - Reed Solomon code (211,187). - - ATSCMH_RSCODE_223_187 - Reed Solomon code (223,187). - - ATSCMH_RSCODE_235_187 - Reed Solomon code (235,187). - - ATSCMH_RSCODE_RES - Reserved. Shouldn't be used. - - - -
-
-
- <constant>DTV_ATSCMH_RS_CODE_MODE_SEC</constant> - Reed Solomon (RS) code mode (secondary). - Possible values are the same as documented on - &atscmh-rs-code-mode;: -
-
- <constant>DTV_ATSCMH_SCCC_BLOCK_MODE</constant> - Series Concatenated Convolutional Code Block Mode. - Possible values are: - - enum atscmh_scc_block_mode - - &cs-def; - - - ID - Description - - - - - ATSCMH_SCCC_BLK_SEP - Separate SCCC: the SCCC outer code mode shall be set independently - for each Group Region (A, B, C, D) - - ATSCMH_SCCC_BLK_COMB - Combined SCCC: all four Regions shall have the same SCCC outer - code mode. - - ATSCMH_SCCC_BLK_RES - Reserved. Shouldn't be used. - - - -
-
-
- <constant>DTV_ATSCMH_SCCC_CODE_MODE_A</constant> - Series Concatenated Convolutional Code Rate. - Possible values are: - - enum atscmh_sccc_code_mode - - &cs-def; - - - ID - Description - - - - - ATSCMH_SCCC_CODE_HLF - The outer code rate of a SCCC Block is 1/2 rate. - - ATSCMH_SCCC_CODE_QTR - The outer code rate of a SCCC Block is 1/4 rate. - - ATSCMH_SCCC_CODE_RES - to be documented. - - - -
-
-
- <constant>DTV_ATSCMH_SCCC_CODE_MODE_B</constant> - Series Concatenated Convolutional Code Rate. - Possible values are the same as documented on - &atscmh-sccc-code-mode;. -
-
- <constant>DTV_ATSCMH_SCCC_CODE_MODE_C</constant> - Series Concatenated Convolutional Code Rate. - Possible values are the same as documented on - &atscmh-sccc-code-mode;. -
-
- <constant>DTV_ATSCMH_SCCC_CODE_MODE_D</constant> - Series Concatenated Convolutional Code Rate. - Possible values are the same as documented on - &atscmh-sccc-code-mode;. -
-
-
- <constant>DTV_API_VERSION</constant> - Returns the major/minor version of the DVB API -
-
- <constant>DTV_CODE_RATE_HP</constant> - Used on terrestrial transmissions. The acceptable values are - the ones described at &fe-transmit-mode-t;. - -
-
- <constant>DTV_CODE_RATE_LP</constant> - Used on terrestrial transmissions. The acceptable values are - the ones described at &fe-transmit-mode-t;. - - -
- -
- <constant>DTV_GUARD_INTERVAL</constant> - - Possible values are: - -
-Modulation guard interval - - - enum fe_guard_interval - - &cs-def; - - - ID - Description - - - - - GUARD_INTERVAL_AUTO - Autodetect the guard interval - - GUARD_INTERVAL_1_128 - Guard interval 1/128 - - GUARD_INTERVAL_1_32 - Guard interval 1/32 - - GUARD_INTERVAL_1_16 - Guard interval 1/16 - - GUARD_INTERVAL_1_8 - Guard interval 1/8 - - GUARD_INTERVAL_1_4 - Guard interval 1/4 - - GUARD_INTERVAL_19_128 - Guard interval 19/128 - - GUARD_INTERVAL_19_256 - Guard interval 19/256 - - GUARD_INTERVAL_PN420 - PN length 420 (1/4) - - GUARD_INTERVAL_PN595 - PN length 595 (1/6) - - GUARD_INTERVAL_PN945 - PN length 945 (1/9) - - - -
- - Notes: - 1) If DTV_GUARD_INTERVAL is set the GUARD_INTERVAL_AUTO the hardware will - try to find the correct guard interval (if capable) and will use TMCC to fill - in the missing parameters. - 2) Intervals 1/128, 19/128 and 19/256 are used only for DVB-T2 at present - 3) DTMB specifies PN420, PN595 and PN945. -
-
-
- <constant>DTV_TRANSMISSION_MODE</constant> - - Specifies the number of carriers used by the standard. - This is used only on OFTM-based standards, e. g. - DVB-T/T2, ISDB-T, DTMB - -
-enum fe_transmit_mode: Number of carriers per channel - - - enum fe_transmit_mode - - &cs-def; - - - ID - Description - - - - - TRANSMISSION_MODE_AUTO - Autodetect transmission mode. The hardware will try to find - the correct FFT-size (if capable) to fill in the missing - parameters. - - TRANSMISSION_MODE_1K - Transmission mode 1K - - TRANSMISSION_MODE_2K - Transmission mode 2K - - TRANSMISSION_MODE_8K - Transmission mode 8K - - TRANSMISSION_MODE_4K - Transmission mode 4K - - TRANSMISSION_MODE_16K - Transmission mode 16K - - TRANSMISSION_MODE_32K - Transmission mode 32K - - TRANSMISSION_MODE_C1 - Single Carrier (C=1) transmission mode (DTMB) - - TRANSMISSION_MODE_C3780 - Multi Carrier (C=3780) transmission mode (DTMB) - - - -
- - - Notes: - 1) ISDB-T supports three carrier/symbol-size: 8K, 4K, 2K. It is called - 'mode' in the standard: Mode 1 is 2K, mode 2 is 4K, mode 3 is 8K - - 2) If DTV_TRANSMISSION_MODE is set the TRANSMISSION_MODE_AUTO the - hardware will try to find the correct FFT-size (if capable) and will - use TMCC to fill in the missing parameters. - 3) DVB-T specifies 2K and 8K as valid sizes. - 4) DVB-T2 specifies 1K, 2K, 4K, 8K, 16K and 32K. - 5) DTMB specifies C1 and C3780. -
-
-
- <constant>DTV_HIERARCHY</constant> - Frontend hierarchy - - -
-Frontend hierarchy - - - enum fe_hierarchy - - &cs-def; - - - ID - Description - - - - - HIERARCHY_NONE - No hierarchy - - HIERARCHY_AUTO - Autodetect hierarchy (if supported) - - HIERARCHY_1 - Hierarchy 1 - - HIERARCHY_2 - Hierarchy 2 - - HIERARCHY_4 - Hierarchy 4 - - - -
-
- -
-
- <constant>DTV_STREAM_ID</constant> - DVB-S2, DVB-T2 and ISDB-S support the transmission of several - streams on a single transport stream. - This property enables the DVB driver to handle substream filtering, - when supported by the hardware. - By default, substream filtering is disabled. - - For DVB-S2 and DVB-T2, the valid substream id range is from 0 to 255. - - For ISDB, the valid substream id range is from 1 to 65535. - - To disable it, you should use the special macro NO_STREAM_ID_FILTER. - - Note: any value outside the id range also disables filtering. - -
-
- <constant>DTV_DVBT2_PLP_ID_LEGACY</constant> - Obsolete, replaced with DTV_STREAM_ID. -
-
- <constant>DTV_ENUM_DELSYS</constant> - A Multi standard frontend needs to advertise the delivery systems provided. - Applications need to enumerate the provided delivery systems, before using - any other operation with the frontend. Prior to it's introduction, - FE_GET_INFO was used to determine a frontend type. A frontend which - provides more than a single delivery system, FE_GET_INFO doesn't help much. - Applications which intends to use a multistandard frontend must enumerate - the delivery systems associated with it, rather than trying to use - FE_GET_INFO. In the case of a legacy frontend, the result is just the same - as with FE_GET_INFO, but in a more structured format -
-
- <constant>DTV_INTERLEAVING</constant> - -Time interleaving to be used. Currently, used only on DTMB. - - - enum fe_interleaving - - &cs-def; - - - ID - Description - - - - - INTERLEAVING_NONE - No interleaving. - - INTERLEAVING_AUTO - Auto-detect interleaving. - - INTERLEAVING_240 - Interleaving of 240 symbols. - - INTERLEAVING_720 - Interleaving of 720 symbols. - - - -
- -
-
- <constant>DTV_LNA</constant> - Low-noise amplifier. - Hardware might offer controllable LNA which can be set manually - using that parameter. Usually LNA could be found only from - terrestrial devices if at all. - Possible values: 0, 1, LNA_AUTO - 0, LNA off - 1, LNA on - use the special macro LNA_AUTO to set LNA auto -
-
- -
- Frontend statistics indicators - The values are returned via dtv_property.stat. - If the property is supported, dtv_property.stat.len is bigger than zero. - For most delivery systems, dtv_property.stat.len - will be 1 if the stats is supported, and the properties will - return a single value for each parameter. - It should be noted, however, that new OFDM delivery systems - like ISDB can use different modulation types for each group of - carriers. On such standards, up to 3 groups of statistics can be - provided, and dtv_property.stat.len is updated - to reflect the "global" metrics, plus one metric per each carrier - group (called "layer" on ISDB). - So, in order to be consistent with other delivery systems, the first - value at dtv_property.stat.dtv_stats - array refers to the global metric. The other elements of the array - represent each layer, starting from layer A(index 1), - layer B (index 2) and so on. - The number of filled elements are stored at dtv_property.stat.len. - Each element of the dtv_property.stat.dtv_stats array consists on two elements: - - svalue or uvalue, where - svalue is for signed values of the measure (dB measures) - and uvalue is for unsigned values (counters, relative scale) - scale - Scale for the value. It can be: - - FE_SCALE_NOT_AVAILABLE - The parameter is supported by the frontend, but it was not possible to collect it (could be a transitory or permanent condition) - FE_SCALE_DECIBEL - parameter is a signed value, measured in 1/1000 dB - FE_SCALE_RELATIVE - parameter is a unsigned value, where 0 means 0% and 65535 means 100%. - FE_SCALE_COUNTER - parameter is a unsigned value that counts the occurrence of an event, like bit error, block error, or lapsed time. - - - -
- <constant>DTV_STAT_SIGNAL_STRENGTH</constant> - Indicates the signal strength level at the analog part of the tuner or of the demod. - Possible scales for this metric are: - - FE_SCALE_NOT_AVAILABLE - it failed to measure it, or the measurement was not complete yet. - FE_SCALE_DECIBEL - signal strength is in 0.001 dBm units, power measured in miliwatts. This value is generally negative. - FE_SCALE_RELATIVE - The frontend provides a 0% to 100% measurement for power (actually, 0 to 65535). - -
-
- <constant>DTV_STAT_CNR</constant> - Indicates the Signal to Noise ratio for the main carrier. - Possible scales for this metric are: - - FE_SCALE_NOT_AVAILABLE - it failed to measure it, or the measurement was not complete yet. - FE_SCALE_DECIBEL - Signal/Noise ratio is in 0.001 dB units. - FE_SCALE_RELATIVE - The frontend provides a 0% to 100% measurement for Signal/Noise (actually, 0 to 65535). - -
-
- <constant>DTV_STAT_PRE_ERROR_BIT_COUNT</constant> - Measures the number of bit errors before the forward error correction (FEC) on the inner coding block (before Viterbi, LDPC or other inner code). - This measure is taken during the same interval as DTV_STAT_PRE_TOTAL_BIT_COUNT. - In order to get the BER (Bit Error Rate) measurement, it should be divided by - DTV_STAT_PRE_TOTAL_BIT_COUNT. - This measurement is monotonically increased, as the frontend gets more bit count measurements. - The frontend may reset it when a channel/transponder is tuned. - Possible scales for this metric are: - - FE_SCALE_NOT_AVAILABLE - it failed to measure it, or the measurement was not complete yet. - FE_SCALE_COUNTER - Number of error bits counted before the inner coding. - -
-
- <constant>DTV_STAT_PRE_TOTAL_BIT_COUNT</constant> - Measures the amount of bits received before the inner code block, during the same period as - DTV_STAT_PRE_ERROR_BIT_COUNT measurement was taken. - It should be noted that this measurement can be smaller than the total amount of bits on the transport stream, - as the frontend may need to manually restart the measurement, losing some data between each measurement interval. - This measurement is monotonically increased, as the frontend gets more bit count measurements. - The frontend may reset it when a channel/transponder is tuned. - Possible scales for this metric are: - - FE_SCALE_NOT_AVAILABLE - it failed to measure it, or the measurement was not complete yet. - FE_SCALE_COUNTER - Number of bits counted while measuring - DTV_STAT_PRE_ERROR_BIT_COUNT. - -
-
- <constant>DTV_STAT_POST_ERROR_BIT_COUNT</constant> - Measures the number of bit errors after the forward error correction (FEC) done by inner code block (after Viterbi, LDPC or other inner code). - This measure is taken during the same interval as DTV_STAT_POST_TOTAL_BIT_COUNT. - In order to get the BER (Bit Error Rate) measurement, it should be divided by - DTV_STAT_POST_TOTAL_BIT_COUNT. - This measurement is monotonically increased, as the frontend gets more bit count measurements. - The frontend may reset it when a channel/transponder is tuned. - Possible scales for this metric are: - - FE_SCALE_NOT_AVAILABLE - it failed to measure it, or the measurement was not complete yet. - FE_SCALE_COUNTER - Number of error bits counted after the inner coding. - -
-
- <constant>DTV_STAT_POST_TOTAL_BIT_COUNT</constant> - Measures the amount of bits received after the inner coding, during the same period as - DTV_STAT_POST_ERROR_BIT_COUNT measurement was taken. - It should be noted that this measurement can be smaller than the total amount of bits on the transport stream, - as the frontend may need to manually restart the measurement, losing some data between each measurement interval. - This measurement is monotonically increased, as the frontend gets more bit count measurements. - The frontend may reset it when a channel/transponder is tuned. - Possible scales for this metric are: - - FE_SCALE_NOT_AVAILABLE - it failed to measure it, or the measurement was not complete yet. - FE_SCALE_COUNTER - Number of bits counted while measuring - DTV_STAT_POST_ERROR_BIT_COUNT. - -
-
- <constant>DTV_STAT_ERROR_BLOCK_COUNT</constant> - Measures the number of block errors after the outer forward error correction coding (after Reed-Solomon or other outer code). - This measurement is monotonically increased, as the frontend gets more bit count measurements. - The frontend may reset it when a channel/transponder is tuned. - Possible scales for this metric are: - - FE_SCALE_NOT_AVAILABLE - it failed to measure it, or the measurement was not complete yet. - FE_SCALE_COUNTER - Number of error blocks counted after the outer coding. - -
-
- <constant>DTV-STAT_TOTAL_BLOCK_COUNT</constant> - Measures the total number of blocks received during the same period as - DTV_STAT_ERROR_BLOCK_COUNT measurement was taken. - It can be used to calculate the PER indicator, by dividing - DTV_STAT_ERROR_BLOCK_COUNT - by DTV-STAT-TOTAL-BLOCK-COUNT. - Possible scales for this metric are: - - FE_SCALE_NOT_AVAILABLE - it failed to measure it, or the measurement was not complete yet. - FE_SCALE_COUNTER - Number of blocks counted while measuring - DTV_STAT_ERROR_BLOCK_COUNT. - -
-
- -
- Properties used on terrestrial delivery systems -
- DVB-T delivery system - The following parameters are valid for DVB-T: - - DTV_API_VERSION - DTV_DELIVERY_SYSTEM - DTV_TUNE - DTV_CLEAR - DTV_FREQUENCY - DTV_MODULATION - DTV_BANDWIDTH_HZ - DTV_INVERSION - DTV_CODE_RATE_HP - DTV_CODE_RATE_LP - DTV_GUARD_INTERVAL - DTV_TRANSMISSION_MODE - DTV_HIERARCHY - DTV_LNA - - In addition, the DTV QoS statistics are also valid. -
-
- DVB-T2 delivery system - DVB-T2 support is currently in the early stages - of development, so expect that this section maygrow and become - more detailed with time. - The following parameters are valid for DVB-T2: - - DTV_API_VERSION - DTV_DELIVERY_SYSTEM - DTV_TUNE - DTV_CLEAR - DTV_FREQUENCY - DTV_MODULATION - DTV_BANDWIDTH_HZ - DTV_INVERSION - DTV_CODE_RATE_HP - DTV_CODE_RATE_LP - DTV_GUARD_INTERVAL - DTV_TRANSMISSION_MODE - DTV_HIERARCHY - DTV_STREAM_ID - DTV_LNA - - In addition, the DTV QoS statistics are also valid. -
-
- ISDB-T delivery system - This ISDB-T/ISDB-Tsb API extension should reflect all information - needed to tune any ISDB-T/ISDB-Tsb hardware. Of course it is possible - that some very sophisticated devices won't need certain parameters to - tune. - The information given here should help application writers to know how - to handle ISDB-T and ISDB-Tsb hardware using the Linux DVB-API. - The details given here about ISDB-T and ISDB-Tsb are just enough to - basically show the dependencies between the needed parameter values, - but surely some information is left out. For more detailed information - see the following documents: - ARIB STD-B31 - "Transmission System for Digital Terrestrial - Television Broadcasting" and - ARIB TR-B14 - "Operational Guidelines for Digital Terrestrial - Television Broadcasting". - In order to understand the ISDB specific parameters, - one has to have some knowledge the channel structure in - ISDB-T and ISDB-Tsb. I.e. it has to be known to - the reader that an ISDB-T channel consists of 13 segments, - that it can have up to 3 layer sharing those segments, - and things like that. - The following parameters are valid for ISDB-T: - - DTV_API_VERSION - DTV_DELIVERY_SYSTEM - DTV_TUNE - DTV_CLEAR - DTV_FREQUENCY - DTV_BANDWIDTH_HZ - DTV_INVERSION - DTV_GUARD_INTERVAL - DTV_TRANSMISSION_MODE - DTV_ISDBT_LAYER_ENABLED - DTV_ISDBT_PARTIAL_RECEPTION - DTV_ISDBT_SOUND_BROADCASTING - DTV_ISDBT_SB_SUBCHANNEL_ID - DTV_ISDBT_SB_SEGMENT_IDX - DTV_ISDBT_SB_SEGMENT_COUNT - DTV_ISDBT_LAYERA_FEC - DTV_ISDBT_LAYERA_MODULATION - DTV_ISDBT_LAYERA_SEGMENT_COUNT - DTV_ISDBT_LAYERA_TIME_INTERLEAVING - DTV_ISDBT_LAYERB_FEC - DTV_ISDBT_LAYERB_MODULATION - DTV_ISDBT_LAYERB_SEGMENT_COUNT - DTV_ISDBT_LAYERB_TIME_INTERLEAVING - DTV_ISDBT_LAYERC_FEC - DTV_ISDBT_LAYERC_MODULATION - DTV_ISDBT_LAYERC_SEGMENT_COUNT - DTV_ISDBT_LAYERC_TIME_INTERLEAVING - - In addition, the DTV QoS statistics are also valid. -
-
- ATSC delivery system - The following parameters are valid for ATSC: - - DTV_API_VERSION - DTV_DELIVERY_SYSTEM - DTV_TUNE - DTV_CLEAR - DTV_FREQUENCY - DTV_MODULATION - DTV_BANDWIDTH_HZ - - In addition, the DTV QoS statistics are also valid. -
-
- ATSC-MH delivery system - The following parameters are valid for ATSC-MH: - - DTV_API_VERSION - DTV_DELIVERY_SYSTEM - DTV_TUNE - DTV_CLEAR - DTV_FREQUENCY - DTV_BANDWIDTH_HZ - DTV_ATSCMH_FIC_VER - DTV_ATSCMH_PARADE_ID - DTV_ATSCMH_NOG - DTV_ATSCMH_TNOG - DTV_ATSCMH_SGN - DTV_ATSCMH_PRC - DTV_ATSCMH_RS_FRAME_MODE - DTV_ATSCMH_RS_FRAME_ENSEMBLE - DTV_ATSCMH_RS_CODE_MODE_PRI - DTV_ATSCMH_RS_CODE_MODE_SEC - DTV_ATSCMH_SCCC_BLOCK_MODE - DTV_ATSCMH_SCCC_CODE_MODE_A - DTV_ATSCMH_SCCC_CODE_MODE_B - DTV_ATSCMH_SCCC_CODE_MODE_C - DTV_ATSCMH_SCCC_CODE_MODE_D - - In addition, the DTV QoS statistics are also valid. -
-
- DTMB delivery system - The following parameters are valid for DTMB: - - DTV_API_VERSION - DTV_DELIVERY_SYSTEM - DTV_TUNE - DTV_CLEAR - DTV_FREQUENCY - DTV_MODULATION - DTV_BANDWIDTH_HZ - DTV_INVERSION - DTV_INNER_FEC - DTV_GUARD_INTERVAL - DTV_TRANSMISSION_MODE - DTV_INTERLEAVING - DTV_LNA - - In addition, the DTV QoS statistics are also valid. -
-
-
- Properties used on cable delivery systems -
- DVB-C delivery system - The DVB-C Annex-A is the widely used cable standard. Transmission uses QAM modulation. - The DVB-C Annex-C is optimized for 6MHz, and is used in Japan. It supports a subset of the Annex A modulation types, and a roll-off of 0.13, instead of 0.15 - The following parameters are valid for DVB-C Annex A/C: - - DTV_API_VERSION - DTV_DELIVERY_SYSTEM - DTV_TUNE - DTV_CLEAR - DTV_FREQUENCY - DTV_MODULATION - DTV_INVERSION - DTV_SYMBOL_RATE - DTV_INNER_FEC - DTV_LNA - - In addition, the DTV QoS statistics are also valid. -
-
- DVB-C Annex B delivery system - The DVB-C Annex-B is only used on a few Countries like the United States. - The following parameters are valid for DVB-C Annex B: - - DTV_API_VERSION - DTV_DELIVERY_SYSTEM - DTV_TUNE - DTV_CLEAR - DTV_FREQUENCY - DTV_MODULATION - DTV_INVERSION - DTV_LNA - - In addition, the DTV QoS statistics are also valid. -
-
-
- Properties used on satellite delivery systems -
- DVB-S delivery system - The following parameters are valid for DVB-S: - - DTV_API_VERSION - DTV_DELIVERY_SYSTEM - DTV_TUNE - DTV_CLEAR - DTV_FREQUENCY - DTV_INVERSION - DTV_SYMBOL_RATE - DTV_INNER_FEC - DTV_VOLTAGE - DTV_TONE - - In addition, the DTV QoS statistics are also valid. - Future implementations might add those two missing parameters: - - DTV_DISEQC_MASTER - DTV_DISEQC_SLAVE_REPLY - -
-
- DVB-S2 delivery system - In addition to all parameters valid for DVB-S, DVB-S2 supports the following parameters: - - DTV_MODULATION - DTV_PILOT - DTV_ROLLOFF - DTV_STREAM_ID - - In addition, the DTV QoS statistics are also valid. -
-
- Turbo code delivery system - In addition to all parameters valid for DVB-S, turbo code supports the following parameters: - - DTV_MODULATION - -
-
- ISDB-S delivery system - The following parameters are valid for ISDB-S: - - DTV_API_VERSION - DTV_DELIVERY_SYSTEM - DTV_TUNE - DTV_CLEAR - DTV_FREQUENCY - DTV_INVERSION - DTV_SYMBOL_RATE - DTV_INNER_FEC - DTV_VOLTAGE - DTV_STREAM_ID - -
-
-
diff --git a/Documentation/DocBook/media/dvb/dvbstb.pdf b/Documentation/DocBook/media/dvb/dvbstb.pdf deleted file mode 100644 index 0fa75d90c3eb..000000000000 Binary files a/Documentation/DocBook/media/dvb/dvbstb.pdf and /dev/null differ diff --git a/Documentation/DocBook/media/dvb/examples.xml b/Documentation/DocBook/media/dvb/examples.xml deleted file mode 100644 index 837fb3b64b72..000000000000 --- a/Documentation/DocBook/media/dvb/examples.xml +++ /dev/null @@ -1,367 +0,0 @@ -Examples -In this section we would like to present some examples for using the DVB API. - -NOTE: This section is out of date, and the code below won't even - compile. Please refer to the - libdvbv5 - for updated/recommended examples. - - -
-Tuning -We will start with a generic tuning subroutine that uses the frontend and SEC, as well as -the demux devices. The example is given for QPSK tuners, but can easily be adjusted for -QAM. - - - #include <sys/ioctl.h> - #include <stdio.h> - #include <stdint.h> - #include <sys/types.h> - #include <sys/stat.h> - #include <fcntl.h> - #include <time.h> - #include <unistd.h> - - #include <linux/dvb/dmx.h> - #include <linux/dvb/frontend.h> - #include <linux/dvb/sec.h> - #include <sys/poll.h> - - #define DMX "/dev/dvb/adapter0/demux1" - #define FRONT "/dev/dvb/adapter0/frontend1" - #define SEC "/dev/dvb/adapter0/sec1" - - /⋆ routine for checking if we have a signal and other status information⋆/ - int FEReadStatus(int fd, fe_status_t ⋆stat) - { - int ans; - - if ( (ans = ioctl(fd,FE_READ_STATUS,stat) < 0)){ - perror("FE READ STATUS: "); - return -1; - } - - if (⋆stat & FE_HAS_POWER) - printf("FE HAS POWER\n"); - - if (⋆stat & FE_HAS_SIGNAL) - printf("FE HAS SIGNAL\n"); - - if (⋆stat & FE_SPECTRUM_INV) - printf("SPEKTRUM INV\n"); - - return 0; - } - - - /⋆ tune qpsk ⋆/ - /⋆ freq: frequency of transponder ⋆/ - /⋆ vpid, apid, tpid: PIDs of video, audio and teletext TS packets ⋆/ - /⋆ diseqc: DiSEqC address of the used LNB ⋆/ - /⋆ pol: Polarisation ⋆/ - /⋆ srate: Symbol Rate ⋆/ - /⋆ fec. FEC ⋆/ - /⋆ lnb_lof1: local frequency of lower LNB band ⋆/ - /⋆ lnb_lof2: local frequency of upper LNB band ⋆/ - /⋆ lnb_slof: switch frequency of LNB ⋆/ - - int set_qpsk_channel(int freq, int vpid, int apid, int tpid, - int diseqc, int pol, int srate, int fec, int lnb_lof1, - int lnb_lof2, int lnb_slof) - { - struct secCommand scmd; - struct secCmdSequence scmds; - struct dmx_pes_filter_params pesFilterParams; - FrontendParameters frp; - struct pollfd pfd[1]; - FrontendEvent event; - int demux1, demux2, demux3, front; - - frequency = (uint32_t) freq; - symbolrate = (uint32_t) srate; - - if((front = open(FRONT,O_RDWR)) < 0){ - perror("FRONTEND DEVICE: "); - return -1; - } - - if((sec = open(SEC,O_RDWR)) < 0){ - perror("SEC DEVICE: "); - return -1; - } - - if (demux1 < 0){ - if ((demux1=open(DMX, O_RDWR|O_NONBLOCK)) - < 0){ - perror("DEMUX DEVICE: "); - return -1; - } - } - - if (demux2 < 0){ - if ((demux2=open(DMX, O_RDWR|O_NONBLOCK)) - < 0){ - perror("DEMUX DEVICE: "); - return -1; - } - } - - if (demux3 < 0){ - if ((demux3=open(DMX, O_RDWR|O_NONBLOCK)) - < 0){ - perror("DEMUX DEVICE: "); - return -1; - } - } - - if (freq < lnb_slof) { - frp.Frequency = (freq - lnb_lof1); - scmds.continuousTone = SEC_TONE_OFF; - } else { - frp.Frequency = (freq - lnb_lof2); - scmds.continuousTone = SEC_TONE_ON; - } - frp.Inversion = INVERSION_AUTO; - if (pol) scmds.voltage = SEC_VOLTAGE_18; - else scmds.voltage = SEC_VOLTAGE_13; - - scmd.type=0; - scmd.u.diseqc.addr=0x10; - scmd.u.diseqc.cmd=0x38; - scmd.u.diseqc.numParams=1; - scmd.u.diseqc.params[0] = 0xF0 | ((diseqc ⋆ 4) & 0x0F) | - (scmds.continuousTone == SEC_TONE_ON ? 1 : 0) | - (scmds.voltage==SEC_VOLTAGE_18 ? 2 : 0); - - scmds.miniCommand=SEC_MINI_NONE; - scmds.numCommands=1; - scmds.commands=&scmd; - if (ioctl(sec, SEC_SEND_SEQUENCE, &scmds) < 0){ - perror("SEC SEND: "); - return -1; - } - - if (ioctl(sec, SEC_SEND_SEQUENCE, &scmds) < 0){ - perror("SEC SEND: "); - return -1; - } - - frp.u.qpsk.SymbolRate = srate; - frp.u.qpsk.FEC_inner = fec; - - if (ioctl(front, FE_SET_FRONTEND, &frp) < 0){ - perror("QPSK TUNE: "); - return -1; - } - - pfd[0].fd = front; - pfd[0].events = POLLIN; - - if (poll(pfd,1,3000)){ - if (pfd[0].revents & POLLIN){ - printf("Getting QPSK event\n"); - if ( ioctl(front, FE_GET_EVENT, &event) - - == -EOVERFLOW){ - perror("qpsk get event"); - return -1; - } - printf("Received "); - switch(event.type){ - case FE_UNEXPECTED_EV: - printf("unexpected event\n"); - return -1; - case FE_FAILURE_EV: - printf("failure event\n"); - return -1; - - case FE_COMPLETION_EV: - printf("completion event\n"); - } - } - } - - - pesFilterParams.pid = vpid; - pesFilterParams.input = DMX_IN_FRONTEND; - pesFilterParams.output = DMX_OUT_DECODER; - pesFilterParams.pes_type = DMX_PES_VIDEO; - pesFilterParams.flags = DMX_IMMEDIATE_START; - if (ioctl(demux1, DMX_SET_PES_FILTER, &pesFilterParams) < 0){ - perror("set_vpid"); - return -1; - } - - pesFilterParams.pid = apid; - pesFilterParams.input = DMX_IN_FRONTEND; - pesFilterParams.output = DMX_OUT_DECODER; - pesFilterParams.pes_type = DMX_PES_AUDIO; - pesFilterParams.flags = DMX_IMMEDIATE_START; - if (ioctl(demux2, DMX_SET_PES_FILTER, &pesFilterParams) < 0){ - perror("set_apid"); - return -1; - } - - pesFilterParams.pid = tpid; - pesFilterParams.input = DMX_IN_FRONTEND; - pesFilterParams.output = DMX_OUT_DECODER; - pesFilterParams.pes_type = DMX_PES_TELETEXT; - pesFilterParams.flags = DMX_IMMEDIATE_START; - if (ioctl(demux3, DMX_SET_PES_FILTER, &pesFilterParams) < 0){ - perror("set_tpid"); - return -1; - } - - return has_signal(fds); - } - - -The program assumes that you are using a universal LNB and a standard DiSEqC -switch with up to 4 addresses. Of course, you could build in some more checking if -tuning was successful and maybe try to repeat the tuning process. Depending on the -external hardware, i.e. LNB and DiSEqC switch, and weather conditions this may be -necessary. - -
- -
-The DVR device -The following program code shows how to use the DVR device for recording. - - - #include <sys/ioctl.h> - #include <stdio.h> - #include <stdint.h> - #include <sys/types.h> - #include <sys/stat.h> - #include <fcntl.h> - #include <time.h> - #include <unistd.h> - - #include <linux/dvb/dmx.h> - #include <linux/dvb/video.h> - #include <sys/poll.h> - #define DVR "/dev/dvb/adapter0/dvr1" - #define AUDIO "/dev/dvb/adapter0/audio1" - #define VIDEO "/dev/dvb/adapter0/video1" - - #define BUFFY (188⋆20) - #define MAX_LENGTH (1024⋆1024⋆5) /⋆ record 5MB ⋆/ - - - /⋆ switch the demuxes to recording, assuming the transponder is tuned ⋆/ - - /⋆ demux1, demux2: file descriptor of video and audio filters ⋆/ - /⋆ vpid, apid: PIDs of video and audio channels ⋆/ - - int switch_to_record(int demux1, int demux2, uint16_t vpid, uint16_t apid) - { - struct dmx_pes_filter_params pesFilterParams; - - if (demux1 < 0){ - if ((demux1=open(DMX, O_RDWR|O_NONBLOCK)) - < 0){ - perror("DEMUX DEVICE: "); - return -1; - } - } - - if (demux2 < 0){ - if ((demux2=open(DMX, O_RDWR|O_NONBLOCK)) - < 0){ - perror("DEMUX DEVICE: "); - return -1; - } - } - - pesFilterParams.pid = vpid; - pesFilterParams.input = DMX_IN_FRONTEND; - pesFilterParams.output = DMX_OUT_TS_TAP; - pesFilterParams.pes_type = DMX_PES_VIDEO; - pesFilterParams.flags = DMX_IMMEDIATE_START; - if (ioctl(demux1, DMX_SET_PES_FILTER, &pesFilterParams) < 0){ - perror("DEMUX DEVICE"); - return -1; - } - pesFilterParams.pid = apid; - pesFilterParams.input = DMX_IN_FRONTEND; - pesFilterParams.output = DMX_OUT_TS_TAP; - pesFilterParams.pes_type = DMX_PES_AUDIO; - pesFilterParams.flags = DMX_IMMEDIATE_START; - if (ioctl(demux2, DMX_SET_PES_FILTER, &pesFilterParams) < 0){ - perror("DEMUX DEVICE"); - return -1; - } - return 0; - } - - /⋆ start recording MAX_LENGTH , assuming the transponder is tuned ⋆/ - - /⋆ demux1, demux2: file descriptor of video and audio filters ⋆/ - /⋆ vpid, apid: PIDs of video and audio channels ⋆/ - int record_dvr(int demux1, int demux2, uint16_t vpid, uint16_t apid) - { - int i; - int len; - int written; - uint8_t buf[BUFFY]; - uint64_t length; - struct pollfd pfd[1]; - int dvr, dvr_out; - - /⋆ open dvr device ⋆/ - if ((dvr = open(DVR, O_RDONLY|O_NONBLOCK)) < 0){ - perror("DVR DEVICE"); - return -1; - } - - /⋆ switch video and audio demuxes to dvr ⋆/ - printf ("Switching dvr on\n"); - i = switch_to_record(demux1, demux2, vpid, apid); - printf("finished: "); - - printf("Recording %2.0f MB of test file in TS format\n", - MAX_LENGTH/(1024.0⋆1024.0)); - length = 0; - - /⋆ open output file ⋆/ - if ((dvr_out = open(DVR_FILE,O_WRONLY|O_CREAT - |O_TRUNC, S_IRUSR|S_IWUSR - |S_IRGRP|S_IWGRP|S_IROTH| - S_IWOTH)) < 0){ - perror("Can't open file for dvr test"); - return -1; - } - - pfd[0].fd = dvr; - pfd[0].events = POLLIN; - - /⋆ poll for dvr data and write to file ⋆/ - while (length < MAX_LENGTH ) { - if (poll(pfd,1,1)){ - if (pfd[0].revents & POLLIN){ - len = read(dvr, buf, BUFFY); - if (len < 0){ - perror("recording"); - return -1; - } - if (len > 0){ - written = 0; - while (written < len) - written += - write (dvr_out, - buf, len); - length += len; - printf("written %2.0f MB\r", - length/1024./1024.); - } - } - } - } - return 0; - } - - - -
diff --git a/Documentation/DocBook/media/dvb/fe-diseqc-recv-slave-reply.xml b/Documentation/DocBook/media/dvb/fe-diseqc-recv-slave-reply.xml deleted file mode 100644 index 4595dbfff208..000000000000 --- a/Documentation/DocBook/media/dvb/fe-diseqc-recv-slave-reply.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - ioctl FE_DISEQC_RECV_SLAVE_REPLY - &manvol; - - - - FE_DISEQC_RECV_SLAVE_REPLY - Receives reply from a DiSEqC 2.0 command - - - - - - int ioctl - int fd - int request - struct dvb_diseqc_slave_reply *argp - - - - - - Arguments - - - fd - - &fe_fd; - - - - request - - FE_DISEQC_RECV_SLAVE_REPLY - - - - argp - - pointer to &dvb-diseqc-slave-reply; - - - - - - - Description - - Receives reply from a DiSEqC 2.0 command. -&return-value-dvb; - - - struct <structname>dvb_diseqc_slave_reply</structname> - - &cs-str; - - - uint8_t - msg[4] - DiSEqC message (framing, data[3]) - - uint8_t - msg_len - Length of the DiSEqC message. Valid values are 0 to 4, - where 0 means no msg - - int - timeout - Return from ioctl after timeout ms with errorcode when no - message was received - - - -
- -
-
diff --git a/Documentation/DocBook/media/dvb/fe-diseqc-reset-overload.xml b/Documentation/DocBook/media/dvb/fe-diseqc-reset-overload.xml deleted file mode 100644 index c104df77ecd0..000000000000 --- a/Documentation/DocBook/media/dvb/fe-diseqc-reset-overload.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - ioctl FE_DISEQC_RESET_OVERLOAD - &manvol; - - - - FE_DISEQC_RESET_OVERLOAD - Restores the power to the antenna subsystem, if it was powered - off due to power overload. - - - - - - int ioctl - int fd - int request - NULL - - - - - - Arguments - - - fd - - &fe_fd; - - - - request - - FE_DISEQC_RESET_OVERLOAD - - - - - - - Description - - If the bus has been automatically powered off due to power overload, this ioctl - call restores the power to the bus. The call requires read/write access to the - device. This call has no effect if the device is manually powered off. Not all - DVB adapters support this ioctl. -&return-value-dvb; - - diff --git a/Documentation/DocBook/media/dvb/fe-diseqc-send-burst.xml b/Documentation/DocBook/media/dvb/fe-diseqc-send-burst.xml deleted file mode 100644 index 9f6a68f32de3..000000000000 --- a/Documentation/DocBook/media/dvb/fe-diseqc-send-burst.xml +++ /dev/null @@ -1,89 +0,0 @@ - - - ioctl FE_DISEQC_SEND_BURST - &manvol; - - - - FE_DISEQC_SEND_BURST - Sends a 22KHz tone burst for 2x1 mini DiSEqC satellite selection. - - - - - - int ioctl - int fd - int request - enum fe_sec_mini_cmd *tone - - - - - - Arguments - - - fd - - &fe_fd; - - - - request - - FE_DISEQC_SEND_BURST - - - - tone - - pointer to &fe-sec-mini-cmd; - - - - - - - Description - -This ioctl is used to set the generation of a 22kHz tone burst for mini - DiSEqC satellite - selection for 2x1 switches. - This call requires read/write permissions. -It provides support for what's specified at - Digital Satellite Equipment Control - (DiSEqC) - Simple "ToneBurst" Detection Circuit specification. - -&return-value-dvb; - - - -enum fe_sec_mini_cmd - - - enum fe_sec_mini_cmd - - &cs-def; - - - ID - Description - - - - - SEC_MINI_A - Sends a mini-DiSEqC 22kHz '0' Tone Burst to - select satellite-A - - SEC_MINI_B - Sends a mini-DiSEqC 22kHz '1' Data Burst to - select satellite-B - - - -
-
- -
diff --git a/Documentation/DocBook/media/dvb/fe-diseqc-send-master-cmd.xml b/Documentation/DocBook/media/dvb/fe-diseqc-send-master-cmd.xml deleted file mode 100644 index 38cf313e121b..000000000000 --- a/Documentation/DocBook/media/dvb/fe-diseqc-send-master-cmd.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - ioctl FE_DISEQC_SEND_MASTER_CMD - &manvol; - - - - FE_DISEQC_SEND_MASTER_CMD - Sends a DiSEqC command - - - - - - int ioctl - int fd - int request - struct dvb_diseqc_master_cmd *argp - - - - - - Arguments - - - fd - - &fe_fd; - - - - request - - FE_DISEQC_SEND_MASTER_CMD - - - - argp - - pointer to &dvb-diseqc-master-cmd; - - - - - - - Description - - Sends a DiSEqC command to the antenna subsystem. -&return-value-dvb; - - - struct <structname>dvb_diseqc_master_cmd</structname> - - &cs-str; - - - uint8_t - msg[6] - DiSEqC message (framing, address, command, data[3]) - - uint8_t - msg_len - Length of the DiSEqC message. Valid values are 3 to 6 - - - -
- -
-
diff --git a/Documentation/DocBook/media/dvb/fe-enable-high-lnb-voltage.xml b/Documentation/DocBook/media/dvb/fe-enable-high-lnb-voltage.xml deleted file mode 100644 index c11890b184ad..000000000000 --- a/Documentation/DocBook/media/dvb/fe-enable-high-lnb-voltage.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - ioctl FE_ENABLE_HIGH_LNB_VOLTAGE - &manvol; - - - - FE_ENABLE_HIGH_LNB_VOLTAGE - Select output DC level between normal LNBf voltages or higher - LNBf voltages. - - - - - - int ioctl - int fd - int request - unsigned int high - - - - - - Arguments - - - fd - - &fe_fd; - - - - request - - FE_ENABLE_HIGH_LNB_VOLTAGE - - - - high - - Valid flags: - - 0 - normal 13V and 18V. - >0 - enables slightly higher voltages instead of - 13/18V, in order to compensate for long antenna cables. - - - - - - - - Description - - Select output DC level between normal LNBf voltages or higher - LNBf voltages between 0 (normal) or a value grater than 0 for higher - voltages. -&return-value-dvb; - - diff --git a/Documentation/DocBook/media/dvb/fe-get-info.xml b/Documentation/DocBook/media/dvb/fe-get-info.xml deleted file mode 100644 index ed0eeb29dd65..000000000000 --- a/Documentation/DocBook/media/dvb/fe-get-info.xml +++ /dev/null @@ -1,266 +0,0 @@ - - - ioctl FE_GET_INFO - &manvol; - - - - FE_GET_INFO - Query DVB frontend capabilities and returns information about - the front-end. This call only requires read-only access to the device - - - - - - int ioctl - int fd - int request - struct dvb_frontend_info *argp - - - - - - Arguments - - - fd - - &fe_fd; - - - - request - - FE_GET_INFO - - - - argp - - pointer to struct &dvb-frontend-info; - - - - - - - Description - - All DVB frontend devices support the -FE_GET_INFO ioctl. It is used to identify -kernel devices compatible with this specification and to obtain -information about driver and hardware capabilities. The ioctl takes a -pointer to dvb_frontend_info which is filled by the driver. When the -driver is not compatible with this specification the ioctl returns an error. - -&return-value-dvb; - - - struct <structname>dvb_frontend_info</structname> - - &cs-str; - - - char - name[128] - Name of the frontend - - fe_type_t - type - DEPRECATED. DVBv3 type. Should not be used on modern programs, as a - frontend may have more than one type. So, the DVBv5 API should - be used instead to enumerate and select the frontend type. - - uint32_t - frequency_min - Minimal frequency supported by the frontend - - uint32_t - frequency_max - Maximal frequency supported by the frontend - - uint32_t - frequency_stepsize - Frequency step - all frequencies are multiple of this value - - uint32_t - frequency_tolerance - Tolerance of the frequency - - uint32_t - symbol_rate_min - Minimal symbol rate (for Cable/Satellite systems), in bauds - - uint32_t - symbol_rate_max - Maximal symbol rate (for Cable/Satellite systems), in bauds - - uint32_t - symbol_rate_tolerance - Maximal symbol rate tolerance, in ppm - - uint32_t - notifier_delay - DEPRECATED. Not used by any driver. - - &fe-caps; - caps - Capabilities supported by the frontend - - - -
- - NOTE: The frequencies are specified in Hz for Terrestrial and Cable - systems. They're specified in kHz for Satellite systems -
- - -frontend capabilities - -Capabilities describe what a frontend can do. Some capabilities are - supported only on some specific frontend types. - - - enum fe_caps - - &cs-def; - - - ID - Description - - - - - FE_IS_STUPID - There's something wrong at the frontend, and it can't - report its capabilities - - - FE_CAN_INVERSION_AUTO - The frontend is capable of auto-detecting inversion - - - FE_CAN_FEC_1_2 - The frontend supports FEC 1/2 - - - FE_CAN_FEC_2_3 - The frontend supports FEC 2/3 - - - FE_CAN_FEC_3_4 - The frontend supports FEC 3/4 - - - FE_CAN_FEC_4_5 - The frontend supports FEC 4/5 - - - FE_CAN_FEC_5_6 - The frontend supports FEC 5/6 - - - FE_CAN_FEC_6_7 - The frontend supports FEC 6/7 - - - FE_CAN_FEC_7_8 - The frontend supports FEC 7/8 - - - FE_CAN_FEC_8_9 - The frontend supports FEC 8/9 - - - FE_CAN_FEC_AUTO - The frontend can autodetect FEC. - - - FE_CAN_QPSK - The frontend supports QPSK modulation - - - FE_CAN_QAM_16 - The frontend supports 16-QAM modulation - - - FE_CAN_QAM_32 - The frontend supports 32-QAM modulation - - - FE_CAN_QAM_64 - The frontend supports 64-QAM modulation - - - FE_CAN_QAM_128 - The frontend supports 128-QAM modulation - - - FE_CAN_QAM_256 - The frontend supports 256-QAM modulation - - - FE_CAN_QAM_AUTO - The frontend can autodetect modulation - - - FE_CAN_TRANSMISSION_MODE_AUTO - The frontend can autodetect the transmission mode - - - FE_CAN_BANDWIDTH_AUTO - The frontend can autodetect the bandwidth - - - FE_CAN_GUARD_INTERVAL_AUTO - The frontend can autodetect the guard interval - - - FE_CAN_HIERARCHY_AUTO - The frontend can autodetect hierarch - - - FE_CAN_8VSB - The frontend supports 8-VSB modulation - - - FE_CAN_16VSB - The frontend supports 16-VSB modulation - - - FE_HAS_EXTENDED_CAPS - Currently, unused - - - FE_CAN_MULTISTREAM - The frontend supports multistream filtering - - - FE_CAN_TURBO_FEC - The frontend supports turbo FEC modulation - - - FE_CAN_2G_MODULATION - The frontend supports "2nd generation modulation" (DVB-S2/T2)> - - - FE_NEEDS_BENDING - Not supported anymore, don't use it - - - FE_CAN_RECOVER - The frontend can recover from a cable unplug automatically - - - FE_CAN_MUTE_TS - The frontend can stop spurious TS data output - - - -
-
-
diff --git a/Documentation/DocBook/media/dvb/fe-get-property.xml b/Documentation/DocBook/media/dvb/fe-get-property.xml deleted file mode 100644 index 53a170ed3bd1..000000000000 --- a/Documentation/DocBook/media/dvb/fe-get-property.xml +++ /dev/null @@ -1,81 +0,0 @@ - - - ioctl FE_SET_PROPERTY, FE_GET_PROPERTY - &manvol; - - - - FE_SET_PROPERTY - FE_GET_PROPERTY - FE_SET_PROPERTY sets one or more frontend properties. - FE_GET_PROPERTY returns one or more frontend properties. - - - - - - int ioctl - int fd - int request - struct dtv_properties *argp - - - - - - Arguments - - - fd - - &fe_fd; - - - - request - - FE_SET_PROPERTY, FE_GET_PROPERTY - - - - argp - - pointer to &dtv-properties; - - - - - - - Description - - All DVB frontend devices support the -FE_SET_PROPERTY and FE_GET_PROPERTY -ioctls. The supported properties and statistics depends on the delivery system -and on the device: - - - FE_SET_PROPERTY: - -This ioctl is used to set one or more - frontend properties. -This is the basic command to request the frontend to tune into some - frequency and to start decoding the digital TV signal. -This call requires read/write access to the device. -At return, the values are updated to reflect the - actual parameters used. - - - - FE_GET_PROPERTY: - -This ioctl is used to get properties and -statistics from the frontend. -No properties are changed, and statistics aren't reset. -This call only requires read-only access to the device. - - - -&return-value-dvb; - - diff --git a/Documentation/DocBook/media/dvb/fe-read-status.xml b/Documentation/DocBook/media/dvb/fe-read-status.xml deleted file mode 100644 index bc0dc2a55f19..000000000000 --- a/Documentation/DocBook/media/dvb/fe-read-status.xml +++ /dev/null @@ -1,107 +0,0 @@ - - - ioctl FE_READ_STATUS - &manvol; - - - - FE_READ_STATUS - Returns status information about the front-end. This call only - requires read-only access to the device - - - - - - int ioctl - int fd - int request - unsigned int *status - - - - - - Arguments - - - fd - - &fe_fd; - - - - request - - FE_READ_STATUS - - - - status - - pointer to a bitmask integer filled with the values defined by - &fe-status;. - - - - - - - Description - - All DVB frontend devices support the -FE_READ_STATUS ioctl. It is used to check about the -locking status of the frontend after being tuned. The ioctl takes a -pointer to an integer where the status will be written. - -NOTE: the size of status is actually sizeof(enum fe_status), with varies - according with the architecture. This needs to be fixed in the future. -&return-value-dvb; - - - -int fe_status - -The fe_status parameter is used to indicate the current state - and/or state changes of the frontend hardware. It is produced using - the &fe-status; values on a bitmask - - - enum fe_status - - &cs-def; - - - ID - Description - - - - - FE_HAS_SIGNAL - The frontend has found something above the noise level - - FE_HAS_CARRIER - The frontend has found a DVB signal - - FE_HAS_VITERBI - The frontend FEC inner coding (Viterbi, LDPC or other inner code) is stable - - FE_HAS_SYNC - Synchronization bytes was found - - FE_HAS_LOCK - The DVB were locked and everything is working - - FE_TIMEDOUT - no lock within the last about 2 seconds - - FE_REINIT - The frontend was reinitialized, application is - recommended to reset DiSEqC, tone and parameters - - - -
-
-
diff --git a/Documentation/DocBook/media/dvb/fe-set-frontend-tune-mode.xml b/Documentation/DocBook/media/dvb/fe-set-frontend-tune-mode.xml deleted file mode 100644 index 99fa8a015c7a..000000000000 --- a/Documentation/DocBook/media/dvb/fe-set-frontend-tune-mode.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - ioctl FE_SET_FRONTEND_TUNE_MODE - &manvol; - - - - FE_SET_FRONTEND_TUNE_MODE - Allow setting tuner mode flags to the frontend. - - - - - - int ioctl - int fd - int request - unsigned int flags - - - - - - Arguments - - - fd - - &fe_fd; - - - - request - - FE_SET_FRONTEND_TUNE_MODE - - - - flags - - Valid flags: - - 0 - normal tune mode - FE_TUNE_MODE_ONESHOT - When set, this flag will - disable any zigzagging or other "normal" tuning behaviour. - Additionally, there will be no automatic monitoring of the - lock status, and hence no frontend events will be - generated. If a frontend device is closed, this flag will - be automatically turned off when the device is reopened - read-write. - - - - - - - - Description - - Allow setting tuner mode flags to the frontend, between 0 (normal) - or FE_TUNE_MODE_ONESHOT mode -&return-value-dvb; - - diff --git a/Documentation/DocBook/media/dvb/fe-set-tone.xml b/Documentation/DocBook/media/dvb/fe-set-tone.xml deleted file mode 100644 index 62d44e4ccc39..000000000000 --- a/Documentation/DocBook/media/dvb/fe-set-tone.xml +++ /dev/null @@ -1,91 +0,0 @@ - - - ioctl FE_SET_TONE - &manvol; - - - - FE_SET_TONE - Sets/resets the generation of the continuous 22kHz tone. - - - - - - int ioctl - int fd - int request - enum fe_sec_tone_mode *tone - - - - - - Arguments - - - fd - - &fe_fd; - - - - request - - FE_SET_TONE - - - - tone - - pointer to &fe-sec-tone-mode; - - - - - - - Description - -This ioctl is used to set the generation of the continuous 22kHz tone. - This call requires read/write permissions. -Usually, satellite antenna subsystems require that the digital TV - device to send a 22kHz tone in order to select between high/low band on - some dual-band LNBf. It is also used to send signals to DiSEqC equipment, - but this is done using the DiSEqC ioctls. -NOTE: if more than one device is connected to the same antenna, - setting a tone may interfere on other devices, as they may lose - the capability of selecting the band. So, it is recommended that - applications would change to SEC_TONE_OFF when the device is not used. - -&return-value-dvb; - - - -enum fe_sec_tone_mode - - - enum fe_sec_tone_mode - - &cs-def; - - - ID - Description - - - - - SEC_TONE_ON - Sends a 22kHz tone burst to the antenna - - SEC_TONE_OFF - Don't send a 22kHz tone to the antenna - (except if the FE_DISEQC_* ioctls are called) - - - -
-
- -
diff --git a/Documentation/DocBook/media/dvb/fe-set-voltage.xml b/Documentation/DocBook/media/dvb/fe-set-voltage.xml deleted file mode 100644 index c89a6f79b5af..000000000000 --- a/Documentation/DocBook/media/dvb/fe-set-voltage.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - ioctl FE_SET_VOLTAGE - &manvol; - - - - FE_SET_VOLTAGE - Allow setting the DC level sent to the antenna subsystem. - - - - - - int ioctl - int fd - int request - enum fe_sec_voltage *voltage - - - - - - Arguments - - - fd - - &fe_fd; - - - - request - - FE_SET_VOLTAGE - - - - voltage - - pointer to &fe-sec-voltage; - Valid values are described at &fe-sec-voltage;. - - - - - - - Description - -This ioctl allows to set the DC voltage level sent through the antenna - cable to 13V, 18V or off. -Usually, a satellite antenna subsystems require that the digital TV - device to send a DC voltage to feed power to the LNBf. Depending on the - LNBf type, the polarization or the intermediate frequency (IF) of the LNBf - can controlled by the voltage level. Other devices (for example, the ones - that implement DISEqC and multipoint LNBf's don't need to control the - voltage level, provided that either 13V or 18V is sent to power up the - LNBf. -NOTE: if more than one device is connected to the same antenna, - setting a voltage level may interfere on other devices, as they may lose - the capability of setting polarization or IF. So, on those - cases, setting the voltage to SEC_VOLTAGE_OFF while the device is not is - used is recommended. - -&return-value-dvb; - - - diff --git a/Documentation/DocBook/media/dvb/frontend.xml b/Documentation/DocBook/media/dvb/frontend.xml deleted file mode 100644 index 01210b33c130..000000000000 --- a/Documentation/DocBook/media/dvb/frontend.xml +++ /dev/null @@ -1,269 +0,0 @@ -DVB Frontend API - -The DVB frontend API was designed to support three types of delivery systems: - - Terrestrial systems: DVB-T, DVB-T2, ATSC, ATSC M/H, ISDB-T, DVB-H, DTMB, CMMB - Cable systems: DVB-C Annex A/C, ClearQAM (DVB-C Annex B), ISDB-C - Satellite systems: DVB-S, DVB-S2, DVB Turbo, ISDB-S, DSS - -The DVB frontend controls several sub-devices including: - - Tuner - Digital TV demodulator - Low noise amplifier (LNA) - Satellite Equipment Control (SEC) hardware (only for Satellite). - -The frontend can be accessed through - /dev/dvb/adapter?/frontend?. Data types and - ioctl definitions can be accessed by including - linux/dvb/frontend.h in your application. - - -NOTE: Transmission via the internet (DVB-IP) - is not yet handled by this API but a future extension is possible. -On Satellite systems, the API support for the Satellite Equipment Control - (SEC) allows to power control and to send/receive signals to control the - antenna subsystem, selecting the polarization and choosing the Intermediate - Frequency IF) of the Low Noise Block Converter Feed Horn (LNBf). It - supports the DiSEqC and V-SEC protocols. The DiSEqC (digital SEC) -specification is available at -Eutelsat. - -
-Querying frontend information - -Usually, the first thing to do when the frontend is opened is to - check the frontend capabilities. This is done using FE_GET_INFO. This ioctl will enumerate - the DVB API version and other characteristics about the frontend, and - can be opened either in read only or read/write mode. -
- -
-Querying frontend status and statistics - -Once FE_SET_PROPERTY - is called, the frontend will run a kernel thread that will periodically - check for the tuner lock status and provide statistics about the quality - of the signal. -The information about the frontend tuner locking status can be queried - using FE_READ_STATUS. -Signal statistics are provided via FE_GET_PROPERTY. - Please note that several statistics require the demodulator to be fully - locked (e. g. with FE_HAS_LOCK bit set). See - Frontend statistics indicators - for more details. -
- -&sub-dvbproperty; - -
-Frontend Function Calls - - - - DVB frontend open() - &manvol; - - - - fe-open - Open a frontend device - - - - - #include <fcntl.h> - - int open - const char *device_name - int flags - - - - - - Arguments - - - - device_name - - Device to be opened. - - - - flags - - Open flags. Access can either be - O_RDWR or O_RDONLY. - Multiple opens are allowed with O_RDONLY. In this mode, only query and read ioctls are allowed. - Only one open is allowed in O_RDWR. In this mode, all ioctls are allowed. - When the O_NONBLOCK flag is given, the system calls may return &EAGAIN; when no data is available or when the device driver is temporarily busy. - Other flags have no effect. - - - - - - Description - This system call opens a named frontend device (/dev/dvb/adapter?/frontend?) - for subsequent use. Usually the first thing to do after a successful open is to - find out the frontend type with FE_GET_INFO. -The device can be opened in read-only mode, which only allows monitoring of - device status and statistics, or read/write mode, which allows any kind of use - (e.g. performing tuning operations.) - -In a system with multiple front-ends, it is usually the case that multiple devices - cannot be open in read/write mode simultaneously. As long as a front-end - device is opened in read/write mode, other open() calls in read/write mode will - either fail or block, depending on whether non-blocking or blocking mode was - specified. A front-end device opened in blocking mode can later be put into - non-blocking mode (and vice versa) using the F_SETFL command of the fcntl - system call. This is a standard system call, documented in the Linux manual - page for fcntl. When an open() call has succeeded, the device will be ready - for use in the specified mode. This implies that the corresponding hardware is - powered up, and that other front-ends may have been powered down to make - that possible. - - - - Return Value - - On success open returns the new file -descriptor. On error -1 is returned, and the errno -variable is set appropriately. Possible error codes are: - - - - EACCES - - The caller has no permission to access the -device. - - - - EBUSY - - The the device driver is already in use. - - - - ENXIO - - No device corresponding to this device special file -exists. - - - - ENOMEM - - Not enough kernel memory was available to complete the -request. - - - - EMFILE - - The process already has the maximum number of -files open. - - - - ENFILE - - The limit on the total number of files open on the -system has been reached. - - - - ENODEV - - The device got removed. - - - - - - - - - DVB frontend close() - &manvol; - - - - fe-close - Close a frontend device - - - - - #include <unistd.h> - - int close - int fd - - - - - - Arguments - - - - fd - - &fd; - - - - - - - Description -This system call closes a previously opened front-end device. After closing - a front-end device, its corresponding hardware might be powered down - automatically. - - - Return Value - - The function returns 0 on -success, -1 on failure and the -errno is set appropriately. Possible error -codes: - - - - EBADF - - fd is not a valid open file -descriptor. - - - - - - -&sub-fe-get-info; -&sub-fe-read-status; -&sub-fe-get-property; -&sub-fe-diseqc-reset-overload; -&sub-fe-diseqc-send-master-cmd; -&sub-fe-diseqc-recv-slave-reply; -&sub-fe-diseqc-send-burst; -&sub-fe-set-tone; -&sub-fe-set-voltage; -&sub-fe-enable-high-lnb-voltage; -&sub-fe-set-frontend-tune-mode; - -
- -
-DVB Frontend legacy API (a. k. a. DVBv3) -The usage of this API is deprecated, as it doesn't support all digital - TV standards, doesn't provide good statistics measurements and provides - incomplete information. This is kept only to support legacy applications. - -&sub-frontend_legacy_api; -
diff --git a/Documentation/DocBook/media/dvb/frontend_legacy_api.xml b/Documentation/DocBook/media/dvb/frontend_legacy_api.xml deleted file mode 100644 index 8fadf3a4ba44..000000000000 --- a/Documentation/DocBook/media/dvb/frontend_legacy_api.xml +++ /dev/null @@ -1,654 +0,0 @@ -
-Frontend Legacy Data Types - -
-Frontend type - -For historical reasons, frontend types are named by the type of modulation - used in transmission. The fontend types are given by fe_type_t type, defined as: - - -Frontend types - - &cs-def; - - - fe_type - Description - DTV_DELIVERY_SYSTEM equivalent type - - - - - FE_QPSK - For DVB-S standard - SYS_DVBS - - - FE_QAM - For DVB-C annex A standard - SYS_DVBC_ANNEX_A - - - FE_OFDM - For DVB-T standard - SYS_DVBT - - - FE_ATSC - For ATSC standard (terrestrial) or for DVB-C Annex B (cable) used in US. - SYS_ATSC (terrestrial) or SYS_DVBC_ANNEX_B (cable) - -
- -Newer formats like DVB-S2, ISDB-T, ISDB-S and DVB-T2 are not described at the above, as they're -supported via the new FE_GET_PROPERTY/FE_GET_SET_PROPERTY ioctl's, using the DTV_DELIVERY_SYSTEM parameter. - - -In the old days, &dvb-frontend-info; used to contain - fe_type_t field to indicate the delivery systems, - filled with either FE_QPSK, FE_QAM, FE_OFDM or FE_ATSC. While this is - still filled to keep backward compatibility, the usage of this - field is deprecated, as it can report just one delivery system, but some - devices support multiple delivery systems. Please use - DTV_ENUM_DELSYS instead. - -On devices that support multiple delivery systems, - &dvb-frontend-info;::fe_type_t is filled with the - currently standard, as selected by the last call to - FE_SET_PROPERTY - using the &DTV-DELIVERY-SYSTEM; property. -
- -
-Frontend bandwidth - - - enum fe_bandwidth - - &cs-def; - - - ID - Description - - - - - BANDWIDTH_AUTO - Autodetect bandwidth (if supported) - - BANDWIDTH_1_712_MHZ - 1.712 MHz - - BANDWIDTH_5_MHZ - 5 MHz - - BANDWIDTH_6_MHZ - 6 MHz - - BANDWIDTH_7_MHZ - 7 MHz - - BANDWIDTH_8_MHZ - 8 MHz - - BANDWIDTH_10_MHZ - 10 MHz - - - -
- -
- -
-frontend parameters -The kind of parameters passed to the frontend device for tuning depend on -the kind of hardware you are using. -The struct dvb_frontend_parameters uses an -union with specific per-system parameters. However, as newer delivery systems -required more data, the structure size weren't enough to fit, and just -extending its size would break the existing applications. So, those parameters -were replaced by the usage of -FE_GET_PROPERTY/FE_SET_PROPERTY ioctl's. The -new API is flexible enough to add new parameters to existing delivery systems, -and to add newer delivery systems. -So, newer applications should use -FE_GET_PROPERTY/FE_SET_PROPERTY instead, in -order to be able to support the newer System Delivery like DVB-S2, DVB-T2, -DVB-C2, ISDB, etc. -All kinds of parameters are combined as an union in the FrontendParameters structure: - -struct dvb_frontend_parameters { - uint32_t frequency; /⋆ (absolute) frequency in Hz for QAM/OFDM ⋆/ - /⋆ intermediate frequency in kHz for QPSK ⋆/ - &fe-spectral-inversion-t; inversion; - union { - struct dvb_qpsk_parameters qpsk; - struct dvb_qam_parameters qam; - struct dvb_ofdm_parameters ofdm; - struct dvb_vsb_parameters vsb; - } u; -}; - -In the case of QPSK frontends the frequency field specifies the intermediate -frequency, i.e. the offset which is effectively added to the local oscillator frequency (LOF) of -the LNB. The intermediate frequency has to be specified in units of kHz. For QAM and -OFDM frontends the frequency specifies the absolute frequency and is given in Hz. - - -
-QPSK parameters -For satellite QPSK frontends you have to use the dvb_qpsk_parameters structure: - - struct dvb_qpsk_parameters { - uint32_t symbol_rate; /⋆ symbol rate in Symbols per second ⋆/ - &fe-code-rate-t; fec_inner; /⋆ forward error correction (see above) ⋆/ - }; - -
- -
-QAM parameters -for cable QAM frontend you use the dvb_qam_parameters structure: - - struct dvb_qam_parameters { - uint32_t symbol_rate; /⋆ symbol rate in Symbols per second ⋆/ - &fe-code-rate-t; fec_inner; /⋆ forward error correction (see above) ⋆/ - &fe-modulation-t; modulation; /⋆ modulation type (see above) ⋆/ - }; - -
- -
-VSB parameters -ATSC frontends are supported by the dvb_vsb_parameters structure: - -struct dvb_vsb_parameters { - &fe-modulation-t; modulation; /⋆ modulation type (see above) ⋆/ -}; - -
- -
-OFDM parameters -DVB-T frontends are supported by the dvb_ofdm_parameters structure: - - struct dvb_ofdm_parameters { - &fe-bandwidth-t; bandwidth; - &fe-code-rate-t; code_rate_HP; /⋆ high priority stream code rate ⋆/ - &fe-code-rate-t; code_rate_LP; /⋆ low priority stream code rate ⋆/ - &fe-modulation-t; constellation; /⋆ modulation type (see above) ⋆/ - &fe-transmit-mode-t; transmission_mode; - &fe-guard-interval-t; guard_interval; - &fe-hierarchy-t; hierarchy_information; - }; - -
-
- -
-frontend events - - struct dvb_frontend_event { - fe_status_t status; - struct dvb_frontend_parameters parameters; - }; - -
-
- -
-Frontend Legacy Function Calls - -Those functions are defined at DVB version 3. The support is kept in - the kernel due to compatibility issues only. Their usage is strongly - not recommended - -
-FE_READ_BER -DESCRIPTION - - -This ioctl call returns the bit error rate for the signal currently - received/demodulated by the front-end. For this command, read-only access to - the device is sufficient. - - -SYNOPSIS - - -int ioctl(int fd, int request = FE_READ_BER, - uint32_t ⋆ber); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals FE_READ_BER for this command. - - -uint32_t *ber - -The bit error rate is stored into *ber. - - - -&return-value-dvb; -
- -
-FE_READ_SNR - -DESCRIPTION - - -This ioctl call returns the signal-to-noise ratio for the signal currently received - by the front-end. For this command, read-only access to the device is sufficient. - - -SYNOPSIS - - -int ioctl(int fd, int request = FE_READ_SNR, uint16_t - ⋆snr); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals FE_READ_SNR for this command. - - -uint16_t *snr - -The signal-to-noise ratio is stored into *snr. - - - -&return-value-dvb; -
- -
-FE_READ_SIGNAL_STRENGTH -DESCRIPTION - - -This ioctl call returns the signal strength value for the signal currently received - by the front-end. For this command, read-only access to the device is sufficient. - - -SYNOPSIS - - -int ioctl( int fd, int request = - FE_READ_SIGNAL_STRENGTH, uint16_t ⋆strength); - - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals FE_READ_SIGNAL_STRENGTH for this - command. - - -uint16_t *strength - -The signal strength value is stored into *strength. - - - -&return-value-dvb; -
- -
-FE_READ_UNCORRECTED_BLOCKS -DESCRIPTION - - -This ioctl call returns the number of uncorrected blocks detected by the device - driver during its lifetime. For meaningful measurements, the increment in block - count during a specific time interval should be calculated. For this command, - read-only access to the device is sufficient. - - -Note that the counter will wrap to zero after its maximum count has been - reached. - - -SYNOPSIS - - -int ioctl( int fd, int request = - FE_READ_UNCORRECTED_BLOCKS, uint32_t ⋆ublocks); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals FE_READ_UNCORRECTED_BLOCKS for this - command. - - -uint32_t *ublocks - -The total number of uncorrected blocks seen by the driver - so far. - - - -&return-value-dvb; -
- -
-FE_SET_FRONTEND -DESCRIPTION - - -This ioctl call starts a tuning operation using specified parameters. The result - of this call will be successful if the parameters were valid and the tuning could - be initiated. The result of the tuning operation in itself, however, will arrive - asynchronously as an event (see documentation for FE_GET_EVENT and - FrontendEvent.) If a new FE_SET_FRONTEND operation is initiated before - the previous one was completed, the previous operation will be aborted in favor - of the new one. This command requires read/write access to the device. - - - -SYNOPSIS - - -int ioctl(int fd, int request = FE_SET_FRONTEND, - struct dvb_frontend_parameters ⋆p); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals FE_SET_FRONTEND for this command. - - -struct - dvb_frontend_parameters - *p - -Points to parameters for tuning operation. - - - -&return-value-dvb; - -EINVAL - -Maximum supported symbol rate reached. - - -
- -
-FE_GET_FRONTEND -DESCRIPTION - - -This ioctl call queries the currently effective frontend parameters. For this - command, read-only access to the device is sufficient. - - - -SYNOPSIS - - -int ioctl(int fd, int request = FE_GET_FRONTEND, - struct dvb_frontend_parameters ⋆p); - - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals FE_SET_FRONTEND for this command. - - -struct - dvb_frontend_parameters - *p - -Points to parameters for tuning operation. - - - -&return-value-dvb; - -EINVAL - -Maximum supported symbol rate reached. - - - -
- -
-FE_GET_EVENT -DESCRIPTION - - -This ioctl call returns a frontend event if available. If an event is not - available, the behavior depends on whether the device is in blocking or - non-blocking mode. In the latter case, the call fails immediately with errno - set to EWOULDBLOCK. In the former case, the call blocks until an event - becomes available. - - -The standard Linux poll() and/or select() system calls can be used with the - device file descriptor to watch for new events. For select(), the file descriptor - should be included in the exceptfds argument, and for poll(), POLLPRI should - be specified as the wake-up condition. Since the event queue allocated is - rather small (room for 8 events), the queue must be serviced regularly to avoid - overflow. If an overflow happens, the oldest event is discarded from the queue, - and an error (EOVERFLOW) occurs the next time the queue is read. After - reporting the error condition in this fashion, subsequent - FE_GET_EVENT - calls will return events from the queue as usual. - - -For the sake of implementation simplicity, this command requires read/write - access to the device. - - - -SYNOPSIS - - -int ioctl(int fd, int request = QPSK_GET_EVENT, - struct dvb_frontend_event ⋆ev); - - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals FE_GET_EVENT for this command. - - -struct - dvb_frontend_event - *ev - -Points to the location where the event, - - - -if any, is to be stored. - - - -&return-value-dvb; - -EWOULDBLOCK - -There is no event pending, and the device is in - non-blocking mode. - - -EOVERFLOW - -Overflow in event queue - one or more events were lost. - - -
- -
- FE_DISHNETWORK_SEND_LEGACY_CMD -DESCRIPTION - - -WARNING: This is a very obscure legacy command, used only at stv0299 driver. Should not be used on newer drivers. -It provides a non-standard method for selecting Diseqc voltage on the frontend, for Dish Network legacy switches. -As support for this ioctl were added in 2004, this means that such dishes were already legacy in 2004. - - - -SYNOPSIS - - -int ioctl(int fd, int request = - FE_DISHNETWORK_SEND_LEGACY_CMD, unsigned long cmd); - - - -PARAMETERS - - - unsigned long cmd - - - -sends the specified raw cmd to the dish via DISEqC. - - - - -&return-value-dvb; -
- -
diff --git a/Documentation/DocBook/media/dvb/intro.xml b/Documentation/DocBook/media/dvb/intro.xml deleted file mode 100644 index b5b701f5d8c2..000000000000 --- a/Documentation/DocBook/media/dvb/intro.xml +++ /dev/null @@ -1,211 +0,0 @@ -Introduction - -
-What you need to know - -The reader of this document is required to have some knowledge in -the area of digital video broadcasting (DVB) and should be familiar with -part I of the MPEG2 specification ISO/IEC 13818 (aka ITU-T H.222), i.e -you should know what a program/transport stream (PS/TS) is and what is -meant by a packetized elementary stream (PES) or an I-frame. - -Various DVB standards documents are available from - and/or -. - -It is also necessary to know how to access unix/linux devices and -how to use ioctl calls. This also includes the knowledge of C or C++. - -
- -
-History - -The first API for DVB cards we used at Convergence in late 1999 -was an extension of the Video4Linux API which was primarily developed -for frame grabber cards. As such it was not really well suited to be -used for DVB cards and their new features like recording MPEG streams -and filtering several section and PES data streams at the same time. - - -In early 2000, we were approached by Nokia with a proposal for a -new standard Linux DVB API. As a commitment to the development of -terminals based on open standards, Nokia and Convergence made it -available to all Linux developers and published it on - in September 2000. -Convergence is the maintainer of the Linux DVB API. Together with the -LinuxTV community (i.e. you, the reader of this document), the Linux DVB -API will be constantly reviewed and improved. With the Linux driver for -the Siemens/Hauppauge DVB PCI card Convergence provides a first -implementation of the Linux DVB API. -
- -
-Overview - -
-Components of a DVB card/STB - - - - - - - - -
- -A DVB PCI card or DVB set-top-box (STB) usually consists of the -following main hardware components: - - - - -Frontend consisting of tuner and DVB demodulator - -Here the raw signal reaches the DVB hardware from a satellite dish -or antenna or directly from cable. The frontend down-converts and -demodulates this signal into an MPEG transport stream (TS). In case of a -satellite frontend, this includes a facility for satellite equipment -control (SEC), which allows control of LNB polarization, multi feed -switches or dish rotors. - - - - -Conditional Access (CA) hardware like CI adapters and smartcard slots - - -The complete TS is passed through the CA hardware. Programs to -which the user has access (controlled by the smart card) are decoded in -real time and re-inserted into the TS. - - - - Demultiplexer which filters the incoming DVB stream - -The demultiplexer splits the TS into its components like audio and -video streams. Besides usually several of such audio and video streams -it also contains data streams with information about the programs -offered in this or other streams of the same provider. - - - - -MPEG2 audio and video decoder - -The main targets of the demultiplexer are the MPEG2 audio and -video decoders. After decoding they pass on the uncompressed audio and -video to the computer screen or (through a PAL/NTSC encoder) to a TV -set. - - - - - - shows a crude schematic of the control and data flow -between those components. - -On a DVB PCI card not all of these have to be present since some -functionality can be provided by the main CPU of the PC (e.g. MPEG -picture and sound decoding) or is not needed (e.g. for data-only uses -like “internet over satellite”). Also not every card or STB -provides conditional access hardware. - -
- -
-Linux DVB Devices - -The Linux DVB API lets you control these hardware components -through currently six Unix-style character devices for video, audio, -frontend, demux, CA and IP-over-DVB networking. The video and audio -devices control the MPEG2 decoder hardware, the frontend device the -tuner and the DVB demodulator. The demux device gives you control over -the PES and section filters of the hardware. If the hardware does not -support filtering these filters can be implemented in software. Finally, -the CA device controls all the conditional access capabilities of the -hardware. It can depend on the individual security requirements of the -platform, if and how many of the CA functions are made available to the -application through this device. - -All devices can be found in the /dev -tree under /dev/dvb. The individual devices -are called: - - - - -/dev/dvb/adapterN/audioM, - - -/dev/dvb/adapterN/videoM, - - -/dev/dvb/adapterN/frontendM, - - - -/dev/dvb/adapterN/netM, - - - -/dev/dvb/adapterN/demuxM, - - - -/dev/dvb/adapterN/dvrM, - - - -/dev/dvb/adapterN/caM, - -where N enumerates the DVB PCI cards in a system starting -from 0, and M enumerates the devices of each type within each -adapter, starting from 0, too. We will omit the “ -/dev/dvb/adapterN/” in the further discussion -of these devices. - -More details about the data structures and function calls of all -the devices are described in the following chapters. - -
- -
-API include files - -For each of the DVB devices a corresponding include file exists. -The DVB API include files should be included in application sources with -a partial path like: - - - #include <linux/dvb/audio.h> - - - #include <linux/dvb/ca.h> - - - #include <linux/dvb/dmx.h> - - - #include <linux/dvb/frontend.h> - - - #include <linux/dvb/net.h> - - - #include <linux/dvb/osd.h> - - - #include <linux/dvb/video.h> - - -To enable applications to support different API version, an -additional include file -linux/dvb/version.h exists, which defines the -constant DVB_API_VERSION. This document -describes DVB_API_VERSION 5.10. - - -
- diff --git a/Documentation/DocBook/media/dvb/net.xml b/Documentation/DocBook/media/dvb/net.xml deleted file mode 100644 index da095ed0b75c..000000000000 --- a/Documentation/DocBook/media/dvb/net.xml +++ /dev/null @@ -1,238 +0,0 @@ -DVB Network API -The DVB net device controls the mapping of data packages that are - part of a transport stream to be mapped into a virtual network interface, - visible through the standard Linux network protocol stack. -Currently, two encapsulations are supported: - - - Multi Protocol Encapsulation (MPE) - - Ultra Lightweight Encapsulation (ULE) - - -In order to create the Linux virtual network interfaces, an application - needs to tell to the Kernel what are the PIDs and the encapsulation types - that are present on the transport stream. This is done through - /dev/dvb/adapter?/net? device node. - The data will be available via virtual dvb?_? - network interfaces, and will be controlled/routed via the standard - ip tools (like ip, route, netstat, ifconfig, etc). - Data types and and ioctl definitions are defined via - linux/dvb/net.h header. - -
-DVB net Function Calls - - - - - ioctl NET_ADD_IF - &manvol; - - - - NET_ADD_IF - Creates a new network interface for a given Packet ID. - - - - - - int ioctl - int fd - int request - struct dvb_net_if *net_if - - - - - - Arguments - - - fd - - &fe_fd; - - - - request - - FE_SET_TONE - - - - net_if - - pointer to &dvb-net-if; - - - - - - - Description - -The NET_ADD_IF ioctl system call selects the Packet ID (PID) that - contains a TCP/IP traffic, the type of encapsulation to be used (MPE or ULE) - and the interface number for the new interface to be created. When the - system call successfully returns, a new virtual network interface is created. -The &dvb-net-if;::ifnum field will be filled with the number of the - created interface. - -&return-value-dvb; - - - -struct <structname>dvb_net_if</structname> description - - - struct <structname>dvb_net_if</structname> - - &cs-def; - - - ID - Description - - - - - pid - Packet ID (PID) of the MPEG-TS that contains - data - - ifnum - number of the DVB interface. - - feedtype - Encapsulation type of the feed. It can be: - DVB_NET_FEEDTYPE_MPE for MPE encoding - or - DVB_NET_FEEDTYPE_ULE for ULE encoding. - - - - -
-
-
- - - - ioctl NET_REMOVE_IF - &manvol; - - - - NET_REMOVE_IF - Removes a network interface. - - - - - - int ioctl - int fd - int request - int ifnum - - - - - - Arguments - - - fd - - &fe_fd; - - - - request - - FE_SET_TONE - - - - net_if - - number of the interface to be removed - - - - - - - Description - -The NET_REMOVE_IF ioctl deletes an interface previously created - via &NET-ADD-IF;. - -&return-value-dvb; - - - - - - - ioctl NET_GET_IF - &manvol; - - - - NET_GET_IF - Read the configuration data of an interface created via - &NET-ADD-IF;. - - - - - - int ioctl - int fd - int request - struct dvb_net_if *net_if - - - - - - Arguments - - - fd - - &fe_fd; - - - - request - - FE_SET_TONE - - - - net_if - - pointer to &dvb-net-if; - - - - - - - Description - -The NET_GET_IF ioctl uses the interface number given by the - &dvb-net-if;::ifnum field and fills the content of &dvb-net-if; with - the packet ID and encapsulation type used on such interface. If the - interface was not created yet with &NET-ADD-IF;, it will return -1 and - fill the errno with EINVAL - error code. - -&return-value-dvb; - - -
diff --git a/Documentation/DocBook/media/dvb/video.xml b/Documentation/DocBook/media/dvb/video.xml deleted file mode 100644 index 71547fcd7ba0..000000000000 --- a/Documentation/DocBook/media/dvb/video.xml +++ /dev/null @@ -1,1968 +0,0 @@ -DVB Video Device -The DVB video device controls the MPEG2 video decoder of the DVB hardware. It -can be accessed through /dev/dvb/adapter0/video0. Data types and and -ioctl definitions can be accessed by including linux/dvb/video.h in your -application. - -Note that the DVB video device only controls decoding of the MPEG video stream, not -its presentation on the TV or computer screen. On PCs this is typically handled by an -associated video4linux device, e.g. /dev/video, which allows scaling and defining output -windows. - -Some DVB cards don’t have their own MPEG decoder, which results in the omission of -the audio and video device as well as the video4linux device. - -The ioctls that deal with SPUs (sub picture units) and navigation packets are only -supported on some MPEG decoders made for DVD playback. - - -These ioctls were also used by V4L2 to control MPEG decoders implemented in V4L2. The use -of these ioctls for that purpose has been made obsolete and proper V4L2 ioctls or controls -have been created to replace that functionality. -
-Video Data Types - -
-video_format_t -The video_format_t data type defined by - - -typedef enum { - VIDEO_FORMAT_4_3, /⋆ Select 4:3 format ⋆/ - VIDEO_FORMAT_16_9, /⋆ Select 16:9 format. ⋆/ - VIDEO_FORMAT_221_1 /⋆ 2.21:1 ⋆/ -} video_format_t; - -is used in the VIDEO_SET_FORMAT function (??) to tell the driver which aspect ratio -the output hardware (e.g. TV) has. It is also used in the data structures video_status -(??) returned by VIDEO_GET_STATUS (??) and video_event (??) returned by -VIDEO_GET_EVENT (??) which report about the display format of the current video -stream. - -
- -
-video_displayformat_t -In case the display format of the video stream and of the display hardware differ the -application has to specify how to handle the cropping of the picture. This can be done using -the VIDEO_SET_DISPLAY_FORMAT call (??) which accepts - - -typedef enum { - VIDEO_PAN_SCAN, /⋆ use pan and scan format ⋆/ - VIDEO_LETTER_BOX, /⋆ use letterbox format ⋆/ - VIDEO_CENTER_CUT_OUT /⋆ use center cut out format ⋆/ -} video_displayformat_t; - -as argument. - -
- -
-video_stream_source_t -The video stream source is set through the VIDEO_SELECT_SOURCE call and can take -the following values, depending on whether we are replaying from an internal (demuxer) or -external (user write) source. - - -typedef enum { - VIDEO_SOURCE_DEMUX, /⋆ Select the demux as the main source ⋆/ - VIDEO_SOURCE_MEMORY /⋆ If this source is selected, the stream - comes from the user through the write - system call ⋆/ -} video_stream_source_t; - -VIDEO_SOURCE_DEMUX selects the demultiplexer (fed either by the frontend or the -DVR device) as the source of the video stream. If VIDEO_SOURCE_MEMORY -is selected the stream comes from the application through the write() system -call. - -
- -
-video_play_state_t -The following values can be returned by the VIDEO_GET_STATUS call representing the -state of video playback. - - -typedef enum { - VIDEO_STOPPED, /⋆ Video is stopped ⋆/ - VIDEO_PLAYING, /⋆ Video is currently playing ⋆/ - VIDEO_FREEZED /⋆ Video is freezed ⋆/ -} video_play_state_t; - -
- -
-struct video_command -The structure must be zeroed before use by the application -This ensures it can be extended safely in the future. - -struct video_command { - __u32 cmd; - __u32 flags; - union { - struct { - __u64 pts; - } stop; - - struct { - /⋆ 0 or 1000 specifies normal speed, - 1 specifies forward single stepping, - -1 specifies backward single stepping, - >>1: playback at speed/1000 of the normal speed, - <-1: reverse playback at (-speed/1000) of the normal speed. ⋆/ - __s32 speed; - __u32 format; - } play; - - struct { - __u32 data[16]; - } raw; - }; -}; - -
- -
-video_size_t - -typedef struct { - int w; - int h; - video_format_t aspect_ratio; -} video_size_t; - -
- - -
-struct video_event -The following is the structure of a video event as it is returned by the VIDEO_GET_EVENT -call. - - -struct video_event { - __s32 type; -#define VIDEO_EVENT_SIZE_CHANGED 1 -#define VIDEO_EVENT_FRAME_RATE_CHANGED 2 -#define VIDEO_EVENT_DECODER_STOPPED 3 -#define VIDEO_EVENT_VSYNC 4 - __kernel_time_t timestamp; - union { - video_size_t size; - unsigned int frame_rate; /⋆ in frames per 1000sec ⋆/ - unsigned char vsync_field; /⋆ unknown/odd/even/progressive ⋆/ - } u; -}; - -
- -
-struct video_status -The VIDEO_GET_STATUS call returns the following structure informing about various -states of the playback operation. - - -struct video_status { - int video_blank; /⋆ blank video on freeze? ⋆/ - video_play_state_t play_state; /⋆ current state of playback ⋆/ - video_stream_source_t stream_source; /⋆ current source (demux/memory) ⋆/ - video_format_t video_format; /⋆ current aspect ratio of stream ⋆/ - video_displayformat_t display_format;/⋆ selected cropping mode ⋆/ -}; - -If video_blank is set video will be blanked out if the channel is changed or if playback is -stopped. Otherwise, the last picture will be displayed. play_state indicates if the video is -currently frozen, stopped, or being played back. The stream_source corresponds to the seleted -source for the video stream. It can come either from the demultiplexer or from memory. -The video_format indicates the aspect ratio (one of 4:3 or 16:9) of the currently -played video stream. Finally, display_format corresponds to the selected cropping -mode in case the source video format is not the same as the format of the output -device. - -
- -
-struct video_still_picture -An I-frame displayed via the VIDEO_STILLPICTURE call is passed on within the -following structure. - - -/⋆ pointer to and size of a single iframe in memory ⋆/ -struct video_still_picture { - char ⋆iFrame; /⋆ pointer to a single iframe in memory ⋆/ - int32_t size; -}; - -
- -
-video capabilities -A call to VIDEO_GET_CAPABILITIES returns an unsigned integer with the following -bits set according to the hardwares capabilities. - - - /⋆ bit definitions for capabilities: ⋆/ - /⋆ can the hardware decode MPEG1 and/or MPEG2? ⋆/ - #define VIDEO_CAP_MPEG1 1 - #define VIDEO_CAP_MPEG2 2 - /⋆ can you send a system and/or program stream to video device? - (you still have to open the video and the audio device but only - send the stream to the video device) ⋆/ - #define VIDEO_CAP_SYS 4 - #define VIDEO_CAP_PROG 8 - /⋆ can the driver also handle SPU, NAVI and CSS encoded data? - (CSS API is not present yet) ⋆/ - #define VIDEO_CAP_SPU 16 - #define VIDEO_CAP_NAVI 32 - #define VIDEO_CAP_CSS 64 - -
- -
-video_system_t -A call to VIDEO_SET_SYSTEM sets the desired video system for TV output. The -following system types can be set: - - -typedef enum { - VIDEO_SYSTEM_PAL, - VIDEO_SYSTEM_NTSC, - VIDEO_SYSTEM_PALN, - VIDEO_SYSTEM_PALNc, - VIDEO_SYSTEM_PALM, - VIDEO_SYSTEM_NTSC60, - VIDEO_SYSTEM_PAL60, - VIDEO_SYSTEM_PALM60 -} video_system_t; - -
- -
-struct video_highlight -Calling the ioctl VIDEO_SET_HIGHLIGHTS posts the SPU highlight information. The -call expects the following format for that information: - - - typedef - struct video_highlight { - boolean active; /⋆ 1=show highlight, 0=hide highlight ⋆/ - uint8_t contrast1; /⋆ 7- 4 Pattern pixel contrast ⋆/ - /⋆ 3- 0 Background pixel contrast ⋆/ - uint8_t contrast2; /⋆ 7- 4 Emphasis pixel-2 contrast ⋆/ - /⋆ 3- 0 Emphasis pixel-1 contrast ⋆/ - uint8_t color1; /⋆ 7- 4 Pattern pixel color ⋆/ - /⋆ 3- 0 Background pixel color ⋆/ - uint8_t color2; /⋆ 7- 4 Emphasis pixel-2 color ⋆/ - /⋆ 3- 0 Emphasis pixel-1 color ⋆/ - uint32_t ypos; /⋆ 23-22 auto action mode ⋆/ - /⋆ 21-12 start y ⋆/ - /⋆ 9- 0 end y ⋆/ - uint32_t xpos; /⋆ 23-22 button color number ⋆/ - /⋆ 21-12 start x ⋆/ - /⋆ 9- 0 end x ⋆/ - } video_highlight_t; - - -
-
-struct video_spu -Calling VIDEO_SET_SPU deactivates or activates SPU decoding, according to the -following format: - - - typedef - struct video_spu { - boolean active; - int stream_id; - } video_spu_t; - - -
-
-struct video_spu_palette -The following structure is used to set the SPU palette by calling VIDEO_SPU_PALETTE: - - - typedef - struct video_spu_palette { - int length; - uint8_t ⋆palette; - } video_spu_palette_t; - - -
-
-struct video_navi_pack -In order to get the navigational data the following structure has to be passed to the ioctl -VIDEO_GET_NAVI: - - - typedef - struct video_navi_pack { - int length; /⋆ 0 ... 1024 ⋆/ - uint8_t data[1024]; - } video_navi_pack_t; - -
- - -
-video_attributes_t -The following attributes can be set by a call to VIDEO_SET_ATTRIBUTES: - - - typedef uint16_t video_attributes_t; - /⋆ bits: descr. ⋆/ - /⋆ 15-14 Video compression mode (0=MPEG-1, 1=MPEG-2) ⋆/ - /⋆ 13-12 TV system (0=525/60, 1=625/50) ⋆/ - /⋆ 11-10 Aspect ratio (0=4:3, 3=16:9) ⋆/ - /⋆ 9- 8 permitted display mode on 4:3 monitor (0=both, 1=only pan-sca ⋆/ - /⋆ 7 line 21-1 data present in GOP (1=yes, 0=no) ⋆/ - /⋆ 6 line 21-2 data present in GOP (1=yes, 0=no) ⋆/ - /⋆ 5- 3 source resolution (0=720x480/576, 1=704x480/576, 2=352x480/57 ⋆/ - /⋆ 2 source letterboxed (1=yes, 0=no) ⋆/ - /⋆ 0 film/camera mode (0=camera, 1=film (625/50 only)) ⋆/ - -
- - -
-Video Function Calls - - -
-open() -DESCRIPTION - - -This system call opens a named video device (e.g. /dev/dvb/adapter0/video0) - for subsequent use. -When an open() call has succeeded, the device will be ready for use. - The significance of blocking or non-blocking mode is described in the - documentation for functions where there is a difference. It does not affect the - semantics of the open() call itself. A device opened in blocking mode can later - be put into non-blocking mode (and vice versa) using the F_SETFL command - of the fcntl system call. This is a standard system call, documented in the Linux - manual page for fcntl. Only one user can open the Video Device in O_RDWR - mode. All other attempts to open the device in this mode will fail, and an - error-code will be returned. If the Video Device is opened in O_RDONLY - mode, the only ioctl call that can be used is VIDEO_GET_STATUS. All other - call will return an error code. - - - -SYNOPSIS - - -int open(const char ⋆deviceName, int flags); - - -PARAMETERS - - -const char - *deviceName - -Name of specific video device. - - -int flags - -A bit-wise OR of the following flags: - - - -O_RDONLY read-only access - - - -O_RDWR read/write access - - - -O_NONBLOCK open in non-blocking mode - - - -(blocking mode is the default) - - -RETURN VALUE - -ENODEV - -Device driver not loaded/available. - - -EINTERNAL - -Internal error. - - -EBUSY - -Device or resource busy. - - -EINVAL - -Invalid argument. - - - -
-
-close() -DESCRIPTION - - -This system call closes a previously opened video device. - - -SYNOPSIS - - -int close(int fd); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -RETURN VALUE - -EBADF - -fd is not a valid open file descriptor. - - - -
-
-write() -DESCRIPTION - - -This system call can only be used if VIDEO_SOURCE_MEMORY is selected - in the ioctl call VIDEO_SELECT_SOURCE. The data provided shall be in - PES format, unless the capability allows other formats. If O_NONBLOCK is - not specified the function will block until buffer space is available. The amount - of data to be transferred is implied by count. - - -SYNOPSIS - - -size_t write(int fd, const void ⋆buf, size_t count); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -void *buf - -Pointer to the buffer containing the PES data. - - -size_t count - -Size of buf. - - -RETURN VALUE - -EPERM - -Mode VIDEO_SOURCE_MEMORY not selected. - - -ENOMEM - -Attempted to write more data than the internal buffer can - hold. - - -EBADF - -fd is not a valid open file descriptor. - - - -
VIDEO_STOP -DESCRIPTION - -This ioctl is for DVB devices only. To control a V4L2 decoder use the V4L2 -&VIDIOC-DECODER-CMD; instead. - -This ioctl call asks the Video Device to stop playing the current stream. - Depending on the input parameter, the screen can be blanked out or displaying - the last decoded frame. - - -SYNOPSIS - - -int ioctl(fd, int request = VIDEO_STOP, boolean - mode); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals VIDEO_STOP for this command. - - -Boolean mode - -Indicates how the screen shall be handled. - - - -TRUE: Blank screen when stop. - - - -FALSE: Show last decoded frame. - - -&return-value-dvb; - -
VIDEO_PLAY -DESCRIPTION - -This ioctl is for DVB devices only. To control a V4L2 decoder use the V4L2 -&VIDIOC-DECODER-CMD; instead. - -This ioctl call asks the Video Device to start playing a video stream from the - selected source. - - -SYNOPSIS - - -int ioctl(fd, int request = VIDEO_PLAY); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals VIDEO_PLAY for this command. - - -&return-value-dvb; - -
VIDEO_FREEZE -DESCRIPTION - -This ioctl is for DVB devices only. To control a V4L2 decoder use the V4L2 -&VIDIOC-DECODER-CMD; instead. - -This ioctl call suspends the live video stream being played. Decoding - and playing are frozen. It is then possible to restart the decoding - and playing process of the video stream using the VIDEO_CONTINUE - command. If VIDEO_SOURCE_MEMORY is selected in the ioctl call - VIDEO_SELECT_SOURCE, the DVB subsystem will not decode any more - data until the ioctl call VIDEO_CONTINUE or VIDEO_PLAY is performed. - - -SYNOPSIS - - -int ioctl(fd, int request = VIDEO_FREEZE); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals VIDEO_FREEZE for this command. - - -&return-value-dvb; - -
VIDEO_CONTINUE -DESCRIPTION - -This ioctl is for DVB devices only. To control a V4L2 decoder use the V4L2 -&VIDIOC-DECODER-CMD; instead. - -This ioctl call restarts decoding and playing processes of the video stream - which was played before a call to VIDEO_FREEZE was made. - - -SYNOPSIS - - -int ioctl(fd, int request = VIDEO_CONTINUE); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals VIDEO_CONTINUE for this command. - - -&return-value-dvb; - -
VIDEO_SELECT_SOURCE -DESCRIPTION - -This ioctl is for DVB devices only. This ioctl was also supported by the -V4L2 ivtv driver, but that has been replaced by the ivtv-specific -IVTV_IOC_PASSTHROUGH_MODE ioctl. - -This ioctl call informs the video device which source shall be used for the input - data. The possible sources are demux or memory. If memory is selected, the - data is fed to the video device through the write command. - - -SYNOPSIS - - -int ioctl(fd, int request = VIDEO_SELECT_SOURCE, - video_stream_source_t source); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals VIDEO_SELECT_SOURCE for this command. - - -video_stream_source_t - source - -Indicates which source shall be used for the Video stream. - - -&return-value-dvb; - -
VIDEO_SET_BLANK -DESCRIPTION - - -This ioctl call asks the Video Device to blank out the picture. - - -SYNOPSIS - - -int ioctl(fd, int request = VIDEO_SET_BLANK, boolean - mode); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals VIDEO_SET_BLANK for this command. - - -boolean mode - -TRUE: Blank screen when stop. - - - -FALSE: Show last decoded frame. - - -&return-value-dvb; - -
VIDEO_GET_STATUS -DESCRIPTION - - -This ioctl call asks the Video Device to return the current status of the device. - - -SYNOPSIS - - - int ioctl(fd, int request = VIDEO_GET_STATUS, struct - video_status ⋆status); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals VIDEO_GET_STATUS for this command. - - -struct video_status - *status - -Returns the current status of the Video Device. - - -&return-value-dvb; - -
VIDEO_GET_FRAME_COUNT -DESCRIPTION - -This ioctl is obsolete. Do not use in new drivers. For V4L2 decoders this -ioctl has been replaced by the V4L2_CID_MPEG_VIDEO_DEC_FRAME control. - -This ioctl call asks the Video Device to return the number of displayed frames -since the decoder was started. - - -SYNOPSIS - - -int ioctl(int fd, int request = - VIDEO_GET_FRAME_COUNT, __u64 *pts); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals VIDEO_GET_FRAME_COUNT for this - command. - - -__u64 *pts - - -Returns the number of frames displayed since the decoder was started. - - - -&return-value-dvb; - -
VIDEO_GET_PTS -DESCRIPTION - -This ioctl is obsolete. Do not use in new drivers. For V4L2 decoders this -ioctl has been replaced by the V4L2_CID_MPEG_VIDEO_DEC_PTS control. - -This ioctl call asks the Video Device to return the current PTS timestamp. - - -SYNOPSIS - - -int ioctl(int fd, int request = - VIDEO_GET_PTS, __u64 *pts); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals VIDEO_GET_PTS for this - command. - - -__u64 *pts - - -Returns the 33-bit timestamp as defined in ITU T-REC-H.222.0 / ISO/IEC 13818-1. - - -The PTS should belong to the currently played -frame if possible, but may also be a value close to it -like the PTS of the last decoded frame or the last PTS -extracted by the PES parser. - - -&return-value-dvb; - -
VIDEO_GET_FRAME_RATE -DESCRIPTION - - -This ioctl call asks the Video Device to return the current framerate. - - -SYNOPSIS - - -int ioctl(int fd, int request = - VIDEO_GET_FRAME_RATE, unsigned int *rate); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals VIDEO_GET_FRAME_RATE for this - command. - - -unsigned int *rate - - -Returns the framerate in number of frames per 1000 seconds. - - - -&return-value-dvb; - -
VIDEO_GET_EVENT -DESCRIPTION - -This ioctl is for DVB devices only. To get events from a V4L2 decoder use the V4L2 -&VIDIOC-DQEVENT; ioctl instead. - -This ioctl call returns an event of type video_event if available. If an event is - not available, the behavior depends on whether the device is in blocking or - non-blocking mode. In the latter case, the call fails immediately with errno - set to EWOULDBLOCK. In the former case, the call blocks until an event - becomes available. The standard Linux poll() and/or select() system calls can - be used with the device file descriptor to watch for new events. For select(), - the file descriptor should be included in the exceptfds argument, and for - poll(), POLLPRI should be specified as the wake-up condition. Read-only - permissions are sufficient for this ioctl call. - - -SYNOPSIS - - - int ioctl(fd, int request = VIDEO_GET_EVENT, struct - video_event ⋆ev); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals VIDEO_GET_EVENT for this command. - - -struct video_event - *ev - -Points to the location where the event, if any, is to be - stored. - - -&return-value-dvb; - -EWOULDBLOCK - -There is no event pending, and the device is in - non-blocking mode. - - -EOVERFLOW - -Overflow in event queue - one or more events were lost. - - - -
VIDEO_COMMAND -DESCRIPTION - -This ioctl is obsolete. Do not use in new drivers. For V4L2 decoders this -ioctl has been replaced by the &VIDIOC-DECODER-CMD; ioctl. - -This ioctl commands the decoder. The video_command struct -is a subset of the v4l2_decoder_cmd struct, so refer to the -&VIDIOC-DECODER-CMD; documentation for more information. - - -SYNOPSIS - - -int ioctl(int fd, int request = - VIDEO_COMMAND, struct video_command *cmd); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals VIDEO_COMMAND for this - command. - - -struct video_command *cmd - - -Commands the decoder. - - - -&return-value-dvb; - -
VIDEO_TRY_COMMAND -DESCRIPTION - -This ioctl is obsolete. Do not use in new drivers. For V4L2 decoders this -ioctl has been replaced by the &VIDIOC-TRY-DECODER-CMD; ioctl. - -This ioctl tries a decoder command. The video_command struct -is a subset of the v4l2_decoder_cmd struct, so refer to the -&VIDIOC-TRY-DECODER-CMD; documentation for more information. - - -SYNOPSIS - - -int ioctl(int fd, int request = - VIDEO_TRY_COMMAND, struct video_command *cmd); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals VIDEO_TRY_COMMAND for this - command. - - -struct video_command *cmd - - -Try a decoder command. - - - -&return-value-dvb; - -
VIDEO_GET_SIZE -DESCRIPTION - - -This ioctl returns the size and aspect ratio. - - -SYNOPSIS - - -int ioctl(int fd, int request = - VIDEO_GET_SIZE, video_size_t *size); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals VIDEO_GET_SIZE for this - command. - - -video_size_t *size - - -Returns the size and aspect ratio. - - - -&return-value-dvb; - -
VIDEO_SET_DISPLAY_FORMAT -DESCRIPTION - - -This ioctl call asks the Video Device to select the video format to be applied - by the MPEG chip on the video. - - -SYNOPSIS - - - int ioctl(fd, int request = - VIDEO_SET_DISPLAY_FORMAT, video_display_format_t - format); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals VIDEO_SET_DISPLAY_FORMAT for this - command. - - -video_display_format_t - format - -Selects the video format to be used. - - -&return-value-dvb; - -
VIDEO_STILLPICTURE -DESCRIPTION - - -This ioctl call asks the Video Device to display a still picture (I-frame). The - input data shall contain an I-frame. If the pointer is NULL, then the current - displayed still picture is blanked. - - -SYNOPSIS - - -int ioctl(fd, int request = VIDEO_STILLPICTURE, - struct video_still_picture ⋆sp); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals VIDEO_STILLPICTURE for this command. - - -struct - video_still_picture - *sp - -Pointer to a location where an I-frame and size is stored. - - -&return-value-dvb; - -
VIDEO_FAST_FORWARD -DESCRIPTION - - -This ioctl call asks the Video Device to skip decoding of N number of I-frames. - This call can only be used if VIDEO_SOURCE_MEMORY is selected. - - -SYNOPSIS - - -int ioctl(fd, int request = VIDEO_FAST_FORWARD, int - nFrames); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals VIDEO_FAST_FORWARD for this command. - - -int nFrames - -The number of frames to skip. - - -&return-value-dvb; - -EPERM - -Mode VIDEO_SOURCE_MEMORY not selected. - - - -
VIDEO_SLOWMOTION -DESCRIPTION - - -This ioctl call asks the video device to repeat decoding frames N number of - times. This call can only be used if VIDEO_SOURCE_MEMORY is selected. - - -SYNOPSIS - - -int ioctl(fd, int request = VIDEO_SLOWMOTION, int - nFrames); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals VIDEO_SLOWMOTION for this command. - - -int nFrames - -The number of times to repeat each frame. - - -&return-value-dvb; - -EPERM - -Mode VIDEO_SOURCE_MEMORY not selected. - - - -
VIDEO_GET_CAPABILITIES -DESCRIPTION - - -This ioctl call asks the video device about its decoding capabilities. On success - it returns and integer which has bits set according to the defines in section ??. - - -SYNOPSIS - - -int ioctl(fd, int request = VIDEO_GET_CAPABILITIES, - unsigned int ⋆cap); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals VIDEO_GET_CAPABILITIES for this - command. - - -unsigned int *cap - -Pointer to a location where to store the capability - information. - - -&return-value-dvb; - -
VIDEO_SET_ID -DESCRIPTION - - -This ioctl selects which sub-stream is to be decoded if a program or system - stream is sent to the video device. - - -SYNOPSIS - - -int ioctl(int fd, int request = VIDEO_SET_ID, int - id); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals VIDEO_SET_ID for this command. - - -int id - -video sub-stream id - - -&return-value-dvb; - -EINVAL - -Invalid sub-stream id. - - - -
VIDEO_CLEAR_BUFFER -DESCRIPTION - - -This ioctl call clears all video buffers in the driver and in the decoder hardware. - - -SYNOPSIS - - -int ioctl(fd, int request = VIDEO_CLEAR_BUFFER); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals VIDEO_CLEAR_BUFFER for this command. - - -&return-value-dvb; - -
VIDEO_SET_STREAMTYPE -DESCRIPTION - - -This ioctl tells the driver which kind of stream to expect being written to it. If - this call is not used the default of video PES is used. Some drivers might not - support this call and always expect PES. - - -SYNOPSIS - - -int ioctl(fd, int request = VIDEO_SET_STREAMTYPE, - int type); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals VIDEO_SET_STREAMTYPE for this command. - - -int type - -stream type - - -&return-value-dvb; - -
VIDEO_SET_FORMAT -DESCRIPTION - - -This ioctl sets the screen format (aspect ratio) of the connected output device - (TV) so that the output of the decoder can be adjusted accordingly. - - -SYNOPSIS - - - int ioctl(fd, int request = VIDEO_SET_FORMAT, - video_format_t format); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals VIDEO_SET_FORMAT for this command. - - -video_format_t - format - -video format of TV as defined in section ??. - - -&return-value-dvb; - -EINVAL - -format is not a valid video format. - - - -
VIDEO_SET_SYSTEM -DESCRIPTION - - -This ioctl sets the television output format. The format (see section ??) may - vary from the color format of the displayed MPEG stream. If the hardware is - not able to display the requested format the call will return an error. - - -SYNOPSIS - - - int ioctl(fd, int request = VIDEO_SET_SYSTEM , - video_system_t system); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals VIDEO_SET_FORMAT for this command. - - -video_system_t - system - -video system of TV output. - - -&return-value-dvb; - -EINVAL - -system is not a valid or supported video system. - - - -
VIDEO_SET_HIGHLIGHT -DESCRIPTION - - -This ioctl sets the SPU highlight information for the menu access of a DVD. - - -SYNOPSIS - - - int ioctl(fd, int request = VIDEO_SET_HIGHLIGHT - ,video_highlight_t ⋆vhilite) - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals VIDEO_SET_HIGHLIGHT for this command. - - -video_highlight_t - *vhilite - -SPU Highlight information according to section ??. - - -&return-value-dvb; - -
VIDEO_SET_SPU -DESCRIPTION - - -This ioctl activates or deactivates SPU decoding in a DVD input stream. It can - only be used, if the driver is able to handle a DVD stream. - - -SYNOPSIS - - - int ioctl(fd, int request = VIDEO_SET_SPU , - video_spu_t ⋆spu) - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals VIDEO_SET_SPU for this command. - - -video_spu_t *spu - -SPU decoding (de)activation and subid setting according - to section ??. - - -&return-value-dvb; - -EINVAL - -input is not a valid spu setting or driver cannot handle - SPU. - - - -
VIDEO_SET_SPU_PALETTE -DESCRIPTION - - -This ioctl sets the SPU color palette. - - -SYNOPSIS - - - int ioctl(fd, int request = VIDEO_SET_SPU_PALETTE - ,video_spu_palette_t ⋆palette ) - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals VIDEO_SET_SPU_PALETTE for this command. - - -video_spu_palette_t - *palette - -SPU palette according to section ??. - - -&return-value-dvb; - -EINVAL - -input is not a valid palette or driver doesn’t handle SPU. - - - -
VIDEO_GET_NAVI -DESCRIPTION - - -This ioctl returns navigational information from the DVD stream. This is - especially needed if an encoded stream has to be decoded by the hardware. - - -SYNOPSIS - - - int ioctl(fd, int request = VIDEO_GET_NAVI , - video_navi_pack_t ⋆navipack) - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals VIDEO_GET_NAVI for this command. - - -video_navi_pack_t - *navipack - -PCI or DSI pack (private stream 2) according to section - ??. - - -&return-value-dvb; - -EFAULT - -driver is not able to return navigational information - - - -
VIDEO_SET_ATTRIBUTES -DESCRIPTION - - -This ioctl is intended for DVD playback and allows you to set certain - information about the stream. Some hardware may not need this information, - but the call also tells the hardware to prepare for DVD playback. - - -SYNOPSIS - - - int ioctl(fd, int request = VIDEO_SET_ATTRIBUTE - ,video_attributes_t vattr) - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int request - -Equals VIDEO_SET_ATTRIBUTE for this command. - - -video_attributes_t - vattr - -video attributes according to section ??. - - -&return-value-dvb; - -EINVAL - -input is not a valid attribute setting. - - -
diff --git a/Documentation/DocBook/media/dvbstb.png.b64 b/Documentation/DocBook/media/dvbstb.png.b64 deleted file mode 100644 index e8b52fde3d11..000000000000 --- a/Documentation/DocBook/media/dvbstb.png.b64 +++ /dev/null @@ -1,398 +0,0 @@ -iVBORw0KGgoAAAANSUhEUgAAAzMAAAGaCAYAAAA7Jx25AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBI -WXMAAA3XAAANiQFmEOuiAAAgAElEQVR42uzdd1RU18I28GdgKFZUBE0saFA0KoqFFkEhKhbAQmxJ -bIkNNEpMEUwsMZarJMZrw4KxRExQczUqil0jRBA1GAjGQqLYC4TemdnfH76cj3HodYDntxaLmTll -zuw57Zmz9z4yIYQAkYZzcnJCSkoKGjZsyMIgIiIiquPS09PRoEEDyBhmqCaQyWRo06YN3nvvPRYG -ERERUR137Ngx/Pnnn5CzKKgmMDAwwKpVqxhmiIiIiAj29vZ4//33ocWiICIiIiKimohhhoiIiIiI -GGaIiIiIiIgYZoiIiIiIiBhmiIiIiIiIYYaIiIiIiIhhhoiIiIiIiGGGiIiIiIgYZoiIiIiIiBhm -iIiIiIiIGGaIiIiIiIgYZoiIiIiIiGGGiIiIiIiIYYaIiIiIiIhhhoiIiIiIGGaIiIiIiIgYZoiI -iIiIiBhmiIiIiIiIYYaIiIiIiIhhhoiIiIiIqFLIWQRElSMsLAy2trZo1KgR5HJualTxEhIS8P33 -3+PDDz+sM5+5bdu2ePDgAZo2bcoVgCplm3J0dMS5c+fqzGf++uuvsWTJEm5TVClSU1ORk5ODBw8e -oHXr1gwzRDVJbm4uAGDRokUwMDBggVCFmzlzJrKysurUZ3727BksLCzg4eHBFYAq3IIFC5CQkFCn -PnNGRgYAYNWqVVwBqMJFRUVh48aNUCqVlfYeDDNElWzGjBkMM1QpNm7cWOc+c8uWLTFjxgzMmDGD -KwBVuLt37yIkJKTOfW5nZ2duU1SpYaYysc0MERERERHVSAwzRERERETEMENERERERMQwQ0RERERE -xDBDREREREQMM0RERERERAwzREREREREDDNERERERMQwQ0RERERExDBDRERERETEMENERERERMQw -Q0REREREDDNEREREREQMM0RERERERAwzRERERETEMENERERERMQwQ0RERERExDBDREREREQMM0RE -RERERAwzREREREREDDNEREREREQMM0RERERExDBDRERERETEMENERERERMQwQ0REREREDDNERERE -REQMM0RERERERAwzRERERETEMENERERERMQwQ0REREREVGnkLAKimunBgwdISkoq8/SGhoZ47bXX -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 -AADISP8FpxZnWS0U37cAAAAASUVORK5CYII= diff --git a/Documentation/DocBook/media/fieldseq_bt.gif.b64 b/Documentation/DocBook/media/fieldseq_bt.gif.b64 deleted file mode 100644 index b5b557b88158..000000000000 --- a/Documentation/DocBook/media/fieldseq_bt.gif.b64 +++ /dev/null @@ -1,447 +0,0 @@ -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 -l3O5NwEBADs= diff --git a/Documentation/DocBook/media/fieldseq_tb.gif.b64 b/Documentation/DocBook/media/fieldseq_tb.gif.b64 deleted file mode 100644 index 7b4c1766b407..000000000000 --- a/Documentation/DocBook/media/fieldseq_tb.gif.b64 +++ /dev/null @@ -1,445 +0,0 @@ -R0lGODlhdQKaAucAAAAAAElJDK+vr1YMDBUVZC8kDQAAVkYQEBcHOwYGSCEJHSAgaKOjoys8DDMz -CgAYGp+fn19fFJmZmQoKO10wMA0VIAAAcDsICCsMDAcMT1MMD2ZmAAcSO29ISFUHByIAGoiIAA4H -T0pKDJaFhXd3d0EgABoaVGYyAC4AKXd3ODs7BwAAN1MAKQAAYlZGB2JlDBwcWWBtYCA3ABAQTQAA -ZQ0VQD4AAFVVVUhjSCQMJQAAfBMHMkQgIEtLSzAyDD5VPmZmDEZRB2FhEWZiDFo2ETkdCwAAVEUt -Gu7u7js7Ozc3N3d3WACPADU1NTMzMyBRIDgAAEJCEHEAAEwNDZeXAABpAEQFBSMjIxgNQDooCBA9 -EEhIbwBVAAw/DAwMPgBNAENDCgc9B8zMzABDAD4MDAwOKjwKCkQWKUscHAAAcUtLFRMTEwohCoqK -AA0NTBEREQgfCBUqIgApADIAAA4ULzg+DEEfH3wAAAcHSaqqqlkcHDgMDKSkpFQAABUVRjEwCGZm -B00QEDAwXSUMJGUAAJaWlhQUUnx8jVQaGgcGLggSGy8GBmw4OGNAL4qKioiIiGIAAEsHB3JYWHd3 -AAAAPlctLYQyAGggIBgAGkIVFQwcJRgYSA8MU9EAAAcHVQAALRoaYbu7AEY1H2ZmZlxdEHAAAD82 -DlhqWExGHgwOUzMzDAAAmgA5KTEHB2ZmPlpaB///////ACISRExUDTJPJUQrDAwMVhISSEhISHd3 -IC4xCjhcOA4ORERERBkVXElJAG5gYFhYcnt1ZkgGBlYAAAUFMTg4ODo3BTJrAFESEmZmMF5jBwoG -Q1paDUkKChxGHN3d3RwYRGZmHCgoKFMAACYmJi4YLhQ+FCIiIhU0FT0AKR4eHmVeBw04DRAsEAwu -DAc2BwoqCgAAPFdMDQAA0WAqKgwiDEgZGRkQRAckBxsTPDEwDBAQEDwAAEJGDAAAU0FBQEJCDLu7 -u2IYGJoAABgYRjg4bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAALAALAAAAAB1ApoC -AAj+AGEJHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuX -MGOelAegpk0AJFrSrLhTpYQ3AHoeDFpQqMCfQQHIXEh0olGBYkZtpGkTW56B0EYBfTMKCUEJEqja -7DpQDIAbBJsOJHF1qdu3cOOqVKtTKcWnEOnmlQALWk6Eep8C4Ou3YWC7JUlAg9VUL0K8vcRMRUwC -gFdoXBdD6+WE4A0kQqE5kSqwsuWBepFg8yq3tevXsPPKg4n3YW2HjnHPZrp7oODehoHDui2ysfDH -iKFi42iU6A20A5G84SsQrdE8iKdPR3181KPY4MP+NySBC4L4lHRJAI0MSwwJ0++B5nSvHqdAJPVv -LHb/U54YJzX99RR+QOnX3ntKidELANiMYlce2DB4FX9vHMdYTfIQeNZ+8dlHkFg9QSihQEQpyKCD -H9q0E4X+AfhGTir6ZhMskWGTU33Y8EWffFC5OB+CONX3V1BixVgfe7DgWFlB7621nmRMAjBdLwk1 -Bw0SAEBZ1mKw5PHddQ9aNgp0jB0nQWfnpanmDTVNU56aI6lFghOLkbAcTVJh9xl28uCJBDQ2Jkkn -EqN0Js8bvWTYy3dmzfbUnFcWOhxXsznxmWhKHeooANAcmihrBhEFKaGGAtAVoH9xN1ymFa66GFH+ -lv4JYEFE7eRphi/21ephJDqRR6fY1MlqnlnCkitmfZra5VlI8Fnms89CmuRy6jkKVEGLlkbntEwG -CwuKyK2VE3HfLhaapQKNuSxrjpkF50Sg9SnvvPTWa++9+Oar77789lsvPDcBsE0Tqb67kVpWDVSh -UMbRxKUEy23XV5YOFwRNrckZS93FYlRs1sNKjZLqDSRUnBBREnNsMsS0bvrtyDD6x+lRGWPsqkCZ -pSVcT4MZtCRN7M6Ws0AM70bU0UbPljDO8uQ4kAQ177a0scA5TWKVAQ8mVJECUbnqTZ/h3NYb30Hb -ssEQFZn12my37fbbcMct99xxo62RWlknq2r+mVsrhbfeRzmBDZsu68xdT33TGHDJGYc629+JG77T -gjfFHLmqtiKWFTZv3CAZr9CKcQOiC66q6uadd4yYcc+ynrdav5EYMHAIYx2dVljunGnZtWF3E5q5 -5Wb3QfH6a/zxyCev/LwAB3xFEoUMnxHCuu9N5Myw/KSxQCrbZRaUNhOUMsV2XQzyy0U1fvb4qj/8 -xtk7iey4+TTDn2njBJpNtF1N5Wp60QQhEABb97ikwQIbwrFa9qImEAQmRGKMsZ2MaESmdCmFBFCq -zShIs6xXWUh40gthStgEAHZYSksitIictvWIN4BmdUnzE6oEFalSQaVYjwDAVR41KEkJpRf+l5qV -piYFuOEUjESzGZUPTfWnQEmOVdYqIAVlxcDMKewvdtKf6aBFtr4s6IWq8p+dBog0xrRFVCx0YbWG -EyFslU1aLfRKyaa1GHDNMUW3QwtmDOSXa3ltiwF8Q1tw9p12qS+FiCxJoTyXyOkBpz5OkAwZk1Uf -smgobEI5UmUeMaD8eEUoSFjQlI4SIadlsnEAEsMlP4kToJDliaRkEHWIEkopSeCPSPwfYvIAoLNI -JpUEwcz7mgIxBqmnQjDsUi89N8lniRIWwIQklKSJyyRxUJokygmhbMm/I6otbH3RijFp5J4JFkR7 -BJFU3rJXwUa6UySgemddxHPEhZBLnij+AVRDVEm097XmBtTBp0AHOrx7ukUeZXOIQQk6klFYqCBj -QgISbsBBuOiToRjNaHgWCieOarQjhVnIRGsCzriE5aMoTalKV8rSlrr0pTCNqUxnStOa2vSmOM2p -TnfK05769KdADapQh0rUohr1qEhNqlKXipARSOKpUI2qVKdK1apa9apYzapWocolgxwiGGANq1jH -StaymvWsaE2rWtca1oTE4BRwjatc50rXutr1rnjNq173CtcYJEQYSwisYAdL2MIa9rCITaxiF8vY -wAojIVuNrGQnS9mtAgMh0GCrZjfL2c6y9RAOYUQnRkva0pr2tKhNrWpXy9rWuna09Hj+6ALIQdva -2va2uM2tbnfL29769re0bUFCnsCE4hr3uMhNrnKXy9zmOve50C3uExKSi1hY97rYza52t8vd7nr3 -u+ANr3VzkRBIvPa86E2vel17icesArjwja985/vbBYR2vfjNr35ZG1uEzJa+AA6wgHkrXIQQN7oI -TrCCF/zc6SKkuuKNsIQnTGHwkhch5t2vhjeM3/YeRB7vHbCIRwxg+zZEtBxOsYr5K1sSu/jFvi3w -QQ7M4Brb+MbMdfBBIFzhHvv4x9298EEyvOIiG7kTHjYIiGHM5CbX1sQMQfGRp8zh/h7kv07OMoll -bBAa4/jLYF6wjg3CYyCb+cwUFrL+QYhM5TbnN8lFCbGW5yxgKC/EDlPIs573zOc++/nPgA60oAdN -aD3zASF+cIOiF83oRjv60ZCOtKQnTelKK9oLCfFGNzbN6U57+tOgDrWoR03qUpt6095ISBSawepW -u/rVsI61rGdN61rb+tasjkJCzFDoXvv618Am9B4QwgdLG/vYyE62pf1wXzc7e71WNgiW6Uxt+XK5 -IF4Os7a3vdwxF6TMaA63uLmr5oKw+dnobi2cPyTnaru7vs1Ot7xXG+2CTPvd+NbttQmSbW77m9ve -Jgi4x03wcZebIOeet8JJu27ftDvfELetnRUi5YVbvBP1Jsi9Ix7xfQ+k3/8O+Zf+Az6QgRf85GY+ -+EASfnF5N5xoD+c4xCeekIq3fN4ZH8jGZY5vjwsE5CIPOoNJLhCTo/zoFVa5QFh+82e/fDgx5/m7 -aY4QHgzg6ljPuta3zvWue/3rYA+72K/uDAYgpB5eSLva1872trv97XCPu9znTve0JyIh5uiC3vfO -9777/e+AD7zgB0/4wuvdHAlRBRAWz/jGO/7xkI+85CdP+cpbfvGqSEgrxs75znv+82LHAEIYMIG6 -m/70qE893esR76bLO+cC2bnUq+1zWABd6LiPLtFhYXSk+168SocF013f5qcvefYzbz3xnw17WMge -+XOu/e1zT/0cU/f32E9zeZf+73L3Qj/fVD+Izbnf5uY///tOln7116/762f//eEN/vDJX2TjRx39 -WQ6/QcpBj/77//8AGIACOIAEWIAGeIAI2H+lIAAIYQJp8IAQGIESOIEUWIEWeIEYmIEa+ICUkBDZ -8AUgGIIiOIIkWIImeIIomIIquIIgmA0JoQZtEIMyOIM0WIM2eIM4mIM6uIM8GINqkBB9kIBCOIRE -WIQImAwIIQDvsIFM2IRO+IQaaAIOUQlSUIVWeIVYmIVauIVc2IVe+IVgWIXUwIAHAQqrcIZomIZq -uIZs2IZu+IZwGIdyeIZGkBDXUAV4mId6uId82Id++IeAGIiCOIh4eA0JEQH+oZCIiriIjNiIjviI -kBiJkjiJlJiIEZAQNhCGmriJnNiJYJgJSWgBcziKpFiKpiiHoKB89Ddl5od/7qZ+7BeL1vdg8FeL -3iV/q+hs9ueK1aZ/BTF+uVhkrciLdAaLsniMx7V7vWeL8IeLwUhlu0iMc+aLBAGMz5hiwyiNWWaM -yIiMysiM4IhdzniNRhaN2uhk1DgQaBAJ7NiO7viO8BiP8jiP9FiP9niP7DgMZncQt+AJ/viPABmQ -AjmQBFmQBnmQCJmQ/lgMCREO4PCQEBmREjmRFFmRFnmRGJmRGvmQ4ZAQYPAKIBmSIjmSJFmSJnmS -KJmSKrmSIAkGCWEF+Bj+kzI5kzR5j8N2EAyQAAq5kzzZkz6ZkLegiuRYZS12juk3XN2YlN8YjuE4 -jkOpYuZolDCWjgJhjU+pX9kolS/GjUkZi0vJlMzolFe5YVGplSRGlbBglWMJbUVpli7GlV25fl8J -lrUolmupX2XplgOGlmp5l+iVlXo5YHAZl9Q3l3T5fnbpl+uVl4FZYg6RCTUZmZI5mfZ4aAcxAz+Z -mZq5mQeZAAnxDWEQmqI5mqRZmqZ5mqiZmqq5mqwZmt+QECIACLI5m7RZm7Z5m7iZm7q5m7zZm7Ip -AglxAZQ5nMQpmTdpEHzAmcq5nJs5A0KpmOkFmI0JYINJmLhnmIeJfYn+CZ3oxZjTKV98yZ1Y2Zbf -SZ1IaZ3sh53Z6XvbKZ7s5X3lGWDh6Z5s6V/xGWDViZ4ip57reXTtSZ+r5Z336VvzCaB/SZ4DCl/5 -qZ//xp/9eXL/aaCoJaAJultoeQ6QkKEauqEc2qEe+qEgGqIiOqIkmqF9sI8GwQvisKIs2qIu+qIw -GqMyOqM0WqM2uqKfkBDpMAY82qM++qNAGqRCOqREWqRGeqQ8mg4JoQKT0KRO+qRQGqVSOqVUWqVW -eqVY2qQqkBBQUKJe+qVgGqYk2gqjtwI3eqZomqZqaqO88JwSmlrSWaG9taAMCnDu96C/F6FvWloU -Kqe4VaB7ymL26af+wEWndaptDoqnBrd9gapu8EmoBOqmjUpacQqpuGWohwpmiaqo4aanjdqnlkoO -FyqmpFqqpiqiJ4oQKrqmrNqqrjqjOYoQcCAHtFqrtnqruJqrurqrvNqrvvqrtAoHCfEHv1Csxnqs -yJqsyrqszNqszvqs0Fqsf8Clp1qt1lqqZIqTZvqq3NqtrNqmJzapgnploTqn55mpQbepnHpmnhqo -oGqpgCqup1Wp5Rpc54quIaeu6wpk7bqn7wqp8SqvpUWv9Yqp+Gpj+rqvPtavb/qvhBqwAgtbCFqv -tmWwBzt0d6qwBMewEuqwfoqWHXAJIjuyJFuyJnuyKJuyKruyLNv+siOLQgRhDwswszRbszZ7szib -szq7szzbsz47szCQELTwBERbtEZ7tEibtEq7tEzbtE77tERLCwmhDLlQtVZ7tVibtVq7tVzbtV77 -tWBbtcqQEHrgsmZ7tmibti1LAQghBj/7tnAbt3L7s/bAVHZ7t3ibt3q7t3zbt377t4AbuII7uIRb -uIZ7uIibuIq7uIzbuI77uJAbuZI7uZRbuZb7UhCUPf50HwJySIYRMFTCM6ALSDJSFYPkM2szG4Sy -Fa90ITZRUpcbu7KLESRQQRRFEEtCulBBQrB7NumTS78bvJp7uh+WHHukGaPDJU0hGu00u877vPt0 -GrCAJYOUB9f+orsH1BVI4ATVZDjB6xh4YRRZpBBGAUQF8RzAuyzQu77sqxBWY71YkSN2ARmsQRzg -yz/HEb7Giz3hch/FQhBm4RVqgR3tW8AGnCTQIT9dw0nz67ncAhj5i79K1jixI0HYS0Dcgy4HvMHP -G8DGMk3W0cAIIUAnEzD7IzuVg70V3L8XfDQ30QvxxMEybLlOIAEQ0k+sdMIG0UK90FVDEcHpa054 -hBX8W7zR8b9lcRogNMNMLLmPQFFYlDd4MUYMcb9BrMNDXBrLQb7JYb6eAR1L3MRi3LgXgw0wu0UD -gsQKYcVapMKI8RPEO8HB1DnI+wbK+1BjnMeMKzhG/DU2kSj+WXMyQOy6N+HHNRG6NzE1Fnwf4jQ0 -bazHkBzJkjzJlFzJlnzJNEUCvbDJnIwkInFLnbzJAYXJpFzKpnzKqJzKqrzKrNzKrvzKsBzLsjzL -tFzLtnzLGhHKurzLvNzLvvzLwBzMwuzLo8xSCjLMyJzMyrzMy3zGKnXMzBzN0jzNyXxTDELN2JzN -2uwhLkUT3KvN4BzOyAwgePxR3izO6JzOvNxGNsXNLuXOLEUT5axR8gxT9fxSuVtT8MxS+6xS99zN -YZxR/9xS+UxT/axSB41SAx3PAY1RC71SBT1T3CwMjFDRFn3RGJ3RGr3RHN3RHv3RIG3RXZXQ5qwW -OLALKJ3+0iq90izd0i790jAd0zI90yiNAzIyzwKtFiG90zzd0z4d0h2wFg7cUtzcl5MabSRNz2ox -fRd7Yzr20P6sFvMnrkkW0TJV1BGLWkhdT1HdG0zd1DX21A3NUP881ZNa1UPNz6li1I261fa81GDt -b2KN0w4t1Vl9WmhtzWt916bl1i/1z18d1wo212/dG2b9qUKt1+pYnIzd2Paoj6jB1Sn1z2zQmpZ9 -2Zid2azJBjdd2AMBk44d2qLNjsdp1TGF1XxNqb2R1Dnt1YK9bYT913ad2qOV1+2817SNcast2QoN -168dZrEN0Iad20iW2Lc9EGwdqH4t3B/328Dd2bI93Ln+bdv6nCpU6InYnd3a3YVjGNmeLRAfyILi -Pd7kXd4q6IL7Q9dkrRaZuN3u/d7YDYqlkdYrxc38Z4T4nd/6XYAL6N3RPRBaQIgCPuAEXuCDqAXQ -zdwCEYT73eAOjt9ION+KXZXEvdwtBdjOrakJfuGzTdvUbdC4TdsWztCuneE4FtwcLt0ebtzVjdwV -vtvfbXsmfuIbTuIrR9wfLtGpgqHX2uM+jqooytp13RuzCqxGfuRInuS+KqzpHeNd+uNQHuUZmq1J -Qt8IHeKpPeIrheEzjrA1vuUdnto5ftVYztda3tXN3eVh/eVovnQ4zuIg7uK5feaT7dtqLmZsXucq -Lub+cK7jci7iMP7fP3fnGNvkgi58by7hxy0QeBZsjv7okC5olskYvF3SvaFpp5bpmr7pnF5qqWbo -Cg4LvBbppF7qjl7aVp5SqA3o/h3qgU3oyIXiNu7m093nZP7nWR7org7rg53nvb3nfD3mp13md03n -v57mvN5+oJ7iN17rit7iFD7nus7sg57syr4q6k1QZZ3oVT7hsMADZBDu4j7u5F7u5n7u6J7u6r7u -7B7uZhDkla7UvZF3hlfv9n7v+E54iLfssw4Li9DuAB/wAj/w7C56zx7n0c7q2RTjr27tsg7mwH7X -wg5Tq57rrU7tMm7t0PXwbY7ozt7ti56WL37x/d7+8MnO8Xre7Ct+8H4uENcN3zAf89xNhpQe4+Ft -3jif8zp/guiN7THe3jIf9EIvBfIN8tAOC/f94Eq/9PxN80K+3r1xhwY+9VRf9YBoiPwO8QPB4Ezf -9V5PDxFu9Agv8tJO8lpf7RrvXCh/7LS+8mLf8mSv8DV/6CbP62tv6SrP5yx/6wlv8QtP92nfYL6O -922v92/P998Oeoq/+IwPdmVn9h1vDt8w+ZRf+ZZ/+Zif+Zq/+Zzf+Z4/+fvu84e+eY1f+qav+AZ/ -+MOO62Y+7SUf+Go/+PKe98Fu66vf960P+SmP9rCvXHc/+4Vf+3t/+3Hv93O/673fbbLf2rQv8bb+ -T/HEntXGTvgZn/zJ9fvMH/zOP/zQPxCS8NPgH/7i/9Fa8vTarhY/QNPqv/7s3/4z/QPLP+QDQQHj -X//2L/7P/1LmT1D7L1BQvfsAAUvgQIIFDR5EmFDhQoYNEcoDIM/hRIoVLV4USAIARo4dPXYEQOLj -SJIlQ5ZEmbIiRIkqXb48yBLmzJkyad5MqRHnTpgnef4EKRLo0JURiR51aBPp0odGmT4tqBPqVIQA -epHAmlXrVq5dvX4FG1bs2LA+qT6FOIrsWrZt3b7FOsrpWaZp4d7Fm3dtr410/QIAHFjwYMKFDR9G -nFjxYsZC/SKFyFjyZMqVLQ9u+fho5MudPX/+pqxZ9GjSpU2fRp1a9WrWrV2/hh1b9mzatW3fxp1b -927evX3/Bh5c+HDixY0fR55c+XLmzZ0/hx5d+nTq1a1fx55d+3buFN9IICjhDUEkQiFyJNwL1nlY -6df3JcgZALY8Cgc7yQxt1Jv5JJC8J+yGwoSSwAnAnABPoPkKkiuz7h6EMEKKSLiBoBtGIUgq9ggS -Q0AAbvivKgcFYm+ugTY8ET7x6hNRICT2+w+aN0aBBhYxnHCiIBMVdHAUJ1jMwwkM2wNADIL4G1FC -JZdUUgwAQkQCABZhyYM/EuEbCJtRkEDCCfVaLKjEJFG8MkNsEporSol6qXAgJLBxrL0k55L+AJsQ -XfyuPSccC3JHJv8EVDtsEqxyIGgG7YtMWHoJUdGB/BTTIEVRhAaAGg9K8w0uiyzokRwfnTMzJx4x -iIQcAXjkTIFGecTPQF+FFToKV3Wsl0fYc3QgElTFdMy+IMWyTIJcldPFUeqbFEs/5wJWTmyMhOWN -SpOMtVprj3PyvzegnRXXYN0k4Q1qFRxMWMJESlbHcd1LF1SDmPVVTqyoPHXca+/FtzcE81BVHk3f -E7bTN3q5FMz4fo03TCwrLVjdgVoVI0poH/6Ux3dFJbXTesU4k9Vi8wU55N0euVAojTBTdFd73VXY -4pZfzojXi4dds00X4aR5ZoHEuxMWJPL+NOpZaT8WuWijY6v0WUkTDVbihpolOsWlB1oRzcweGQ8W -GWm0EUeHv171R4GCHNIoUz8l9mi11x7NCZmlBjCwXuQDzOqpiSyXbvXko88+wZyYWD/+4Ow5apep -NhCAUd11MuO02YY8csknp7xyyy/HPPNYSeilc897mRgmCT73PEHNT0c9ddVXZ71111+HPXbZZ6e9 -dttvxz133XeHXB7ffwc+eOGHJ754449HPnnlC08OCeWfhz566acXnnnkoKE+e+23n7460L4HP/zA -ViaObvHPR38x8oc7OX333y/M+1G4p7/++ltdXziIbrW/f/+hx59zNPI/AhaweHLxXpz+lKOU5TBw -gY8jjlSaI0HpmKWBEByOA5OjQeRQcDkehI4FH5i/4HDwOCY0DgiTo0LnmEUQC4BhDGU4QxrW0IY3 -xGEOdbhDGNYgRSQEjlJQkQsiFtGIR0RiEpW4RCY20YlPJCIqfihA+MgDBjzEYha1uMUdCkJX33qO -WRZADjKW0YxnRGMa1bhGNrbRjW8kYwum2Byl5CIWd8RjHvW4Rz720Y9/BGQgBXnHXMyRORKUxyrg -uEhGNtKRb1zAFxM4kDE+0pKXxCQb5XglIP6mjoMEZShFOUpBFpKTVDyRIjO5SlZaMpIZAWMLHVPJ -VtbSlpo05AUzY0dS9tKXv/yjKd/+00nfIFKVt0RmMsnxSliwsDlmMUEapDlNalbTmtfEZja1uU1u -dlOalMjlCAeihjaU05znRGc61blOdrbTne+EZznVEM4VwkcA7/BmPvW5T3520wSSpI5ZQLEKghbU -oAdFaEIVulCGNtShDyWoEeiJHKVEIBQXxWhGNbpRjnbUox8FaUhFetEITPQ4EhSABSC6Upa21KUP -BQVApyNGZdbUlpscpnM+CUye9rSXwkRhcYxpU6KukpnOZA5Ni7rUR+I0qOWbCy99OlWqBtOkKazi -MZm6VUjKtIKz5GpY3ehUDOovqlVFa1rxCNSyBmeoYoVrGo8ay2c65haewGte9br+V7721a9/BWxg -BTtYvBbjqsVRChhesVjGNtaxj4VsZCU7WcpW1rKLBcNhIwgfBiSAsJ8FbWhFO9hbeDU6So1rauOo -2QyeVa2vnSpbidmbt6o2tXOdpEBoaVu4knW2vNkpbIX7S9mikkRa5W1YcRtQsCa3t6w16y6HO92f -QtetWXUuXJc70+Zml6u+1alrqTveQRZ3gtj1Lle3+9WBzGC074VvfAObAOsGcS4iAER+9btf/vbX -v/8FcIAFPGAC51cE9f2NBPkgXwY3OL4zMG0Iu5vepYKXjuIlb4b9aN5DopfCS13vaSf8YZtamDnB -1XCK9cjhD3qYxDYNsYQp+eL+oppYlwORqop1HAsWK6e2NFZmjMM4YiDf0sbiFEiOd5ziHtczlUWu -qZBlORBeiMPKV8ZylrW8ZS532ctfBnOYrfwJBPtGKSqYRJrVvGY2t9nNb4ZznOU8ZzqnWQVlpi1n -VyBmPvfZz38OMy8iPOQZQzmZR94ghpes4SZ30MWGrqWU61poSN8Uz8BV9KLJ2+iTPrrSRh30lHX7 -aUuf8sLS1TSTL72bH5M6k5JOqmOqDGha19rWXiazqU88lz/8wte/BnawhT1sYhfb2MdGdrJ9/YdV -60aCDNjzraU9bVoLGpa5hcVuXY1JRFM006meLqex+uRtg/razKV0uS/Z7RP+fhvcwhW3UD2t7kbC -ejmopXdTm50bFL873PvGTavzzUh7KwffA2cku43Tb3/DG+C3ETjCu3pu7rbXwRfHuGDpq+sbCyQe -lwV5yEU+csvG4+G2UXDGVb5yvUKY4uwdtcQbqXDEurvhaY33Zskt80UWPDkH53kbaQ5VVN98uDln -37yDrkafIwfoS1fj0FtbdKPDFunCiTjU0dj04zxd62eUenRxXPWjn7w2Wf96GbluHLNswhZvh3vc -5T53utfd7nfHe971/nbDchzJsFAFEAQ/eMIX3vCHR3ziFb94xjde8KowO22ejYe9V97yl8e83jcR -6knHPO1Rj/xsGE72ql7+/bo7//zWOR/rdKfejGEvoc1J31PTAwftn197cbyeetjbl+qzL33oZXP7 -tOeeOGJ8afKVv/yGStTvic6MNEY6fepX3/oilYbwY4NIlTLf+99PvvGHYxYxGND89tM+bJRyfvZz -L/2vkaDz2j9/6U0MqfdWIPTD+9vdPDXpz7k/g8s/b+M/3fA/sTsvAKQr1ju1/XPABDSumYKfCZzA -AuQ3CsRA97HAgMvADhSf6tCLEBTBEcyKhlEOaCDBFFRBtzDBDVrBF4TBr+CdGaTBGrTBG8TBHNTB -HeTBHvTBHwTCIBTCISTCIjTCI0TCJFTCJeSOPKGarHER81jAhWCXXxn+jL35Fr6ZkoRwEpuJGvMJ -CfNBl/tgEas4GAvhFHK5QryRGyZ0Q9OYlYG4kAxhGoPoEMAAEbt5Gag5w515gy08iJO5E2KZC0dB -kXD5D8DIGIBxEcDIPxNpqzeUxKfIlkackiqpw4LQEi7xEj3sQz6Em5hZiO9wQsNhGUaEGYuxin9B -xVRJFZ05nEmURc0YlLGBwkORgEwkCEYJGFiEG1DsRYZJiDx4klGwGULMDEMMFkuREydokw3Zk0oJ -naiJxFm0xp+IQ7UYCFvxFoXYFU/8xYTpw1M0CGOkkieJxZzpxVBsJseRBydBlr6QRljYE7AxxWvE -R6SoxG3JiArpxoP+KA9xQZNyYcRzQUV2vEeB+EOFdEeDMR+JoBsnNBtNYQ9PEQissUeDzMeNHIp9 -6Zd/+UeBIRj7SBhgPEhhPAhi/Jt0PEVlJIhRUBWnEBL2SJzA2EJI3ECO1EmOIBltbCbC8J1vURmG -gBqTPMS3eckhOccaQUaE7MVIsZGQ2AiUpEelpMac3MmspIikmUZGJBOnIcqSFMdQrBqAXMiBeANS -acp1fEqE+aKNMBWCwEhyrEattEuOcJuYYBrBmBvCAEdz8Uu9iZv5AMTwgMKwYcO6ackqJIhKqQ8T -MRBYwIZF1BopoUu/vMvM1MzN5MzO9Ewe5BzSAZ2bGB3RNJ3PRM3+1FTN1WTN1nTN14TN2JTN2aTN -2jwd0cTN3NTN3eTN3vTN3/zNNZgG4CTO4jTO4yROJVgDJUDO5nTO5wRO5WRO6KTO6qRO6bTO7NTO -4pyGNdjO7wRP3hwWbAjP8jRPAGAH81TP7awGAKiG9YTP6mzP94zP+mzO+bTP/DROdrAK/fTP38QG -ZRlApzMG53AEAHAEA0VQBU3Q5jCGKdS5RxnQrivQ5jjQBmWOC2VQ53hQBRyWCWW7Cs3QBbVQEh1R -DF2ODo3A9nCMEZCEF4XRGJXRGaXRGrXRG8XRHNVRGC0YABDRQwiGIBXSISXSIjXSI0XSJFXSJWVS -IR0IDRWIGDj+hSml0iq10ivF0izV0i3l0i710imNgSc1UWFYgjI10zNF0zRV0zVl0zZ10zeF0zIV -BjHF0B210zvF0zzdUWAYCBXVmiYF1EAV1EFt0kPwKrNghE5Q1EVl1EZ11EeF1EiV1Eml1EpVVHrI -DB9tPddbLYGAUlh4AiYQ1VEl1VI11VNF1VRV1VVl1VYV1Seg07EDPpyLVYGABEvF1VzV1V2t1Evo -U6VLvfVCVF4l1mI11knF1EcRUW3jVHLAqU8NVVeV1mml1mplVVj1VBNVsln1KWH61Fs91nAVV2L1 -VYHw00Rq1jMSVsdI1HF113dF1kxd1nR9vVoFVWvF13zV11X+xVZY+NRt5Vae8lYTBVd4NdiD7YRy -hYVzRa5mXdeBaFeEldhxTVYFmVd67VR/NdFo3deO9Vhr7dd/Ddjgy1YMLdiJRdliVViGxVgyeliB -sIMpkNmZpdmatdmbxdmc1dmd5dmenVk+UNaB8AM3INqiNdqjRdqkVdqlZdqmddqnJVovsFdv6Iaq -tdqrxdqs1dqt5dqu9dqvBduq9QZ7jYJmMNuzRdu0Vdu1Zdu2ddu3hdu4NdsosFcz8Nm7xdu81due -3YNfHQg+gNrAFdzBJVyo9YNDZdeUVVxirdj2uFiMfdaN/djJpdxrtVeAHVlfGliTXdzOzdWVBVbc -Q1yI9dz+0qXUxtVUz6PXyMVQjq3c14XdkNXWzI0tez1Z08VdRgVd1EvXl4WFiM3d4O0E1H3c1bVX -14Xd5P1Y2cVQzKXdUdrcgbhd4TXd3T2ull2m0RUI4KVe0yXeTeVU1h0I5FXe8s1X5pXV5wWm6LXV -7g1e612PhuVU3+WBAbDf+8Xf/NXf/eXf/vXf/wXgALZfZ2CAoBWIevCCBFbgBWbgBnbgB4bgCJbg -CabgBE4EezWHLtDgDebgDvbgDwbhEBbhESbhEtZgc7DXwHO8FWbhFnZhxoO8kh2IVhDgGrbhG8bh -AMYAvxUIBpiACgbiIBbiIabgetDe33Xf3P1e1U1X8RX+CPI13yieVvRNMvUVWNtNYtyFX3RtWd/l -3ixW3CXONux14nuV4jOmViqGBee14vLCYjD23C2WX9fzYjj2XDFm1vA9XjTmY1dVYzZu40BiX1iY -XjuWWDnGXt8tB3pg5EZ25EeG5EiW5Emm5Eq25Etm5FIQAAOGhWjqp08G5VDWJnCSYYHIhi9A5VRW -5VVm5VZ25VeG5ViW5VlG5WywV3KKp1zW5V3m5Xeap1KGhT7A5GEm5mI25ktOBh6GhXsS5WZ2ZlD+ -p5czi0qQgmq25mvG5mzW5m3m5m725m8G52qmhk222IEYKPBD53RuPnu9hipw53eG53iW53mm53q2 -53v+xud8dudrsFeLur5/BuiA/qiSAmYbCOeDRuiEVmhwzgRlTil1huiILqiYkubENeQwllfwdb0y -huI+9uhR/eNA1tw3vmiUReQuPuIvLmmDxWMy3uOPhulSDWmRJqVBLuSVfteTxtg6xmmJbemW5eiY -FupXvVyarmmS7mmD1Wl6pV8ycOqnhuqoluqppuqqtuqrxuqsdmozKOByFgi3y7ywFuuxvru+01gM -NYdvUOu1Zuu2duu3huu4luu5puu6VmsUBuZ1CIC95uu+9uu/BuzAFuzBJuzCNuy9Xgd7XQStZuzG -duzHzuodNlfOojyytuzLDuvNq2jSTeqD/WnIfen+oYbpmTbqULLpzj7Ype7dlEZtls5oJm7WoBbt -0S7q0jZtpG5tcVVth2Xt3HbXzzZeYO7o2Y5i0rbtUsJt3zbW3Z7f3lbucAXuJg5t4uZj4z5uQDrt -5w5X5qbjI86ESADv8Bbv8Sbv8jbv80bv9Fbv9Q5voPVqWHAvlpPvi9u4sx6IbwiD/Nbv/ebv/vbv -/wbwABfwASfw/P4Ge8WvAlPwBWfwBh+wAwPmC2DvCafwCrfw9e7byf7b+ebwBnO5n/xQztZuY43u -2J5u6j5j677uDUvuEddV7g5W53ZxXi1xPRZuFO9jFV9xPsruGedVGBfdzd5eH2fc1x5joD5xHDf+ -Xx3f8RVrcSKnVCAvPhmHckut8Y1OciVXXiZv8rV68iqPVCn/Ot89B0gw8zNH8zRX8zVn8zZ38zeH -8zg38z7oaselMmrD8zwHs1yzb4FIhzEA9EAX9EEn9EI39ENH9ERX9EUH9HSwVzSrs0iX9Emn9Dm7 -M2CGAjnX9E3n9E6P81ZQZmjT81En9SuzNhCXUBEH80q9ct7Lci2P3dru8j7q8VWPcmXm4p2mcluP -1Fb/PNmG9SWX9Vnfo1rn9TDH9TmOcSFH4mOPV07OYyy/8WAXdmAG5CY3dmd3VDHXOkU+5m8H93Cv -ZE3mZALQgXNH93RX93Vn93Z393eH93iX93P+NwB71QIuwPd81/d95/d+9/d/B/iAF/iBx3ctsFch -oIKEV/iFZ/iGd/iHh/iIl/iJp/iEFwJ7FWZx1/iN//Zk1nCBEAAamPeRJ/mSN3l5J4AjpuaFZvmW -d/luHmdOPmeJpnnwc74+h4V21ued5/me93l85mdg9meBJvqivz6CxnmDfvmlZ3qWb+iPX+buq/mp -Xz6KRnUFsWhth1RfTztgp/bk5fJZz3atX1RuhzqeJntH5fqv8/qvf92w7/KxT3uzXzq0T3tGXXut -a3u3p1y4x/Yv13q6Dzrf7YBLMPzDR/zEV/zFZ/zGd/zHh/zIP/yJSV1YsAcuwvzM1/wcggH+e6WF -JwD90Bf90Sf90jf900f91Ff91Qd9WrBXZYCi2Jf92af9J1IGe9UDydf93ef93o98ClBmMdj84Sd+ -zbeHI04qEV2OT11+E21+FFUOP+2wEG8h5VcO5r9+589+6E8O6W8x6n8m608O7B9/7S9/7kcO7/cx -ZbmKGHT/F+yP95f/EewBAOiB+cd/vaj/+8///n+L/QcIEgIHEixo8CDChAoXMmyoEBsAhxInUqxo -cWAvALA2wgLg8SPIkCJHkixp8iTKlCpXsmzp8iXMmDJn0qxp8ybOnDp38uzpUyfHoEKHEi1q9CjS -pEqXMm3q9CnUqFKnUq1q9SrWrFq3cu3+6vUr2LBix5Ita/Ys2rRq17Jt6/Yt3Lhy59Kta/cu3rx6 -9/Lt6/cv4MCCBxMubPgw4sSKFzNu7Pgx5MiSJ1OubPky5syaN3Pu7Pkz6NCiR5Mubfo06tSqV7Nu -7fo17NiyyyKRAKsXUtxGe/Ui4URMbjG6gw6/Pfs48uSbSeDGDc1Jr99Ciw9trpQ6x+LYlXPv7t3v -I9t5SMAab11CHljQqPfmDc34bWjYSMyH5lu6QNuw6NuHJcGJE7bhlgd02Gy03XcJKrigWtDcAMso -0CBhXXHjTScPLPKMAh+FsIjx4HO3AZedcU4gAQs2E8JiIhJvMPgijDGWZd0N71nn4Q3+5E1Hom4d -StAbCRqxF9989MlzI4IyKrkkk009MoqAvL3xY4ajnFgdhhqu6GGHYpBXG3w8wvdIiUi02CSaaapZ -FDQAXHmgcaNA15tQAvF2opwCGafbfen1CCdu/zlB3oDQPRjmmokquiijjTr6aFn2EfQepJVaeimm -mWq6KaedevopqKGKOiqppZp6KqqpqspWHhtu5ARH+iU51Bu83Vgrb8AVh2svb2bXC67A3aejrQFC -5QSlEpAJC5izTmergLfZSihxvA1KFK7S7QcgecIByxtzuIoHnRN+ugqhs0ORoJ+DscJ53bTw8Spc -tdHpGJS3uG407IHWjtgUEgZuNMr+iOkhitS8Pca7q62+clTrtfty65+UQH7bi2383nbuKOnWye6h -/r2blK0Y71kyosXey1G+vJVHrsHF/stUqxzBulHMTPEqL7SI8urwRhDrSGB06f34LXMXCzvxxhx1 -TJXAYrgqj0aI3qffjiQerN1GWhI13LobSUDtq1A9smyN+9640XPRzTwyoFmPDGV1G6kYtn/3ct31 -DSciccORAqPoMb6Hhtd11cXdACDWWmu999yNE8cR3mPD1+5TN4x4sxiJByUPuW+nDPfoVX5d9n76 -WQ432KoTKjg2hLNsuH7Mwb24sXLHPbnjdJ+eYd/MAn55yE1F7WrncIPudt2P667+m9dZwypP8H9j -yDrlrt8Gu+xFjZJe2H//6TTqz5MOOYLDcT3czU6FGDDOtheHnnrYDTmk45jzjgTZI0MeIUeg0bHv -ledpTknRit4jvpF5aSOCc9y7IBcm/cltfWwrHlMsVzN0wY0EwKEg9rbGu4NFMISlG10vCNiq7jnw -RMjykO3C1EAUNU9MI5wgBrUGQLZtSDcgXAoB8WbA4nhQPTncG/789zvc7FA950Lf5FKYnhVSpWYm -2g+9SKgiWvEmWrDY2QnTB8HmWEtyTEGWhVS0tqBY6FkuO1kXT0hCXL0BQ1B0HHt6ITUIHekp60LC -zTw4vqD8sGS6Cpqt5ChG7Nn+ChuiUwr8SJCeR+RhkGxcGSLppLA43lEoEMOGjUbYyT3tcRR9dMof -b9Y3S16wOomEoyZvuMj78caRULHiiSjJyvhx0WS6mVcYsRUdUCZxlM0p5SmnAsoHyYNsxeEfCYBW -uiSGaZEorMrZCAaLtK0RR5g8nwjzd0S7wcqYTqOUE3EDq3I+5UPKypAzg4KEUViphiUcYwBzqEQb -TkVzsPobh4SioW9O03yke9eHgonHKG6JnU5xJ5lIYEe4zbOeutuTQY1YFN00UYAkfMoyhRfQz42C -oEjM6HZ086GOPlGUDF3nR51CT9scrVaI0txueEdN6J1LbpXrn1QcdDNbTan+OBqSpgh36jQzqi91 -YtPbCKnnN8DhhgQljSlSnJC2mq5tQui8qCX/Z8aR/RSrGaQnl76Vxafm1Hmy7FpPtQbQspqwrFW9 -KgtflbakvaF/Xt3ojpQ6sLHCR6rCmyhVZprWWq01b229Jz5N1zzrVW94ddXeXYEalc75apO9eAQY -DQrMnf0MsJRjWl6JkqPATktO4LInLAkFLZUJM47bipgJX1Y047QplE95RPvexSv6vPKGPMtVyZJm -r8fellhWeYPBIjit2L3WoMn9oq3EUNpe6lFiuJWjxpwDAN86BbhZ45UEqGs/1iYyubQ1rW7LddB2 -ukmn0FLvN/eGXuy6bLv+nsxufKMLXtSqZ7xmXRWCE5ymsQ2EsE5pJkHsIqmBfDUqExZIhQnD4PxY -ZcN4o8uFSZDhp4R4xIIpyPWogmK7QHggVmmxnhQs4xnTuMY2vjGOc6zjHfO4xz7+MZCDLOQhE7nI -Rj4yp6YUFAm4iCP8Q5xURIIbqm1Eyhmq2udAgg0BD4XKVGscAORBNZGQx8pj/oh8O5JiTzbZyaN4 -AwD6eqWRVBkkafvdRm7Q0zbN7F5hjsqZP3LlOoekymu+8ke2fBQqd8SoGhkJbujcES0bjNFDuQEA -3nYkj+AU0SDJEqWNEiSRiDnUSMYLCYqn56AECcpC+RCnkarmLlftzwL+xTJHLM1kLmf5ym94k60N -HZRg5xrXJPj1rIeSB49EF5BpE4NWhT0UW88T2a9eWR7aDItHPLDV0nYznLVFFEsX+9vDPrSuoWsU -RntkWYPmCLGJDe8UH/tE5HayR1bWOTLxD9n3drV/1L1oXFs6SLI+tVs4azcARDfbVfs3NqwEyCTJ -+90V/ze56bNujVCNTuaO96HfPe9kC0XPq97XAzv3noqT/DbffMShBb6ie8kDziMPipze82akYrzW -IW+5yPfzwFtXGVhXIjfIiZL0f28bG9wmzsqMxfSMD53Wvb45wuuCDf1kO4BbfziuD3T0sJ/b6kAP -OsALbGIvZzrTH1/+88XDbuCKI4HhTLaZu7t2IpYTO72whZCr6j6igD0Cy/KWKNaJrni+oxvXvS0K -u0F3KKTD/efxBg7TB8Xnhc9MDO+ZuuMNvPGrV9nEWXdLqgemN5iD/SgaL0rczZ322bN80FSOYdIT -n3YSLKvid6+7wWrPeNLzUNlN/g/lJGr4nyNu7WSPvNIbL5TaR75z6aF82adN76mRffMRYzraac/8 -tBecoKd/i8LfMKLUMxr8/R6/SFxN5vDfm/oc10jAbJN7Qn+EPIGOs35U3Gpt06EIX0joBrHdGyVh -S3rcwLKAjsjVHpPl3a19msUdoOzVH/NBX71hH7xh4KSBhI78m3n+bVuTgd//tV72QR7BiYSDnR9b -BEgeCEzN2ZsKCgVo9YLpnR30KR7xPd643V/X/Nr+8SCujYLAyFvdhYQLUaAEYMjwxcrQ6dN+WImB -tQio6V6GYAM2jB/9+Vz0+aDasaC0OYEp4VoRYp0EGNi/OUFIpMfm5ZptgB4hiR4ZlpvdvBkM0sUj -6JmOjNqn/ZuRJEXsGaHZodzoWVqOFGEhyt+h+d3CZcwDAd/ZtZzH2Q0VahfyeVr/AV3NUWAQml0U -4iEi3qGtdY63vV0Yjty9AeGKuMolbpP/kV3Qvd7okWL47WFbtIktKd69CZ5SFGIjkuKuJSKWtQgj -hhy59WB2rMz+DTyIs73Hc9xMFFabr0iAg3EhKFqavDkBKIbi4lme9ImNzIkivXnEClbi0oWdbwQF -aCHOI+TSG3weLaYbr4mhpc0TFeriWjhB1b3b//VCChqFMMZfQHKiohmjOzKiQYZeeogEA7hdrNRX -tcWZRY0EFNpZhQVPUQRJhnFjoZHaHV4dRoagoAVaQprimrlhOpYksc0HJ0aE09VhpbkhAHRaCs5i -ot0jPoYER/IjUAalUA4lURYlYCiXIYXF0ZSMyXTHUpbMC16FtzCl+SHGU/aMUWalVm4lV3alV34l -WIalWI4lWZalWZ4lWqalcvwEW/qEF2JGCralXNLEW14GIM7+JV7ORGoAAJBchF/+JWA2xCjUnmZQ -TUkFJmImJmIOZl1aRpAoJmRGZkVkxF5WZWZQTWNWBmaKxmaGRiqCxmeWRkRwJmFeZmnC5WnaJS1y -RmiSxmiGRmeCRmx+xmx6Rmt2xm2KxmvCQgcwgm/+JnAGp3AOJ3EWp3EeJ3Imp29SQLFlJmXE5g/s -gnROJ3VWp3VeJ3Zmp3ZuJ3d2p3T+QHOKRiqKgXKWp3meJ3oqZwdQzmqGxm5eQifEp3zOJ33Wp33e -J37mp37uJ3/GJySEJ2wG2xMwAYEWqIEeKIImqIIuKIM2qIM+KIE+AYCCJpbJAz30J4ZmqIZuKH9e -AntWJkf+wCeHjiiJlmh+/ifiOOdkxOaAQqiLviiMxqiDSmiKimeFXqiJ5qiOjqiH7kt7gsZ77qiQ -Dul+ouiVqahksKiMLimTNmmD0uiR2miu4SiRVqmVdkKP7sePfkaQXqmXCqmR1mZnKKmTlqmZLimU -iilr3uiXtmmOZmluuue9WMMg1Kmd3ime5qme7imf9qmf/img1qkCTChtBpsPvACiJqqiLiqjNqqj -PiqkRqqkTiqi+gCh2iaWMYACBCqndqqnfiqgWsOHosZuLgA5nCqqpqqqriqrtqqrviqsxqqsnmoL -XOqYBlsuxIKu7iqv9qqv/iqwBquwDiuxFquu5oKtrmn+rq3CrDarsz4rtMrqAozqaZRqtF4rtmYr -rNZqjQZoiuWqsYaruI4ruRIrsnYrhS6rtq4ru2LrtPooiG6EqbYrvdbrtibrZsQmuJYrv/arvwbr -uUapZ1Yos9qrwR7sqb6rlsYrLPjCKjwsxEasxE4sxVasxV4sxmasxj6sEeBrYQYbKYSCyI4syZas -yZ4syqasyq4sy7asyJKCx2ZGKgqABWyszd4szuasxvoCtZrGbiKCFASt0A4t0Rat0R4t0iat0i4t -0watDcQsaqZYNnwB1Vat1V4t1mat1m4t13at134t1WYD1KomRwgANTQt2qat2q4t0yJCz4rmvYio -m87+7YaGaWpaBpmeqd7uLYOm6d1WRipaKN0ObobC6ZZ6RpcSruKe6NjirYDyLeRGboH6LZJGRuBS -6eJmLn0aLsPKreZ+bifYbeVCRt5KrumaKeVKaddgLuhmLueS6r3IAgLMLu3Wru3eLu7mru7uLu/2 -ru/O7gQ0rmYGWx0EgfEeL/Imr/IuL/M2r/M+L/RGr/HWgfBSRioywO9mr/ZuL/f+riy8rWvey7wi -LPm2K7cKrGzi6r+uL/v2a8Cq6XIQbPnO77oqbJwCqfjSr/5e6/nC78d+a/sGsACba/VORuAW7P4m -8Kza7+F2hrUqMATfK7oWKgAPsAVf8LEWsGQccAT+d3CrMjDDjq8HjzA59O/fPqf6YrAKB/D7nrAB -yy8JkzAIwy5HyG733jAO5/DuBu8Ee0ZsFq/0BrEQDzERQy/19jBuZqoOLzET5/D3wisNb4Tntu7i -ii5ppliLnq4WN2nqDuyUUvHnvm61xi0Ya64VeytHZPEWrzGMdnG6rm4Zuy74jkbixvHgnnH6YjEb -7/GLuvFnXK4dK64Y++y9AC3bHjIiJ3LSPi0Sc0ZsTi3YRrIkTzIle63YNnL8lu3ZKjInd/Ihuy0U -jzFHOKzOlrIpn/LFdiwm/y9HhKzLvjIsx7IssyzMrrLMYhnNorIu77Ip82woEzJHiHAMR7AJj+7+ -Y+jrCifz+rawMTsGBw+zB8+wKMsrNHtwMV8xR+yrMm/zuDKz6mYIAlezAkszMFOzOEPwNaPxRmgz -N7czAdsyZjzzOScwOcMtR0QDJ+SzPu8zP/ezP/8zQAe0QA80QedzImhwZMTmoVIqQze0Qz+0pFoq -PJPtRjAALxQ0Rme0Rm80QUfDHOsmGQfyHSM06T4uH5/0k5L0YwCySNPtINuzFLc03eIxBacxSt+0 -gvoxpn6xTLvpS4dviPa0m9K0D5s0Th91hKq0M7OpUH/pT9NxSDf1lRL1reoxUiO1TicxT0u1lT41 -SHOEOmCBWI81WZe1WZ81Wqe1Wq81W7e1WO/+gFI3xg/PAl3XtV3fNV7ntV7vNV/3tV//NV0fMfr+ -MZbxgVsfNmIntmK7tTp8tJwG8zwrcDrncTa7s2W/82DvdNeEc2TPbz0DtTl3Nv1Odk2v82WfNrB6 -sxdvtmjr72dDNWS39vySdlFXMGrfdgZPtGPCsGyT72t/dWj39sHSdlVXNm7jtmq/MTgLt287Nv5y -hDXkgHRPN3VXt3VfN3Znt3ZvN3d3t3RjQlwzRmzqQgOUt3mfN3qnt3qvN3u3t3u/N3yXty6E92Jc -r3ffN37nt357t6j+MkzDwhRzNZjSt2KU7lWjdFYrKxwLeJV69WPHNIMTKVU7slEfOIITeGL+sHSE -C6mDPzeEb/iOTni+VriF83GCZ/KCg7iOdjiXFrInvziMLy0jZ3ZxbwQkVzKO57iOb+0l07iCw4LZ -xriQD7nQgvLCRjEsgAIvLzmTZ6wq+/iIp1gEzDKVV7mVr2wEYDhizGzNNrmXf/nDgoJzt3hsM7fB -EjeF2/Zxn3ZyE7a6mrnB/vaDw4Iwwzm7onmUG/eas7mWH4Y823m7yrmH0zmg1yues7Jp7zmf6zbg -8nah1++YI+694DNHV7qlX3pAHzSjo3CKLTREfzqoh/qjSjSUa8b1XjSmp7qqV7pH+zdoA7iKh3if -G4aBlzgbn7ipM3WsmyiLS3pQ77qJijj+osOCGtv6rc96YWg4sPNopDtwVC87hwq7aVq1se8xrt/y -VkP7hva6s/+6ttctshNGrVf76V57POv6txdus3PGbqJDCLw7vMe7vM87vde7vd87vue7vr87M4T7 -YMSmOyyDwA88wRe8wR88wie8wi88wze8wLuDv59YYe87xVe8xV/8vqPDum/GAz/6uh76tOu5ortz -m2v2cns8pLs6bAc3yvNvxAcGMo+8ZZe8VrN2y2eroJM5y9/8s4J81Iq8zG8zzf+4PHA2zztrzvv6 -zh/9rPr8ZcR80HPz0KP4yTP9syZ9t2/EIHwA13e913892Ie92I892Ze92Z8914P3pq/+aLDJgNu/ -PdzHvdzPPd3Xvd3fPd7nPdy//FFmKtr/PeAHvuCj/SBsvGbUcbr3p7T//EYUO7mXO9//hbInfoca -fmYgPuXr5+I/PYk/vumaO0VnCOtmfn5yO7s/O+kz7tonaed7fuSC/m5ne+rjp+lz/L2cAQvkvu7v -Pu/3vu//PvAHv/APP/HnPgpEvl8APDIsP/M3v/M/P/RHv/RPP/VXv/UvP8SvvuXisjYUv/d/P/iH -P/GfgeVjxm4qOZin/5I/uf+G/EZM+ZXHv/xTeZZrP2Rwufrnvy6LucoDN6FbPUCQEziQYEGBLWAl -lAdAXkKHDyFGlDiRYkWLFzFaXNj+MGGuWB9BhhQ5kmRJkydRplT5MZfDjRlhxpQ5k2ZCEgBcrjK4 -k2dPnz+BBhU6cIHDmzWRJlWaFAAJhwuGRpU6lSpPhAoZLtW6devLjivBhhU7VmVLrBy5plUL86hC -nVXhxpVrsKhNnGvx5s3Y9Olcv3+nXoXlVW/hvIQ9klW8mPFJs4OzGpastu3gt4AxZ95ZF1blyZ/X -8k2ILkRp06dRp1a9mnVr169hl2bmMjJo2zUJu1u2m3dv37+BBxc+nHhx47vd0UZ7mznbu7D4xJY+ -nXr12OiMPm++faZoWJc6hRc/nnx58+fRp1e/nn14SMq5x69I+AkT+/fx59e/n3/+f///AQzQvifg -k89AiCqTh572GGzQwQfZuyS7AymkyDvwIMxQww3Te++sCimkT8ARSSzRxAAJ/BBEAxNckMMXYcxQ -QrtWrBGWC2PMUcf1PIRsORuZE/HEIYks0r8UfQSSuxZ3bNJJ8WbsTDsl5cPxyStz7JEwKm0T0sgv -wTwRyS25/IxJLNHkMErPytzOO3Wsi1POOV1LpMA2PyNMl+P47NPPP43T5U48JauMAWboTFRROdWZ -kFA3nUoIKs0opVQwMh89rLbEGuvUU7IewzTTtRK8rNJT/eKMzVEn825SVGGN69LaWMULsU9xzTWl -UGmtlbLn5DE11mGjUnVKXwv+c5XYZaOa9Udku9pU12mpBYnXZ6FdqlRmuQXK2Gwlc3WVcckt19xz -0U1X3XXZbdfdcY0YFNylCJMmlHvxzVffffnt199/AQ5Y4HulkXfepBK04N2FGW7YYXe/PTgv78SQ -x+KLMc5Y44057tjjj0EO+WKDJaaJMJFRTlnllVEmuWSZKkOC5ZlprhlkMRx9OS3vdDa5155jEhVo -jIQe2qJVjcYI6aRl4pnpi4p+OqKopX6I6qppxPqipbWuyOmuIboaa7GrJltqrsGWMm2YAGjb7bfh -jlvuuemu2+678c4b27UXytvvvwEPXHC49077psERT1zxwNfOiITHIY9c8sn+Ka/c8ssxz1zzzaFp -PCJoNg9d9NFJL33yzj232vTVWW+99NRhj1322Wmv3fbbcc9d9915793334EPXvjhiS/e+OORT175 -5Zlv3vnnoY9e+umpr97667HvXQwAUE9olBseygP1hZCK26ms+n7bKfIhgvuG7iVCHwAJHmLocMLT -d7uh/AHoBecbsbU98D0ECaN4AwCwEakbwa0XCXEf/ML2QP61TYFGgeDUjkUR8rEvWrB4X/ZAmDQn -POIhb6BfQrbHEQ46JA9OaNsokGChZ8lPIit0IEcK+IYYTkR+OnRIbVZoQ6w4BAk3aCAAJXK4HcIC -CU4YRefk8QYSIjEikcn+4RIj6BBoOOGIN5zIFi8COpiQT4xc2WAXQ5jGkj3CCSwEwBJ7ERkbQkOK -sNgiGts3w/1lUIi06kUF8wiZP/4QLUHko3bY9zNYmNCERkGjBLDhxSouZ5A11E4etKPIzgCSXhns -ZEKw8T81jhJc0OCeTQbYmUfIcUpi6KIQCTlJyFhSlg6BpAwhs73/ARGRh7RaJKkYvjd+zyEjJCBH -FEmrW9KShWjUJDYaIobHUZAEB1zfXaqJwP9lExv02+BdHoENBOahgf4TZzcTkodz5gGFccTGKO4y -Ck6Skp6jMiYssMFOWIghkqysCAmAGT89zhKDtRwiD/fYmSPy0mq+TEj+AZH5LGJicoeaTOZyYElQ -O5IAi4pEwikXMgpYYPIGSMCkxXCSQlg8ooHywEbnjvLNlb50pW27US86Z8DBvGGPnXNCSbcITjzW -k6iEYuM+31DMhvhTIjkUZRXfttA9Ek6jsaQNLsmHBHQylDZww8rbQinJEuqzjsFsH9wiRauMTvCE -Ym3oQanIEPJt7xFYnJBM0ZkQF97ohOSTp0NuQILtoU4Cd8loURELpI+CTqSdGSBTEfSGJ3ptoLDs -43KWKVCCRvGjhewlM5l4g8b2CpNvayMs7mlBs1o1IZnN4kN1ytq3ajQycr0LOQHgBHaK4QZv6EUc -Z0m+2sCTiuSLo/r+OMi+wyaWuSC6QTj1edy3VTUhN3DCUxEqS8sey4/z9CIHA8tVuM7WJlKFyCga -O9JTAlSYMbzoQypZ0KvKdr4crC1KIYJJMbwhUjIlX15hAVx//vUhpiSsYT3ZXAUfCJJJraUN8+DD -i/yMhvKtHw4NaNcLaxQJB/QseUFMAvMS8Q36TEgdtfpBeTghrdiyYoYnwsECpnK1P8SZfSNKvnBC -kXt1hEYcZYYT8gG0c6vEiT+juD+eBhioe13pUBccZfl8NL0bhoz67uc2XAZygi1F6wLd9kGsameV -H+6q+qoaxc7FTQIOdsgoTptDBCpQbg58m5gteeeO7k23tM0xTgr+2DZ0QnLOb+CpkLEpThYfWYV3 -IXRekRBHEx5xFFOU8qUxbbRHeJcrYuhem5fyhgtmmtSlRlYTDUNkO7JYKRKosqlhjaffznrWkxEx -rX+L3ZfhutZJecSouYKEbPJXwzArdqyRnWxlL5vZzXb2s6EdbWlPm9rVtva1sZ1tbfOa29329rfB -HW5xj5vcbYWdK8mdbnWvm93s1nXj0N1uec+b3urWHQLrnW997/trjVsIF/cdcIGn24WFA9u/B55w -hXdbnPfmdNr6zTdNps1sT6s409AGu4ivbeMHn7jHDd61iyct46nrONhOrrWRG23lQ2s50EruOe+M -QBI1t/nNcZ7+c53vnOc99/nPgW7z7qV8bLWJwSmQnnSlL53pTXf606EedalPHekxcBnFaxN0rW+d -610POjBydjvvMCJNZc8QPdBC9LLVpj5hcvvb/zOmj4u8NpAw+90btKYEx27sePf7etD+w4fTHS1t -h/vhEc8EuYdc5XX/++PPo3eHO4TskLe8eALvwME3vvCJ9/zbFz87wtj98peXfO76XnrLZ/5Gmy96 -5z8feyOFXnajV73lT48774jCBb33/e+BH3zhD5/4xTf+8ZHvez4IXvS1oQMHoB996U+f+tW3/vWx -n33tbx/6dLg6yB0ChuSPn/zlNz/yTRF223knBdVyf65CkXb+168dLa/q1v0LwpmX94wwk3j//zvl -MWKucdgPAA1QMeKP+WqvNuwP/xxQ/+aO8xzC/w6wAsFCAPdO4xSo/SywA1EiATWv+erPAUlQICCQ -8V5vAj1wBUsCAycvITiQBWXwI0Cw9USwL0rwAb+P8FRwBmfQBVFPgUShFoiwCI3wCJEwCZVwCZmw -CZ3wCYuQARQwdgijAjThCrEwC7VwC7mwC73wC8EwDMXwCitgByUwIbIACtVwDdmwDZ+wANSvdlLv -9v6O9dROarxE9vSwRGiPCh2PDv8u98ROgSoPEPHODucPD9luDxmRRPoQdmzPEPFOENePECXxEOXv -BhPC8Br+sRP74xFTJxIvsewoUQ4VqBKkIBVVcRVZsRVd8RVhMRZlcRZpMRWpQQCmEBJrIxu+oBd9 -8ReBMRiFcRiJsRiN8RiRsRezwQxTMCFsoBahMRqlcRppMRPikHa8QxkGZhu5sRu9UWBAABdDcAHR -whAe5hzRMR3ZxRCYkf4cYgO+MR7lcR4BJgKucXYK0AdlsAbv0OIYMAd1UEX8EC0oUB9XEAh1bwMN -kgX5MRH9cQQB8v5OUBNhoSAX0gIRchAdIgYvsgIbkiIbMCKJZSLJsQc7sgIzshIdAhWGoCVd8iVh -MiZlciZpsiZt8iZxsiVfQQrHcSAdogxSISiFciiJsij+jfIokTIplXIpmTIoy6AdFREtjiEnqbIq -rfIqcXId7lF25nAU0QQRKZITPXEs8QMUPUcUvRJLShEbLTEtvzITS3ITyXIuyxIqH9IhSM8tr2Qt -8bEt9fJJwDIuYUEs6dITzdLf/vAvnYQvudIvFXNHAtMn5bIw5/IwJQ4t8vIxdYQx+U4Ix+EzQTM0 -RXM0SbM0TfM0UTM1VRM0l68ndREt6KAGZHM2abM2bfM2cTM3dXM3ebM3ZdP7BPI1w281ibM4jfM4 -VTP9siYhN/IkLfAjBTMkRTJWSFIyK9I5UXIrO7M5sdMAodM6pXM6UaU6hTMhLLI73S8lTZE70fP9 -vrP+PGEhPMWzUsgzFGvjPNtzWtSTLdkzP6nlPe0TIudzWOrzLO/TP9NTOzXQIY6gBBz0QSE0QiV0 -Qim0Qi30QjE0Qx+UJ21QMBXhAUA0REV0REm0RE30RFE0RVV0RUFUEeySaQijCDR0Rmm0Rm00Q+Fw -OTUyIQpRM3MkMuGTMCmTES0T6zDTR3eEMxeUR5FUR4A0QB1CSIdUD4sU/BIiM5tUTRTU5BwzSzfk -SQ0U9qa0E6uUB6/US2FESbnUIRrBEtz0TeE0TuV0Tum0Tu30TvE0T930BMSxQ60zDlghUAV1UAm1 -UA31UBE1URV1URk1UOPgRZOGME5ATym1Ui31UvP+lAi2VOYUSBvp8VNBNR7DMRehNCHMUR1RNVXP -kR2Ds1RhAR5DNVZltR43lQAVEkH/Ey7Bc0BHElJZ7kBxVT9rleNuNVjhT1fhUz55FTMKFDEJ0lh1 -ZT/7sj+htVMANExxcFnH01ddDlir1VOktTFXkhvItVzN9VzRNV3VdV3ZtV3d9V3JdRw4tB9htDbK -IAPwNV/1dV/5tV/99V8BNmAFdmDx9SlbFVsT4hjgdWEZtmEd9l3/YFghrkvRFELA1FmjdEwNk1uB -Bi0rFkLUlFMp72O/FFldVUo11vPK9AxhAUtJNu8kFuUo9mXb42IvM2NTlkg5lv8Sk2ZhVkdVkkn+ -fdZBbNZIcTZnqXRndcZjh3Y9QtZWx/VhpXZqqZZd5ZVUERYW7pVgubZrvfZrBdZgk0QwFbZqzfZs -pTZigXY9YfBbP+VaMVZStBVWmvVmzdNtwTVmuyYf8ZYx4NZu43Nut/Vg4/Y6+5YxwnU72/ZwF+Nv -jVZuBZc+lfZl+o9xFyNxlxQWPHVWObdzQ2FUXdNVT1VVSbd014VVx9Y6YdVzWTdU7XFt+TMh2hRT -abd2bddO+RRrCxdQG7V3ffd3gXdRH5VwAXdSb/d4kZd2NRV2p1Vom7ZmTTZrURZp4W5lm7Fln5dB -npZYRzZ72aNorXQwqTdpifdxsdd7nVZvtab+K9H3PMDXTMV3fGPPet3xTNs3PbZ3Yh1iCN2wf/33 -f5twXh2yXtHCCsfwgBE4gRU4DMuwfMM3DQE4giW4f3NUbYKQWi0XLBw3fJU1cuOibs0XPzO4LNQX -a/h2hDU4egu3gz24KkA4fEUYhR2jhKvmhGU4JTYYflm4hafiheE3hm+YJDB3TRc3iHFYhQF3h3m4 -WCa3ZCrXiHeFhqVm95Cziq34ilOzNf0UPmPTN734i8E4jHkTOFMXPsEAi9E4ja1YOS2YOZ33fs3j -fVl2euUXTOg3KvESjtEjf2W2e/W4POT4eum4jmeviSWGaf+4E/h4b2f2jwO5fuOXkBHvju/+0n4T -eTwWeX0bWY8fGY8nU5IPj5IJOI8vGZOl+Gm8gyWxcpVZuZVrcid1F3CBsilpuZZt+ZaXUmz3b2lr -Yypd+ZeBeZW1knnFtYih2CRymGWVeImFwodZFoiPmSVOmWlsOJpFIpmvd5mZ2VsM+WCe2JqFeJqT -pprBmQaR2Hy1eZt9wpmvF5qjeYhFNiE2t3XpWR5Bd4tF13T1eZ/JBXV3mXJrY3XreaC78XXbeEdh -ARWpcaEZuqFj8RZj2Xx5MRkpuqIt+qKPcRkdGH6f0aE9+qMX2hqJWXFhoUdLuZMrOZJBGfS6eV4Q -+Y8z2YQ3GY5RepQ/eaXdTpQjtWdLOab+a3im77emd1pMcTpMdPpXj7SUoUScjWb3JvipofoJBZgi -DXiBrfqqsdoLG7iMXRWCo/qrwboWKngAudeYyxkksBmS01mdeYKdIdmdjxmeodaszzoW0tqTA5et -5cKt8RquoViuyxoWOLKu7fqcOViv97qlweWbCTsWAFt/6fqs7zql1xqxCYKvU9qvjfix+zghliAF -QDu0RXu0Sbu0Tfu0UTu1VXu1Q1uU6HWoHcIeZHu2abu2bfu2cTu3dXu3ebu3aVuxs4UwlIG1ibu4 -jfu4V9sVmHpoXnucBxi2BRM+YYesIbuYrVO6XXW6M5CIrRu7s9a7G4e6Ue6PXKe8zdv+vJu7W+Xp -vNm7vUUHnlBw7dbbvem7vicHuFBvcfR7v/mbgpqvvwE8wAEnvhVRwA38wOdG2xR8wRm8wR38wSE8 -wiV8wim8wi38wjE8wzV8wzm8wz38w0E8xEV8xEm8xE38xFE8xVV8xVm8xV38xWE8sRrJltyMifpr -uy2EgQgqbrwMg9wmnypC2A5IsioqbrTIgObs2MAsqvgHz2L8yZmDBGhMtB6iLYSIt9qmpLZstn5G -iDiozUwsIuCsc6DBiNxKiySrc8TACU6LsuZr1aAMyuW8MLZnhz7KxCIMwSLinZCgieK8xhLpWbxc -O9gruxLClHBGkXqBxrTK0gy9qjD+ac4l/TPyKsK0qJv0HCJ6YYcOq8vvwtMtzI5OSSKI3CXc61k+ -CruOys3Hi5wm/dULQ8q9R4F64RGUa+8KXbNeC9Rfi75oPLcEy9cH3SLEC3SUHNaRHSnqfJG2CXxu -fSKEvHCMfMe/bNitLMZIwIVGS8etfcvZKtnBnSucQALUSSF86Nkj4hF8C9jOfMcF/VhWyMAwQr9q -LNUhIpyI3cyYKLbCvd+R4hFEK1KyrG3wC0GgacLevd27vTMCqor2rMaYzCF6waUGT7yoy98xPiNM -Kaxey4bsHeHli9fJC8wp4rc6p4BOS5HoaLJWScK8/TlmLONlPiacoOHri4EmaMv+56vO+MfLfjzM -I0LO0tzOqMqOkLx/AOzRm/zYZ77pdUcMHN3ppX7qqR7Cbw3X3k0tJIDbzE0puq3qwT7sxX7syb7s -zf7s0T7t1X7t2f7B7fvt4R5y2B1sQCfu7Z6+517k7n7v2fveEPzv/57A/RHwCV/ABR/jCj/x+/sF -rzu7Hd9zxBvxGR+8AZfyDQfHsSbyNZkiLT98tZt2NF+mHaJibKb0TZ9mgBtaTub0Wb/1Qyb1kSVm -XH/2aR9jRCn0f9ohLoEeeL/3ff/3gT/4hX/4ib/4jf/4eb8PYN9XCOMZquD5oT/6pX/6qb/6rf/6 -sT/7tf/5n2H5ayVBSgH5xX/+/Mm//I/fp6dYgTBEqTtBSyJQkIuapTdaa86E/dEfldWf/d3D+1kl -D+O/kAECFix5AOQJPIgwocKFDBs6fAgx4kMSAA7Ko9cpo8aNHDt6/AgypMiRJDNeOkhRosqVLFu6 -bAiAxMFLJWvavImTJCSLBV/6/AlUJUGDAp8wOYo0qdKlTJs6fQo1qtSjT3gSDYo1a9CUAi/m/Ao2 -rMiTArlqPYv2Z8yDBzy4fQs3rty5dOvavYs3r9tFVtP6/ctw6MFw4AobPow4seLFjBs7fgy5cLi+ -gCsDNstgmN7NnDt7znsAZUXLpEmvFUhTrOrVX3d27Vk6NlbBRafavo07t9T+qq+vyv7t0qxX1sSL -jxUNPDnW07BSG38OvZPrgbCVW4dIG5ZR3dy7e3/Km7rv6+QVCscYPT1xsrDMln/vkLlz9fTBTs8O -H3727d/7+9cdHn75lXdefQZ+xZ57Ay4Ii3wHPmjTfdUxeN1+/12IYVQBTkihcgVCCOJxZY3W4YDM -BfJZiiqueNcwlJWoXHbfhEFjjTbeiGOOOu7IY48+/kjjNy/CCJxZfLCIZJIrBoIckfA5GGKUHkk4 -npOlWZhhllpSNaSVpX0oZZgmNenldVCKGSaVZcqG5ZZu/rdhlWv+BSaaUSZI4pzAnWlniGrqaVmb -bw7aXZyAWlZnnxDieej+njIJNA89kk5KaaWWXopppppuymmnkvbRZaNnZZfNF6aeimqqqq7Kaquu -vgprrKZmE6qoWZklQCme7sprr752Og+ZtlrG3Dx3HItsssouy2yzzj4LbbTSHktMrcMClZ0WVWzL -bbfefgtuuOKOS2655m6rhbXX+oQrIdO+C2+88kob7IjrEvtoc4pG+ee9s1XHH6EC42aov1gluq+B -jBrsF58JG9gvwz4JOnDFGqorsUQIP6zewhlr5TDH6kX8MUsUW4wyUwWX3NLGIkPnMctAMXdAOzbf -jHPOOu/Mc88+/wx00DbPgbHMgVUHhxxKL810004/DXXUUk9NddVKw1H+tNHmkcgAFEJ/DXbYYgcd -mr1aq5XvfC+nR/LZDp2cctxc9ua2xiQOt3bHwta9Ush5G9c23wrBLXfKKwvOkMt/sxYz4hH5vThr -gTtOd22FX87E4ZQjpHjkYjW+OUxpew7d5JQTjvnAmofe3t3okV4c6KwrdKKStt+Ol4uVz747YZH9 -Dnzwwj822e68G4l78srDxaTZvDMEOez2Zc036qkTunronUuPk+zPCxQ99ziZ7rj117+Z/ebbi1+T -99+Hz35N5CNu/vlbpk/5+vGP5P7z8O8/kvkJrn72yxL+HKc/AIKkf7xjzjkGAMEISnCCFKygBS+I -wQxqcIMQbAX16pb+HXN0YYQkLKEJT4jCFKpwhSxsoQtHaI4Pug0zzuCgDW+Iwxxu8Bx7+95B/qdA -kAiwegArIMoOiLgEBrEjDJwdEJfYkSGCsIhGrBgSBadEKGqkiax7ohY1IkW3EbCKcJLh2bL4RS6G -rli/aqMb37gpUBlvdqSSlR3viMc8xopWc2QdrnQFx0AKso31ap0PF8IcREhhkYxspCMfCclISnKS -lKykJRdpAzNqLTvXOJcnPwnKUJrrGpo0Gq6occlUqnKVrLQkInp4SC9+UTqllNkYydifK/INjVpU -4+Zk+cUwnu2WuPSOLuvGSyj6knLA1KIwN0nFYqKvlixL5hKX6Tj+B2pgm9zspje/Cc5winOc5Cyn -ObfpwT6GLju6aIA73wnPeMpznvSspz3vic98ulMX1CwZDc8J0IAKdKDm5KHzDvnDfC2AHAxtqEMf -CtGISnSiFK2oRS/K0Bb082PZyUUsPgrSkIp0pCQtqUlPitKUqvSjudhoxoSzCozKdKY0relFFwBL -HzJnoTbtqU9/SlGNqnNzHV2pUY+K1KSqtKVDzd/dYgrUqEq1pzg9KEIbpNCpanWrFhWqeHxYVKWK -daxkPSlTv/o9mHJ1rWxtaFUNedWEHoSnba3rVL0qINaFtax87atSz5pX7T3VroSN6lsVhFDm+MEN -jG2sYx8L2cj+SnaylK2sZS/LWC+4VGLZiUIzPgva0Ip2tKQtrWlPi9rUqvazUdgsw4yE2djKdra0 -xawfcvq+rBZ2tzbFK4f0Wh2P+nW4xEUpYH8rWItAlbfMxehh83TVnTZ3ul11rcH2Wtzsave4clLf -YKkL3og+N65yFQhdw4tecvi2u6cLrnbfm13u+lCt6U3veMmL1bnWN73rBat74Qvgvso3rd/dL3jv -S17m8EIcDG6wgx8M4QhLeMIUrrCFL8zgT1jXX9lRwSQ+DOIQi3jEJC6xiU+M4hSr+MMq2PC9MLMC -DMt4xjSu8YV5gVv/6dbA1O3v97Ab4CAndcDPoy+Pp4vguEr+98jT9fHzgCzkKC/VxesyMpN5m+To -7vjKu3Uy76As5TCXlMjHKzCXC5vlxOaLADpos5vfDOc4y3nOdK6zne+M5zYbgMrXyo4QqADoQAt6 -0IQutKEPjehEK3rRgBYCn4eFKxrkedKUrrSl8UyAHDcwX6BYhac/DepQi3rUpC61qU+N6lR72giP -tlV2IhCKWMt61rSuta1vjetc63rXvI51BFotKlxZQNXELraxj51qUGjaiVs+s129TMf/innaYwZ2 -o6zs7LqmOZbNzjZboQ3cqwiX2uQOKZlnh21vr3XbOu22urcK7nVKu9zlPrcfzfxurrI7twe5hSf+ -DfCAC3z+4AQvuMEPjvCEK/zfxbD2obIDhldIfOIUr7jFL47xjGt84xzvuMTB4HBAYSYBCy+5yU+O -coXfYtlddHe+pRpvos6b3tS2d3K7styXb3XfOtavzrka8/aKm+b0trl3lftzfbN8jS5Pek+DXr6Z -Ez3MRncq0p0+VZ5v2udYjyrU6Sf1qUe56gjEd9epuvRf5svfKW+7299+8IY3NepXcQAg7o73vOt9 -73zvu9//DvjAC/7uDgi5nkYO98Qr3u0rt6qauX52n359gGEXe5DJnkSzR56mWmc25Ddf08kTceiW -FzPmsah50Ds37cxsuuorKvopkr70Uj79LlP/+op2vuX+B+k0sn8P/OCbmtVzB/tV1NCG5Ct/+cxv -vvOfD/3oS3/61E++Ggw/J2ELf/vcB76yHc/tg7D50uQvv/nrvOfiU/4qQui1+98P//jz2tHqv/1B -BCDp8+t//+TPNPjb/Xm5d1GxJ0aVR3vvZXvIhHsCKFG7x3QByIBBhX1rAmYHiIATWCbpFoET5YBq -B4EbGFEEOEwGaIHFlYAztIAg6Fasl035Ug9eAIMxKIMzSIM1aIM3iIM5qIM7CIOJgIFekh3rEABD -SIRFaIRHiIRJqIRLyIRN6IRDuA4/aCWYMQE8aIVXiIVZuIP1wIKIs2QqKIH1J3sHMW4lCGAneEYp -CIb+Hdh6HwiGDSWC0DR7ZghfaKg1GviGK/h//GZeeThRcWg0FUiHw2WHpqSGKsiGLeiGeQiItkSC -g8hXhSgzeOiHieiF+bIF9qCJm8iJneiJnwiKoSiKo0iKpaiJgiCFTpIdrpACreiKrwiLsSiLs0iL -tWiLt4iLregKqUgkZiEGpgiMwSiMw2iKW9CFgsMcX4ZcMsdedDdf0IVu0Bh+P7aMQudfzZh5h4RY -0/hk1eiM1IiNqKeN0qhTvUAC54iO6aiO68iO7eiO7wiP8SiP7zgK3gh2ozCP+aiP+8iP/XiO9RiO -t+ePA0mQBamPvUCO7wMAC8mQDemQDwmRESmRE0kokRVpkRYZkFN0kRvJkR3pkR/pkBmJgiBJkiVp -kh6JXympkivJkm4TEAA7 diff --git a/Documentation/DocBook/media/nv12mt.gif.b64 b/Documentation/DocBook/media/nv12mt.gif.b64 deleted file mode 100644 index 083a7c85d107..000000000000 --- a/Documentation/DocBook/media/nv12mt.gif.b64 +++ /dev/null @@ -1,37 +0,0 @@ -R0lGODlhFgFnAMZnAAAAAAYCAgAASAwFBQAAdEgAACQODkgASCoQEEgAdHQAADATEjUVFHQASDsX -F3QAdE0eHVMhIABISABInEhIAIM0Mok2NI84Nk9PT5o9O5xIAHRInFlZWaxEQbhJRgB0v75LSLhQ -TbRTUcBRTrBXVatcWsJWVKdfXW9vb6VhX0h0v8RcWZhpaJJubpBwb8ZiX8ZiYI5zc4t1dYd4eMhn -Zb90AIN8fH9/f8pracpta8ttasxzcM51dM52dM53dc94dkic39F+fNOEgpmZmdWJh9ePjdiTkt+c -SNuamd2gnt6lo3S//5y/nOCqqeKwr+S1tOa7uv+/dOjBwOrGxuzKye3KyuzMy5zf/7/fnO/S0fHX -1//fnPPd3fTe3vXj4vfo6Pnu7r////v09N////35+f//v///3/////////////////////////// -/////////////////////////////////////////////////////////////////////////yH+ -FE5WMTJNVCBtZW1vcnkgbGF5b3V0ACwAAAAAFgFnAAAH/oBngoOEhYaHiImKi4yNjo+QkZKTlJWW -l5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGmkM3ysvMzc7P -0NHS0CjT1tfY19XZ3N3Y297h4sxDlQDj6OLn6ezZ6+3w0u/x9M0A5r/3vvq9/Lz+kQDqEpiLIC6D -txAyUliLIS2HsyDKkniIIiyLrzC60tiKoyCPq0CqEpmKJCqQJk+lNLWyVEtSKPPJ3Ddz0stRN0Xl -DLUTVEyaQPvVlNTzU1FPRzsl5fRTaNB/QwNGHTi1IL6nu5Zu0qqpKVSsVME+4pqJLCazl9Ba8oqp -jAIA/gTCIOXkVsAVo52OAABgV6kmMxr2Cgbil9LLGh/OIJ6r6QgBLAfuMm48YYzPT1siF7a5qUyD -u1HibtaUWfLoS55NT+a0+DSklqXPxK5EJkuhm7NdV8pMYW9i3YJsT8q99Wqm2MQn/cihZRBuzasv -RenrdgnwM8uFQzpSOfrrTcihW5KyogiYM89VF9cUWq7i3+sRTVlB5Lyj6ngNd/58pn0mMUmY4ER6 -+R2nGWCEMbUIGQE2QUYj3Fnm3VibIPgeJ178kEFz4Imn4F8aEJbcWY18EcQLViziVoITOvLSFgXA -5R4iVvxg44045oijByAU0QMIQAYppJAwPHhIFILx/qUeieDFCIB1igjBg45U4nhBlVSaAEIQYiTi -2IzXLbTKF1mUaeaZaJr5RAc5aKeIFStw0RErVehARZp4mrlAnmlCscILU8yp3y5iILECBI7AKaeg -q3DxQ5cuMgLgCg5uZBwuTpiAhBgQKZqRK45CKqYiftZ30aW1WEFDEF58xIinn4L6aCMIabHDDhye -OqgtYgSRonOLwBqrrKImglAQUjyEalg0xjlRLKEuotayFIoliLC6whKtsVVFai222Wo7KyLT7kpU -VeCGK26xhJTLmblZGZKuuutW1C2tUc1Lb7233TuqU9c6m9At2wJrLb68JEEGP/rG4u4iBaPnr7S8 -/ohhgsRnNOxwLgU/LJVh9YR8Qwsl3HCOCyHIIDI986yMjgwkzKBMyy63g1LN8JzAgskoq4wzOzT/ -3E0MIIiQggM2CG0ztbW88MUZDAgc7y5aFlHBCDsk4ebA8NryxQsZd7DoV7oIQcQKBpyhRRM/jOCE -VV3X8kQRcKYtCBnsNsQLFHSLPQjecL+bi9lxApCFEjuM0ASzuXwNtdSMf5yLlkQEAcIOSmzN9S5O -A6Dxs3HPogUIOSBhRQATy1LEE/d8vq+3t5BhhH0YA6zLFELo47qlocNChhC/unowLRYzDLnevbvy -e/DC265LEqgPsntITCsPvCEef4fV9CVVz8ry/vYOjzwh3KvkvSrgh+985AGPDbrgvl9PbuoRNev+ -6wjHzzz29L8v7/G8g18r0sct8SkrEeXTyfkigaS9sIgRBCwge/bSlzBNAjAV/BACAXgIGAmmOxo8 -lybK8AC5TGdJh4igBAuhOUaUYQOWqQEIMVGb2jVGAh6iRA0N9iYOFmJE8RFhJ/CzIPn9qxDZoYR/ -NLEcBNClAUzIISWWw6FO+XAQQOzKAocjxUKoUBEImY+pIAEY+GhCCh0wT2OAkEVJkMc8EtGYB/cC -pRBKjjVmTKER85fCBhlpEQ2c4SYGEKC3XWILCQhDGyUBIBNE4BG7O0IGtZg8SkRIEV+k2CJM/oSi -R0gShWs5Q4aYY4kaiKiLlvDCBUjZCNcRMYh3zMSXFuEDHGAJS1e65Y20xKVGvPJNurTSjUbQox8N -6ZhAosEf3ZIkADxQXsHU0QWI6SNkIrNIKlJAHSkpwEvIUEKK6AKfxrmncZbJT4BSxBZUIIgTlsic -ZyrnE1bQJkws8gxkgieaIEDPFkaiBlCapR21dxwn7UWQTErEpCqlCMBQEJRrKdQKnkAaVFKiUB2g -aEEPCk5YEpRshygV7VwRAU3lbRaZQsIA+qc+kBLCVriKhaos0CpcqIpVNpxaNwNXCGTJoldWyJ5C -fcVDl35Up0blKVJjyT6lNvUgW/TfUp+6jzkhJhWqBqxfJQ+4Pqd6FXZXrepUv8rHsWK1q2e1qlnF -SlVbsKWt4wurW6O6saxKFa5gZCn+5mrXiijNZn8FWmDTEbTBuqMSHDDsODCgWHEwtrHeeCxkucGB -Y1j2spjNrGY3y9nOevazoA2taEdL2tKa9rSoTa1qV8va1rr2tbCNrWxnS9va2va2uM3tLQIBADs= diff --git a/Documentation/DocBook/media/nv12mt_example.gif.b64 b/Documentation/DocBook/media/nv12mt_example.gif.b64 deleted file mode 100644 index a512078c7f24..000000000000 --- a/Documentation/DocBook/media/nv12mt_example.gif.b64 +++ /dev/null @@ -1,121 +0,0 @@ -R0lGODlhoAHkAOe1AAAAAAAASAAAdEgAAEgASEgAdBgYGHQAABoaGnQASHQAdC0eHigoKEIlJEYm -JS4uLlssKzY2NgBISFIyMQBInEBAQEhBQUhIAFBBQVhCQkhISF5DQ2NDQmdDQ3NEQ05OToNGRHhJ -SJxIAItHRY9HRXRInJdIRlpaWppLSaJJRqpJR7BIRa5KR2NfX7JKR2BgYGxdXWleXmZfX31ZWXJc -XHpaWQB0v29dXLZKSHhbWolXVpVUU5JVU55SUJhUUqdQTrpLSK9OTKRRT6FSULRNS7hMSrVNSr5L -SL9MSr1OS7xQTsBRTrtTUL5WU7lYVsJWVEh0v7deW4pqab5dW8RcWbdgXrZjYcZgXnd3d8ZiX8Zi -YL9lY7RoZshnZb90ALJubLFwb8prabBzccpta79wbsttaqx6ecxzcKt8e4aGhr93dc10cs51dM52 -dImJib97ec53dc94dqiEhKeHhkic39F+fKeKiaWPj9OEgqSSkb6PjtWJh5qamqGamqCcnNePjZ+f -n9iTkr6amtiUktmVk9+cSL6enduamb+jo92gnr+pqd6lo7Ozs7+wsHS//7W1tZy/nOCqqbm5ub+4 -uOKwr+S1tL+/v9+/dOa7uv+/dOjBwOrGxuzKye3KyuzMy5zf/7/fnO/S0d/fnPHX1+Dg4P/fnPPd -3fTe3vXj4vfo6L//v+/v7/nu7r///9//v/v09N//39////35+f//v///3/////////////////// -//////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBH -SU1QACwAAAAAoAHkAAAI/gBrCRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJ -sqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDCh1KtKjRo0iTKl3KtKnTp1CjSp1KtapV -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 -XnvvxTdfffflt19//+03IAA7 diff --git a/Documentation/DocBook/media/pipeline.png.b64 b/Documentation/DocBook/media/pipeline.png.b64 deleted file mode 100644 index 97d9ac007473..000000000000 --- a/Documentation/DocBook/media/pipeline.png.b64 +++ /dev/null @@ -1,213 +0,0 @@ -iVBORw0KGgoAAAANSUhEUgAAAlgAAAEcCAMAAAAsmToJAAAAAXNSR0IArs4c6QAAAwBQTFRFAAEA -EAEBAwUBCgMBCAUKAgkMHQIDCwYXFQYDBgkVDwgFCAsHChASJwkDFA4NEg4TDhANHgwHDg8aExAG -DBEjBBUZERMQCBNRDxU0ExcZFRgVFRcgCRkzHBcUDRdCNRELIxYTAx4mLBUMEBwcEhsiDxwhExsu -Dh8XJRkQByAtDCMUHx4bACk0DSsiGScsFCRcJSUiGSZCDiwqGCg1LyQbIycpVhsPDy0wNyQVECxA -PSIfCS84ADJCEStWRiIULSwpADdHCDkgEy1/BjorEjhADDhXCzZvITNPUysQDzs8MjIvCj04BT1O -PDEoQjEhMDU3LzY9KTdFTTMYNzk2GD6PAEpfEUVjBExFCEpPB1ArK0FjKEVZYTscdDYXG0d5SkA5 -FEiJQUNAOURPAFhCA1RpP0ZJVEMvYUAyBFtRWkYnDlR+QEleAF1jkTojHlV1AGB4PlN5YU87cUws -SVRXAGaBWVJKUlRRRVZlAG1PWFNSBGt5AmqVAG+NAHNpK17BWl9ifFs9KWmnSGZ0YGFfp1IuCnWj -AHuKbWBXoVNAdGBPDniWAHujTWmLk14rAH+ch19XX2aRX2t8AIeLiWgvAIeeAIaqa21rOnehdW1m -AImspWJYj2tLW3C0AIyvWXaNAo6xb3Z5dXZzent4WIKiQojAen+CkX1pcoSWcYDOoH9fp4E+Y4ur -hoWCXIvGb4mut3xpqYNYnYdUO5rDyXxdjY6LYJqk0IRGb5azXZnMjJGUgJWqpJB8l5aUyJN4kKK1 -rZ6IYqzge6Xho6GdnaWpgqy6yZ9zvaR0hqzMk6rN5Jxxw6mF26lbq7C2pLTGwrCbs7Owvb+8zcGc -8rp42L2xsMbY3L+jtMfsz8W2nM/yx8jH0MfA7MWU78h/3crIyNTo4NLD6dK1z9bc1dbT3NXOv9vr -/OKSwur8++Gw4uTh0ef78uPU+OPL3Ojz++bGyfH36evo/+3b6vT88vPw/feu1/v+//bb//nK/PnW -5f/+//ro+fv49/7///37//71//3//v/8sZeTnQAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAFY4AABWO -AUTUBDsAAAAHdElNRQfaCRQPAiJBEFMLAAAgAElEQVR42u2dD3wU5bX300nWws50shA4lyTGikRE -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 diff --git a/Documentation/DocBook/media/selection.png.b64 b/Documentation/DocBook/media/selection.png.b64 deleted file mode 100644 index 416186558cb2..000000000000 --- a/Documentation/DocBook/media/selection.png.b64 +++ /dev/null @@ -1,206 +0,0 @@ -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 diff --git a/Documentation/DocBook/media/typical_media_device.svg b/Documentation/DocBook/media/typical_media_device.svg deleted file mode 100644 index f0c82f72c4b6..000000000000 --- a/Documentation/DocBook/media/typical_media_device.svg +++ /dev/null @@ -1,28 +0,0 @@ - -Audio decoder -Video decoder -Audio encoder -Button Key/IR input logic -EEPROM -Sensor -System Bus -Demux -Conditional Access Module -Video encoder -Radio / Analog TV -Digital TV -PS.: picture is not complete: other blocks may be present -Webcam -Processing blocks -Smartcard -TunerFM/TV -Satellite Equipment Control (SEC) -Demod -I2C Bus (control bus) -Digital TV Frontend - -CPU -PCI, USB, SPI, I2C, ... -Bridge - DMA - diff --git a/Documentation/DocBook/media/v4l/.gitignore b/Documentation/DocBook/media/v4l/.gitignore deleted file mode 100644 index d7ec32eafac9..000000000000 --- a/Documentation/DocBook/media/v4l/.gitignore +++ /dev/null @@ -1 +0,0 @@ -!*.xml diff --git a/Documentation/DocBook/media/v4l/biblio.xml b/Documentation/DocBook/media/v4l/biblio.xml deleted file mode 100644 index 87f1d24958aa..000000000000 --- a/Documentation/DocBook/media/v4l/biblio.xml +++ /dev/null @@ -1,381 +0,0 @@ - - References - - - CEA 608-E - - Consumer Electronics Association (http://www.ce.org) - - CEA-608-E R-2014 "Line 21 Data Services" - - - - EN 300 294 - - European Telecommunication Standards Institute -(http://www.etsi.org) - - EN 300 294 "625-line television Wide Screen Signalling -(WSS)" - - - - ETS 300 231 - - European Telecommunication Standards Institute -(http://www.etsi.org) - - ETS 300 231 "Specification of the domestic video -Programme Delivery Control system (PDC)" - - - - ETS 300 706 - - European Telecommunication Standards Institute -(http://www.etsi.org) - - ETS 300 706 "Enhanced Teletext specification" - - - - ISO 13818-1 - - International Telecommunication Union (http://www.itu.ch), International -Organisation for Standardisation (http://www.iso.ch) - - ITU-T Rec. H.222.0 | ISO/IEC 13818-1 "Information -technology — Generic coding of moving pictures and associated -audio information: Systems" - - - - ISO 13818-2 - - International Telecommunication Union (http://www.itu.ch), International -Organisation for Standardisation (http://www.iso.ch) - - ITU-T Rec. H.262 | ISO/IEC 13818-2 "Information -technology — Generic coding of moving pictures and associated -audio information: Video" - - - - ITU BT.470 - - International Telecommunication Union (http://www.itu.ch) - - ITU-R Recommendation BT.470-6 "Conventional Television -Systems" - - - - ITU BT.601 - - International Telecommunication Union (http://www.itu.ch) - - ITU-R Recommendation BT.601-5 "Studio Encoding Parameters -of Digital Television for Standard 4:3 and Wide-Screen 16:9 Aspect -Ratios" - - - - ITU BT.653 - - International Telecommunication Union (http://www.itu.ch) - - ITU-R Recommendation BT.653-3 "Teletext systems" - - - - ITU BT.709 - - International Telecommunication Union (http://www.itu.ch) - - ITU-R Recommendation BT.709-5 "Parameter values for the -HDTV standards for production and international programme -exchange" - - - - ITU BT.1119 - - International Telecommunication Union (http://www.itu.ch) - - ITU-R Recommendation BT.1119 "625-line -television Wide Screen Signalling (WSS)" - - - - JFIF - - Independent JPEG Group (http://www.ijg.org) - - JPEG File Interchange Format - Version 1.02 - - - - ITU-T.81 - - International Telecommunication Union -(http://www.itu.int) - - ITU-T Recommendation T.81 -"Information Technology — Digital Compression and Coding of Continous-Tone -Still Images — Requirements and Guidelines" - - - - W3C JPEG JFIF - - The World Wide Web Consortium (http://www.w3.org) - - JPEG JFIF - - - - SMPTE 12M - - Society of Motion Picture and Television Engineers -(http://www.smpte.org) - - SMPTE 12M-1999 "Television, Audio and Film - Time and -Control Code" - - - - SMPTE 170M - - Society of Motion Picture and Television Engineers -(http://www.smpte.org) - - SMPTE 170M-1999 "Television - Composite Analog Video -Signal - NTSC for Studio Applications" - - - - SMPTE 240M - - Society of Motion Picture and Television Engineers -(http://www.smpte.org) - - SMPTE 240M-1999 "Television - Signal Parameters - -1125-Line High-Definition Production" - - - - SMPTE RP 431-2 - - Society of Motion Picture and Television Engineers -(http://www.smpte.org) - - SMPTE RP 431-2:2011 "D-Cinema Quality - Reference Projector and Environment" - - - - SMPTE ST 2084 - - Society of Motion Picture and Television Engineers -(http://www.smpte.org) - - SMPTE ST 2084:2014 "High Dynamic Range Electro-Optical Transfer Function of Master Reference Displays" - - - - sRGB - - International Electrotechnical Commission -(http://www.iec.ch) - - IEC 61966-2-1 ed1.0 "Multimedia systems and equipment - Colour measurement -and management - Part 2-1: Colour management - Default RGB colour space - sRGB" - - - - sYCC - - International Electrotechnical Commission -(http://www.iec.ch) - - IEC 61966-2-1-am1 ed1.0 "Amendment 1 - Multimedia systems and equipment - Colour measurement -and management - Part 2-1: Colour management - Default RGB colour space - sRGB" - - - - xvYCC - - International Electrotechnical Commission -(http://www.iec.ch) - - IEC 61966-2-4 ed1.0 "Multimedia systems and equipment - Colour measurement -and management - Part 2-4: Colour management - Extended-gamut YCC colour space for video -applications - xvYCC" - - - - AdobeRGB - - Adobe Systems Incorporated (http://www.adobe.com) - - Adobe© RGB (1998) Color Image Encoding Version 2005-05 - - - - opRGB - - International Electrotechnical Commission -(http://www.iec.ch) - - IEC 61966-2-5 "Multimedia systems and equipment - Colour measurement -and management - Part 2-5: Colour management - Optional RGB colour space - opRGB" - - - - ITU BT.2020 - - International Telecommunication Union (http://www.itu.ch) - - ITU-R Recommendation BT.2020 (08/2012) "Parameter values for ultra-high -definition television systems for production and international programme exchange" - - - - - EBU Tech 3213 - - European Broadcast Union (http://www.ebu.ch) - - E.B.U. Standard for Chromaticity Tolerances for Studio Monitors" - - - - IEC 62106 - - International Electrotechnical Commission -(http://www.iec.ch) - - Specification of the radio data system (RDS) for VHF/FM sound broadcasting -in the frequency range from 87,5 to 108,0 MHz - - - - NRSC-4-B - - National Radio Systems Committee -(http://www.nrscstandards.org) - - NRSC-4-B: United States RBDS Standard - - - - ISO 12232:2006 - - International Organization for Standardization -(http://www.iso.org) - - Photography — Digital still cameras — Determination - of exposure index, ISO speed ratings, standard output sensitivity, and - recommended exposure index - - - - CEA-861-E - - Consumer Electronics Association -(http://www.ce.org) - - A DTV Profile for Uncompressed High Speed Digital Interfaces - - - - VESA DMT - - Video Electronics Standards Association -(http://www.vesa.org) - - VESA and Industry Standards and Guidelines for Computer Display Monitor Timing (DMT) - - - - EDID - - Video Electronics Standards Association -(http://www.vesa.org) - - VESA Enhanced Extended Display Identification Data Standard - Release A, Revision 2 - - - - HDCP - - Digital Content Protection LLC -(http://www.digital-cp.com) - - High-bandwidth Digital Content Protection System - Revision 1.3 - - - - HDMI - - HDMI Licensing LLC -(http://www.hdmi.org) - - High-Definition Multimedia Interface - Specification Version 1.4a - - - - HDMI2 - - HDMI Licensing LLC -(http://www.hdmi.org) - - High-Definition Multimedia Interface - Specification Version 2.0 - - - - DP - - Video Electronics Standards Association -(http://www.vesa.org) - - VESA DisplayPort Standard - Version 1, Revision 2 - - - - poynton - - Charles Poynton - - Digital Video and HDTV, Algorithms and Interfaces - - - - colimg - - Erik Reinhard et al. - - Color Imaging: Fundamentals and Applications - - - diff --git a/Documentation/DocBook/media/v4l/capture.c.xml b/Documentation/DocBook/media/v4l/capture.c.xml deleted file mode 100644 index 22126a991b34..000000000000 --- a/Documentation/DocBook/media/v4l/capture.c.xml +++ /dev/null @@ -1,659 +0,0 @@ - -/* - * V4L2 video capture example - * - * This program can be used and distributed without restrictions. - * - * This program is provided with the V4L2 API - * see https://linuxtv.org/docs.php for more information - */ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <assert.h> - -#include <getopt.h> /* getopt_long() */ - -#include <fcntl.h> /* low-level i/o */ -#include <unistd.h> -#include <errno.h> -#include <sys/stat.h> -#include <sys/types.h> -#include <sys/time.h> -#include <sys/mman.h> -#include <sys/ioctl.h> - -#include <linux/videodev2.h> - -#define CLEAR(x) memset(&(x), 0, sizeof(x)) - -enum io_method { - IO_METHOD_READ, - IO_METHOD_MMAP, - IO_METHOD_USERPTR, -}; - -struct buffer { - void *start; - size_t length; -}; - -static char *dev_name; -static enum io_method io = IO_METHOD_MMAP; -static int fd = -1; -struct buffer *buffers; -static unsigned int n_buffers; -static int out_buf; -static int force_format; -static int frame_count = 70; - -static void errno_exit(const char *s) -{ - fprintf(stderr, "%s error %d, %s\n", s, errno, strerror(errno)); - exit(EXIT_FAILURE); -} - -static int xioctl(int fh, int request, void *arg) -{ - int r; - - do { - r = ioctl(fh, request, arg); - } while (-1 == r && EINTR == errno); - - return r; -} - -static void process_image(const void *p, int size) -{ - if (out_buf) - fwrite(p, size, 1, stdout); - - fflush(stderr); - fprintf(stderr, "."); - fflush(stdout); -} - -static int read_frame(void) -{ - struct v4l2_buffer buf; - unsigned int i; - - switch (io) { - case IO_METHOD_READ: - if (-1 == read(fd, buffers[0].start, buffers[0].length)) { - switch (errno) { - case EAGAIN: - return 0; - - case EIO: - /* Could ignore EIO, see spec. */ - - /* fall through */ - - default: - errno_exit("read"); - } - } - - process_image(buffers[0].start, buffers[0].length); - break; - - case IO_METHOD_MMAP: - CLEAR(buf); - - buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - buf.memory = V4L2_MEMORY_MMAP; - - if (-1 == xioctl(fd, VIDIOC_DQBUF, &buf)) { - switch (errno) { - case EAGAIN: - return 0; - - case EIO: - /* Could ignore EIO, see spec. */ - - /* fall through */ - - default: - errno_exit("VIDIOC_DQBUF"); - } - } - - assert(buf.index < n_buffers); - - process_image(buffers[buf.index].start, buf.bytesused); - - if (-1 == xioctl(fd, VIDIOC_QBUF, &buf)) - errno_exit("VIDIOC_QBUF"); - break; - - case IO_METHOD_USERPTR: - CLEAR(buf); - - buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - buf.memory = V4L2_MEMORY_USERPTR; - - if (-1 == xioctl(fd, VIDIOC_DQBUF, &buf)) { - switch (errno) { - case EAGAIN: - return 0; - - case EIO: - /* Could ignore EIO, see spec. */ - - /* fall through */ - - default: - errno_exit("VIDIOC_DQBUF"); - } - } - - for (i = 0; i < n_buffers; ++i) - if (buf.m.userptr == (unsigned long)buffers[i].start - && buf.length == buffers[i].length) - break; - - assert(i < n_buffers); - - process_image((void *)buf.m.userptr, buf.bytesused); - - if (-1 == xioctl(fd, VIDIOC_QBUF, &buf)) - errno_exit("VIDIOC_QBUF"); - break; - } - - return 1; -} - -static void mainloop(void) -{ - unsigned int count; - - count = frame_count; - - while (count-- > 0) { - for (;;) { - fd_set fds; - struct timeval tv; - int r; - - FD_ZERO(&fds); - FD_SET(fd, &fds); - - /* Timeout. */ - tv.tv_sec = 2; - tv.tv_usec = 0; - - r = select(fd + 1, &fds, NULL, NULL, &tv); - - if (-1 == r) { - if (EINTR == errno) - continue; - errno_exit("select"); - } - - if (0 == r) { - fprintf(stderr, "select timeout\n"); - exit(EXIT_FAILURE); - } - - if (read_frame()) - break; - /* EAGAIN - continue select loop. */ - } - } -} - -static void stop_capturing(void) -{ - enum v4l2_buf_type type; - - switch (io) { - case IO_METHOD_READ: - /* Nothing to do. */ - break; - - case IO_METHOD_MMAP: - case IO_METHOD_USERPTR: - type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - if (-1 == xioctl(fd, VIDIOC_STREAMOFF, &type)) - errno_exit("VIDIOC_STREAMOFF"); - break; - } -} - -static void start_capturing(void) -{ - unsigned int i; - enum v4l2_buf_type type; - - switch (io) { - case IO_METHOD_READ: - /* Nothing to do. */ - break; - - case IO_METHOD_MMAP: - for (i = 0; i < n_buffers; ++i) { - struct v4l2_buffer buf; - - CLEAR(buf); - buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - buf.memory = V4L2_MEMORY_MMAP; - buf.index = i; - - if (-1 == xioctl(fd, VIDIOC_QBUF, &buf)) - errno_exit("VIDIOC_QBUF"); - } - type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - if (-1 == xioctl(fd, VIDIOC_STREAMON, &type)) - errno_exit("VIDIOC_STREAMON"); - break; - - case IO_METHOD_USERPTR: - for (i = 0; i < n_buffers; ++i) { - struct v4l2_buffer buf; - - CLEAR(buf); - buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - buf.memory = V4L2_MEMORY_USERPTR; - buf.index = i; - buf.m.userptr = (unsigned long)buffers[i].start; - buf.length = buffers[i].length; - - if (-1 == xioctl(fd, VIDIOC_QBUF, &buf)) - errno_exit("VIDIOC_QBUF"); - } - type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - if (-1 == xioctl(fd, VIDIOC_STREAMON, &type)) - errno_exit("VIDIOC_STREAMON"); - break; - } -} - -static void uninit_device(void) -{ - unsigned int i; - - switch (io) { - case IO_METHOD_READ: - free(buffers[0].start); - break; - - case IO_METHOD_MMAP: - for (i = 0; i < n_buffers; ++i) - if (-1 == munmap(buffers[i].start, buffers[i].length)) - errno_exit("munmap"); - break; - - case IO_METHOD_USERPTR: - for (i = 0; i < n_buffers; ++i) - free(buffers[i].start); - break; - } - - free(buffers); -} - -static void init_read(unsigned int buffer_size) -{ - buffers = calloc(1, sizeof(*buffers)); - - if (!buffers) { - fprintf(stderr, "Out of memory\n"); - exit(EXIT_FAILURE); - } - - buffers[0].length = buffer_size; - buffers[0].start = malloc(buffer_size); - - if (!buffers[0].start) { - fprintf(stderr, "Out of memory\n"); - exit(EXIT_FAILURE); - } -} - -static void init_mmap(void) -{ - struct v4l2_requestbuffers req; - - CLEAR(req); - - req.count = 4; - req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - req.memory = V4L2_MEMORY_MMAP; - - if (-1 == xioctl(fd, VIDIOC_REQBUFS, &req)) { - if (EINVAL == errno) { - fprintf(stderr, "%s does not support " - "memory mapping\n", dev_name); - exit(EXIT_FAILURE); - } else { - errno_exit("VIDIOC_REQBUFS"); - } - } - - if (req.count < 2) { - fprintf(stderr, "Insufficient buffer memory on %s\n", - dev_name); - exit(EXIT_FAILURE); - } - - buffers = calloc(req.count, sizeof(*buffers)); - - if (!buffers) { - fprintf(stderr, "Out of memory\n"); - exit(EXIT_FAILURE); - } - - for (n_buffers = 0; n_buffers < req.count; ++n_buffers) { - struct v4l2_buffer buf; - - CLEAR(buf); - - buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - buf.memory = V4L2_MEMORY_MMAP; - buf.index = n_buffers; - - if (-1 == xioctl(fd, VIDIOC_QUERYBUF, &buf)) - errno_exit("VIDIOC_QUERYBUF"); - - buffers[n_buffers].length = buf.length; - buffers[n_buffers].start = - mmap(NULL /* start anywhere */, - buf.length, - PROT_READ | PROT_WRITE /* required */, - MAP_SHARED /* recommended */, - fd, buf.m.offset); - - if (MAP_FAILED == buffers[n_buffers].start) - errno_exit("mmap"); - } -} - -static void init_userp(unsigned int buffer_size) -{ - struct v4l2_requestbuffers req; - - CLEAR(req); - - req.count = 4; - req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - req.memory = V4L2_MEMORY_USERPTR; - - if (-1 == xioctl(fd, VIDIOC_REQBUFS, &req)) { - if (EINVAL == errno) { - fprintf(stderr, "%s does not support " - "user pointer i/o\n", dev_name); - exit(EXIT_FAILURE); - } else { - errno_exit("VIDIOC_REQBUFS"); - } - } - - buffers = calloc(4, sizeof(*buffers)); - - if (!buffers) { - fprintf(stderr, "Out of memory\n"); - exit(EXIT_FAILURE); - } - - for (n_buffers = 0; n_buffers < 4; ++n_buffers) { - buffers[n_buffers].length = buffer_size; - buffers[n_buffers].start = malloc(buffer_size); - - if (!buffers[n_buffers].start) { - fprintf(stderr, "Out of memory\n"); - exit(EXIT_FAILURE); - } - } -} - -static void init_device(void) -{ - struct v4l2_capability cap; - struct v4l2_cropcap cropcap; - struct v4l2_crop crop; - struct v4l2_format fmt; - unsigned int min; - - if (-1 == xioctl(fd, VIDIOC_QUERYCAP, &cap)) { - if (EINVAL == errno) { - fprintf(stderr, "%s is no V4L2 device\n", - dev_name); - exit(EXIT_FAILURE); - } else { - errno_exit("VIDIOC_QUERYCAP"); - } - } - - if (!(cap.capabilities & V4L2_CAP_VIDEO_CAPTURE)) { - fprintf(stderr, "%s is no video capture device\n", - dev_name); - exit(EXIT_FAILURE); - } - - switch (io) { - case IO_METHOD_READ: - if (!(cap.capabilities & V4L2_CAP_READWRITE)) { - fprintf(stderr, "%s does not support read i/o\n", - dev_name); - exit(EXIT_FAILURE); - } - break; - - case IO_METHOD_MMAP: - case IO_METHOD_USERPTR: - if (!(cap.capabilities & V4L2_CAP_STREAMING)) { - fprintf(stderr, "%s does not support streaming i/o\n", - dev_name); - exit(EXIT_FAILURE); - } - break; - } - - - /* Select video input, video standard and tune here. */ - - - CLEAR(cropcap); - - cropcap.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - - if (0 == xioctl(fd, VIDIOC_CROPCAP, &cropcap)) { - crop.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - crop.c = cropcap.defrect; /* reset to default */ - - if (-1 == xioctl(fd, VIDIOC_S_CROP, &crop)) { - switch (errno) { - case EINVAL: - /* Cropping not supported. */ - break; - default: - /* Errors ignored. */ - break; - } - } - } else { - /* Errors ignored. */ - } - - - CLEAR(fmt); - - fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - if (force_format) { - fmt.fmt.pix.width = 640; - fmt.fmt.pix.height = 480; - fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV; - fmt.fmt.pix.field = V4L2_FIELD_INTERLACED; - - if (-1 == xioctl(fd, VIDIOC_S_FMT, &fmt)) - errno_exit("VIDIOC_S_FMT"); - - /* Note VIDIOC_S_FMT may change width and height. */ - } else { - /* Preserve original settings as set by v4l2-ctl for example */ - if (-1 == xioctl(fd, VIDIOC_G_FMT, &fmt)) - errno_exit("VIDIOC_G_FMT"); - } - - /* Buggy driver paranoia. */ - min = fmt.fmt.pix.width * 2; - if (fmt.fmt.pix.bytesperline < min) - fmt.fmt.pix.bytesperline = min; - min = fmt.fmt.pix.bytesperline * fmt.fmt.pix.height; - if (fmt.fmt.pix.sizeimage < min) - fmt.fmt.pix.sizeimage = min; - - switch (io) { - case IO_METHOD_READ: - init_read(fmt.fmt.pix.sizeimage); - break; - - case IO_METHOD_MMAP: - init_mmap(); - break; - - case IO_METHOD_USERPTR: - init_userp(fmt.fmt.pix.sizeimage); - break; - } -} - -static void close_device(void) -{ - if (-1 == close(fd)) - errno_exit("close"); - - fd = -1; -} - -static void open_device(void) -{ - struct stat st; - - if (-1 == stat(dev_name, &st)) { - fprintf(stderr, "Cannot identify '%s': %d, %s\n", - dev_name, errno, strerror(errno)); - exit(EXIT_FAILURE); - } - - if (!S_ISCHR(st.st_mode)) { - fprintf(stderr, "%s is no device\n", dev_name); - exit(EXIT_FAILURE); - } - - fd = open(dev_name, O_RDWR /* required */ | O_NONBLOCK, 0); - - if (-1 == fd) { - fprintf(stderr, "Cannot open '%s': %d, %s\n", - dev_name, errno, strerror(errno)); - exit(EXIT_FAILURE); - } -} - -static void usage(FILE *fp, int argc, char **argv) -{ - fprintf(fp, - "Usage: %s [options]\n\n" - "Version 1.3\n" - "Options:\n" - "-d | --device name Video device name [%s]\n" - "-h | --help Print this message\n" - "-m | --mmap Use memory mapped buffers [default]\n" - "-r | --read Use read() calls\n" - "-u | --userp Use application allocated buffers\n" - "-o | --output Outputs stream to stdout\n" - "-f | --format Force format to 640x480 YUYV\n" - "-c | --count Number of frames to grab [%i]\n" - "", - argv[0], dev_name, frame_count); -} - -static const char short_options[] = "d:hmruofc:"; - -static const struct option -long_options[] = { - { "device", required_argument, NULL, 'd' }, - { "help", no_argument, NULL, 'h' }, - { "mmap", no_argument, NULL, 'm' }, - { "read", no_argument, NULL, 'r' }, - { "userp", no_argument, NULL, 'u' }, - { "output", no_argument, NULL, 'o' }, - { "format", no_argument, NULL, 'f' }, - { "count", required_argument, NULL, 'c' }, - { 0, 0, 0, 0 } -}; - -int main(int argc, char **argv) -{ - dev_name = "/dev/video0"; - - for (;;) { - int idx; - int c; - - c = getopt_long(argc, argv, - short_options, long_options, &idx); - - if (-1 == c) - break; - - switch (c) { - case 0: /* getopt_long() flag */ - break; - - case 'd': - dev_name = optarg; - break; - - case 'h': - usage(stdout, argc, argv); - exit(EXIT_SUCCESS); - - case 'm': - io = IO_METHOD_MMAP; - break; - - case 'r': - io = IO_METHOD_READ; - break; - - case 'u': - io = IO_METHOD_USERPTR; - break; - - case 'o': - out_buf++; - break; - - case 'f': - force_format++; - break; - - case 'c': - errno = 0; - frame_count = strtol(optarg, NULL, 0); - if (errno) - errno_exit(optarg); - break; - - default: - usage(stderr, argc, argv); - exit(EXIT_FAILURE); - } - } - - open_device(); - init_device(); - start_capturing(); - mainloop(); - stop_capturing(); - uninit_device(); - close_device(); - fprintf(stderr, "\n"); - return 0; -} - diff --git a/Documentation/DocBook/media/v4l/cec-api.xml b/Documentation/DocBook/media/v4l/cec-api.xml deleted file mode 100644 index 7062c1fa4904..000000000000 --- a/Documentation/DocBook/media/v4l/cec-api.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - - Hans - Verkuil -
hans.verkuil@cisco.com
- Initial version. -
-
- - 2016 - Hans Verkuil - - - - - - 1.0.0 - 2016-03-17 - hv - Initial revision - - -
- -CEC API - - - CEC: Consumer Electronics Control - -
- Introduction - - Note: this documents the proposed CEC API. This API is not yet finalized and - is currently only available as a staging kernel module. - - HDMI connectors provide a single pin for use by the Consumer Electronics - Control protocol. This protocol allows different devices connected by an HDMI cable - to communicate. The protocol for CEC version 1.4 is defined in supplements 1 (CEC) - and 2 (HEAC or HDMI Ethernet and Audio Return Channel) of the HDMI 1.4a - () specification and the extensions added to CEC version 2.0 - are defined in chapter 11 of the HDMI 2.0 () specification. - - - The bitrate is very slow (effectively no more than 36 bytes per second) and - is based on the ancient AV.link protocol used in old SCART connectors. The protocol - closely resembles a crazy Rube Goldberg contraption and is an unholy mix of low and - high level messages. Some messages, especially those part of the HEAC protocol layered - on top of CEC, need to be handled by the kernel, others can be handled either by the - kernel or by userspace. - - In addition, CEC can be implemented in HDMI receivers, transmitters and in USB - devices that have an HDMI input and an HDMI output and that control just the CEC pin. - - Drivers that support CEC will create a CEC device node (/dev/cecX) - to give userspace access to the CEC adapter. The &CEC-ADAP-G-CAPS; ioctl will tell userspace - what it is allowed to do. -
-
- - - Function Reference - - &sub-cec-func-open; - &sub-cec-func-close; - &sub-cec-func-ioctl; - &sub-cec-func-poll; - - &sub-cec-ioc-adap-g-caps; - &sub-cec-ioc-adap-g-log-addrs; - &sub-cec-ioc-adap-g-phys-addr; - &sub-cec-ioc-dqevent; - &sub-cec-ioc-g-mode; - &sub-cec-ioc-receive; - diff --git a/Documentation/DocBook/media/v4l/cec-func-close.xml b/Documentation/DocBook/media/v4l/cec-func-close.xml deleted file mode 100644 index 0812c8cd9634..000000000000 --- a/Documentation/DocBook/media/v4l/cec-func-close.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - cec close() - &manvol; - - - - cec-close - Close a cec device - - - - - #include <unistd.h> - - int close - int fd - - - - - - Arguments - - - - fd - - &fd; - - - - - - - Description - - - Note: this documents the proposed CEC API. This API is not yet finalized and - is currently only available as a staging kernel module. - - - Closes the cec device. Resources associated with the file descriptor - are freed. The device configuration remain unchanged. - - - - Return Value - - close returns 0 on success. On error, -1 is - returned, and errno is set appropriately. Possible error - codes are: - - - - EBADF - - fd is not a valid open file descriptor. - - - - - - diff --git a/Documentation/DocBook/media/v4l/cec-func-ioctl.xml b/Documentation/DocBook/media/v4l/cec-func-ioctl.xml deleted file mode 100644 index f92817a2dc80..000000000000 --- a/Documentation/DocBook/media/v4l/cec-func-ioctl.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - cec ioctl() - &manvol; - - - - cec-ioctl - Control a cec device - - - - - #include <sys/ioctl.h> - - int ioctl - int fd - int request - void *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - CEC ioctl request code as defined in the cec.h header file, - for example CEC_ADAP_G_CAPS. - - - - argp - - Pointer to a request-specific structure. - - - - - - - Description - - Note: this documents the proposed CEC API. This API is not yet finalized and - is currently only available as a staging kernel module. - - - The ioctl() function manipulates cec device - parameters. The argument fd must be an open file - descriptor. - The ioctl request code specifies the cec - 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 - argp in bytes. - Macros and structures definitions specifying cec ioctl requests and - their parameters are located in the cec.h header file. All cec ioctl - requests, their respective function and parameters are specified in - . - - - - &return-value; - - Request-specific error codes are listed in the - individual requests descriptions. - When an ioctl that takes an output or read/write parameter fails, - the parameter remains unmodified. - - diff --git a/Documentation/DocBook/media/v4l/cec-func-open.xml b/Documentation/DocBook/media/v4l/cec-func-open.xml deleted file mode 100644 index 2edc5555b81a..000000000000 --- a/Documentation/DocBook/media/v4l/cec-func-open.xml +++ /dev/null @@ -1,104 +0,0 @@ - - - cec open() - &manvol; - - - - cec-open - Open a cec device - - - - - #include <fcntl.h> - - int open - const char *device_name - int flags - - - - - - Arguments - - - - device_name - - Device to be opened. - - - - flags - - Open flags. Access mode must be O_RDWR. - - When the O_NONBLOCK flag is -given, the &CEC-RECEIVE; ioctl will return &EAGAIN; when no message is -available, and the &CEC-TRANSMIT;, &CEC-ADAP-S-PHYS-ADDR; and -&CEC-ADAP-S-LOG-ADDRS; ioctls all act in non-blocking mode. - Other flags have no effect. - - - - - - Description - - Note: this documents the proposed CEC API. This API is not yet finalized and - is currently only available as a staging kernel module. - - - To open a cec device applications call open() - with the desired device name. The function has no side effects; the device - configuration remain unchanged. - When the device is opened in read-only mode, attempts to modify its - configuration will result in an error, and errno will be - set to EBADF. - - - Return Value - - open returns the new file descriptor on success. - On error, -1 is returned, and errno is set appropriately. - Possible error codes include: - - - - EACCES - - The requested access to the file is not allowed. - - - - EMFILE - - The process already has the maximum number of files open. - - - - - ENFILE - - The system limit on the total number of open files has been - reached. - - - - ENOMEM - - Insufficient kernel memory was available. - - - - ENXIO - - No device corresponding to this device special file exists. - - - - - - diff --git a/Documentation/DocBook/media/v4l/cec-func-poll.xml b/Documentation/DocBook/media/v4l/cec-func-poll.xml deleted file mode 100644 index 1bddbde0142d..000000000000 --- a/Documentation/DocBook/media/v4l/cec-func-poll.xml +++ /dev/null @@ -1,94 +0,0 @@ - - - cec poll() - &manvol; - - - - cec-poll - Wait for some event on a file descriptor - - - - - #include <sys/poll.h> - - int poll - struct pollfd *ufds - unsigned int nfds - int timeout - - - - - - Description - - - Note: this documents the proposed CEC API. This API is not yet finalized and - is currently only available as a staging kernel module. - - - With the poll() function applications -can wait for CEC events. - - On success poll() returns the number of -file descriptors that have been selected (that is, file descriptors -for which the revents field of the -respective pollfd structure is non-zero). -CEC devices set the POLLIN and -POLLRDNORM flags in the -revents field if there are messages in the -receive queue. If the transmit queue has room for new messages, the -POLLOUT and POLLWRNORM -flags are set. If there are events in the event queue, then the -POLLPRI flag is set. -When the function timed out it returns a value of zero, on -failure it returns -1 and the -errno variable is set appropriately. - - - For more details see the -poll() manual page. - - - - Return Value - - On success, poll() returns the number -structures which have non-zero revents -fields, or zero if the call timed out. On error --1 is returned, and the -errno variable is set appropriately: - - - - EBADF - - One or more of the ufds members -specify an invalid file descriptor. - - - - EFAULT - - ufds references an inaccessible -memory area. - - - - EINTR - - The call was interrupted by a signal. - - - - EINVAL - - The nfds argument is greater -than OPEN_MAX. - - - - - diff --git a/Documentation/DocBook/media/v4l/cec-ioc-adap-g-caps.xml b/Documentation/DocBook/media/v4l/cec-ioc-adap-g-caps.xml deleted file mode 100644 index 3523ef2259b1..000000000000 --- a/Documentation/DocBook/media/v4l/cec-ioc-adap-g-caps.xml +++ /dev/null @@ -1,151 +0,0 @@ - - - ioctl CEC_ADAP_G_CAPS - &manvol; - - - - CEC_ADAP_G_CAPS - Query device capabilities - - - - - - int ioctl - int fd - int request - struct cec_caps *argp - - - - - - Arguments - - - - fd - - File descriptor returned by - open(). - - - - request - - CEC_ADAP_G_CAPS - - - - argp - - - - - - - - - Description - - - Note: this documents the proposed CEC API. This API is not yet finalized and - is currently only available as a staging kernel module. - - - All cec devices must support the CEC_ADAP_G_CAPS - ioctl. To query device information, applications call the ioctl with a - pointer to a &cec-caps;. The driver fills the structure and returns - the information to the application. - The ioctl never fails. - - - struct <structname>cec_caps</structname> - - &cs-str; - - - char - driver[32] - The name of the cec adapter driver. - - - char - name[32] - The name of this CEC adapter. The combination driver - and name must be unique. - - - __u32 - capabilities - The capabilities of the CEC adapter, see . - - - __u32 - version - CEC Framework API version, formatted with the - KERNEL_VERSION() macro. - - - -
- - - CEC Capabilities Flags - - &cs-def; - - - CEC_CAP_PHYS_ADDR - 0x00000001 - Userspace has to configure the physical address by - calling &CEC-ADAP-S-PHYS-ADDR;. If this capability isn't set, - then setting the physical address is handled by the kernel - whenever the EDID is set (for an HDMI receiver) or read (for - an HDMI transmitter). - - - CEC_CAP_LOG_ADDRS - 0x00000002 - Userspace has to configure the logical addresses by - calling &CEC-ADAP-S-LOG-ADDRS;. If this capability isn't set, - then the kernel will have configured this. - - - CEC_CAP_TRANSMIT - 0x00000004 - Userspace can transmit CEC messages by calling &CEC-TRANSMIT;. This - implies that userspace can be a follower as well, since being able to - transmit messages is a prerequisite of becoming a follower. If this - capability isn't set, then the kernel will handle all CEC transmits - and process all CEC messages it receives. - - - - CEC_CAP_PASSTHROUGH - 0x00000008 - Userspace can use the passthrough mode by - calling &CEC-S-MODE;. - - - CEC_CAP_RC - 0x00000010 - This adapter supports the remote control protocol. - - - CEC_CAP_MONITOR_ALL - 0x00000020 - The CEC hardware can monitor all messages, not just directed and - broadcast messages. - - - -
-
- - - &return-value; - -
diff --git a/Documentation/DocBook/media/v4l/cec-ioc-adap-g-log-addrs.xml b/Documentation/DocBook/media/v4l/cec-ioc-adap-g-log-addrs.xml deleted file mode 100644 index 302b8294f7fc..000000000000 --- a/Documentation/DocBook/media/v4l/cec-ioc-adap-g-log-addrs.xml +++ /dev/null @@ -1,329 +0,0 @@ - - - ioctl CEC_ADAP_G_LOG_ADDRS, CEC_ADAP_S_LOG_ADDRS - &manvol; - - - - CEC_ADAP_G_LOG_ADDRS - CEC_ADAP_S_LOG_ADDRS - Get or set the logical addresses - - - - - - int ioctl - int fd - int request - struct cec_log_addrs *argp - - - - - - Arguments - - - - fd - - File descriptor returned by - open(). - - - - request - - CEC_ADAP_G_LOG_ADDRS, CEC_ADAP_S_LOG_ADDRS - - - - argp - - - - - - - - - Description - - - Note: this documents the proposed CEC API. This API is not yet finalized and - is currently only available as a staging kernel module. - - - To query the current CEC logical addresses, applications call the -CEC_ADAP_G_LOG_ADDRS ioctl with a pointer to a -cec_log_addrs structure where the drivers stores the -logical addresses. - - To set new logical addresses, applications fill in struct cec_log_addrs -and call the CEC_ADAP_S_LOG_ADDRS ioctl with a pointer to this struct. -The CEC_ADAP_S_LOG_ADDRS ioctl is only available if -CEC_CAP_LOG_ADDRS is set (&ENOTTY; is returned otherwise). This ioctl will block until all -requested logical addresses have been claimed. CEC_ADAP_S_LOG_ADDRS -can only be called by a file handle in initiator mode (see &CEC-S-MODE;). - - - struct <structname>cec_log_addrs</structname> - - &cs-str; - - - __u8 - log_addr[CEC_MAX_LOG_ADDRS] - The actual logical addresses that were claimed. This is set by the - driver. If no logical address could be claimed, then it is set to - CEC_LOG_ADDR_INVALID. If this adapter is Unregistered, - then log_addr[0] is set to 0xf and all others to - CEC_LOG_ADDR_INVALID. - - - __u16 - log_addr_mask - The bitmask of all logical addresses this adapter has claimed. - If this adapter is Unregistered then log_addr_mask - sets bit 15 and clears all other bits. If this adapter is not configured at all, then - log_addr_mask is set to 0. Set by the driver. - - - __u8 - cec_version - The CEC version that this adapter shall use. See - . - Used to implement the CEC_MSG_CEC_VERSION and - CEC_MSG_REPORT_FEATURES messages. Note that - CEC_OP_CEC_VERSION_1_3A is not allowed - by the CEC framework. - - - - __u8 - num_log_addrs - Number of logical addresses to set up. Must be ≤ - available_log_addrs as returned by - &CEC-ADAP-G-CAPS;. All arrays in this structure are only filled up to - index available_log_addrs-1. The remaining - array elements will be ignored. Note that the CEC 2.0 standard allows - for a maximum of 2 logical addresses, although some hardware has support - for more. CEC_MAX_LOG_ADDRS is 4. The driver will - return the actual number of logical addresses it could claim, which may - be less than what was requested. If this field is set to 0, then the - CEC adapter shall clear all claimed logical addresses and all other - fields will be ignored. - - - __u32 - vendor_id - The vendor ID is a 24-bit number that identifies the specific - vendor or entity. Based on this ID vendor specific commands may be - defined. If you do not want a vendor ID then set it to - CEC_VENDOR_ID_NONE. - - - __u32 - flags - Flags. No flags are defined yet, so set this to 0. - - - char - osd_name[15] - The On-Screen Display name as is returned by the - CEC_MSG_SET_OSD_NAME message. - - - __u8 - primary_device_type[CEC_MAX_LOG_ADDRS] - Primary device type for each logical address. See - for possible types. - - - __u8 - log_addr_type[CEC_MAX_LOG_ADDRS] - Logical address types. See for - possible types. The driver will update this with the actual logical address - type that it claimed (e.g. it may have to fallback to - CEC_LOG_ADDR_TYPE_UNREGISTERED). - - - __u8 - all_device_types[CEC_MAX_LOG_ADDRS] - CEC 2.0 specific: all device types. See . - Used to implement the CEC_MSG_REPORT_FEATURES message. - This field is ignored if cec_version < - CEC_OP_CEC_VERSION_2_0. - - - __u8 - features[CEC_MAX_LOG_ADDRS][12] - Features for each logical address. Used to implement the - CEC_MSG_REPORT_FEATURES message. The 12 bytes include - both the RC Profile and the Device Features. - This field is ignored if cec_version < - CEC_OP_CEC_VERSION_2_0. - - - -
- - - CEC Versions - - &cs-def; - - - CEC_OP_CEC_VERSION_1_3A - 4 - CEC version according to the HDMI 1.3a standard. - - - CEC_OP_CEC_VERSION_1_4B - 5 - CEC version according to the HDMI 1.4b standard. - - - CEC_OP_CEC_VERSION_2_0 - 6 - CEC version according to the HDMI 2.0 standard. - - - -
- - - CEC Primary Device Types - - &cs-def; - - - CEC_OP_PRIM_DEVTYPE_TV - 0 - Use for a TV. - - - CEC_OP_PRIM_DEVTYPE_RECORD - 1 - Use for a recording device. - - - CEC_OP_PRIM_DEVTYPE_TUNER - 3 - Use for a device with a tuner. - - - CEC_OP_PRIM_DEVTYPE_PLAYBACK - 4 - Use for a playback device. - - - CEC_OP_PRIM_DEVTYPE_AUDIOSYSTEM - 5 - Use for an audio system (e.g. an audio/video receiver). - - - CEC_OP_PRIM_DEVTYPE_SWITCH - 6 - Use for a CEC switch. - - - CEC_OP_PRIM_DEVTYPE_VIDEOPROC - 7 - Use for a video processor device. - - - -
- - - CEC Logical Address Types - - &cs-def; - - - CEC_LOG_ADDR_TYPE_TV - 0 - Use for a TV. - - - CEC_LOG_ADDR_TYPE_RECORD - 1 - Use for a recording device. - - - CEC_LOG_ADDR_TYPE_TUNER - 2 - Use for a tuner device. - - - CEC_LOG_ADDR_TYPE_PLAYBACK - 3 - Use for a playback device. - - - CEC_LOG_ADDR_TYPE_AUDIOSYSTEM - 4 - Use for an audio system device. - - - CEC_LOG_ADDR_TYPE_SPECIFIC - 5 - Use for a second TV or for a video processor device. - - - CEC_LOG_ADDR_TYPE_UNREGISTERED - 6 - Use this if you just want to remain unregistered. - Used for pure CEC switches or CDC-only devices (CDC: - Capability Discovery and Control). - - - -
- - - CEC All Device Types Flags - - &cs-def; - - - CEC_OP_ALL_DEVTYPE_TV - 0x80 - This supports the TV type. - - - CEC_OP_ALL_DEVTYPE_RECORD - 0x40 - This supports the Recording type. - - - CEC_OP_ALL_DEVTYPE_TUNER - 0x20 - This supports the Tuner type. - - - CEC_OP_ALL_DEVTYPE_PLAYBACK - 0x10 - This supports the Playback type. - - - CEC_OP_ALL_DEVTYPE_AUDIOSYSTEM - 0x08 - This supports the Audio System type. - - - CEC_OP_ALL_DEVTYPE_SWITCH - 0x04 - This supports the CEC Switch or Video Processing type. - - - -
-
- - - &return-value; - -
diff --git a/Documentation/DocBook/media/v4l/cec-ioc-adap-g-phys-addr.xml b/Documentation/DocBook/media/v4l/cec-ioc-adap-g-phys-addr.xml deleted file mode 100644 index d95f1785080c..000000000000 --- a/Documentation/DocBook/media/v4l/cec-ioc-adap-g-phys-addr.xml +++ /dev/null @@ -1,86 +0,0 @@ - - - ioctl CEC_ADAP_G_PHYS_ADDR, CEC_ADAP_S_PHYS_ADDR - &manvol; - - - - CEC_ADAP_G_PHYS_ADDR - CEC_ADAP_S_PHYS_ADDR - Get or set the physical address - - - - - - int ioctl - int fd - int request - __u16 *argp - - - - - - Arguments - - - - fd - - File descriptor returned by - open(). - - - - request - - CEC_ADAP_G_PHYS_ADDR, CEC_ADAP_S_PHYS_ADDR - - - - argp - - - - - - - - - Description - - - Note: this documents the proposed CEC API. This API is not yet finalized and - is currently only available as a staging kernel module. - - - To query the current physical address applications call the -CEC_ADAP_G_PHYS_ADDR ioctl with a pointer to an __u16 -where the driver stores the physical address. - - To set a new physical address applications store the physical address in -an __u16 and call the CEC_ADAP_S_PHYS_ADDR ioctl with a -pointer to this integer. CEC_ADAP_S_PHYS_ADDR is only -available if CEC_CAP_PHYS_ADDR is set (&ENOTTY; will be returned -otherwise). CEC_ADAP_S_PHYS_ADDR -can only be called by a file handle in initiator mode (see &CEC-S-MODE;), if not -&EBUSY; will be returned. - - The physical address is a 16-bit number where each group of 4 bits -represent a digit of the physical address a.b.c.d where the most significant -4 bits represent 'a'. The CEC root device (usually the TV) has address 0.0.0.0. -Every device that is hooked up to an input of the TV has address a.0.0.0 (where -'a' is ≥ 1), devices hooked up to those in turn have addresses a.b.0.0, etc. -So a topology of up to 5 devices deep is supported. The physical address a -device shall use is stored in the EDID of the sink. - -For example, the EDID for each HDMI input of the TV will have a different -physical address of the form a.0.0.0 that the sources will read out and use as -their physical address. - - - - &return-value; - - diff --git a/Documentation/DocBook/media/v4l/cec-ioc-dqevent.xml b/Documentation/DocBook/media/v4l/cec-ioc-dqevent.xml deleted file mode 100644 index 697dde575cd4..000000000000 --- a/Documentation/DocBook/media/v4l/cec-ioc-dqevent.xml +++ /dev/null @@ -1,202 +0,0 @@ - - - ioctl CEC_DQEVENT - &manvol; - - - - CEC_DQEVENT - Dequeue a CEC event - - - - - - int ioctl - int fd - int request - struct cec_event *argp - - - - - - Arguments - - - - fd - - File descriptor returned by - open(). - - - - request - - CEC_DQEVENT - - - - argp - - - - - - - - - Description - - - Note: this documents the proposed CEC API. This API is not yet finalized and - is currently only available as a staging kernel module. - - - CEC devices can send asynchronous events. These can be retrieved by calling - the CEC_DQEVENT ioctl. If the file descriptor is in non-blocking - mode and no event is pending, then it will return -1 and set errno to the &EAGAIN;. - - The internal event queues are per-filehandle and per-event type. If there is - no more room in a queue then the last event is overwritten with the new one. This - means that intermediate results can be thrown away but that the latest event is always - available. This also means that is it possible to read two successive events that have - the same value (e.g. two CEC_EVENT_STATE_CHANGE events with the same state). In that - case the intermediate state changes were lost but it is guaranteed that the state - did change in between the two events. - - - struct <structname>cec_event_state_change</structname> - - &cs-str; - - - __u16 - phys_addr - The current physical address. - - - __u16 - log_addr_mask - The current set of claimed logical addresses. - - - -
- - - struct <structname>cec_event_lost_msgs</structname> - - &cs-str; - - - __u32 - lost_msgs - Set to the number of lost messages since the filehandle - was opened or since the last time this event was dequeued for - this filehandle. The messages lost are the oldest messages. So - when a new message arrives and there is no more room, then the - oldest message is discarded to make room for the new one. The - internal size of the message queue guarantees that all messages - received in the last two seconds will be stored. Since messages - should be replied to within a second according to the CEC - specification, this is more than enough. - - - - -
- - - struct <structname>cec_event</structname> - - &cs-str; - - - __u64 - ts - Timestamp of the event in ns. - - - - __u32 - event - The CEC event type, see . - - - - __u32 - flags - Event flags, see . - - - - union - (anonymous) - - - - - - struct cec_event_state_change - state_change - The new adapter state as sent by the CEC_EVENT_STATE_CHANGE - event. - - - - struct cec_event_lost_msgs - lost_msgs - The number of lost messages as sent by the CEC_EVENT_LOST_MSGS - event. - - - -
- - - CEC Events Types - - &cs-def; - - - CEC_EVENT_STATE_CHANGE - 1 - Generated when the CEC Adapter's state changes. When open() is - called an initial event will be generated for that filehandle with the - CEC Adapter's state at that time. - - - - CEC_EVENT_LOST_MSGS - 2 - Generated if one or more CEC messages were lost because the - application didn't dequeue CEC messages fast enough. - - - -
- - - CEC Event Flags - - &cs-def; - - - CEC_EVENT_FL_INITIAL_VALUE - 1 - Set for the initial events that are generated when the device is - opened. See the table above for which events do this. This allows - applications to learn the initial state of the CEC adapter at open() - time. - - - -
-
- - - &return-value; - -
diff --git a/Documentation/DocBook/media/v4l/cec-ioc-g-mode.xml b/Documentation/DocBook/media/v4l/cec-ioc-g-mode.xml deleted file mode 100644 index 26b4282ad134..000000000000 --- a/Documentation/DocBook/media/v4l/cec-ioc-g-mode.xml +++ /dev/null @@ -1,255 +0,0 @@ - - - ioctl CEC_G_MODE, CEC_S_MODE - &manvol; - - - - CEC_G_MODE - CEC_S_MODE - Get or set exclusive use of the CEC adapter - - - - - - int ioctl - int fd - int request - __u32 *argp - - - - - - Arguments - - - - fd - - File descriptor returned by - open(). - - - - request - - CEC_G_MODE, CEC_S_MODE - - - - argp - - - - - - - - - Description - - - Note: this documents the proposed CEC API. This API is not yet finalized and - is currently only available as a staging kernel module. - - - By default any filehandle can use &CEC-TRANSMIT; and &CEC-RECEIVE;, but -in order to prevent applications from stepping on each others toes it must be possible -to obtain exclusive access to the CEC adapter. This ioctl sets the filehandle -to initiator and/or follower mode which can be exclusive depending on the chosen -mode. The initiator is the filehandle that is used -to initiate messages, i.e. it commands other CEC devices. The follower is the filehandle -that receives messages sent to the CEC adapter and processes them. The same filehandle -can be both initiator and follower, or this role can be taken by two different -filehandles. - - When a CEC message is received, then the CEC framework will decide how -it will be processed. If the message is a reply to an earlier transmitted message, -then the reply is sent back to the filehandle that is waiting for it. In addition -the CEC framework will process it. - - If the message is not a reply, then the CEC framework will process it -first. If there is no follower, then the message is just discarded and a feature -abort is sent back to the initiator if the framework couldn't process it. If there -is a follower, then the message is passed on to the follower who will use -&CEC-RECEIVE; to dequeue the new message. The framework expects the follower to -make the right decisions. - - The CEC framework will process core messages unless requested otherwise -by the follower. The follower can enable the passthrough mode. In that case, the -CEC framework will pass on most core messages without processing them and -the follower will have to implement those messages. There are some messages -that the core will always process, regardless of the passthrough mode. See - for details. - - If there is no initiator, then any CEC filehandle can use &CEC-TRANSMIT;. -If there is an exclusive initiator then only that initiator can call &CEC-TRANSMIT;. -The follower can of course always call &CEC-TRANSMIT;. - - Available initiator modes are: - - - Initiator Modes - - &cs-def; - - - CEC_MODE_NO_INITIATOR - 0x0 - This is not an initiator, i.e. it cannot transmit CEC messages - or make any other changes to the CEC adapter. - - - CEC_MODE_INITIATOR - 0x1 - This is an initiator (the default when the device is opened) and it - can transmit CEC messages and make changes to the CEC adapter, unless there - is an exclusive initiator. - - - CEC_MODE_EXCL_INITIATOR - 0x2 - This is an exclusive initiator and this file descriptor is the only one - that can transmit CEC messages and make changes to the CEC adapter. If someone - else is already the exclusive initiator then an attempt to become one will return - the &EBUSY; error. - - - -
- - Available follower modes are: - - - Follower Modes - - &cs-def; - - - CEC_MODE_NO_FOLLOWER - 0x00 - This is not a follower (the default when the device is opened). - - - CEC_MODE_FOLLOWER - 0x10 - This is a follower and it will receive CEC messages unless there is - an exclusive follower. You cannot become a follower if CEC_CAP_TRANSMIT - is not set or if CEC_MODE_NO_INITIATOR was specified, - &EINVAL; is returned in that case. - - - CEC_MODE_EXCL_FOLLOWER - 0x20 - This is an exclusive follower and only this file descriptor will receive - CEC messages for processing. If someone else is already the exclusive follower - then an attempt to become one will return the &EBUSY; error. You cannot become - a follower if CEC_CAP_TRANSMIT is not set or if - CEC_MODE_NO_INITIATOR was specified, &EINVAL; is returned - in that case. - - - CEC_MODE_EXCL_FOLLOWER_PASSTHRU - 0x30 - This is an exclusive follower and only this file descriptor will receive - CEC messages for processing. In addition it will put the CEC device into - passthrough mode, allowing the exclusive follower to handle most core messages - instead of relying on the CEC framework for that. If someone else is already the - exclusive follower then an attempt to become one will return the &EBUSY; error. - You cannot become a follower if CEC_CAP_TRANSMIT - is not set or if CEC_MODE_NO_INITIATOR was specified, - &EINVAL; is returned in that case. - - - CEC_MODE_MONITOR - 0xe0 - Put the file descriptor into monitor mode. Can only be used in combination - with CEC_MODE_NO_INITIATOR, otherwise &EINVAL; will be - returned. In monitor mode all messages this CEC device transmits and all messages - it receives (both broadcast messages and directed messages for one its logical - addresses) will be reported. This is very useful for debugging. This is only - allowed if the process has the CAP_NET_ADMIN - capability. If that is not set, then &EPERM; is returned. - - - CEC_MODE_MONITOR_ALL - 0xf0 - Put the file descriptor into 'monitor all' mode. Can only be used in combination - with CEC_MODE_NO_INITIATOR, otherwise &EINVAL; will be - returned. In 'monitor all' mode all messages this CEC device transmits and all messages - it receives, including directed messages for other CEC devices will be reported. This - is very useful for debugging, but not all devices support this. This mode requires that - the CEC_CAP_MONITOR_ALL capability is set, otherwise &EINVAL; is - returned. This is only allowed if the process has the CAP_NET_ADMIN - capability. If that is not set, then &EPERM; is returned. - - - -
- - Core message processing details: - - - Core Message Processing - - &cs-def; - - - CEC_MSG_GET_CEC_VERSION - When in passthrough mode this message has to be handled by userspace, - otherwise the core will return the CEC version that was set with &CEC-ADAP-S-LOG-ADDRS;. - - - CEC_MSG_GIVE_DEVICE_VENDOR_ID - When in passthrough mode this message has to be handled by userspace, - otherwise the core will return the vendor ID that was set with &CEC-ADAP-S-LOG-ADDRS;. - - - CEC_MSG_ABORT - When in passthrough mode this message has to be handled by userspace, - otherwise the core will return a feature refused message as per the specification. - - - CEC_MSG_GIVE_PHYSICAL_ADDR - When in passthrough mode this message has to be handled by userspace, - otherwise the core will report the current physical address. - - - CEC_MSG_GIVE_OSD_NAME - When in passthrough mode this message has to be handled by userspace, - otherwise the core will report the current OSD name as was set with - &CEC-ADAP-S-LOG-ADDRS;. - - - CEC_MSG_GIVE_FEATURES - When in passthrough mode this message has to be handled by userspace, - otherwise the core will report the current features as was set with - &CEC-ADAP-S-LOG-ADDRS; or the message is ignore if the CEC version was - older than 2.0. - - - CEC_MSG_USER_CONTROL_PRESSED - If CEC_CAP_RC is set, then generate a remote control - key press. This message is always passed on to userspace. - - - CEC_MSG_USER_CONTROL_RELEASED - If CEC_CAP_RC is set, then generate a remote control - key release. This message is always passed on to userspace. - - - CEC_MSG_REPORT_PHYSICAL_ADDR - The CEC framework will make note of the reported physical address - and then just pass the message on to userspace. - - - -
-
- - - &return-value; - -
diff --git a/Documentation/DocBook/media/v4l/cec-ioc-receive.xml b/Documentation/DocBook/media/v4l/cec-ioc-receive.xml deleted file mode 100644 index fde9f8678e67..000000000000 --- a/Documentation/DocBook/media/v4l/cec-ioc-receive.xml +++ /dev/null @@ -1,274 +0,0 @@ - - - ioctl CEC_RECEIVE, CEC_TRANSMIT - &manvol; - - - - CEC_RECEIVE - CEC_TRANSMIT - Receive or transmit a CEC message - - - - - - int ioctl - int fd - int request - struct cec_msg *argp - - - - - - Arguments - - - - fd - - File descriptor returned by - open(). - - - - request - - CEC_RECEIVE, CEC_TRANSMIT - - - - argp - - - - - - - - - Description - - - Note: this documents the proposed CEC API. This API is not yet finalized and - is currently only available as a staging kernel module. - - - To receive a CEC message the application has to fill in the - cec_msg structure and pass it to the - CEC_RECEIVE ioctl. CEC_RECEIVE is - only available if CEC_CAP_RECEIVE is set. If the - file descriptor is in non-blocking mode and there are no received - messages pending, then it will return -1 and set errno to the &EAGAIN;. - If the file descriptor is in blocking mode and timeout - is non-zero and no message arrived within timeout - milliseconds, then it will return -1 and set errno to the &ETIMEDOUT;. - - To send a CEC message the application has to fill in the - cec_msg structure and pass it to the - CEC_TRANSMIT ioctl. CEC_TRANSMIT is - only available if CEC_CAP_TRANSMIT is set. - If there is no more room in the transmit queue, then it will return - -1 and set errno to the &EBUSY;. - - - struct <structname>cec_msg</structname> - - &cs-str; - - - __u64 - ts - Timestamp of when the message was transmitted in ns in the case - of CEC_TRANSMIT with reply - set to 0, or the timestamp of the received message in all other cases. - - - __u32 - len - The length of the message. For CEC_TRANSMIT this - is filled in by the application. The driver will fill this in for - CEC_RECEIVE and for CEC_TRANSMIT - it will be filled in with the length of the reply message if - reply was set. - - - __u32 - timeout - The timeout in milliseconds. This is the time the device will wait for a message to - be received before timing out. If it is set to 0, then it will wait indefinitely when it - is called by CEC_RECEIVE. If it is 0 and it is called by - CEC_TRANSMIT, then it will be replaced by 1000 if the - reply is non-zero or ignored if reply - is 0. - - - __u32 - sequence - The sequence number is automatically assigned by the CEC - framework for all transmitted messages. It can be later used by the - framework to generate an event if a reply for a message was - requested and the message was transmitted in a non-blocking mode. - - - - __u32 - flags - Flags. No flags are defined yet, so set this to 0. - - - __u8 - rx_status - The status bits of the received message. See - for the possible status values. It is 0 if this message was transmitted, not - received, unless this is the reply to a transmitted message. In that case both - rx_status and tx_status - are set. - - - __u8 - tx_status - The status bits of the transmitted message. See - for the possible status values. It is 0 if this messages was received, not - transmitted. - - - __u8 - msg[16] - The message payload. For CEC_TRANSMIT this - is filled in by the application. The driver will fill this in for - CEC_RECEIVE and for CEC_TRANSMIT - it will be filled in with the payload of the reply message if - reply was set. - - - __u8 - reply - Wait until this message is replied. If reply - is 0 and the timeout is 0, then don't wait for a reply but - return after transmitting the message. If there was an error as indicated by a non-zero - tx_status field, then reply and - timeout are both set to 0 by the driver. Ignored by - CEC_RECEIVE. The case where reply is 0 - (this is the opcode for the Feature Abort message) and timeout - is non-zero is specifically allowed to send a message and wait up to timeout - milliseconds for a Feature Abort reply. In this case rx_status - will either be set to CEC_RX_STATUS_TIMEOUT or - CEC_RX_STATUS_FEATURE_ABORT. - - - __u8 - tx_arb_lost_cnt - A counter of the number of transmit attempts that resulted in the - Arbitration Lost error. This is only set if the hardware supports this, otherwise - it is always 0. This counter is only valid if the CEC_TX_STATUS_ARB_LOST - status bit is set. - - - __u8 - tx_nack_cnt - A counter of the number of transmit attempts that resulted in the - Not Acknowledged error. This is only set if the hardware supports this, otherwise - it is always 0. This counter is only valid if the CEC_TX_STATUS_NACK - status bit is set. - - - __u8 - tx_low_drive_cnt - A counter of the number of transmit attempts that resulted in the - Arbitration Lost error. This is only set if the hardware supports this, otherwise - it is always 0. This counter is only valid if the CEC_TX_STATUS_LOW_DRIVE - status bit is set. - - - __u8 - tx_error_cnt - A counter of the number of transmit errors other than Arbitration Lost - or Not Acknowledged. This is only set if the hardware supports this, otherwise - it is always 0. This counter is only valid if the CEC_TX_STATUS_ERROR - status bit is set. - - - -
- - - CEC Transmit Status - - &cs-def; - - - CEC_TX_STATUS_OK - 0x01 - The message was transmitted successfully. This is mutually exclusive with - CEC_TX_STATUS_MAX_RETRIES. Other bits can still be set if - earlier attempts met with failure before the transmit was eventually successful. - - - CEC_TX_STATUS_ARB_LOST - 0x02 - CEC line arbitration was lost. - - - CEC_TX_STATUS_NACK - 0x04 - Message was not acknowledged. - - - CEC_TX_STATUS_LOW_DRIVE - 0x08 - Low drive was detected on the CEC bus. This indicates that a follower - detected an error on the bus and requests a retransmission. - - - CEC_TX_STATUS_ERROR - 0x10 - Some error occurred. This is used for any errors that do not - fit the previous two, either because the hardware could not tell - which error occurred, or because the hardware tested for other conditions - besides those two. - - - CEC_TX_STATUS_MAX_RETRIES - 0x20 - The transmit failed after one or more retries. This status bit is mutually - exclusive with CEC_TX_STATUS_OK. Other bits can still be set - to explain which failures were seen. - - - -
- - - CEC Receive Status - - &cs-def; - - - CEC_RX_STATUS_OK - 0x01 - The message was received successfully. - - - CEC_RX_STATUS_TIMEOUT - 0x02 - The reply to an earlier transmitted message timed out. - - - CEC_RX_STATUS_FEATURE_ABORT - 0x04 - The message was received successfully but the reply was - CEC_MSG_FEATURE_ABORT. This status is only - set if this message was the reply to an earlier transmitted - message. - - - -
-
- - - &return-value; - -
diff --git a/Documentation/DocBook/media/v4l/common.xml b/Documentation/DocBook/media/v4l/common.xml deleted file mode 100644 index 8b5e014224d6..000000000000 --- a/Documentation/DocBook/media/v4l/common.xml +++ /dev/null @@ -1,1102 +0,0 @@ - Common API Elements - - Programming a V4L2 device consists of these -steps: - - - - Opening the device - - - Changing device properties, selecting a video and audio -input, video standard, picture brightness a. o. - - - Negotiating a data format - - - Negotiating an input/output method - - - The actual input/output loop - - - Closing the device - - - - In practice most steps are optional and can be executed out of -order. It depends on the V4L2 device type, you can read about the -details in . In this chapter we will discuss -the basic concepts applicable to all devices. - -
- Opening and Closing Devices - -
- Device Naming - - V4L2 drivers are implemented as kernel modules, loaded -manually by the system administrator or automatically when a device is -first discovered. The driver modules plug into the "videodev" kernel -module. It provides helper functions and a common application -interface specified in this document. - - Each driver thus loaded registers one or more device nodes -with major number 81 and a minor number between 0 and 255. Minor numbers -are allocated dynamically unless the kernel is compiled with the kernel -option CONFIG_VIDEO_FIXED_MINOR_RANGES. In that case minor numbers are -allocated in ranges depending on the device node type (video, radio, etc.). - - Many drivers support "video_nr", "radio_nr" or "vbi_nr" -module options to select specific video/radio/vbi node numbers. This allows -the user to request that the device node is named e.g. /dev/video5 instead -of leaving it to chance. When the driver supports multiple devices of the same -type more than one device node number can be assigned, separated by commas: - - -> modprobe mydriver video_nr=0,1 radio_nr=0,1 - - - In /etc/modules.conf this may be -written as: - -options mydriver video_nr=0,1 radio_nr=0,1 - - When no device node number is given as module -option the driver supplies a default. - - Normally udev will create the device nodes in /dev automatically -for you. If udev is not installed, then you need to enable the -CONFIG_VIDEO_FIXED_MINOR_RANGES kernel option in order to be able to correctly -relate a minor number to a device node number. I.e., you need to be certain -that minor number 5 maps to device node name video5. With this kernel option -different device types have different minor number ranges. These ranges are -listed in . - - - The creation of character special files (with -mknod) is a privileged operation and -devices cannot be opened by major and minor number. That means -applications cannot reliable scan for loaded or -installed drivers. The user must enter a device name, or the -application can try the conventional device names. -
- - - -
- Multiple Opens - - V4L2 devices can be opened more than once. -There are still some old and obscure drivers that have not been updated to -allow for multiple opens. This implies that for such drivers &func-open; can -return an &EBUSY; when the device is already in use. -When this is supported by the driver, users can for example start a -"panel" application to change controls like brightness or audio -volume, while another application captures video and audio. In other words, panel -applications are comparable to an ALSA audio mixer application. -Just opening a V4L2 device should not change the state of the device. -Unfortunately, opening a radio device often switches the state of the -device to radio mode in many drivers. This behavior should be fixed eventually -as it violates the V4L2 specification. - - Once an application has allocated the memory buffers needed for -streaming data (by calling the &VIDIOC-REQBUFS; or &VIDIOC-CREATE-BUFS; ioctls, -or implicitly by calling the &func-read; or &func-write; functions) that -application (filehandle) becomes the owner of the device. It is no longer -allowed to make changes that would affect the buffer sizes (e.g. by calling -the &VIDIOC-S-FMT; ioctl) and other applications are no longer allowed to allocate -buffers or start or stop streaming. The &EBUSY; will be returned instead. - - Merely opening a V4L2 device does not grant exclusive -access. - Drivers could recognize the -O_EXCL open flag. Presently this is not required, -so applications cannot know if it really works. - Initiating data exchange however assigns the right -to read or write the requested type of data, and to change related -properties, to this file descriptor. Applications can request -additional access privileges using the priority mechanism described in -. -
- -
- Shared Data Streams - - V4L2 drivers should not support multiple applications -reading or writing the same data stream on a device by copying -buffers, time multiplexing or similar means. This is better handled by -a proxy application in user space. -
- -
- Functions - - To open and close V4L2 devices applications use the -&func-open; and &func-close; function, respectively. Devices are -programmed using the &func-ioctl; function as explained in the -following sections. -
-
- -
- Querying Capabilities - - Because V4L2 covers a wide variety of devices not all -aspects of the API are equally applicable to all types of devices. -Furthermore devices of the same type have different capabilities and -this specification permits the omission of a few complicated and less -important parts of the API. - - The &VIDIOC-QUERYCAP; ioctl is available to check if the kernel -device is compatible with this specification, and to query the functions and I/O -methods supported by the device. - - Starting with kernel version 3.1, VIDIOC-QUERYCAP will return the -V4L2 API version used by the driver, with generally matches the Kernel version. -There's no need of using &VIDIOC-QUERYCAP; to check if a specific ioctl is -supported, the V4L2 core now returns ENOTTY if a driver doesn't provide -support for an ioctl. - - Other features can be queried -by calling the respective ioctl, for example &VIDIOC-ENUMINPUT; -to learn about the number, types and names of video connectors on the -device. Although abstraction is a major objective of this API, the -&VIDIOC-QUERYCAP; ioctl also allows driver specific applications to reliably identify -the driver. - - All V4L2 drivers must support -VIDIOC_QUERYCAP. Applications should always call -this ioctl after opening the device. -
- -
- Application Priority - - When multiple applications share a device it may be -desirable to assign them different priorities. Contrary to the -traditional "rm -rf /" school of thought a video recording application -could for example block other applications from changing video -controls or switching the current TV channel. Another objective is to -permit low priority applications working in background, which can be -preempted by user controlled applications and automatically regain -control of the device at a later time. - - Since these features cannot be implemented entirely in user -space V4L2 defines the &VIDIOC-G-PRIORITY; and &VIDIOC-S-PRIORITY; -ioctls to request and query the access priority associate with a file -descriptor. Opening a device assigns a medium priority, compatible -with earlier versions of V4L2 and drivers not supporting these ioctls. -Applications requiring a different priority will usually call -VIDIOC_S_PRIORITY after verifying the device with -the &VIDIOC-QUERYCAP; ioctl. - - Ioctls changing driver properties, such as &VIDIOC-S-INPUT;, -return an &EBUSY; after another application obtained higher priority. -
- -
- Video Inputs and Outputs - - Video inputs and outputs are physical connectors of a -device. These can be for example RF connectors (antenna/cable), CVBS -a.k.a. Composite Video, S-Video or RGB connectors. Video and VBI -capture devices have inputs. Video and VBI output devices have outputs, -at least one each. Radio devices have no video inputs or outputs. - - To learn about the number and attributes of the -available inputs and outputs applications can enumerate them with the -&VIDIOC-ENUMINPUT; and &VIDIOC-ENUMOUTPUT; ioctl, respectively. The -&v4l2-input; returned by the VIDIOC_ENUMINPUT -ioctl also contains signal status information applicable when the -current video input is queried. - - The &VIDIOC-G-INPUT; and &VIDIOC-G-OUTPUT; ioctls return the -index of the current video input or output. To select a different -input or output applications call the &VIDIOC-S-INPUT; and -&VIDIOC-S-OUTPUT; ioctls. Drivers must implement all the input ioctls -when the device has one or more inputs, all the output ioctls when the -device has one or more outputs. - - - Information about the current video input - - -&v4l2-input; input; -int index; - -if (-1 == ioctl(fd, &VIDIOC-G-INPUT;, &index)) { - perror("VIDIOC_G_INPUT"); - exit(EXIT_FAILURE); -} - -memset(&input, 0, sizeof(input)); -input.index = index; - -if (-1 == ioctl(fd, &VIDIOC-ENUMINPUT;, &input)) { - perror("VIDIOC_ENUMINPUT"); - exit(EXIT_FAILURE); -} - -printf("Current input: %s\n", input.name); - - - - - Switching to the first video input - - -int index; - -index = 0; - -if (-1 == ioctl(fd, &VIDIOC-S-INPUT;, &index)) { - perror("VIDIOC_S_INPUT"); - exit(EXIT_FAILURE); -} - - -
- -
- Audio Inputs and Outputs - - Audio inputs and outputs are physical connectors of a -device. Video capture devices have inputs, output devices have -outputs, zero or more each. Radio devices have no audio inputs or -outputs. They have exactly one tuner which in fact -is an audio source, but this API associates -tuners with video inputs or outputs only, and radio devices have -none of these. - Actually &v4l2-audio; ought to have a -tuner field like &v4l2-input;, not only -making the API more consistent but also permitting radio devices with -multiple tuners. - A connector on a TV card to loop back the received -audio signal to a sound card is not considered an audio output. - - Audio and video inputs and outputs are associated. Selecting -a video source also selects an audio source. This is most evident when -the video and audio source is a tuner. Further audio connectors can -combine with more than one video input or output. Assumed two -composite video inputs and two audio inputs exist, there may be up to -four valid combinations. The relation of video and audio connectors -is defined in the audioset field of the -respective &v4l2-input; or &v4l2-output;, where each bit represents -the index number, starting at zero, of one audio input or output. - - To learn about the number and attributes of the -available inputs and outputs applications can enumerate them with the -&VIDIOC-ENUMAUDIO; and &VIDIOC-ENUMAUDOUT; ioctl, respectively. The -&v4l2-audio; returned by the VIDIOC_ENUMAUDIO ioctl -also contains signal status information applicable when the current -audio input is queried. - - The &VIDIOC-G-AUDIO; and &VIDIOC-G-AUDOUT; ioctls report -the current audio input and output, respectively. Note that, unlike -&VIDIOC-G-INPUT; and &VIDIOC-G-OUTPUT; these ioctls return a structure -as VIDIOC_ENUMAUDIO and -VIDIOC_ENUMAUDOUT do, not just an index. - - To select an audio input and change its properties -applications call the &VIDIOC-S-AUDIO; ioctl. To select an audio -output (which presently has no changeable properties) applications -call the &VIDIOC-S-AUDOUT; ioctl. - - Drivers must implement all audio input ioctls when the device -has multiple selectable audio inputs, all audio output ioctls when the -device has multiple selectable audio outputs. When the device has any -audio inputs or outputs the driver must set the V4L2_CAP_AUDIO -flag in the &v4l2-capability; returned by the &VIDIOC-QUERYCAP; ioctl. - - - Information about the current audio input - - -&v4l2-audio; audio; - -memset(&audio, 0, sizeof(audio)); - -if (-1 == ioctl(fd, &VIDIOC-G-AUDIO;, &audio)) { - perror("VIDIOC_G_AUDIO"); - exit(EXIT_FAILURE); -} - -printf("Current input: %s\n", audio.name); - - - - - Switching to the first audio input - - -&v4l2-audio; audio; - -memset(&audio, 0, sizeof(audio)); /* clear audio.mode, audio.reserved */ - -audio.index = 0; - -if (-1 == ioctl(fd, &VIDIOC-S-AUDIO;, &audio)) { - perror("VIDIOC_S_AUDIO"); - exit(EXIT_FAILURE); -} - - -
- -
- Tuners and Modulators - -
- Tuners - - Video input devices can have one or more tuners -demodulating a RF signal. Each tuner is associated with one or more -video inputs, depending on the number of RF connectors on the tuner. -The type field of the respective -&v4l2-input; returned by the &VIDIOC-ENUMINPUT; ioctl is set to -V4L2_INPUT_TYPE_TUNER and its -tuner field contains the index number of -the tuner. - - Radio input devices have exactly one tuner with index zero, no -video inputs. - - To query and change tuner properties applications use the -&VIDIOC-G-TUNER; and &VIDIOC-S-TUNER; ioctls, respectively. The -&v4l2-tuner; returned by VIDIOC_G_TUNER also -contains signal status information applicable when the tuner of the -current video or radio input is queried. Note that -VIDIOC_S_TUNER does not switch the current tuner, -when there is more than one at all. The tuner is solely determined by -the current video input. Drivers must support both ioctls and set the -V4L2_CAP_TUNER flag in the &v4l2-capability; -returned by the &VIDIOC-QUERYCAP; ioctl when the device has one or -more tuners. -
- -
- Modulators - - Video output devices can have one or more modulators, uh, -modulating a video signal for radiation or connection to the antenna -input of a TV set or video recorder. Each modulator is associated with -one or more video outputs, depending on the number of RF connectors on -the modulator. The type field of the -respective &v4l2-output; returned by the &VIDIOC-ENUMOUTPUT; ioctl is -set to V4L2_OUTPUT_TYPE_MODULATOR and its -modulator field contains the index number -of the modulator. - - Radio output devices have exactly one modulator with index -zero, no video outputs. - - A video or radio device cannot support both a tuner and a -modulator. Two separate device nodes will have to be used for such -hardware, one that supports the tuner functionality and one that supports -the modulator functionality. The reason is a limitation with the -&VIDIOC-S-FREQUENCY; ioctl where you cannot specify whether the frequency -is for a tuner or a modulator. - - To query and change modulator properties applications use -the &VIDIOC-G-MODULATOR; and &VIDIOC-S-MODULATOR; ioctl. Note that -VIDIOC_S_MODULATOR does not switch the current -modulator, when there is more than one at all. The modulator is solely -determined by the current video output. Drivers must support both -ioctls and set the V4L2_CAP_MODULATOR flag in -the &v4l2-capability; returned by the &VIDIOC-QUERYCAP; ioctl when the -device has one or more modulators. -
- -
- Radio Frequency - - To get and set the tuner or modulator radio frequency -applications use the &VIDIOC-G-FREQUENCY; and &VIDIOC-S-FREQUENCY; -ioctl which both take a pointer to a &v4l2-frequency;. These ioctls -are used for TV and radio devices alike. Drivers must support both -ioctls when the tuner or modulator ioctls are supported, or -when the device is a radio device. -
-
- -
- Video Standards - - Video devices typically support one or more different video -standards or variations of standards. Each video input and output may -support another set of standards. This set is reported by the -std field of &v4l2-input; and -&v4l2-output; returned by the &VIDIOC-ENUMINPUT; and -&VIDIOC-ENUMOUTPUT; ioctls, respectively. - - V4L2 defines one bit for each analog video standard -currently in use worldwide, and sets aside bits for driver defined -standards, ⪚ hybrid standards to watch NTSC video tapes on PAL TVs -and vice versa. Applications can use the predefined bits to select a -particular standard, although presenting the user a menu of supported -standards is preferred. To enumerate and query the attributes of the -supported standards applications use the &VIDIOC-ENUMSTD; ioctl. - - Many of the defined standards are actually just variations -of a few major standards. The hardware may in fact not distinguish -between them, or do so internal and switch automatically. Therefore -enumerated standards also contain sets of one or more standard -bits. - - Assume a hypothetic tuner capable of demodulating B/PAL, -G/PAL and I/PAL signals. The first enumerated standard is a set of B -and G/PAL, switched automatically depending on the selected radio -frequency in UHF or VHF band. Enumeration gives a "PAL-B/G" or "PAL-I" -choice. Similar a Composite input may collapse standards, enumerating -"PAL-B/G/H/I", "NTSC-M" and "SECAM-D/K". - Some users are already confused by technical terms PAL, -NTSC and SECAM. There is no point asking them to distinguish between -B, G, D, or K when the software or hardware can do that -automatically. - - - To query and select the standard used by the current video -input or output applications call the &VIDIOC-G-STD; and -&VIDIOC-S-STD; ioctl, respectively. The received -standard can be sensed with the &VIDIOC-QUERYSTD; ioctl. Note that the -parameter of all these ioctls is a pointer to a &v4l2-std-id; type -(a standard set), not an index into the standard -enumeration. Drivers must implement all video standard ioctls -when the device has one or more video inputs or outputs. - - Special rules apply to devices such as USB cameras where the notion of video -standards makes little sense. More generally for any capture or output device -which is: - - incapable of capturing fields or frames at the nominal -rate of the video standard, or - - - that does not support the video standard formats at all. - - Here the driver shall set the -std field of &v4l2-input; and &v4l2-output; -to zero and the VIDIOC_G_STD, -VIDIOC_S_STD, -VIDIOC_QUERYSTD and -VIDIOC_ENUMSTD ioctls shall return the -&ENOTTY; or the &EINVAL;. - Applications can make use of the and - flags to determine whether the video standard ioctls -can be used with the given input or output. - - - Information about the current video standard - - -&v4l2-std-id; std_id; -&v4l2-standard; standard; - -if (-1 == ioctl(fd, &VIDIOC-G-STD;, &std_id)) { - /* Note when VIDIOC_ENUMSTD always returns ENOTTY this - is no video device or it falls under the USB exception, - and VIDIOC_G_STD returning ENOTTY is no error. */ - - perror("VIDIOC_G_STD"); - exit(EXIT_FAILURE); -} - -memset(&standard, 0, sizeof(standard)); -standard.index = 0; - -while (0 == ioctl(fd, &VIDIOC-ENUMSTD;, &standard)) { - if (standard.id & std_id) { - printf("Current video standard: %s\n", standard.name); - exit(EXIT_SUCCESS); - } - - standard.index++; -} - -/* EINVAL indicates the end of the enumeration, which cannot be - empty unless this device falls under the USB exception. */ - -if (errno == EINVAL || standard.index == 0) { - perror("VIDIOC_ENUMSTD"); - exit(EXIT_FAILURE); -} - - - - - Listing the video standards supported by the current -input - - -&v4l2-input; input; -&v4l2-standard; standard; - -memset(&input, 0, sizeof(input)); - -if (-1 == ioctl(fd, &VIDIOC-G-INPUT;, &input.index)) { - perror("VIDIOC_G_INPUT"); - exit(EXIT_FAILURE); -} - -if (-1 == ioctl(fd, &VIDIOC-ENUMINPUT;, &input)) { - perror("VIDIOC_ENUM_INPUT"); - exit(EXIT_FAILURE); -} - -printf("Current input %s supports:\n", input.name); - -memset(&standard, 0, sizeof(standard)); -standard.index = 0; - -while (0 == ioctl(fd, &VIDIOC-ENUMSTD;, &standard)) { - if (standard.id & input.std) - printf("%s\n", standard.name); - - standard.index++; -} - -/* EINVAL indicates the end of the enumeration, which cannot be - empty unless this device falls under the USB exception. */ - -if (errno != EINVAL || standard.index == 0) { - perror("VIDIOC_ENUMSTD"); - exit(EXIT_FAILURE); -} - - - - - Selecting a new video standard - - -&v4l2-input; input; -&v4l2-std-id; std_id; - -memset(&input, 0, sizeof(input)); - -if (-1 == ioctl(fd, &VIDIOC-G-INPUT;, &input.index)) { - perror("VIDIOC_G_INPUT"); - exit(EXIT_FAILURE); -} - -if (-1 == ioctl(fd, &VIDIOC-ENUMINPUT;, &input)) { - perror("VIDIOC_ENUM_INPUT"); - exit(EXIT_FAILURE); -} - -if (0 == (input.std & V4L2_STD_PAL_BG)) { - fprintf(stderr, "Oops. B/G PAL is not supported.\n"); - exit(EXIT_FAILURE); -} - -/* Note this is also supposed to work when only B - or G/PAL is supported. */ - -std_id = V4L2_STD_PAL_BG; - -if (-1 == ioctl(fd, &VIDIOC-S-STD;, &std_id)) { - perror("VIDIOC_S_STD"); - exit(EXIT_FAILURE); -} - - -
-
- Digital Video (DV) Timings - - The video standards discussed so far have been dealing with Analog TV and the -corresponding video timings. Today there are many more different hardware interfaces -such as High Definition TV interfaces (HDMI), VGA, DVI connectors etc., that carry -video signals and there is a need to extend the API to select the video timings -for these interfaces. Since it is not possible to extend the &v4l2-std-id; due to -the limited bits available, a new set of ioctls was added to set/get video timings at -the input and output. - - These ioctls deal with the detailed digital video timings that define -each video format. This includes parameters such as the active video width and height, -signal polarities, frontporches, backporches, sync widths etc. The linux/v4l2-dv-timings.h -header can be used to get the timings of the formats in the and - standards. - - - To enumerate and query the attributes of the DV timings supported by a device - applications use the &VIDIOC-ENUM-DV-TIMINGS; and &VIDIOC-DV-TIMINGS-CAP; ioctls. - To set DV timings for the device applications use the -&VIDIOC-S-DV-TIMINGS; ioctl and to get current DV timings they use the -&VIDIOC-G-DV-TIMINGS; ioctl. To detect the DV timings as seen by the video receiver applications -use the &VIDIOC-QUERY-DV-TIMINGS; ioctl. - Applications can make use of the and - flags to determine whether the digital video ioctls -can be used with the given input or output. -
- - &sub-controls; - -
- Data Formats - -
- Data Format Negotiation - - Different devices exchange different kinds of data with -applications, for example video images, raw or sliced VBI data, RDS -datagrams. Even within one kind many different formats are possible, -in particular an abundance of image formats. Although drivers must -provide a default and the selection persists across closing and -reopening a device, applications should always negotiate a data format -before engaging in data exchange. Negotiation means the application -asks for a particular format and the driver selects and reports the -best the hardware can do to satisfy the request. Of course -applications can also just query the current selection. - - A single mechanism exists to negotiate all data formats -using the aggregate &v4l2-format; and the &VIDIOC-G-FMT; and -&VIDIOC-S-FMT; ioctls. Additionally the &VIDIOC-TRY-FMT; ioctl can be -used to examine what the hardware could do, -without actually selecting a new data format. The data formats -supported by the V4L2 API are covered in the respective device section -in . For a closer look at image formats see -. - - The VIDIOC_S_FMT ioctl is a major -turning-point in the initialization sequence. Prior to this point -multiple panel applications can access the same device concurrently to -select the current input, change controls or modify other properties. -The first VIDIOC_S_FMT assigns a logical stream -(video data, VBI data etc.) exclusively to one file descriptor. - - Exclusive means no other application, more precisely no -other file descriptor, can grab this stream or change device -properties inconsistent with the negotiated parameters. A video -standard change for example, when the new standard uses a different -number of scan lines, can invalidate the selected image format. -Therefore only the file descriptor owning the stream can make -invalidating changes. Accordingly multiple file descriptors which -grabbed different logical streams prevent each other from interfering -with their settings. When for example video overlay is about to start -or already in progress, simultaneous video capturing may be restricted -to the same cropping and image size. - - When applications omit the -VIDIOC_S_FMT ioctl its locking side effects are -implied by the next step, the selection of an I/O method with the -&VIDIOC-REQBUFS; ioctl or implicit with the first &func-read; or -&func-write; call. - - Generally only one logical stream can be assigned to a -file descriptor, the exception being drivers permitting simultaneous -video capturing and overlay using the same file descriptor for -compatibility with V4L and earlier versions of V4L2. Switching the -logical stream or returning into "panel mode" is possible by closing -and reopening the device. Drivers may support a -switch using VIDIOC_S_FMT. - - All drivers exchanging data with -applications must support the VIDIOC_G_FMT and -VIDIOC_S_FMT ioctl. Implementation of the -VIDIOC_TRY_FMT is highly recommended but -optional. -
- -
- Image Format Enumeration - - Apart of the generic format negotiation functions -a special ioctl to enumerate all image formats supported by video -capture, overlay or output devices is available. - Enumerating formats an application has no a-priori -knowledge of (otherwise it could explicitly ask for them and need not -enumerate) seems useless, but there are applications serving as proxy -between drivers and the actual video applications for which this is -useful. - - - The &VIDIOC-ENUM-FMT; ioctl must be supported -by all drivers exchanging image data with applications. - - - Drivers are not supposed to convert image formats in -kernel space. They must enumerate only formats directly supported by -the hardware. If necessary driver writers should publish an example -conversion routine or library for integration into applications. - -
-
- - &sub-planar-apis; - -
- Image Cropping, Insertion and Scaling - - Some video capture devices can sample a subsection of the -picture and shrink or enlarge it to an image of arbitrary size. We -call these abilities cropping and scaling. Some video output devices -can scale an image up or down and insert it at an arbitrary scan line -and horizontal offset into a video signal. - - Applications can use the following API to select an area in -the video signal, query the default area and the hardware limits. -Despite their name, the &VIDIOC-CROPCAP;, &VIDIOC-G-CROP; -and &VIDIOC-S-CROP; ioctls apply to input as well as output -devices. - - Scaling requires a source and a target. On a video capture -or overlay device the source is the video signal, and the cropping -ioctls determine the area actually sampled. The target are images -read by the application or overlaid onto the graphics screen. Their -size (and position for an overlay) is negotiated with the -&VIDIOC-G-FMT; and &VIDIOC-S-FMT; ioctls. - - On a video output device the source are the images passed in -by the application, and their size is again negotiated with the -VIDIOC_G/S_FMT ioctls, or may be encoded in a -compressed video stream. The target is the video signal, and the -cropping ioctls determine the area where the images are -inserted. - - Source and target rectangles are defined even if the device -does not support scaling or the VIDIOC_G/S_CROP -ioctls. Their size (and position where applicable) will be fixed in -this case. All capture and output device must support the -VIDIOC_CROPCAP ioctl such that applications can -determine if scaling takes place. - -
- Cropping Structures - -
- Image Cropping, Insertion and Scaling - - - - - - - - - The cropping, insertion and scaling process - - -
- - For capture devices the coordinates of the top left -corner, width and height of the area which can be sampled is given by -the bounds substructure of the -&v4l2-cropcap; returned by the VIDIOC_CROPCAP -ioctl. To support a wide range of hardware this specification does not -define an origin or units. However by convention drivers should -horizontally count unscaled samples relative to 0H (the leading edge -of the horizontal sync pulse, see ). -Vertically ITU-R line -numbers of the first field (, ), multiplied by two if the driver can capture both -fields. - - The top left corner, width and height of the source -rectangle, that is the area actually sampled, is given by &v4l2-crop; -using the same coordinate system as &v4l2-cropcap;. Applications can -use the VIDIOC_G_CROP and -VIDIOC_S_CROP ioctls to get and set this -rectangle. It must lie completely within the capture boundaries and -the driver may further adjust the requested size and/or position -according to hardware limitations. - - Each capture device has a default source rectangle, given -by the defrect substructure of -&v4l2-cropcap;. The center of this rectangle shall align with the -center of the active picture area of the video signal, and cover what -the driver writer considers the complete picture. Drivers shall reset -the source rectangle to the default when the driver is first loaded, -but not later. - - For output devices these structures and ioctls are used -accordingly, defining the target rectangle where -the images will be inserted into the video signal. - -
- -
- Scaling Adjustments - - Video hardware can have various cropping, insertion and -scaling limitations. It may only scale up or down, support only -discrete scaling factors, or have different scaling abilities in -horizontal and vertical direction. Also it may not support scaling at -all. At the same time the &v4l2-crop; rectangle may have to be -aligned, and both the source and target rectangles may have arbitrary -upper and lower size limits. In particular the maximum -width and height -in &v4l2-crop; may be smaller than the -&v4l2-cropcap;.bounds area. Therefore, as -usual, drivers are expected to adjust the requested parameters and -return the actual values selected. - - Applications can change the source or the target rectangle -first, as they may prefer a particular image size or a certain area in -the video signal. If the driver has to adjust both to satisfy hardware -limitations, the last requested rectangle shall take priority, and the -driver should preferably adjust the opposite one. The &VIDIOC-TRY-FMT; -ioctl however shall not change the driver state and therefore only -adjust the requested rectangle. - - Suppose scaling on a video capture device is restricted to -a factor 1:1 or 2:1 in either direction and the target image size must -be a multiple of 16 × 16 pixels. The source cropping -rectangle is set to defaults, which are also the upper limit in this -example, of 640 × 400 pixels at offset 0, 0. An -application requests an image size of 300 × 225 -pixels, assuming video will be scaled down from the "full picture" -accordingly. The driver sets the image size to the closest possible -values 304 × 224, then chooses the cropping rectangle -closest to the requested size, that is 608 × 224 -(224 × 2:1 would exceed the limit 400). The offset -0, 0 is still valid, thus unmodified. Given the default cropping -rectangle reported by VIDIOC_CROPCAP the -application can easily propose another offset to center the cropping -rectangle. - - Now the application may insist on covering an area using a -picture aspect ratio closer to the original request, so it asks for a -cropping rectangle of 608 × 456 pixels. The present -scaling factors limit cropping to 640 × 384, so the -driver returns the cropping size 608 × 384 and adjusts -the image size to closest possible 304 × 192. - -
- -
- Examples - - Source and target rectangles shall remain unchanged across -closing and reopening a device, such that piping data into or out of a -device will work without special preparations. More advanced -applications should ensure the parameters are suitable before starting -I/O. - - - Resetting the cropping parameters - - (A video capture device is assumed; change -V4L2_BUF_TYPE_VIDEO_CAPTURE for other -devices.) - - -&v4l2-cropcap; cropcap; -&v4l2-crop; crop; - -memset (&cropcap, 0, sizeof (cropcap)); -cropcap.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - -if (-1 == ioctl (fd, &VIDIOC-CROPCAP;, &cropcap)) { - perror ("VIDIOC_CROPCAP"); - exit (EXIT_FAILURE); -} - -memset (&crop, 0, sizeof (crop)); -crop.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; -crop.c = cropcap.defrect; - -/* Ignore if cropping is not supported (EINVAL). */ - -if (-1 == ioctl (fd, &VIDIOC-S-CROP;, &crop) - && errno != EINVAL) { - perror ("VIDIOC_S_CROP"); - exit (EXIT_FAILURE); -} - - - - - Simple downscaling - - (A video capture device is assumed.) - - -&v4l2-cropcap; cropcap; -&v4l2-format; format; - -reset_cropping_parameters (); - -/* Scale down to 1/4 size of full picture. */ - -memset (&format, 0, sizeof (format)); /* defaults */ - -format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - -format.fmt.pix.width = cropcap.defrect.width >> 1; -format.fmt.pix.height = cropcap.defrect.height >> 1; -format.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV; - -if (-1 == ioctl (fd, &VIDIOC-S-FMT;, &format)) { - perror ("VIDIOC_S_FORMAT"); - exit (EXIT_FAILURE); -} - -/* We could check the actual image size now, the actual scaling factor - or if the driver can scale at all. */ - - - - - Selecting an output area - - -&v4l2-cropcap; cropcap; -&v4l2-crop; crop; - -memset (&cropcap, 0, sizeof (cropcap)); -cropcap.type = V4L2_BUF_TYPE_VIDEO_OUTPUT; - -if (-1 == ioctl (fd, VIDIOC_CROPCAP;, &cropcap)) { - perror ("VIDIOC_CROPCAP"); - exit (EXIT_FAILURE); -} - -memset (&crop, 0, sizeof (crop)); - -crop.type = V4L2_BUF_TYPE_VIDEO_OUTPUT; -crop.c = cropcap.defrect; - -/* Scale the width and height to 50 % of their original size - and center the output. */ - -crop.c.width /= 2; -crop.c.height /= 2; -crop.c.left += crop.c.width / 2; -crop.c.top += crop.c.height / 2; - -/* Ignore if cropping is not supported (EINVAL). */ - -if (-1 == ioctl (fd, VIDIOC_S_CROP, &crop) - && errno != EINVAL) { - perror ("VIDIOC_S_CROP"); - exit (EXIT_FAILURE); -} - - - - - Current scaling factor and pixel aspect - - (A video capture device is assumed.) - - -&v4l2-cropcap; cropcap; -&v4l2-crop; crop; -&v4l2-format; format; -double hscale, vscale; -double aspect; -int dwidth, dheight; - -memset (&cropcap, 0, sizeof (cropcap)); -cropcap.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - -if (-1 == ioctl (fd, &VIDIOC-CROPCAP;, &cropcap)) { - perror ("VIDIOC_CROPCAP"); - exit (EXIT_FAILURE); -} - -memset (&crop, 0, sizeof (crop)); -crop.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - -if (-1 == ioctl (fd, &VIDIOC-G-CROP;, &crop)) { - if (errno != EINVAL) { - perror ("VIDIOC_G_CROP"); - exit (EXIT_FAILURE); - } - - /* Cropping not supported. */ - crop.c = cropcap.defrect; -} - -memset (&format, 0, sizeof (format)); -format.fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - -if (-1 == ioctl (fd, &VIDIOC-G-FMT;, &format)) { - perror ("VIDIOC_G_FMT"); - exit (EXIT_FAILURE); -} - -/* The scaling applied by the driver. */ - -hscale = format.fmt.pix.width / (double) crop.c.width; -vscale = format.fmt.pix.height / (double) crop.c.height; - -aspect = cropcap.pixelaspect.numerator / - (double) cropcap.pixelaspect.denominator; -aspect = aspect * hscale / vscale; - -/* Devices following ITU-R BT.601 do not capture - square pixels. For playback on a computer monitor - we should scale the images to this size. */ - -dwidth = format.fmt.pix.width / aspect; -dheight = format.fmt.pix.height; - - -
-
- - &sub-selection-api; - -
- Streaming Parameters - - Streaming parameters are intended to optimize the video -capture process as well as I/O. Presently applications can request a -high quality capture mode with the &VIDIOC-S-PARM; ioctl. - - The current video standard determines a nominal number of -frames per second. If less than this number of frames is to be -captured or output, applications can request frame skipping or -duplicating on the driver side. This is especially useful when using -the &func-read; or &func-write;, which are not augmented by timestamps -or sequence counters, and to avoid unnecessary data copying. - - Finally these ioctls can be used to determine the number of -buffers used internally by a driver in read/write mode. For -implications see the section discussing the &func-read; -function. - - To get and set the streaming parameters applications call -the &VIDIOC-G-PARM; and &VIDIOC-S-PARM; ioctl, respectively. They take -a pointer to a &v4l2-streamparm;, which contains a union holding -separate parameters for input and output devices. - - These ioctls are optional, drivers need not implement -them. If so, they return the &EINVAL;. -
diff --git a/Documentation/DocBook/media/v4l/compat.xml b/Documentation/DocBook/media/v4l/compat.xml deleted file mode 100644 index 82fa328abd58..000000000000 --- a/Documentation/DocBook/media/v4l/compat.xml +++ /dev/null @@ -1,2723 +0,0 @@ - Changes - - The following chapters document the evolution of the V4L2 API, -errata or extensions. They are also intended to help application and -driver writers to port or update their code. - -
- Differences between V4L and V4L2 - - The Video For Linux API was first introduced in Linux 2.1 to -unify and replace various TV and radio device related interfaces, -developed independently by driver writers in prior years. Starting -with Linux 2.5 the much improved V4L2 API replaces the V4L API. -The support for the old V4L calls were removed from Kernel, but the -library supports the conversion of a V4L -API system call into a V4L2 one. - -
- Opening and Closing Devices - - For compatibility reasons the character device file names -recommended for V4L2 video capture, overlay, radio and raw -vbi capture devices did not change from those used by V4L. They are -listed in and below in . - - The teletext devices (minor range 192-223) have been removed in -V4L2 and no longer exist. There is no hardware available anymore for handling -pure teletext. Instead raw or sliced VBI is used. - - The V4L videodev module automatically -assigns minor numbers to drivers in load order, depending on the -registered device type. We recommend that V4L2 drivers by default -register devices with the same numbers, but the system administrator -can assign arbitrary minor numbers using driver module options. The -major device number remains 81. - - - V4L Device Types, Names and Numbers - - - - Device Type - File Name - Minor Numbers - - - - - Video capture and overlay - /dev/video and -/dev/bttv0 According to -Documentation/devices.txt these should be symbolic links to -/dev/video0. Note the original bttv interface is -not compatible with V4L or V4L2. , -/dev/video0 to -/dev/video63 - 0-63 - - - Radio receiver - /dev/radio - According to -Documentation/devices.txt a symbolic link to -/dev/radio0. - , /dev/radio0 to -/dev/radio63 - 64-127 - - - Raw VBI capture - /dev/vbi, -/dev/vbi0 to -/dev/vbi31 - 224-255 - - - -
- - V4L prohibits (or used to prohibit) multiple opens of a -device file. V4L2 drivers may support multiple -opens, see for details and consequences. - - V4L drivers respond to V4L2 ioctls with an &EINVAL;. -
- -
- Querying Capabilities - - The V4L VIDIOCGCAP ioctl is -equivalent to V4L2's &VIDIOC-QUERYCAP;. - - The name field in struct -video_capability became -card in &v4l2-capability;, -type was replaced by -capabilities. Note V4L2 does not -distinguish between device types like this, better think of basic -video input, video output and radio devices supporting a set of -related functions like video capturing, video overlay and VBI -capturing. See for an -introduction. - - - - struct -video_capability -type - &v4l2-capability; -capabilities flags - Purpose - - - - - VID_TYPE_CAPTURE - V4L2_CAP_VIDEO_CAPTURE - The video -capture interface is supported. - - - VID_TYPE_TUNER - V4L2_CAP_TUNER - The device has a tuner or -modulator. - - - VID_TYPE_TELETEXT - V4L2_CAP_VBI_CAPTURE - The raw VBI -capture interface is supported. - - - VID_TYPE_OVERLAY - V4L2_CAP_VIDEO_OVERLAY - The video -overlay interface is supported. - - - VID_TYPE_CHROMAKEY - V4L2_FBUF_CAP_CHROMAKEY in -field capability of -&v4l2-framebuffer; - Whether chromakey overlay is supported. For -more information on overlay see -. - - - VID_TYPE_CLIPPING - V4L2_FBUF_CAP_LIST_CLIPPING -and V4L2_FBUF_CAP_BITMAP_CLIPPING in field -capability of &v4l2-framebuffer; - Whether clipping the overlaid image is -supported, see . - - - VID_TYPE_FRAMERAM - V4L2_FBUF_CAP_EXTERNOVERLAY -not set in field -capability of &v4l2-framebuffer; - Whether overlay overwrites frame buffer memory, -see . - - - VID_TYPE_SCALES - - - This flag indicates if the hardware can scale -images. The V4L2 API implies the scale factor by setting the cropping -dimensions and image size with the &VIDIOC-S-CROP; and &VIDIOC-S-FMT; -ioctl, respectively. The driver returns the closest sizes possible. -For more information on cropping and scaling see . - - - VID_TYPE_MONOCHROME - - - Applications can enumerate the supported image -formats with the &VIDIOC-ENUM-FMT; ioctl to determine if the device -supports grey scale capturing only. For more information on image -formats see . - - - VID_TYPE_SUBCAPTURE - - - Applications can call the &VIDIOC-G-CROP; ioctl -to determine if the device supports capturing a subsection of the full -picture ("cropping" in V4L2). If not, the ioctl returns the &EINVAL;. -For more information on cropping and scaling see . - - - VID_TYPE_MPEG_DECODER - - - Applications can enumerate the supported image -formats with the &VIDIOC-ENUM-FMT; ioctl to determine if the device -supports MPEG streams. - - - VID_TYPE_MPEG_ENCODER - - - See above. - - - VID_TYPE_MJPEG_DECODER - - - See above. - - - VID_TYPE_MJPEG_ENCODER - - - See above. - - - - - - The audios field was replaced -by capabilities flag -V4L2_CAP_AUDIO, indicating -if the device has any audio inputs or outputs. To -determine their number applications can enumerate audio inputs with -the &VIDIOC-G-AUDIO; ioctl. The audio ioctls are described in . - - The maxwidth, -maxheight, -minwidth and -minheight fields were removed. Calling the -&VIDIOC-S-FMT; or &VIDIOC-TRY-FMT; ioctl with the desired dimensions -returns the closest size possible, taking into account the current -video standard, cropping and scaling limitations. -
- -
- Video Sources - - V4L provides the VIDIOCGCHAN and -VIDIOCSCHAN ioctl using struct -video_channel to enumerate -the video inputs of a V4L device. The equivalent V4L2 ioctls -are &VIDIOC-ENUMINPUT;, &VIDIOC-G-INPUT; and &VIDIOC-S-INPUT; -using &v4l2-input; as discussed in . - - The channel field counting -inputs was renamed to index, the video -input types were renamed as follows: - - - - struct video_channel -type - &v4l2-input; -type - - - - - VIDEO_TYPE_TV - V4L2_INPUT_TYPE_TUNER - - - VIDEO_TYPE_CAMERA - V4L2_INPUT_TYPE_CAMERA - - - - - - Unlike the tuners field -expressing the number of tuners of this input, V4L2 assumes each video -input is connected to at most one tuner. However a tuner can have more -than one input, &ie; RF connectors, and a device can have multiple -tuners. The index number of the tuner associated with the input, if -any, is stored in field tuner of -&v4l2-input;. Enumeration of tuners is discussed in . - - The redundant VIDEO_VC_TUNER flag was -dropped. Video inputs associated with a tuner are of type -V4L2_INPUT_TYPE_TUNER. The -VIDEO_VC_AUDIO flag was replaced by the -audioset field. V4L2 considers devices with -up to 32 audio inputs. Each set bit in the -audioset field represents one audio input -this video input combines with. For information about audio inputs and -how to switch between them see . - - The norm field describing the -supported video standards was replaced by -std. The V4L specification mentions a flag -VIDEO_VC_NORM indicating whether the standard can -be changed. This flag was a later addition together with the -norm field and has been removed in the -meantime. V4L2 has a similar, albeit more comprehensive approach -to video standards, see for more -information. -
- -
- Tuning - - The V4L VIDIOCGTUNER and -VIDIOCSTUNER ioctl and struct -video_tuner can be used to enumerate the -tuners of a V4L TV or radio device. The equivalent V4L2 ioctls are -&VIDIOC-G-TUNER; and &VIDIOC-S-TUNER; using &v4l2-tuner;. Tuners are -covered in . - - The tuner field counting tuners -was renamed to index. The fields -name, rangelow -and rangehigh remained unchanged. - - The VIDEO_TUNER_PAL, -VIDEO_TUNER_NTSC and -VIDEO_TUNER_SECAM flags indicating the supported -video standards were dropped. This information is now contained in the -associated &v4l2-input;. No replacement exists for the -VIDEO_TUNER_NORM flag indicating whether the -video standard can be switched. The mode -field to select a different video standard was replaced by a whole new -set of ioctls and structures described in . -Due to its ubiquity it should be mentioned the BTTV driver supports -several standards in addition to the regular -VIDEO_MODE_PAL (0), -VIDEO_MODE_NTSC, -VIDEO_MODE_SECAM and -VIDEO_MODE_AUTO (3). Namely N/PAL Argentina, -M/PAL, N/PAL, and NTSC Japan with numbers 3-6 (sic). - - The VIDEO_TUNER_STEREO_ON flag -indicating stereo reception became -V4L2_TUNER_SUB_STEREO in field -rxsubchans. This field also permits the -detection of monaural and bilingual audio, see the definition of -&v4l2-tuner; for details. Presently no replacement exists for the -VIDEO_TUNER_RDS_ON and -VIDEO_TUNER_MBS_ON flags. - - The VIDEO_TUNER_LOW flag was renamed -to V4L2_TUNER_CAP_LOW in the &v4l2-tuner; -capability field. - - The VIDIOCGFREQ and -VIDIOCSFREQ ioctl to change the tuner frequency -where renamed to &VIDIOC-G-FREQUENCY; and &VIDIOC-S-FREQUENCY;. They -take a pointer to a &v4l2-frequency; instead of an unsigned long -integer. -
- -
- Image Properties - - V4L2 has no equivalent of the -VIDIOCGPICT and VIDIOCSPICT -ioctl and struct video_picture. The following -fields where replaced by V4L2 controls accessible with the -&VIDIOC-QUERYCTRL;, &VIDIOC-G-CTRL; and &VIDIOC-S-CTRL; ioctls: - - - - struct video_picture - V4L2 Control ID - - - - - brightness - V4L2_CID_BRIGHTNESS - - - hue - V4L2_CID_HUE - - - colour - V4L2_CID_SATURATION - - - contrast - V4L2_CID_CONTRAST - - - whiteness - V4L2_CID_WHITENESS - - - - - - The V4L picture controls are assumed to range from 0 to -65535 with no particular reset value. The V4L2 API permits arbitrary -limits and defaults which can be queried with the &VIDIOC-QUERYCTRL; -ioctl. For general information about controls see . - - The depth (average number of -bits per pixel) of a video image is implied by the selected image -format. V4L2 does not explicitly provide such information assuming -applications recognizing the format are aware of the image depth and -others need not know. The palette field -moved into the &v4l2-pix-format;: - - - - struct video_picture -palette - &v4l2-pix-format; -pixfmt - - - - - VIDEO_PALETTE_GREY - V4L2_PIX_FMT_GREY - - - VIDEO_PALETTE_HI240 - V4L2_PIX_FMT_HI240 - This is a custom format used by the BTTV -driver, not one of the V4L2 standard formats. - - - - VIDEO_PALETTE_RGB565 - V4L2_PIX_FMT_RGB565 - - - VIDEO_PALETTE_RGB555 - V4L2_PIX_FMT_RGB555 - - - VIDEO_PALETTE_RGB24 - V4L2_PIX_FMT_BGR24 - - - VIDEO_PALETTE_RGB32 - V4L2_PIX_FMT_BGR32 - Presumably all V4L RGB formats are -little-endian, although some drivers might interpret them according to machine endianness. V4L2 defines little-endian, big-endian and red/blue -swapped variants. For details see . - - - - VIDEO_PALETTE_YUV422 - V4L2_PIX_FMT_YUYV - - - VIDEO_PALETTE_YUYV - VIDEO_PALETTE_YUV422 -and VIDEO_PALETTE_YUYV are the same formats. Some -V4L drivers respond to one, some to the other. - - V4L2_PIX_FMT_YUYV - - - VIDEO_PALETTE_UYVY - V4L2_PIX_FMT_UYVY - - - VIDEO_PALETTE_YUV420 - None - - - VIDEO_PALETTE_YUV411 - V4L2_PIX_FMT_Y41P - Not to be confused with -V4L2_PIX_FMT_YUV411P, which is a planar -format. - - - VIDEO_PALETTE_RAW - None V4L explains this -as: "RAW capture (BT848)" - - - VIDEO_PALETTE_YUV422P - V4L2_PIX_FMT_YUV422P - - - VIDEO_PALETTE_YUV411P - V4L2_PIX_FMT_YUV411P - Not to be confused with -V4L2_PIX_FMT_Y41P, which is a packed -format. - - - VIDEO_PALETTE_YUV420P - V4L2_PIX_FMT_YVU420 - - - VIDEO_PALETTE_YUV410P - V4L2_PIX_FMT_YVU410 - - - - - - V4L2 image formats are defined in . The image format can be selected with the -&VIDIOC-S-FMT; ioctl. -
- -
- Audio - - The VIDIOCGAUDIO and -VIDIOCSAUDIO ioctl and struct -video_audio are used to enumerate the -audio inputs of a V4L device. The equivalent V4L2 ioctls are -&VIDIOC-G-AUDIO; and &VIDIOC-S-AUDIO; using &v4l2-audio; as -discussed in . - - The audio "channel number" -field counting audio inputs was renamed to -index. - - On VIDIOCSAUDIO the -mode field selects one -of the VIDEO_SOUND_MONO, -VIDEO_SOUND_STEREO, -VIDEO_SOUND_LANG1 or -VIDEO_SOUND_LANG2 audio demodulation modes. When -the current audio standard is BTSC -VIDEO_SOUND_LANG2 refers to SAP and -VIDEO_SOUND_LANG1 is meaningless. Also -undocumented in the V4L specification, there is no way to query the -selected mode. On VIDIOCGAUDIO the driver returns -the actually received audio programmes in this -field. In the V4L2 API this information is stored in the &v4l2-tuner; -rxsubchans and -audmode fields, respectively. See for more information on tuners. Related to audio -modes &v4l2-audio; also reports if this is a mono or stereo -input, regardless if the source is a tuner. - - The following fields where replaced by V4L2 controls -accessible with the &VIDIOC-QUERYCTRL;, &VIDIOC-G-CTRL; and -&VIDIOC-S-CTRL; ioctls: - - - - struct -video_audio - V4L2 Control ID - - - - - volume - V4L2_CID_AUDIO_VOLUME - - - bass - V4L2_CID_AUDIO_BASS - - - treble - V4L2_CID_AUDIO_TREBLE - - - balance - V4L2_CID_AUDIO_BALANCE - - - - - - To determine which of these controls are supported by a -driver V4L provides the flags -VIDEO_AUDIO_VOLUME, -VIDEO_AUDIO_BASS, -VIDEO_AUDIO_TREBLE and -VIDEO_AUDIO_BALANCE. In the V4L2 API the -&VIDIOC-QUERYCTRL; ioctl reports if the respective control is -supported. Accordingly the VIDEO_AUDIO_MUTABLE -and VIDEO_AUDIO_MUTE flags where replaced by the -boolean V4L2_CID_AUDIO_MUTE control. - - All V4L2 controls have a step -attribute replacing the struct video_audio -step field. The V4L audio controls are -assumed to range from 0 to 65535 with no particular reset value. The -V4L2 API permits arbitrary limits and defaults which can be queried -with the &VIDIOC-QUERYCTRL; ioctl. For general information about -controls see . -
- -
- Frame Buffer Overlay - - The V4L2 ioctls equivalent to -VIDIOCGFBUF and VIDIOCSFBUF -are &VIDIOC-G-FBUF; and &VIDIOC-S-FBUF;. The -base field of struct -video_buffer remained unchanged, except V4L2 -defines a flag to indicate non-destructive overlays instead of a -NULL pointer. All other fields moved into the -&v4l2-pix-format; fmt substructure of -&v4l2-framebuffer;. The depth field was -replaced by pixelformat. See for a list of RGB formats and their -respective color depths. - - Instead of the special ioctls -VIDIOCGWIN and VIDIOCSWIN -V4L2 uses the general-purpose data format negotiation ioctls -&VIDIOC-G-FMT; and &VIDIOC-S-FMT;. They take a pointer to a -&v4l2-format; as argument. Here the win -member of the fmt union is used, a -&v4l2-window;. - - The x, -y, width and -height fields of struct -video_window moved into &v4l2-rect; -substructure w of struct -v4l2_window. The -chromakey, -clips, and -clipcount fields remained unchanged. Struct -video_clip was renamed to &v4l2-clip;, also -containing a struct v4l2_rect, but the -semantics are still the same. - - The VIDEO_WINDOW_INTERLACE flag was -dropped. Instead applications must set the -field field to -V4L2_FIELD_ANY or -V4L2_FIELD_INTERLACED. The -VIDEO_WINDOW_CHROMAKEY flag moved into -&v4l2-framebuffer;, under the new name -V4L2_FBUF_FLAG_CHROMAKEY. - - In V4L, storing a bitmap pointer in -clips and setting -clipcount to -VIDEO_CLIP_BITMAP (-1) requests bitmap -clipping, using a fixed size bitmap of 1024 × 625 bits. Struct -v4l2_window has a separate -bitmap pointer field for this purpose and -the bitmap size is determined by w.width and -w.height. - - The VIDIOCCAPTURE ioctl to enable or -disable overlay was renamed to &VIDIOC-OVERLAY;. -
- -
- Cropping - - To capture only a subsection of the full picture V4L -defines the VIDIOCGCAPTURE and -VIDIOCSCAPTURE ioctls using struct -video_capture. The equivalent V4L2 ioctls are -&VIDIOC-G-CROP; and &VIDIOC-S-CROP; using &v4l2-crop;, and the related -&VIDIOC-CROPCAP; ioctl. This is a rather complex matter, see - for details. - - The x, -y, width and -height fields moved into &v4l2-rect; -substructure c of struct -v4l2_crop. The -decimation field was dropped. In the V4L2 -API the scaling factor is implied by the size of the cropping -rectangle and the size of the captured or overlaid image. - - The VIDEO_CAPTURE_ODD -and VIDEO_CAPTURE_EVEN flags to capture only the -odd or even field, respectively, were replaced by -V4L2_FIELD_TOP and -V4L2_FIELD_BOTTOM in the field named -field of &v4l2-pix-format; and -&v4l2-window;. These structures are used to select a capture or -overlay format with the &VIDIOC-S-FMT; ioctl. -
- -
- Reading Images, Memory Mapping - -
- Capturing using the read method - - There is no essential difference between reading images -from a V4L or V4L2 device using the &func-read; function, however V4L2 -drivers are not required to support this I/O method. Applications can -determine if the function is available with the &VIDIOC-QUERYCAP; -ioctl. All V4L2 devices exchanging data with applications must support -the &func-select; and &func-poll; functions. - - To select an image format and size, V4L provides the -VIDIOCSPICT and VIDIOCSWIN -ioctls. V4L2 uses the general-purpose data format negotiation ioctls -&VIDIOC-G-FMT; and &VIDIOC-S-FMT;. They take a pointer to a -&v4l2-format; as argument, here the &v4l2-pix-format; named -pix of its fmt -union is used. - - For more information about the V4L2 read interface see -. -
-
- Capturing using memory mapping - - Applications can read from V4L devices by mapping -buffers in device memory, or more often just buffers allocated in -DMA-able system memory, into their address space. This avoids the data -copying overhead of the read method. V4L2 supports memory mapping as -well, with a few differences. - - - - - - V4L - V4L2 - - - - - - The image format must be selected before -buffers are allocated, with the &VIDIOC-S-FMT; ioctl. When no format -is selected the driver may use the last, possibly by another -application requested format. - - - Applications cannot change the number of -buffers. The it is built into the driver, unless it has a module -option to change the number when the driver module is -loaded. - The &VIDIOC-REQBUFS; ioctl allocates the -desired number of buffers, this is a required step in the initialization -sequence. - - - Drivers map all buffers as one contiguous -range of memory. The VIDIOCGMBUF ioctl is -available to query the number of buffers, the offset of each buffer -from the start of the virtual file, and the overall amount of memory -used, which can be used as arguments for the &func-mmap; -function. - Buffers are individually mapped. The -offset and size of each buffer can be determined with the -&VIDIOC-QUERYBUF; ioctl. - - - The VIDIOCMCAPTURE -ioctl prepares a buffer for capturing. It also determines the image -format for this buffer. The ioctl returns immediately, eventually with -an &EAGAIN; if no video signal had been detected. When the driver -supports more than one buffer applications can call the ioctl multiple -times and thus have multiple outstanding capture -requests.The VIDIOCSYNC ioctl -suspends execution until a particular buffer has been -filled. - Drivers maintain an incoming and outgoing -queue. &VIDIOC-QBUF; enqueues any empty buffer into the incoming -queue. Filled buffers are dequeued from the outgoing queue with the -&VIDIOC-DQBUF; ioctl. To wait until filled buffers become available this -function, &func-select; or &func-poll; can be used. The -&VIDIOC-STREAMON; ioctl must be called once after enqueuing one or -more buffers to start capturing. Its counterpart -&VIDIOC-STREAMOFF; stops capturing and dequeues all buffers from both -queues. Applications can query the signal status, if known, with the -&VIDIOC-ENUMINPUT; ioctl. - - - - - - For a more in-depth discussion of memory mapping and -examples, see . -
-
- -
- Reading Raw VBI Data - - Originally the V4L API did not specify a raw VBI capture -interface, only the device file /dev/vbi was -reserved for this purpose. The only driver supporting this interface -was the BTTV driver, de-facto defining the V4L VBI interface. Reading -from the device yields a raw VBI image with the following -parameters: - - - - &v4l2-vbi-format; - V4L, BTTV driver - - - - - sampling_rate - 28636363 Hz NTSC (or any other 525-line -standard); 35468950 Hz PAL and SECAM (625-line standards) - - - offset - ? - - - samples_per_line - 2048 - - - sample_format - V4L2_PIX_FMT_GREY. The last four bytes (a -machine endianness integer) contain a frame counter. - - - start[] - 10, 273 NTSC; 22, 335 PAL and SECAM - - - count[] - 16, 16Old driver -versions used different values, eventually the custom -BTTV_VBISIZE ioctl was added to query the -correct values. - - - flags - 0 - - - - - - Undocumented in the V4L specification, in Linux 2.3 the -VIDIOCGVBIFMT and -VIDIOCSVBIFMT ioctls using struct -vbi_format were added to determine the VBI -image parameters. These ioctls are only partially compatible with the -V4L2 VBI interface specified in . - - An offset field does not -exist, sample_format is supposed to be -VIDEO_PALETTE_RAW, equivalent to -V4L2_PIX_FMT_GREY. The remaining fields are -probably equivalent to &v4l2-vbi-format;. - - Apparently only the Zoran (ZR 36120) driver implements -these ioctls. The semantics differ from those specified for V4L2 in two -ways. The parameters are reset on &func-open; and -VIDIOCSVBIFMT always returns an &EINVAL; if the -parameters are invalid. -
- -
- Miscellaneous - - V4L2 has no equivalent of the -VIDIOCGUNIT ioctl. Applications can find the VBI -device associated with a video capture device (or vice versa) by -reopening the device and requesting VBI data. For details see -. - - No replacement exists for VIDIOCKEY, -and the V4L functions for microcode programming. A new interface for -MPEG compression and playback devices is documented in . -
- -
- -
- Changes of the V4L2 API - - Soon after the V4L API was added to the kernel it was -criticised as too inflexible. In August 1998 Bill Dirks proposed a -number of improvements and began to work on documentation, example -drivers and applications. With the help of other volunteers this -eventually became the V4L2 API, not just an extension but a -replacement for the V4L API. However it took another four years and -two stable kernel releases until the new API was finally accepted for -inclusion into the kernel in its present form. - -
- Early Versions - 1998-08-20: First version. - - 1998-08-27: The &func-select; function was introduced. - - 1998-09-10: New video standard interface. - - 1998-09-18: The VIDIOC_NONCAP ioctl -was replaced by the otherwise meaningless O_TRUNC -&func-open; flag, and the aliases O_NONCAP and -O_NOIO were defined. Applications can set this -flag if they intend to access controls only, as opposed to capture -applications which need exclusive access. The -VIDEO_STD_XXX identifiers are now ordinals -instead of flags, and the video_std_construct() -helper function takes id and transmission arguments. - - 1998-09-28: Revamped video standard. Made video controls -individually enumerable. - - 1998-10-02: The id field was -removed from struct video_standard and the -color subcarrier fields were renamed. The &VIDIOC-QUERYSTD; ioctl was -renamed to &VIDIOC-ENUMSTD;, &VIDIOC-G-INPUT; to &VIDIOC-ENUMINPUT;. A -first draft of the Codec API was released. - - 1998-11-08: Many minor changes. Most symbols have been -renamed. Some material changes to &v4l2-capability;. - - 1998-11-12: The read/write directon of some ioctls was misdefined. - - 1998-11-14: V4L2_PIX_FMT_RGB24 -changed to V4L2_PIX_FMT_BGR24, and -V4L2_PIX_FMT_RGB32 changed to -V4L2_PIX_FMT_BGR32. Audio controls are now -accessible with the &VIDIOC-G-CTRL; and &VIDIOC-S-CTRL; ioctls under -names starting with V4L2_CID_AUDIO. The -V4L2_MAJOR define was removed from -videodev.h since it was only used once in the -videodev kernel module. The -YUV422 and YUV411 planar -image formats were added. - - 1998-11-28: A few ioctl symbols changed. Interfaces for codecs and -video output devices were added. - - 1999-01-14: A raw VBI capture interface was added. - - 1999-01-19: The VIDIOC_NEXTBUF ioctl - was removed. -
- -
- V4L2 Version 0.16 1999-01-31 - 1999-01-27: There is now one QBUF ioctl, VIDIOC_QWBUF and VIDIOC_QRBUF -are gone. VIDIOC_QBUF takes a v4l2_buffer as a parameter. Added -digital zoom (cropping) controls. -
- - - -
- V4L2 Version 0.18 1999-03-16 - Added a v4l to V4L2 ioctl compatibility layer to -videodev.c. Driver writers, this changes how you implement your ioctl -handler. See the Driver Writer's Guide. Added some more control id -codes. -
- -
- V4L2 Version 0.19 1999-06-05 - 1999-03-18: Fill in the category and catname fields of -v4l2_queryctrl objects before passing them to the driver. Required a -minor change to the VIDIOC_QUERYCTRL handlers in the sample -drivers. - 1999-03-31: Better compatibility for v4l memory capture -ioctls. Requires changes to drivers to fully support new compatibility -features, see Driver Writer's Guide and v4l2cap.c. Added new control -IDs: V4L2_CID_HFLIP, _VFLIP. Changed V4L2_PIX_FMT_YUV422P to _YUV422P, -and _YUV411P to _YUV411P. - 1999-04-04: Added a few more control IDs. - 1999-04-07: Added the button control type. - 1999-05-02: Fixed a typo in videodev.h, and added the -V4L2_CTRL_FLAG_GRAYED (later V4L2_CTRL_FLAG_GRABBED) flag. - 1999-05-20: Definition of VIDIOC_G_CTRL was wrong causing -a malfunction of this ioctl. - 1999-06-05: Changed the value of -V4L2_CID_WHITENESS. -
- -
- V4L2 Version 0.20 (1999-09-10) - - Version 0.20 introduced a number of changes which were -not backward compatible with 0.19 and earlier -versions. Purpose of these changes was to simplify the API, while -making it more extensible and following common Linux driver API -conventions. - - - - Some typos in V4L2_FMT_FLAG -symbols were fixed. &v4l2-clip; was changed for compatibility with -v4l. (1999-08-30) - - - - V4L2_TUNER_SUB_LANG1 was added. -(1999-09-05) - - - - All ioctl() commands that used an integer argument now -take a pointer to an integer. Where it makes sense, ioctls will return -the actual new value in the integer pointed to by the argument, a -common convention in the V4L2 API. The affected ioctls are: -VIDIOC_PREVIEW, VIDIOC_STREAMON, VIDIOC_STREAMOFF, VIDIOC_S_FREQ, -VIDIOC_S_INPUT, VIDIOC_S_OUTPUT, VIDIOC_S_EFFECT. For example - -err = ioctl (fd, VIDIOC_XXX, V4L2_XXX); - becomes -int a = V4L2_XXX; err = ioctl(fd, VIDIOC_XXX, &a); - - - - - - All the different get- and set-format commands were -swept into one &VIDIOC-G-FMT; and &VIDIOC-S-FMT; ioctl taking a union -and a type field selecting the union member as parameter. Purpose is to -simplify the API by eliminating several ioctls and to allow new and -driver private data streams without adding new ioctls. - - This change obsoletes the following ioctls: -VIDIOC_S_INFMT, -VIDIOC_G_INFMT, -VIDIOC_S_OUTFMT, -VIDIOC_G_OUTFMT, -VIDIOC_S_VBIFMT and -VIDIOC_G_VBIFMT. The image format structure -v4l2_format was renamed to &v4l2-pix-format;, -while &v4l2-format; is now the envelopping structure for all format -negotiations. - - - - Similar to the changes above, the -VIDIOC_G_PARM and -VIDIOC_S_PARM ioctls were merged with -VIDIOC_G_OUTPARM and -VIDIOC_S_OUTPARM. A -type field in the new &v4l2-streamparm; -selects the respective union member. - - This change obsoletes the -VIDIOC_G_OUTPARM and -VIDIOC_S_OUTPARM ioctls. - - - - Control enumeration was simplified, and two new -control flags were introduced and one dropped. The -catname field was replaced by a -group field. - - Drivers can now flag unsupported and temporarily -unavailable controls with V4L2_CTRL_FLAG_DISABLED -and V4L2_CTRL_FLAG_GRABBED respectively. The -group name indicates a possibly narrower -classification than the category. In other -words, there may be multiple groups within a category. Controls within -a group would typically be drawn within a group box. Controls in -different categories might have a greater separation, or may even -appear in separate windows. - - - - The &v4l2-buffer; timestamp -was changed to a 64 bit integer, containing the sampling or output -time of the frame in nanoseconds. Additionally timestamps will be in -absolute system time, not starting from zero at the beginning of a -stream. The data type name for timestamps is stamp_t, defined as a -signed 64-bit integer. Output devices should not send a buffer out -until the time in the timestamp field has arrived. I would like to -follow SGI's lead, and adopt a multimedia timestamping system like -their UST (Unadjusted System Time). See -http://web.archive.org/web/*/http://reality.sgi.com -/cpirazzi_engr/lg/time/intro.html. -UST uses timestamps that are 64-bit signed integers -(not struct timeval's) and given in nanosecond units. The UST clock -starts at zero when the system is booted and runs continuously and -uniformly. It takes a little over 292 years for UST to overflow. There -is no way to set the UST clock. The regular Linux time-of-day clock -can be changed periodically, which would cause errors if it were being -used for timestamping a multimedia stream. A real UST style clock will -require some support in the kernel that is not there yet. But in -anticipation, I will change the timestamp field to a 64-bit integer, -and I will change the v4l2_masterclock_gettime() function (used only -by drivers) to return a 64-bit integer. - - - - A sequence field was added -to &v4l2-buffer;. The sequence field counts -captured frames, it is ignored by output devices. When a capture -driver drops a frame, the sequence number of that frame is -skipped. - - -
- -
- V4L2 Version 0.20 incremental changes - - - 1999-12-23: In &v4l2-vbi-format; the -reserved1 field became -offset. Previously drivers were required to -clear the reserved1 field. - - 2000-01-13: The - V4L2_FMT_FLAG_NOT_INTERLACED flag was added. - - 2000-07-31: The linux/poll.h header -is now included by videodev.h for compatibility -with the original videodev.h file. - - 2000-11-20: V4L2_TYPE_VBI_OUTPUT and -V4L2_PIX_FMT_Y41P were added. - - 2000-11-25: V4L2_TYPE_VBI_INPUT was -added. - - 2000-12-04: A couple typos in symbol names were fixed. - - 2001-01-18: To avoid namespace conflicts the -fourcc macro defined in the -videodev.h header file was renamed to -v4l2_fourcc. - - 2001-01-25: A possible driver-level compatibility problem -between the videodev.h file in Linux 2.4.0 and -the videodev.h file included in the -videodevX patch was fixed. Users of an earlier -version of videodevX on Linux 2.4.0 should -recompile their V4L and V4L2 drivers. - - 2001-01-26: A possible kernel-level incompatibility -between the videodev.h file in the -videodevX patch and the -videodev.h file in Linux 2.2.x with devfs patches -applied was fixed. - - 2001-03-02: Certain V4L ioctls which pass data in both -direction although they are defined with read-only parameter, did not -work correctly through the backward compatibility layer. -[Solution?] - - 2001-04-13: Big endian 16-bit RGB formats were added. - - 2001-09-17: New YUV formats and the &VIDIOC-G-FREQUENCY; and -&VIDIOC-S-FREQUENCY; ioctls were added. (The old -VIDIOC_G_FREQ and -VIDIOC_S_FREQ ioctls did not take multiple tuners -into account.) - - 2000-09-18: V4L2_BUF_TYPE_VBI was -added. This may break compatibility as the -&VIDIOC-G-FMT; and &VIDIOC-S-FMT; ioctls may fail now if the struct -v4l2_fmt type -field does not contain V4L2_BUF_TYPE_VBI. In the -documentation of the &v4l2-vbi-format; -offset field the ambiguous phrase "rising -edge" was changed to "leading edge". -
- -
- V4L2 Version 0.20 2000-11-23 - - A number of changes were made to the raw VBI -interface. - - - - Figures clarifying the line numbering scheme were -added to the V4L2 API specification. The -start[0] and -start[1] fields no longer count line -numbers beginning at zero. Rationale: a) The previous definition was -unclear. b) The start[] values are ordinal -numbers. c) There is no point in inventing a new line numbering -scheme. We now use line number as defined by ITU-R, period. -Compatibility: Add one to the start values. Applications depending on -the previous semantics may not function correctly. - - - - The restriction "count[0] > 0 and count[1] > 0" -has been relaxed to "(count[0] + count[1]) > 0". Rationale: -Drivers may allocate resources at scan line granularity and some data -services are transmitted only on the first field. The comment that -both count values will usually be equal is -misleading and pointless and has been removed. This change -breaks compatibility with earlier versions: -Drivers may return EINVAL, applications may not function -correctly. - - - - Drivers are again permitted to return negative -(unknown) start values as proposed earlier. Why this feature was -dropped is unclear. This change may break -compatibility with applications depending on the start -values being positive. The use of EBUSY and -EINVAL error codes with the &VIDIOC-S-FMT; ioctl -was clarified. The &EBUSY; was finally documented, and the -reserved2 field which was previously -mentioned only in the videodev.h header -file. - - - - New buffer types -V4L2_TYPE_VBI_INPUT and -V4L2_TYPE_VBI_OUTPUT were added. The former is an -alias for the old V4L2_TYPE_VBI, the latter was -missing in the videodev.h file. - - -
- -
- V4L2 Version 0.20 2002-07-25 - Added sliced VBI interface proposal. -
- -
- V4L2 in Linux 2.5.46, 2002-10 - - Around October-November 2002, prior to an announced -feature freeze of Linux 2.5, the API was revised, drawing from -experience with V4L2 0.20. This unnamed version was finally merged -into Linux 2.5.46. - - - - As specified in , drivers -must make related device functions available under all minor device -numbers. - - - - The &func-open; function requires access mode -O_RDWR regardless of the device type. All V4L2 -drivers exchanging data with applications must support the -O_NONBLOCK flag. The O_NOIO -flag, a V4L2 symbol which aliased the meaningless -O_TRUNC to indicate accesses without data -exchange (panel applications) was dropped. Drivers must stay in "panel -mode" until the application attempts to initiate a data exchange, see -. - - - - The &v4l2-capability; changed dramatically. Note that -also the size of the structure changed, which is encoded in the ioctl -request code, thus older V4L2 devices will respond with an &EINVAL; to -the new &VIDIOC-QUERYCAP; ioctl. - - There are new fields to identify the driver, a new RDS -device function V4L2_CAP_RDS_CAPTURE, the -V4L2_CAP_AUDIO flag indicates if the device has -any audio connectors, another I/O capability -V4L2_CAP_ASYNCIO can be flagged. In response to -these changes the type field became a bit -set and was merged into the flags field. -V4L2_FLAG_TUNER was renamed to -V4L2_CAP_TUNER, -V4L2_CAP_VIDEO_OVERLAY replaced -V4L2_FLAG_PREVIEW and -V4L2_CAP_VBI_CAPTURE and -V4L2_CAP_VBI_OUTPUT replaced -V4L2_FLAG_DATA_SERVICE. -V4L2_FLAG_READ and -V4L2_FLAG_WRITE were merged into -V4L2_CAP_READWRITE. - - The redundant fields -inputs, outputs -and audios were removed. These properties -can be determined as described in and . - - The somewhat volatile and therefore barely useful -fields maxwidth, -maxheight, -minwidth, -minheight, -maxframerate were removed. This information -is available as described in and -. - - V4L2_FLAG_SELECT was removed. We -believe the select() function is important enough to require support -of it in all V4L2 drivers exchanging data with applications. The -redundant V4L2_FLAG_MONOCHROME flag was removed, -this information is available as described in . - - - - In &v4l2-input; the -assoc_audio field and the -capability field and its only flag -V4L2_INPUT_CAP_AUDIO was replaced by the new -audioset field. Instead of linking one -video input to one audio input this field reports all audio inputs -this video input combines with. - - New fields are tuner -(reversing the former link from tuners to video inputs), -std and -status. - - Accordingly &v4l2-output; lost its -capability and -assoc_audio fields. -audioset, -modulator and -std where added instead. - - - - The &v4l2-audio; field -audio was renamed to -index, for consistency with other -structures. A new capability flag -V4L2_AUDCAP_STEREO was added to indicated if the -audio input in question supports stereo sound. -V4L2_AUDCAP_EFFECTS and the corresponding -V4L2_AUDMODE flags where removed. This can be -easily implemented using controls. (However the same applies to AVL -which is still there.) - - Again for consistency the &v4l2-audioout; field -audio was renamed to -index. - - - - The &v4l2-tuner; -input field was replaced by an -index field, permitting devices with -multiple tuners. The link between video inputs and tuners is now -reversed, inputs point to their tuner. The -std substructure became a -simple set (more about this below) and moved into &v4l2-input;. A -type field was added. - - Accordingly in &v4l2-modulator; the -output was replaced by an -index field. - - In &v4l2-frequency; the -port field was replaced by a -tuner field containing the respective tuner -or modulator index number. A tuner type -field was added and the reserved field -became larger for future extensions (satellite tuners in -particular). - - - - The idea of completely transparent video standards was -dropped. Experience showed that applications must be able to work with -video standards beyond presenting the user a menu. Instead of -enumerating supported standards with an ioctl applications can now -refer to standards by &v4l2-std-id; and symbols defined in the -videodev2.h header file. For details see . The &VIDIOC-G-STD; and -&VIDIOC-S-STD; now take a pointer to this type as argument. -&VIDIOC-QUERYSTD; was added to autodetect the received standard, if -the hardware has this capability. In &v4l2-standard; an -index field was added for &VIDIOC-ENUMSTD;. -A &v4l2-std-id; field named id was added as -machine readable identifier, also replacing the -transmission field. The misleading -framerate field was renamed -to frameperiod. The now obsolete -colorstandard information, originally -needed to distguish between variations of standards, were -removed. - - Struct v4l2_enumstd ceased to -be. &VIDIOC-ENUMSTD; now takes a pointer to a &v4l2-standard; -directly. The information which standards are supported by a -particular video input or output moved into &v4l2-input; and -&v4l2-output; fields named std, -respectively. - - - - The &v4l2-queryctrl; fields -category and -group did not catch on and/or were not -implemented as expected and therefore removed. - - - - The &VIDIOC-TRY-FMT; ioctl was added to negotiate data -formats as with &VIDIOC-S-FMT;, but without the overhead of -programming the hardware and regardless of I/O in progress. - - In &v4l2-format; the fmt -union was extended to contain &v4l2-window;. All image format -negotiations are now possible with VIDIOC_G_FMT, -VIDIOC_S_FMT and -VIDIOC_TRY_FMT; ioctl. The -VIDIOC_G_WIN and -VIDIOC_S_WIN ioctls to prepare for a video -overlay were removed. The type field -changed to type &v4l2-buf-type; and the buffer type names changed as -follows. - - - - Old defines - &v4l2-buf-type; - - - - - V4L2_BUF_TYPE_CAPTURE - V4L2_BUF_TYPE_VIDEO_CAPTURE - - - V4L2_BUF_TYPE_CODECIN - Omitted for now - - - V4L2_BUF_TYPE_CODECOUT - Omitted for now - - - V4L2_BUF_TYPE_EFFECTSIN - Omitted for now - - - V4L2_BUF_TYPE_EFFECTSIN2 - Omitted for now - - - V4L2_BUF_TYPE_EFFECTSOUT - Omitted for now - - - V4L2_BUF_TYPE_VIDEOOUT - V4L2_BUF_TYPE_VIDEO_OUTPUT - - - - - V4L2_BUF_TYPE_VIDEO_OVERLAY - - - - - V4L2_BUF_TYPE_VBI_CAPTURE - - - - - V4L2_BUF_TYPE_VBI_OUTPUT - - - - - V4L2_BUF_TYPE_SLICED_VBI_CAPTURE - - - - - V4L2_BUF_TYPE_SLICED_VBI_OUTPUT - - - V4L2_BUF_TYPE_PRIVATE_BASE - V4L2_BUF_TYPE_PRIVATE (but this is deprecated) - - - - - - - - In &v4l2-fmtdesc; a &v4l2-buf-type; field named -type was added as in &v4l2-format;. The -VIDIOC_ENUM_FBUFFMT ioctl is no longer needed and -was removed. These calls can be replaced by &VIDIOC-ENUM-FMT; with -type V4L2_BUF_TYPE_VIDEO_OVERLAY. - - - - In &v4l2-pix-format; the -depth field was removed, assuming -applications which recognize the format by its four-character-code -already know the color depth, and others do not care about it. The -same rationale lead to the removal of the -V4L2_FMT_FLAG_COMPRESSED flag. The -V4L2_FMT_FLAG_SWCONVECOMPRESSED flag was removed -because drivers are not supposed to convert images in kernel space. A -user library of conversion functions should be provided instead. The -V4L2_FMT_FLAG_BYTESPERLINE flag was redundant. -Applications can set the bytesperline field -to zero to get a reasonable default. Since the remaining flags were -replaced as well, the flags field itself -was removed. - The interlace flags were replaced by a &v4l2-field; -value in a newly added field -field. - - - - Old flag - &v4l2-field; - - - - - V4L2_FMT_FLAG_NOT_INTERLACED - ? - - - V4L2_FMT_FLAG_INTERLACED -= V4L2_FMT_FLAG_COMBINED - V4L2_FIELD_INTERLACED - - - V4L2_FMT_FLAG_TOPFIELD -= V4L2_FMT_FLAG_ODDFIELD - V4L2_FIELD_TOP - - - V4L2_FMT_FLAG_BOTFIELD -= V4L2_FMT_FLAG_EVENFIELD - V4L2_FIELD_BOTTOM - - - - - V4L2_FIELD_SEQ_TB - - - - - V4L2_FIELD_SEQ_BT - - - - - V4L2_FIELD_ALTERNATE - - - - - - The color space flags were replaced by a -&v4l2-colorspace; value in a newly added -colorspace field, where one of -V4L2_COLORSPACE_SMPTE170M, -V4L2_COLORSPACE_BT878, -V4L2_COLORSPACE_470_SYSTEM_M or -V4L2_COLORSPACE_470_SYSTEM_BG replaces -V4L2_FMT_CS_601YUV. - - - - In &v4l2-requestbuffers; the -type field was properly defined as -&v4l2-buf-type;. Buffer types changed as mentioned above. A new -memory field of type &v4l2-memory; was -added to distinguish between I/O methods using buffers allocated -by the driver or the application. See for -details. - - - - In &v4l2-buffer; the type -field was properly defined as &v4l2-buf-type;. Buffer types changed as -mentioned above. A field field of type -&v4l2-field; was added to indicate if a buffer contains a top or -bottom field. The old field flags were removed. Since no unadjusted -system time clock was added to the kernel as planned, the -timestamp field changed back from type -stamp_t, an unsigned 64 bit integer expressing the sample time in -nanoseconds, to struct timeval. With the -addition of a second memory mapping method the -offset field moved into union -m, and a new -memory field of type &v4l2-memory; was -added to distinguish between I/O methods. See -for details. - - The V4L2_BUF_REQ_CONTIG -flag was used by the V4L compatibility layer, after changes to this -code it was no longer needed. The -V4L2_BUF_ATTR_DEVICEMEM flag would indicate if -the buffer was indeed allocated in device memory rather than DMA-able -system memory. It was barely useful and so was removed. - - - - In &v4l2-framebuffer; the -base[3] array anticipating double- and -triple-buffering in off-screen video memory, however without defining -a synchronization mechanism, was replaced by a single pointer. The -V4L2_FBUF_CAP_SCALEUP and -V4L2_FBUF_CAP_SCALEDOWN flags were removed. -Applications can determine this capability more accurately using the -new cropping and scaling interface. The -V4L2_FBUF_CAP_CLIPPING flag was replaced by -V4L2_FBUF_CAP_LIST_CLIPPING and -V4L2_FBUF_CAP_BITMAP_CLIPPING. - - - - In &v4l2-clip; the x, -y, width and -height field moved into a -c substructure of type &v4l2-rect;. The -x and y fields -were renamed to left and -top, &ie; offsets to a context dependent -origin. - - - - In &v4l2-window; the x, -y, width and -height field moved into a -w substructure as above. A -field field of type %v4l2-field; was added -to distinguish between field and frame (interlaced) overlay. - - - - The digital zoom interface, including struct -v4l2_zoomcap, struct -v4l2_zoom, -V4L2_ZOOM_NONCAP and -V4L2_ZOOM_WHILESTREAMING was replaced by a new -cropping and scaling interface. The previously unused struct -v4l2_cropcap and -v4l2_crop where redefined for this purpose. -See for details. - - - - In &v4l2-vbi-format; the -SAMPLE_FORMAT field now contains a -four-character-code as used to identify video image formats and -V4L2_PIX_FMT_GREY replaces the -V4L2_VBI_SF_UBYTE define. The -reserved field was extended. - - - - In &v4l2-captureparm; the type of the -timeperframe field changed from unsigned -long to &v4l2-fract;. This allows the accurate expression of multiples -of the NTSC-M frame rate 30000 / 1001. A new field -readbuffers was added to control the driver -behaviour in read I/O mode. - - Similar changes were made to &v4l2-outputparm;. - - - - The struct v4l2_performance -and VIDIOC_G_PERF ioctl were dropped. Except when -using the read/write I/O method, which is -limited anyway, this information is already available to -applications. - - - - The example transformation from RGB to YCbCr color -space in the old V4L2 documentation was inaccurate, this has been -corrected in . - - -
- -
- V4L2 2003-06-19 - - - - A new capability flag -V4L2_CAP_RADIO was added for radio devices. Prior -to this change radio devices would identify solely by having exactly one -tuner whose type field reads V4L2_TUNER_RADIO. - - - - An optional driver access priority mechanism was -added, see for details. - - - - The audio input and output interface was found to be -incomplete. - Previously the &VIDIOC-G-AUDIO; -ioctl would enumerate the available audio inputs. An ioctl to -determine the current audio input, if more than one combines with the -current video input, did not exist. So -VIDIOC_G_AUDIO was renamed to -VIDIOC_G_AUDIO_OLD, this ioctl was removed on -Kernel 2.6.39. The &VIDIOC-ENUMAUDIO; ioctl was added to enumerate -audio inputs, while &VIDIOC-G-AUDIO; now reports the current audio -input. - The same changes were made to &VIDIOC-G-AUDOUT; and -&VIDIOC-ENUMAUDOUT;. - Until further the "videodev" module will automatically -translate between the old and new ioctls, but drivers and applications -must be updated to successfully compile again. - - - - The &VIDIOC-OVERLAY; ioctl was incorrectly defined with -write-read parameter. It was changed to write-only, while the write-read -version was renamed to VIDIOC_OVERLAY_OLD. The old -ioctl was removed on Kernel 2.6.39. Until further the "videodev" -kernel module will automatically translate to the new version, so drivers -must be recompiled, but not applications. - - - - incorrectly stated that -clipping rectangles define regions where the video can be seen. -Correct is that clipping rectangles define regions where -no video shall be displayed and so the graphics -surface can be seen. - - - - The &VIDIOC-S-PARM; and &VIDIOC-S-CTRL; ioctls were -defined with write-only parameter, inconsistent with other ioctls -modifying their argument. They were changed to write-read, while a -_OLD suffix was added to the write-only versions. -The old ioctls were removed on Kernel 2.6.39. Drivers and -applications assuming a constant parameter need an update. - - -
- -
- V4L2 2003-11-05 - - - In the following pixel -formats were incorrectly transferred from Bill Dirks' V4L2 -specification. Descriptions below refer to bytes in memory, in -ascending address order. - - - - Symbol - In this document prior to revision -0.5 - Corrected - - - - - V4L2_PIX_FMT_RGB24 - B, G, R - R, G, B - - - V4L2_PIX_FMT_BGR24 - R, G, B - B, G, R - - - V4L2_PIX_FMT_RGB32 - B, G, R, X - R, G, B, X - - - V4L2_PIX_FMT_BGR32 - R, G, B, X - B, G, R, X - - - - The -V4L2_PIX_FMT_BGR24 example was always -correct. - In the mapping -of the V4L VIDEO_PALETTE_RGB24 and -VIDEO_PALETTE_RGB32 formats to V4L2 pixel formats -was accordingly corrected. - - - - Unrelated to the fixes above, drivers may still -interpret some V4L2 RGB pixel formats differently. These issues have -yet to be addressed, for details see . - - -
- -
- V4L2 in Linux 2.6.6, 2004-05-09 - - - The &VIDIOC-CROPCAP; ioctl was incorrectly defined -with read-only parameter. It is now defined as write-read ioctl, while -the read-only version was renamed to -VIDIOC_CROPCAP_OLD. The old ioctl was removed -on Kernel 2.6.39. - - -
- -
- V4L2 in Linux 2.6.8 - - - A new field input (former -reserved[0]) was added to the &v4l2-buffer; -structure. Purpose of this field is to alternate between video inputs -(⪚ cameras) in step with the video capturing process. This function -must be enabled with the new V4L2_BUF_FLAG_INPUT -flag. The flags field is no longer -read-only. - - -
- -
- V4L2 spec erratum 2004-08-01 - - - - The return value of the - function was incorrectly documented. - - - - Audio output ioctls end in -AUDOUT, not -AUDIOOUT. - - - - In the Current Audio Input example the -VIDIOC_G_AUDIO ioctl took the wrong -argument. - - - - The documentation of the &VIDIOC-QBUF; and -&VIDIOC-DQBUF; ioctls did not mention the &v4l2-buffer; -memory field. It was also missing from -examples. Also on the VIDIOC_DQBUF page the &EIO; -was not documented. - - -
- -
- V4L2 in Linux 2.6.14 - - - A new sliced VBI interface was added. It is documented -in and replaces the interface first -proposed in V4L2 specification 0.8. - - -
- -
- V4L2 in Linux 2.6.15 - - - The &VIDIOC-LOG-STATUS; ioctl was added. - - - - New video standards -V4L2_STD_NTSC_443, -V4L2_STD_SECAM_LC, -V4L2_STD_SECAM_DK (a set of SECAM D, K and K1), -and V4L2_STD_ATSC (a set of -V4L2_STD_ATSC_8_VSB and -V4L2_STD_ATSC_16_VSB) were defined. Note the -V4L2_STD_525_60 set now includes -V4L2_STD_NTSC_443. See also . - - - - The VIDIOC_G_COMP and -VIDIOC_S_COMP ioctl were renamed to -VIDIOC_G_MPEGCOMP and -VIDIOC_S_MPEGCOMP respectively. Their argument -was replaced by a struct -v4l2_mpeg_compression pointer. (The -VIDIOC_G_MPEGCOMP and -VIDIOC_S_MPEGCOMP ioctls where removed in Linux -2.6.25.) - - -
- -
- V4L2 spec erratum 2005-11-27 - The capture example in -called the &VIDIOC-S-CROP; ioctl without checking if cropping is -supported. In the video standard selection example in - the &VIDIOC-S-STD; call used the wrong -argument type. -
- -
- V4L2 spec erratum 2006-01-10 - - - The V4L2_IN_ST_COLOR_KILL flag in -&v4l2-input; not only indicates if the color killer is enabled, but -also if it is active. (The color killer disables color decoding when -it detects no color in the video signal to improve the image -quality.) - - - - &VIDIOC-S-PARM; is a write-read ioctl, not write-only as -stated on its reference page. The ioctl changed in 2003 as noted above. - - -
- -
- V4L2 spec erratum 2006-02-03 - - - In &v4l2-captureparm; and &v4l2-outputparm; the -timeperframe field gives the time in -seconds, not microseconds. - - -
- -
- V4L2 spec erratum 2006-02-04 - - - The clips field in -&v4l2-window; must point to an array of &v4l2-clip;, not a linked -list, because drivers ignore the struct -v4l2_clip.next -pointer. - - -
- -
- V4L2 in Linux 2.6.17 - - - New video standard macros were added: -V4L2_STD_NTSC_M_KR (NTSC M South Korea), and the -sets V4L2_STD_MN, -V4L2_STD_B, V4L2_STD_GH and -V4L2_STD_DK. The -V4L2_STD_NTSC and -V4L2_STD_SECAM sets now include -V4L2_STD_NTSC_M_KR and -V4L2_STD_SECAM_LC respectively. - - - - A new V4L2_TUNER_MODE_LANG1_LANG2 -was defined to record both languages of a bilingual program. The -use of V4L2_TUNER_MODE_STEREO for this purpose -is deprecated now. See the &VIDIOC-G-TUNER; section for -details. - - -
- -
- V4L2 spec erratum 2006-09-23 (Draft 0.15) - - - In various places -V4L2_BUF_TYPE_SLICED_VBI_CAPTURE and -V4L2_BUF_TYPE_SLICED_VBI_OUTPUT of the sliced VBI -interface were not mentioned along with other buffer types. - - - - In it was clarified -that the &v4l2-audio; mode field is a flags -field. - - - - did not mention the -sliced VBI and radio capability flags. - - - - In it was -clarified that applications must initialize the tuner -type field of &v4l2-frequency; before -calling &VIDIOC-S-FREQUENCY;. - - - - The reserved array -in &v4l2-requestbuffers; has 2 elements, not 32. - - - - In and the device file names -/dev/vout which never caught on were replaced -by /dev/video. - - - - With Linux 2.6.15 the possible range for VBI device minor -numbers was extended from 224-239 to 224-255. Accordingly device file names -/dev/vbi0 to /dev/vbi31 are -possible now. - - -
- -
- V4L2 in Linux 2.6.18 - - - New ioctls &VIDIOC-G-EXT-CTRLS;, &VIDIOC-S-EXT-CTRLS; -and &VIDIOC-TRY-EXT-CTRLS; were added, a flag to skip unsupported -controls with &VIDIOC-QUERYCTRL;, new control types -V4L2_CTRL_TYPE_INTEGER64 and -V4L2_CTRL_TYPE_CTRL_CLASS (), and new control flags -V4L2_CTRL_FLAG_READ_ONLY, -V4L2_CTRL_FLAG_UPDATE, -V4L2_CTRL_FLAG_INACTIVE and -V4L2_CTRL_FLAG_SLIDER (). See for details. - - -
- -
- V4L2 in Linux 2.6.19 - - - In &v4l2-sliced-vbi-cap; a buffer type field was added -replacing a reserved field. Note on architectures where the size of -enum types differs from int types the size of the structure changed. -The &VIDIOC-G-SLICED-VBI-CAP; ioctl was redefined from being read-only -to write-read. Applications must initialize the type field and clear -the reserved fields now. These changes may break the -compatibility with older drivers and applications. - - - - The ioctls &VIDIOC-ENUM-FRAMESIZES; and -&VIDIOC-ENUM-FRAMEINTERVALS; were added. - - - - A new pixel format V4L2_PIX_FMT_RGB444 () was added. - - -
- -
- V4L2 spec erratum 2006-10-12 (Draft 0.17) - - - V4L2_PIX_FMT_HM12 () is a YUV 4:2:0, not 4:2:2 format. - - -
- -
- V4L2 in Linux 2.6.21 - - - The videodev2.h header file is -now dual licensed under GNU General Public License version two or -later, and under a 3-clause BSD-style license. - - -
- -
- V4L2 in Linux 2.6.22 - - - Two new field orders - V4L2_FIELD_INTERLACED_TB and - V4L2_FIELD_INTERLACED_BT were - added. See for details. - - - - Three new clipping/blending methods with a global or -straight or inverted local alpha value were added to the video overlay -interface. See the description of the &VIDIOC-G-FBUF; and -&VIDIOC-S-FBUF; ioctls for details. - A new global_alpha field -was added to v4l2_window, -extending the structure. This may break -compatibility with applications using a struct -v4l2_window directly. However the VIDIOC_G/S/TRY_FMT ioctls, which take a -pointer to a v4l2_format parent -structure with padding bytes at the end, are not affected. - - - - The format of the chromakey -field in &v4l2-window; changed from "host order RGB32" to a pixel -value in the same format as the framebuffer. This may break -compatibility with existing applications. Drivers -supporting the "host order RGB32" format are not known. - - - -
- -
- V4L2 in Linux 2.6.24 - - - The pixel formats -V4L2_PIX_FMT_PAL8, -V4L2_PIX_FMT_YUV444, -V4L2_PIX_FMT_YUV555, -V4L2_PIX_FMT_YUV565 and -V4L2_PIX_FMT_YUV32 were added. - - -
- -
- V4L2 in Linux 2.6.25 - - - The pixel formats -V4L2_PIX_FMT_Y16 and -V4L2_PIX_FMT_SBGGR16 were added. - - - New controls -V4L2_CID_POWER_LINE_FREQUENCY, -V4L2_CID_HUE_AUTO, -V4L2_CID_WHITE_BALANCE_TEMPERATURE, -V4L2_CID_SHARPNESS and -V4L2_CID_BACKLIGHT_COMPENSATION were added. The -controls V4L2_CID_BLACK_LEVEL, -V4L2_CID_WHITENESS, -V4L2_CID_HCENTER and -V4L2_CID_VCENTER were deprecated. - - - - A Camera controls -class was added, with the new controls -V4L2_CID_EXPOSURE_AUTO, -V4L2_CID_EXPOSURE_ABSOLUTE, -V4L2_CID_EXPOSURE_AUTO_PRIORITY, -V4L2_CID_PAN_RELATIVE, -V4L2_CID_TILT_RELATIVE, -V4L2_CID_PAN_RESET, -V4L2_CID_TILT_RESET, -V4L2_CID_PAN_ABSOLUTE, -V4L2_CID_TILT_ABSOLUTE, -V4L2_CID_FOCUS_ABSOLUTE, -V4L2_CID_FOCUS_RELATIVE and -V4L2_CID_FOCUS_AUTO. - - - The VIDIOC_G_MPEGCOMP and -VIDIOC_S_MPEGCOMP ioctls, which were superseded -by the extended controls -interface in Linux 2.6.18, where finally removed from the -videodev2.h header file. - - -
- -
- V4L2 in Linux 2.6.26 - - - The pixel formats -V4L2_PIX_FMT_Y16 and -V4L2_PIX_FMT_SBGGR16 were added. - - - Added user controls -V4L2_CID_CHROMA_AGC and -V4L2_CID_COLOR_KILLER. - - -
- -
- V4L2 in Linux 2.6.27 - - - The &VIDIOC-S-HW-FREQ-SEEK; ioctl and the -V4L2_CAP_HW_FREQ_SEEK capability were added. - - - The pixel formats -V4L2_PIX_FMT_YVYU, -V4L2_PIX_FMT_PCA501, -V4L2_PIX_FMT_PCA505, -V4L2_PIX_FMT_PCA508, -V4L2_PIX_FMT_PCA561, -V4L2_PIX_FMT_SGBRG8, -V4L2_PIX_FMT_PAC207 and -V4L2_PIX_FMT_PJPG were added. - - -
- -
- V4L2 in Linux 2.6.28 - - - Added V4L2_MPEG_AUDIO_ENCODING_AAC and -V4L2_MPEG_AUDIO_ENCODING_AC3 MPEG audio encodings. - - - Added V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVC MPEG -video encoding. - - - The pixel formats -V4L2_PIX_FMT_SGRBG10 and -V4L2_PIX_FMT_SGRBG10DPCM8 were added. - - -
- -
- V4L2 in Linux 2.6.29 - - - The VIDIOC_G_CHIP_IDENT ioctl was renamed -to VIDIOC_G_CHIP_IDENT_OLD and VIDIOC_DBG_G_CHIP_IDENT -was introduced in its place. The old struct v4l2_chip_ident -was renamed to v4l2_chip_ident_old. - - - The pixel formats -V4L2_PIX_FMT_VYUY, -V4L2_PIX_FMT_NV16 and -V4L2_PIX_FMT_NV61 were added. - - - Added camera controls -V4L2_CID_ZOOM_ABSOLUTE, -V4L2_CID_ZOOM_RELATIVE, -V4L2_CID_ZOOM_CONTINUOUS and -V4L2_CID_PRIVACY. - - -
-
- V4L2 in Linux 2.6.30 - - - New control flag V4L2_CTRL_FLAG_WRITE_ONLY was added. - - - New control V4L2_CID_COLORFX was added. - - -
-
- V4L2 in Linux 2.6.32 - - - In order to be easier to compare a V4L2 API and a kernel -version, now V4L2 API is numbered using the Linux Kernel version numeration. - - - Finalized the RDS capture API. See for -more information. - - - Added new capabilities for modulators and RDS encoders. - - - Add description for libv4l API. - - - Added support for string controls via new type V4L2_CTRL_TYPE_STRING. - - - Added V4L2_CID_BAND_STOP_FILTER documentation. - - - Added FM Modulator (FM TX) Extended Control Class: V4L2_CTRL_CLASS_FM_TX and their Control IDs. - - - Added FM Receiver (FM RX) Extended Control Class: V4L2_CTRL_CLASS_FM_RX and their Control IDs. - - - Added Remote Controller chapter, describing the default Remote Controller mapping for media devices. - - -
-
- V4L2 in Linux 2.6.33 - - - Added support for Digital Video timings in order to support HDTV receivers and transmitters. - - -
-
- V4L2 in Linux 2.6.34 - - - Added -V4L2_CID_IRIS_ABSOLUTE and -V4L2_CID_IRIS_RELATIVE controls to the - Camera controls class. - - - -
-
- V4L2 in Linux 2.6.37 - - - Remove the vtx (videotext/teletext) API. This API was no longer -used and no hardware exists to verify the API. Nor were any userspace applications found -that used it. It was originally scheduled for removal in 2.6.35. - - - -
-
- V4L2 in Linux 2.6.39 - - - The old VIDIOC_*_OLD symbols and V4L1 support were removed. - - - Multi-planar API added. Does not affect the compatibility of - current drivers and applications. See - multi-planar API - for details. - - -
-
- V4L2 in Linux 3.1 - - - VIDIOC_QUERYCAP now returns a per-subsystem version instead of a per-driver one. - Standardize an error code for invalid ioctl. - Added V4L2_CTRL_TYPE_BITMASK. - - -
-
- V4L2 in Linux 3.2 - - - V4L2_CTRL_FLAG_VOLATILE was added to signal volatile controls to userspace. - - - Add selection API for extended control over cropping - and composing. Does not affect the compatibility of current - drivers and applications. See selection API for - details. - - -
- -
- V4L2 in Linux 3.3 - - - Added V4L2_CID_ALPHA_COMPONENT control - to the User controls class. - - - - Added the device_caps field to struct v4l2_capabilities and added the new - V4L2_CAP_DEVICE_CAPS capability. - - -
- -
- V4L2 in Linux 3.4 - - - Added JPEG compression control - class. - - - Extended the DV Timings API: - &VIDIOC-ENUM-DV-TIMINGS;, &VIDIOC-QUERY-DV-TIMINGS; and - &VIDIOC-DV-TIMINGS-CAP;. - - -
- -
- V4L2 in Linux 3.5 - - - Added integer menus, the new type will be - V4L2_CTRL_TYPE_INTEGER_MENU. - - - Added selection API for V4L2 subdev interface: - &VIDIOC-SUBDEV-G-SELECTION; and - &VIDIOC-SUBDEV-S-SELECTION;. - - - Added V4L2_COLORFX_ANTIQUE, - V4L2_COLORFX_ART_FREEZE, - V4L2_COLORFX_AQUA, - V4L2_COLORFX_SILHOUETTE, - V4L2_COLORFX_SOLARIZATION, - V4L2_COLORFX_VIVID and - V4L2_COLORFX_ARBITRARY_CBCR menu items - to the V4L2_CID_COLORFX control. - - - Added V4L2_CID_COLORFX_CBCR control. - - - Added camera controls V4L2_CID_AUTO_EXPOSURE_BIAS, - V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE, - V4L2_CID_IMAGE_STABILIZATION, - V4L2_CID_ISO_SENSITIVITY, - V4L2_CID_ISO_SENSITIVITY_AUTO, - V4L2_CID_EXPOSURE_METERING, - V4L2_CID_SCENE_MODE, - V4L2_CID_3A_LOCK, - V4L2_CID_AUTO_FOCUS_START, - V4L2_CID_AUTO_FOCUS_STOP, - V4L2_CID_AUTO_FOCUS_STATUS and - V4L2_CID_AUTO_FOCUS_RANGE. - - - -
- -
- V4L2 in Linux 3.6 - - - Replaced input in - v4l2_buffer by - reserved2 and removed - V4L2_BUF_FLAG_INPUT. - - - Added V4L2_CAP_VIDEO_M2M and V4L2_CAP_VIDEO_M2M_MPLANE capabilities. - - - Added support for frequency band enumerations: &VIDIOC-ENUM-FREQ-BANDS;. - - -
- -
- V4L2 in Linux 3.9 - - - Added timestamp types to - flags field in - v4l2_buffer. See . - - - Added V4L2_EVENT_CTRL_CH_RANGE control event - changes flag. See . - - -
- -
- V4L2 in Linux 3.10 - - - Removed obsolete and unused DV_PRESET ioctls - VIDIOC_G_DV_PRESET, VIDIOC_S_DV_PRESET, VIDIOC_QUERY_DV_PRESET and - VIDIOC_ENUM_DV_PRESET. Remove the related v4l2_input/output capability - flags V4L2_IN_CAP_PRESETS and V4L2_OUT_CAP_PRESETS. - - - - Added new debugging ioctl &VIDIOC-DBG-G-CHIP-INFO;. - - - -
- -
- V4L2 in Linux 3.11 - - - Remove obsolete VIDIOC_DBG_G_CHIP_IDENT ioctl. - - - -
- -
- V4L2 in Linux 3.14 - - - In struct v4l2_rect, the type -of width and height -fields changed from _s32 to _u32. - - - -
- -
- V4L2 in Linux 3.15 - - - Added Software Defined Radio (SDR) Interface. - - - -
- -
- V4L2 in Linux 3.16 - - - Added event V4L2_EVENT_SOURCE_CHANGE. - - - -
- -
- V4L2 in Linux 3.17 - - - Extended &v4l2-pix-format;. Added format flags. - - - - Added compound control types and &VIDIOC-QUERY-EXT-CTRL;. - - - -
- -
- V4L2 in Linux 3.18 - - - Added V4L2_CID_PAN_SPEED and - V4L2_CID_TILT_SPEED camera controls. - - -
- -
- V4L2 in Linux 3.19 - - - Rewrote Colorspace chapter, added new &v4l2-ycbcr-encoding; -and &v4l2-quantization; fields to &v4l2-pix-format;, &v4l2-pix-format-mplane; -and &v4l2-mbus-framefmt;. - - - -
- -
- V4L2 in Linux 4.4 - - - Renamed V4L2_TUNER_ADC to -V4L2_TUNER_SDR. The use of -V4L2_TUNER_ADC is deprecated now. - - - - Added V4L2_CID_RF_TUNER_RF_GAIN -RF Tuner control. - - - Added transmitter support for Software Defined Radio (SDR) -Interface. - - -
- -
- Relation of V4L2 to other Linux multimedia APIs - -
- X Video Extension - - The X Video Extension (abbreviated XVideo or just Xv) is -an extension of the X Window system, implemented for example by the -XFree86 project. Its scope is similar to V4L2, an API to video capture -and output devices for X clients. Xv allows applications to display -live video in a window, send window contents to a TV output, and -capture or output still images in XPixmaps - This is not implemented in XFree86. - . With their implementation XFree86 makes the -extension available across many operating systems and -architectures. - - Because the driver is embedded into the X server Xv has a -number of advantages over the V4L2 video -overlay interface. The driver can easily determine the overlay -target, &ie; visible graphics memory or off-screen buffers for a -destructive overlay. It can program the RAMDAC for a non-destructive -overlay, scaling or color-keying, or the clipping functions of the -video capture hardware, always in sync with drawing operations or -windows moving or changing their stacking order. - - To combine the advantages of Xv and V4L a special Xv -driver exists in XFree86 and XOrg, just programming any overlay capable -Video4Linux device it finds. To enable it -/etc/X11/XF86Config must contain these lines: - -Section "Module" - Load "v4l" -EndSection - - As of XFree86 4.2 this driver still supports only V4L -ioctls, however it should work just fine with all V4L2 devices through -the V4L2 backward-compatibility layer. Since V4L2 permits multiple -opens it is possible (if supported by the V4L2 driver) to capture -video while an X client requested video overlay. Restrictions of -simultaneous capturing and overlay are discussed in apply. - - Only marginally related to V4L2, XFree86 extended Xv to -support hardware YUV to RGB conversion and scaling for faster video -playback, and added an interface to MPEG-2 decoding hardware. This API -is useful to display images captured with V4L2 devices. -
- -
- Digital Video - - V4L2 does not support digital terrestrial, cable or -satellite broadcast. A separate project aiming at digital receivers -exists. You can find its homepage at https://linuxtv.org. The Linux DVB API -has no connection to the V4L2 API except that drivers for hybrid -hardware may support both. -
- -
- Audio Interfaces - - [to do - OSS/ALSA] -
-
- -
- Experimental API Elements - - The following V4L2 API elements are currently experimental -and may change in the future. - - - - &VIDIOC-DBG-G-REGISTER; and &VIDIOC-DBG-S-REGISTER; -ioctls. - - - &VIDIOC-DBG-G-CHIP-INFO; ioctl. - - -
- -
- Obsolete API Elements - - The following V4L2 API elements were superseded by new -interfaces and should not be implemented in new drivers. - - - - VIDIOC_G_MPEGCOMP and -VIDIOC_S_MPEGCOMP ioctls. Use Extended Controls, -. - - - VIDIOC_G_DV_PRESET, VIDIOC_S_DV_PRESET, VIDIOC_ENUM_DV_PRESETS and - VIDIOC_QUERY_DV_PRESET ioctls. Use the DV Timings API (). - - - VIDIOC_SUBDEV_G_CROP and - VIDIOC_SUBDEV_S_CROP ioctls. Use - VIDIOC_SUBDEV_G_SELECTION and - VIDIOC_SUBDEV_S_SELECTION, . - - -
-
diff --git a/Documentation/DocBook/media/v4l/controls.xml b/Documentation/DocBook/media/v4l/controls.xml deleted file mode 100644 index e2e5484d2d9b..000000000000 --- a/Documentation/DocBook/media/v4l/controls.xml +++ /dev/null @@ -1,5505 +0,0 @@ -
- User Controls - - Devices typically have a number of user-settable controls -such as brightness, saturation and so on, which would be presented to -the user on a graphical user interface. But, different devices -will have different controls available, and furthermore, the range of -possible values, and the default value will vary from device to -device. The control ioctls provide the information and a mechanism to -create a nice user interface for these controls that will work -correctly with any device. - - All controls are accessed using an ID value. V4L2 defines -several IDs for specific purposes. Drivers can also implement their -own custom controls using V4L2_CID_PRIVATE_BASE -The use of V4L2_CID_PRIVATE_BASE -is problematic because different drivers may use the same -V4L2_CID_PRIVATE_BASE ID for different controls. -This makes it hard to programatically set such controls since the meaning -of the control with that ID is driver dependent. In order to resolve this -drivers use unique IDs and the V4L2_CID_PRIVATE_BASE -IDs are mapped to those unique IDs by the kernel. Consider these -V4L2_CID_PRIVATE_BASE IDs as aliases to the real -IDs. -Many applications today still use the V4L2_CID_PRIVATE_BASE -IDs instead of using &VIDIOC-QUERYCTRL; with the V4L2_CTRL_FLAG_NEXT_CTRL -flag to enumerate all IDs, so support for V4L2_CID_PRIVATE_BASE -is still around. -and higher values. The pre-defined control IDs have the prefix -V4L2_CID_, and are listed in . The ID is used when querying the attributes of -a control, and when getting or setting the current value. - - Generally applications should present controls to the user -without assumptions about their purpose. Each control comes with a -name string the user is supposed to understand. When the purpose is -non-intuitive the driver writer should provide a user manual, a user -interface plug-in or a driver specific panel application. Predefined -IDs were introduced to change a few controls programmatically, for -example to mute a device during a channel switch. - - Drivers may enumerate different controls after switching -the current video input or output, tuner or modulator, or audio input -or output. Different in the sense of other bounds, another default and -current value, step size or other menu items. A control with a certain -custom ID can also change name and -type. - - If a control is not applicable to the current configuration -of the device (for example, it doesn't apply to the current video input) -drivers set the V4L2_CTRL_FLAG_INACTIVE flag. - - Control values are stored globally, they do not -change when switching except to stay within the reported bounds. They -also do not change ⪚ when the device is opened or closed, when the -tuner radio frequency is changed or generally never without -application request. - - V4L2 specifies an event mechanism to notify applications -when controls change value (see &VIDIOC-SUBSCRIBE-EVENT;, event -V4L2_EVENT_CTRL), panel applications might want to make -use of that in order to always reflect the correct control value. - - - All controls use machine endianness. - - - - Control IDs - - &cs-def; - - - ID - Type - Description - - - - - V4L2_CID_BASE - - First predefined ID, equal to -V4L2_CID_BRIGHTNESS. - - - V4L2_CID_USER_BASE - - Synonym of V4L2_CID_BASE. - - - V4L2_CID_BRIGHTNESS - integer - Picture brightness, or more precisely, the black -level. - - - V4L2_CID_CONTRAST - integer - Picture contrast or luma gain. - - - V4L2_CID_SATURATION - integer - Picture color saturation or chroma gain. - - - V4L2_CID_HUE - integer - Hue or color balance. - - - V4L2_CID_AUDIO_VOLUME - integer - Overall audio volume. Note some drivers also -provide an OSS or ALSA mixer interface. - - - V4L2_CID_AUDIO_BALANCE - integer - Audio stereo balance. Minimum corresponds to all -the way left, maximum to right. - - - V4L2_CID_AUDIO_BASS - integer - Audio bass adjustment. - - - V4L2_CID_AUDIO_TREBLE - integer - Audio treble adjustment. - - - V4L2_CID_AUDIO_MUTE - boolean - Mute audio, &ie; set the volume to zero, however -without affecting V4L2_CID_AUDIO_VOLUME. Like -ALSA drivers, V4L2 drivers must mute at load time to avoid excessive -noise. Actually the entire device should be reset to a low power -consumption state. - - - V4L2_CID_AUDIO_LOUDNESS - boolean - Loudness mode (bass boost). - - - V4L2_CID_BLACK_LEVEL - integer - Another name for brightness (not a synonym of -V4L2_CID_BRIGHTNESS). This control is deprecated -and should not be used in new drivers and applications. - - - V4L2_CID_AUTO_WHITE_BALANCE - boolean - Automatic white balance (cameras). - - - V4L2_CID_DO_WHITE_BALANCE - button - This is an action control. When set (the value is -ignored), the device will do a white balance and then hold the current -setting. Contrast this with the boolean -V4L2_CID_AUTO_WHITE_BALANCE, which, when -activated, keeps adjusting the white balance. - - - V4L2_CID_RED_BALANCE - integer - Red chroma balance. - - - V4L2_CID_BLUE_BALANCE - integer - Blue chroma balance. - - - V4L2_CID_GAMMA - integer - Gamma adjust. - - - V4L2_CID_WHITENESS - integer - Whiteness for grey-scale devices. This is a synonym -for V4L2_CID_GAMMA. This control is deprecated -and should not be used in new drivers and applications. - - - V4L2_CID_EXPOSURE - integer - Exposure (cameras). [Unit?] - - - V4L2_CID_AUTOGAIN - boolean - Automatic gain/exposure control. - - - V4L2_CID_GAIN - integer - Gain control. - - - V4L2_CID_HFLIP - boolean - Mirror the picture horizontally. - - - V4L2_CID_VFLIP - boolean - Mirror the picture vertically. - - - V4L2_CID_POWER_LINE_FREQUENCY - enum - Enables a power line frequency filter to avoid -flicker. Possible values for enum v4l2_power_line_frequency are: -V4L2_CID_POWER_LINE_FREQUENCY_DISABLED (0), -V4L2_CID_POWER_LINE_FREQUENCY_50HZ (1), -V4L2_CID_POWER_LINE_FREQUENCY_60HZ (2) and -V4L2_CID_POWER_LINE_FREQUENCY_AUTO (3). - - - V4L2_CID_HUE_AUTO - boolean - Enables automatic hue control by the device. The -effect of setting V4L2_CID_HUE while automatic -hue control is enabled is undefined, drivers should ignore such -request. - - - V4L2_CID_WHITE_BALANCE_TEMPERATURE - integer - This control specifies the white balance settings -as a color temperature in Kelvin. A driver should have a minimum of -2800 (incandescent) to 6500 (daylight). For more information about -color temperature see Wikipedia. - - - V4L2_CID_SHARPNESS - integer - Adjusts the sharpness filters in a camera. The -minimum value disables the filters, higher values give a sharper -picture. - - - V4L2_CID_BACKLIGHT_COMPENSATION - integer - Adjusts the backlight compensation in a camera. The -minimum value disables backlight compensation. - - - V4L2_CID_CHROMA_AGC - boolean - Chroma automatic gain control. - - - V4L2_CID_CHROMA_GAIN - integer - Adjusts the Chroma gain control (for use when chroma AGC - is disabled). - - - V4L2_CID_COLOR_KILLER - boolean - Enable the color killer (&ie; force a black & white image in case of a weak video signal). - - - V4L2_CID_COLORFX - enum - Selects a color effect. The following values are defined: - - - - - - - - V4L2_COLORFX_NONE  - Color effect is disabled. - - - V4L2_COLORFX_ANTIQUE  - An aging (old photo) effect. - - - V4L2_COLORFX_ART_FREEZE  - Frost color effect. - - - V4L2_COLORFX_AQUA  - Water color, cool tone. - - - V4L2_COLORFX_BW  - Black and white. - - - V4L2_COLORFX_EMBOSS  - Emboss, the highlights and shadows replace light/dark boundaries - and low contrast areas are set to a gray background. - - - V4L2_COLORFX_GRASS_GREEN  - Grass green. - - - V4L2_COLORFX_NEGATIVE  - Negative. - - - V4L2_COLORFX_SEPIA  - Sepia tone. - - - V4L2_COLORFX_SKETCH  - Sketch. - - - V4L2_COLORFX_SKIN_WHITEN  - Skin whiten. - - - V4L2_COLORFX_SKY_BLUE  - Sky blue. - - - V4L2_COLORFX_SOLARIZATION  - Solarization, the image is partially reversed in tone, - only color values above or below a certain threshold are inverted. - - - - V4L2_COLORFX_SILHOUETTE  - Silhouette (outline). - - - V4L2_COLORFX_VIVID  - Vivid colors. - - - V4L2_COLORFX_SET_CBCR  - The Cb and Cr chroma components are replaced by fixed - coefficients determined by V4L2_CID_COLORFX_CBCR - control. - - - - - - V4L2_CID_COLORFX_CBCR - integer - Determines the Cb and Cr coefficients for V4L2_COLORFX_SET_CBCR - color effect. Bits [7:0] of the supplied 32 bit value are interpreted as - Cr component, bits [15:8] as Cb component and bits [31:16] must be zero. - - - - V4L2_CID_AUTOBRIGHTNESS - boolean - Enable Automatic Brightness. - - - V4L2_CID_ROTATE - integer - Rotates the image by specified angle. Common angles are 90, - 270 and 180. Rotating the image to 90 and 270 will reverse the height - and width of the display window. It is necessary to set the new height and - width of the picture using the &VIDIOC-S-FMT; ioctl according to - the rotation angle selected. - - - V4L2_CID_BG_COLOR - integer - Sets the background color on the current output device. - Background color needs to be specified in the RGB24 format. The - supplied 32 bit value is interpreted as bits 0-7 Red color information, - bits 8-15 Green color information, bits 16-23 Blue color - information and bits 24-31 must be zero. - - - V4L2_CID_ILLUMINATORS_1 - V4L2_CID_ILLUMINATORS_2 - boolean - Switch on or off the illuminator 1 or 2 of the device - (usually a microscope). - - - V4L2_CID_MIN_BUFFERS_FOR_CAPTURE - integer - This is a read-only control that can be read by the application -and used as a hint to determine the number of CAPTURE buffers to pass to REQBUFS. -The value is the minimum number of CAPTURE buffers that is necessary for hardware -to work. - - - V4L2_CID_MIN_BUFFERS_FOR_OUTPUT - integer - This is a read-only control that can be read by the application -and used as a hint to determine the number of OUTPUT buffers to pass to REQBUFS. -The value is the minimum number of OUTPUT buffers that is necessary for hardware -to work. - - - V4L2_CID_ALPHA_COMPONENT - integer - Sets the alpha color component. When a capture device (or - capture queue of a mem-to-mem device) produces a frame format that - includes an alpha component - (e.g. packed RGB image formats) - and the alpha value is not defined by the device or the mem-to-mem - input data this control lets you select the alpha component value of - all pixels. When an output device (or output queue of a mem-to-mem - device) consumes a frame format that doesn't include an alpha - component and the device supports alpha channel processing this - control lets you set the alpha component value of all pixels for - further processing in the device. - - - - V4L2_CID_LASTP1 - - End of the predefined control IDs (currently - V4L2_CID_ALPHA_COMPONENT + 1). - - - V4L2_CID_PRIVATE_BASE - - ID of the first custom (driver specific) control. -Applications depending on particular custom controls should check the -driver name and version, see . - - - -
- - Applications can enumerate the available controls with the -&VIDIOC-QUERYCTRL; and &VIDIOC-QUERYMENU; ioctls, get and set a -control value with the &VIDIOC-G-CTRL; and &VIDIOC-S-CTRL; ioctls. -Drivers must implement VIDIOC_QUERYCTRL, -VIDIOC_G_CTRL and -VIDIOC_S_CTRL when the device has one or more -controls, VIDIOC_QUERYMENU when it has one or -more menu type controls. - - - Enumerating all user controls - - -&v4l2-queryctrl; queryctrl; -&v4l2-querymenu; querymenu; - -static void enumerate_menu(void) -{ - printf(" Menu items:\n"); - - memset(&querymenu, 0, sizeof(querymenu)); - querymenu.id = queryctrl.id; - - for (querymenu.index = queryctrl.minimum; - querymenu.index <= queryctrl.maximum; - querymenu.index++) { - if (0 == ioctl(fd, &VIDIOC-QUERYMENU;, &querymenu)) { - printf(" %s\n", querymenu.name); - } - } -} - -memset(&queryctrl, 0, sizeof(queryctrl)); - -for (queryctrl.id = V4L2_CID_BASE; - queryctrl.id < V4L2_CID_LASTP1; - queryctrl.id++) { - if (0 == ioctl(fd, &VIDIOC-QUERYCTRL;, &queryctrl)) { - if (queryctrl.flags & V4L2_CTRL_FLAG_DISABLED) - continue; - - printf("Control %s\n", queryctrl.name); - - if (queryctrl.type == V4L2_CTRL_TYPE_MENU) - enumerate_menu(); - } else { - if (errno == EINVAL) - continue; - - perror("VIDIOC_QUERYCTRL"); - exit(EXIT_FAILURE); - } -} - -for (queryctrl.id = V4L2_CID_PRIVATE_BASE;; - queryctrl.id++) { - if (0 == ioctl(fd, &VIDIOC-QUERYCTRL;, &queryctrl)) { - if (queryctrl.flags & V4L2_CTRL_FLAG_DISABLED) - continue; - - printf("Control %s\n", queryctrl.name); - - if (queryctrl.type == V4L2_CTRL_TYPE_MENU) - enumerate_menu(); - } else { - if (errno == EINVAL) - break; - - perror("VIDIOC_QUERYCTRL"); - exit(EXIT_FAILURE); - } -} - - - - - Enumerating all user controls (alternative) - -memset(&queryctrl, 0, sizeof(queryctrl)); - -queryctrl.id = V4L2_CTRL_CLASS_USER | V4L2_CTRL_FLAG_NEXT_CTRL; -while (0 == ioctl(fd, &VIDIOC-QUERYCTRL;, &queryctrl)) { - if (V4L2_CTRL_ID2CLASS(queryctrl.id) != V4L2_CTRL_CLASS_USER) - break; - if (queryctrl.flags & V4L2_CTRL_FLAG_DISABLED) - continue; - - printf("Control %s\n", queryctrl.name); - - if (queryctrl.type == V4L2_CTRL_TYPE_MENU) - enumerate_menu(); - - queryctrl.id |= V4L2_CTRL_FLAG_NEXT_CTRL; -} -if (errno != EINVAL) { - perror("VIDIOC_QUERYCTRL"); - exit(EXIT_FAILURE); -} - - - - - Changing controls - - -&v4l2-queryctrl; queryctrl; -&v4l2-control; control; - -memset(&queryctrl, 0, sizeof(queryctrl)); -queryctrl.id = V4L2_CID_BRIGHTNESS; - -if (-1 == ioctl(fd, &VIDIOC-QUERYCTRL;, &queryctrl)) { - if (errno != EINVAL) { - perror("VIDIOC_QUERYCTRL"); - exit(EXIT_FAILURE); - } else { - printf("V4L2_CID_BRIGHTNESS is not supported\n"); - } -} else if (queryctrl.flags & V4L2_CTRL_FLAG_DISABLED) { - printf("V4L2_CID_BRIGHTNESS is not supported\n"); -} else { - memset(&control, 0, sizeof (control)); - control.id = V4L2_CID_BRIGHTNESS; - control.value = queryctrl.default_value; - - if (-1 == ioctl(fd, &VIDIOC-S-CTRL;, &control)) { - perror("VIDIOC_S_CTRL"); - exit(EXIT_FAILURE); - } -} - -memset(&control, 0, sizeof(control)); -control.id = V4L2_CID_CONTRAST; - -if (0 == ioctl(fd, &VIDIOC-G-CTRL;, &control)) { - control.value += 1; - - /* The driver may clamp the value or return ERANGE, ignored here */ - - if (-1 == ioctl(fd, &VIDIOC-S-CTRL;, &control) - && errno != ERANGE) { - perror("VIDIOC_S_CTRL"); - exit(EXIT_FAILURE); - } -/* Ignore if V4L2_CID_CONTRAST is unsupported */ -} else if (errno != EINVAL) { - perror("VIDIOC_G_CTRL"); - exit(EXIT_FAILURE); -} - -control.id = V4L2_CID_AUDIO_MUTE; -control.value = 1; /* silence */ - -/* Errors ignored */ -ioctl(fd, VIDIOC_S_CTRL, &control); - - -
- -
- Extended Controls - -
- Introduction - - The control mechanism as originally designed was meant -to be used for user settings (brightness, saturation, etc). However, -it turned out to be a very useful model for implementing more -complicated driver APIs where each driver implements only a subset of -a larger API. - - The MPEG encoding API was the driving force behind -designing and implementing this extended control mechanism: the MPEG -standard is quite large and the currently supported hardware MPEG -encoders each only implement a subset of this standard. Further more, -many parameters relating to how the video is encoded into an MPEG -stream are specific to the MPEG encoding chip since the MPEG standard -only defines the format of the resulting MPEG stream, not how the -video is actually encoded into that format. - - Unfortunately, the original control API lacked some -features needed for these new uses and so it was extended into the -(not terribly originally named) extended control API. - - Even though the MPEG encoding API was the first effort -to use the Extended Control API, nowadays there are also other classes -of Extended Controls, such as Camera Controls and FM Transmitter Controls. -The Extended Controls API as well as all Extended Controls classes are -described in the following text. -
- -
- The Extended Control API - - Three new ioctls are available: &VIDIOC-G-EXT-CTRLS;, -&VIDIOC-S-EXT-CTRLS; and &VIDIOC-TRY-EXT-CTRLS;. These ioctls act on -arrays of controls (as opposed to the &VIDIOC-G-CTRL; and -&VIDIOC-S-CTRL; ioctls that act on a single control). This is needed -since it is often required to atomically change several controls at -once. - - Each of the new ioctls expects a pointer to a -&v4l2-ext-controls;. This structure contains a pointer to the control -array, a count of the number of controls in that array and a control -class. Control classes are used to group similar controls into a -single class. For example, control class -V4L2_CTRL_CLASS_USER contains all user controls -(&ie; all controls that can also be set using the old -VIDIOC_S_CTRL ioctl). Control class -V4L2_CTRL_CLASS_MPEG contains all controls -relating to MPEG encoding, etc. - - All controls in the control array must belong to the -specified control class. An error is returned if this is not the -case. - - It is also possible to use an empty control array (count -== 0) to check whether the specified control class is -supported. - - The control array is a &v4l2-ext-control; array. The -v4l2_ext_control structure is very similar to -&v4l2-control;, except for the fact that it also allows for 64-bit -values and pointers to be passed. - - Since the &v4l2-ext-control; supports pointers it is now -also possible to have controls with compound types such as N-dimensional arrays -and/or structures. You need to specify the V4L2_CTRL_FLAG_NEXT_COMPOUND -when enumerating controls to actually be able to see such compound controls. -In other words, these controls with compound types should only be used -programmatically. - - Since such compound controls need to expose more information -about themselves than is possible with &VIDIOC-QUERYCTRL; the -&VIDIOC-QUERY-EXT-CTRL; ioctl was added. In particular, this ioctl gives -the dimensions of the N-dimensional array if this control consists of more than -one element. - - It is important to realize that due to the flexibility of -controls it is necessary to check whether the control you want to set -actually is supported in the driver and what the valid range of values -is. So use the &VIDIOC-QUERYCTRL; (or &VIDIOC-QUERY-EXT-CTRL;) and -&VIDIOC-QUERYMENU; ioctls to check this. Also note that it is possible -that some of the menu indices in a control of type -V4L2_CTRL_TYPE_MENU may not be supported -(VIDIOC_QUERYMENU will return an error). A good -example is the list of supported MPEG audio bitrates. Some drivers only -support one or two bitrates, others support a wider range. - - - All controls use machine endianness. - -
- -
- Enumerating Extended Controls - - The recommended way to enumerate over the extended -controls is by using &VIDIOC-QUERYCTRL; in combination with the -V4L2_CTRL_FLAG_NEXT_CTRL flag: - - - -&v4l2-queryctrl; qctrl; - -qctrl.id = V4L2_CTRL_FLAG_NEXT_CTRL; -while (0 == ioctl (fd, &VIDIOC-QUERYCTRL;, &qctrl)) { - /* ... */ - qctrl.id |= V4L2_CTRL_FLAG_NEXT_CTRL; -} - - - - The initial control ID is set to 0 ORed with the -V4L2_CTRL_FLAG_NEXT_CTRL flag. The -VIDIOC_QUERYCTRL ioctl will return the first -control with a higher ID than the specified one. When no such controls -are found an error is returned. - - If you want to get all controls within a specific control -class, then you can set the initial -qctrl.id value to the control class and add -an extra check to break out of the loop when a control of another -control class is found: - - - -qctrl.id = V4L2_CTRL_CLASS_MPEG | V4L2_CTRL_FLAG_NEXT_CTRL; -while (0 == ioctl(fd, &VIDIOC-QUERYCTRL;, &qctrl)) { - if (V4L2_CTRL_ID2CLASS(qctrl.id) != V4L2_CTRL_CLASS_MPEG) - break; - /* ... */ - qctrl.id |= V4L2_CTRL_FLAG_NEXT_CTRL; -} - - - - The 32-bit qctrl.id value is -subdivided into three bit ranges: the top 4 bits are reserved for -flags (⪚ V4L2_CTRL_FLAG_NEXT_CTRL) and are not -actually part of the ID. The remaining 28 bits form the control ID, of -which the most significant 12 bits define the control class and the -least significant 16 bits identify the control within the control -class. It is guaranteed that these last 16 bits are always non-zero -for controls. The range of 0x1000 and up are reserved for -driver-specific controls. The macro -V4L2_CTRL_ID2CLASS(id) returns the control class -ID based on a control ID. - - If the driver does not support extended controls, then -VIDIOC_QUERYCTRL will fail when used in -combination with V4L2_CTRL_FLAG_NEXT_CTRL. In -that case the old method of enumerating control should be used (see -). But if it is supported, then it is guaranteed to enumerate over -all controls, including driver-private controls. -
- -
- Creating Control Panels - - It is possible to create control panels for a graphical -user interface where the user can select the various controls. -Basically you will have to iterate over all controls using the method -described above. Each control class starts with a control of type -V4L2_CTRL_TYPE_CTRL_CLASS. -VIDIOC_QUERYCTRL will return the name of this -control class which can be used as the title of a tab page within a -control panel. - - The flags field of &v4l2-queryctrl; also contains hints on -the behavior of the control. See the &VIDIOC-QUERYCTRL; documentation -for more details. -
- -
- Codec Control Reference - - Below all controls within the Codec control class are -described. First the generic controls, then controls specific for -certain hardware. - - Note: These controls are applicable to all codecs and -not just MPEG. The defines are prefixed with V4L2_CID_MPEG/V4L2_MPEG -as the controls were originally made for MPEG codecs and later -extended to cover all encoding formats. - -
- Generic Codec Controls - - - Codec Control IDs - - - - - - - - - - ID - Type - Description - - - - - - V4L2_CID_MPEG_CLASS  - class - The Codec class -descriptor. Calling &VIDIOC-QUERYCTRL; for this control will return a -description of this control class. This description can be used as the -caption of a Tab page in a GUI, for example. - - - - V4L2_CID_MPEG_STREAM_TYPE  - enum v4l2_mpeg_stream_type - The MPEG-1, -2 or -4 -output stream type. One cannot assume anything here. Each hardware -MPEG encoder tends to support different subsets of the available MPEG -stream types. This control is specific to multiplexed MPEG streams. -The currently defined stream types are: - - - - - - V4L2_MPEG_STREAM_TYPE_MPEG2_PS  - MPEG-2 program stream - - - V4L2_MPEG_STREAM_TYPE_MPEG2_TS  - MPEG-2 transport stream - - - V4L2_MPEG_STREAM_TYPE_MPEG1_SS  - MPEG-1 system stream - - - V4L2_MPEG_STREAM_TYPE_MPEG2_DVD  - MPEG-2 DVD-compatible stream - - - V4L2_MPEG_STREAM_TYPE_MPEG1_VCD  - MPEG-1 VCD-compatible stream - - - V4L2_MPEG_STREAM_TYPE_MPEG2_SVCD  - MPEG-2 SVCD-compatible stream - - - - - - - V4L2_CID_MPEG_STREAM_PID_PMT  - integer - Program Map Table -Packet ID for the MPEG transport stream (default 16) - - - - V4L2_CID_MPEG_STREAM_PID_AUDIO  - integer - Audio Packet ID for -the MPEG transport stream (default 256) - - - - V4L2_CID_MPEG_STREAM_PID_VIDEO  - integer - Video Packet ID for -the MPEG transport stream (default 260) - - - - V4L2_CID_MPEG_STREAM_PID_PCR  - integer - Packet ID for the -MPEG transport stream carrying PCR fields (default 259) - - - - V4L2_CID_MPEG_STREAM_PES_ID_AUDIO  - integer - Audio ID for MPEG -PES - - - - V4L2_CID_MPEG_STREAM_PES_ID_VIDEO  - integer - Video ID for MPEG -PES - - - - V4L2_CID_MPEG_STREAM_VBI_FMT  - enum v4l2_mpeg_stream_vbi_fmt - Some cards can embed -VBI data (⪚ Closed Caption, Teletext) into the MPEG stream. This -control selects whether VBI data should be embedded, and if so, what -embedding method should be used. The list of possible VBI formats -depends on the driver. The currently defined VBI format types -are: - - - - - - V4L2_MPEG_STREAM_VBI_FMT_NONE  - No VBI in the MPEG stream - - - V4L2_MPEG_STREAM_VBI_FMT_IVTV  - VBI in private packets, IVTV format (documented -in the kernel sources in the file Documentation/video4linux/cx2341x/README.vbi) - - - - - - - V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ  - enum v4l2_mpeg_audio_sampling_freq - MPEG Audio sampling -frequency. Possible values are: - - - - - - V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100  - 44.1 kHz - - - V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000  - 48 kHz - - - V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000  - 32 kHz - - - - - - - V4L2_CID_MPEG_AUDIO_ENCODING  - enum v4l2_mpeg_audio_encoding - MPEG Audio encoding. -This control is specific to multiplexed MPEG streams. -Possible values are: - - - - - - V4L2_MPEG_AUDIO_ENCODING_LAYER_1  - MPEG-1/2 Layer I encoding - - - V4L2_MPEG_AUDIO_ENCODING_LAYER_2  - MPEG-1/2 Layer II encoding - - - V4L2_MPEG_AUDIO_ENCODING_LAYER_3  - MPEG-1/2 Layer III encoding - - - V4L2_MPEG_AUDIO_ENCODING_AAC  - MPEG-2/4 AAC (Advanced Audio Coding) - - - V4L2_MPEG_AUDIO_ENCODING_AC3  - AC-3 aka ATSC A/52 encoding - - - - - - - V4L2_CID_MPEG_AUDIO_L1_BITRATE  - enum v4l2_mpeg_audio_l1_bitrate - MPEG-1/2 Layer I bitrate. -Possible values are: - - - - - - V4L2_MPEG_AUDIO_L1_BITRATE_32K  - 32 kbit/s - - V4L2_MPEG_AUDIO_L1_BITRATE_64K  - 64 kbit/s - - - V4L2_MPEG_AUDIO_L1_BITRATE_96K  - 96 kbit/s - - - V4L2_MPEG_AUDIO_L1_BITRATE_128K  - 128 kbit/s - - - V4L2_MPEG_AUDIO_L1_BITRATE_160K  - 160 kbit/s - - - V4L2_MPEG_AUDIO_L1_BITRATE_192K  - 192 kbit/s - - - V4L2_MPEG_AUDIO_L1_BITRATE_224K  - 224 kbit/s - - - V4L2_MPEG_AUDIO_L1_BITRATE_256K  - 256 kbit/s - - - V4L2_MPEG_AUDIO_L1_BITRATE_288K  - 288 kbit/s - - - V4L2_MPEG_AUDIO_L1_BITRATE_320K  - 320 kbit/s - - - V4L2_MPEG_AUDIO_L1_BITRATE_352K  - 352 kbit/s - - - V4L2_MPEG_AUDIO_L1_BITRATE_384K  - 384 kbit/s - - - V4L2_MPEG_AUDIO_L1_BITRATE_416K  - 416 kbit/s - - - V4L2_MPEG_AUDIO_L1_BITRATE_448K  - 448 kbit/s - - - - - - - V4L2_CID_MPEG_AUDIO_L2_BITRATE  - enum v4l2_mpeg_audio_l2_bitrate - MPEG-1/2 Layer II bitrate. -Possible values are: - - - - - - V4L2_MPEG_AUDIO_L2_BITRATE_32K  - 32 kbit/s - - - V4L2_MPEG_AUDIO_L2_BITRATE_48K  - 48 kbit/s - - - V4L2_MPEG_AUDIO_L2_BITRATE_56K  - 56 kbit/s - - - V4L2_MPEG_AUDIO_L2_BITRATE_64K  - 64 kbit/s - - - V4L2_MPEG_AUDIO_L2_BITRATE_80K  - 80 kbit/s - - - V4L2_MPEG_AUDIO_L2_BITRATE_96K  - 96 kbit/s - - - V4L2_MPEG_AUDIO_L2_BITRATE_112K  - 112 kbit/s - - - V4L2_MPEG_AUDIO_L2_BITRATE_128K  - 128 kbit/s - - - V4L2_MPEG_AUDIO_L2_BITRATE_160K  - 160 kbit/s - - - V4L2_MPEG_AUDIO_L2_BITRATE_192K  - 192 kbit/s - - - V4L2_MPEG_AUDIO_L2_BITRATE_224K  - 224 kbit/s - - - V4L2_MPEG_AUDIO_L2_BITRATE_256K  - 256 kbit/s - - - V4L2_MPEG_AUDIO_L2_BITRATE_320K  - 320 kbit/s - - - V4L2_MPEG_AUDIO_L2_BITRATE_384K  - 384 kbit/s - - - - - - - V4L2_CID_MPEG_AUDIO_L3_BITRATE  - enum v4l2_mpeg_audio_l3_bitrate - MPEG-1/2 Layer III bitrate. -Possible values are: - - - - - - V4L2_MPEG_AUDIO_L3_BITRATE_32K  - 32 kbit/s - - - V4L2_MPEG_AUDIO_L3_BITRATE_40K  - 40 kbit/s - - - V4L2_MPEG_AUDIO_L3_BITRATE_48K  - 48 kbit/s - - - V4L2_MPEG_AUDIO_L3_BITRATE_56K  - 56 kbit/s - - - V4L2_MPEG_AUDIO_L3_BITRATE_64K  - 64 kbit/s - - - V4L2_MPEG_AUDIO_L3_BITRATE_80K  - 80 kbit/s - - - V4L2_MPEG_AUDIO_L3_BITRATE_96K  - 96 kbit/s - - - V4L2_MPEG_AUDIO_L3_BITRATE_112K  - 112 kbit/s - - - V4L2_MPEG_AUDIO_L3_BITRATE_128K  - 128 kbit/s - - - V4L2_MPEG_AUDIO_L3_BITRATE_160K  - 160 kbit/s - - - V4L2_MPEG_AUDIO_L3_BITRATE_192K  - 192 kbit/s - - - V4L2_MPEG_AUDIO_L3_BITRATE_224K  - 224 kbit/s - - - V4L2_MPEG_AUDIO_L3_BITRATE_256K  - 256 kbit/s - - - V4L2_MPEG_AUDIO_L3_BITRATE_320K  - 320 kbit/s - - - - - - - V4L2_CID_MPEG_AUDIO_AAC_BITRATE  - integer - AAC bitrate in bits per second. - - - - V4L2_CID_MPEG_AUDIO_AC3_BITRATE  - enum v4l2_mpeg_audio_ac3_bitrate - AC-3 bitrate. -Possible values are: - - - - - - V4L2_MPEG_AUDIO_AC3_BITRATE_32K  - 32 kbit/s - - - V4L2_MPEG_AUDIO_AC3_BITRATE_40K  - 40 kbit/s - - - V4L2_MPEG_AUDIO_AC3_BITRATE_48K  - 48 kbit/s - - - V4L2_MPEG_AUDIO_AC3_BITRATE_56K  - 56 kbit/s - - - V4L2_MPEG_AUDIO_AC3_BITRATE_64K  - 64 kbit/s - - - V4L2_MPEG_AUDIO_AC3_BITRATE_80K  - 80 kbit/s - - - V4L2_MPEG_AUDIO_AC3_BITRATE_96K  - 96 kbit/s - - - V4L2_MPEG_AUDIO_AC3_BITRATE_112K  - 112 kbit/s - - - V4L2_MPEG_AUDIO_AC3_BITRATE_128K  - 128 kbit/s - - - V4L2_MPEG_AUDIO_AC3_BITRATE_160K  - 160 kbit/s - - - V4L2_MPEG_AUDIO_AC3_BITRATE_192K  - 192 kbit/s - - - V4L2_MPEG_AUDIO_AC3_BITRATE_224K  - 224 kbit/s - - - V4L2_MPEG_AUDIO_AC3_BITRATE_256K  - 256 kbit/s - - - V4L2_MPEG_AUDIO_AC3_BITRATE_320K  - 320 kbit/s - - - V4L2_MPEG_AUDIO_AC3_BITRATE_384K  - 384 kbit/s - - - V4L2_MPEG_AUDIO_AC3_BITRATE_448K  - 448 kbit/s - - - V4L2_MPEG_AUDIO_AC3_BITRATE_512K  - 512 kbit/s - - - V4L2_MPEG_AUDIO_AC3_BITRATE_576K  - 576 kbit/s - - - V4L2_MPEG_AUDIO_AC3_BITRATE_640K  - 640 kbit/s - - - - - - - V4L2_CID_MPEG_AUDIO_MODE  - enum v4l2_mpeg_audio_mode - MPEG Audio mode. -Possible values are: - - - - - - V4L2_MPEG_AUDIO_MODE_STEREO  - Stereo - - - V4L2_MPEG_AUDIO_MODE_JOINT_STEREO  - Joint Stereo - - - V4L2_MPEG_AUDIO_MODE_DUAL  - Bilingual - - - V4L2_MPEG_AUDIO_MODE_MONO  - Mono - - - - - - - V4L2_CID_MPEG_AUDIO_MODE_EXTENSION  - enum v4l2_mpeg_audio_mode_extension - Joint Stereo -audio mode extension. In Layer I and II they indicate which subbands -are in intensity stereo. All other subbands are coded in stereo. Layer -III is not (yet) supported. Possible values -are: - - - - - - V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_4  - Subbands 4-31 in intensity stereo - - - V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_8  - Subbands 8-31 in intensity stereo - - - V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_12  - Subbands 12-31 in intensity stereo - - - V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_16  - Subbands 16-31 in intensity stereo - - - - - - - V4L2_CID_MPEG_AUDIO_EMPHASIS  - enum v4l2_mpeg_audio_emphasis - Audio Emphasis. -Possible values are: - - - - - - V4L2_MPEG_AUDIO_EMPHASIS_NONE  - None - - - V4L2_MPEG_AUDIO_EMPHASIS_50_DIV_15_uS  - 50/15 microsecond emphasis - - - V4L2_MPEG_AUDIO_EMPHASIS_CCITT_J17  - CCITT J.17 - - - - - - - V4L2_CID_MPEG_AUDIO_CRC  - enum v4l2_mpeg_audio_crc - CRC method. Possible -values are: - - - - - - V4L2_MPEG_AUDIO_CRC_NONE  - None - - - V4L2_MPEG_AUDIO_CRC_CRC16  - 16 bit parity check - - - - - - - V4L2_CID_MPEG_AUDIO_MUTE  - boolean - Mutes the audio when -capturing. This is not done by muting audio hardware, which can still -produce a slight hiss, but in the encoder itself, guaranteeing a fixed -and reproducible audio bitstream. 0 = unmuted, 1 = muted. - - - - V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK  - enum v4l2_mpeg_audio_dec_playback - Determines how monolingual audio should be played back. -Possible values are: - - - - - - V4L2_MPEG_AUDIO_DEC_PLAYBACK_AUTO  - Automatically determines the best playback mode. - - - V4L2_MPEG_AUDIO_DEC_PLAYBACK_STEREO  - Stereo playback. - - - V4L2_MPEG_AUDIO_DEC_PLAYBACK_LEFT  - Left channel playback. - - - V4L2_MPEG_AUDIO_DEC_PLAYBACK_RIGHT  - Right channel playback. - - - V4L2_MPEG_AUDIO_DEC_PLAYBACK_MONO  - Mono playback. - - - V4L2_MPEG_AUDIO_DEC_PLAYBACK_SWAPPED_STEREO  - Stereo playback with swapped left and right channels. - - - - - - - V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK  - enum v4l2_mpeg_audio_dec_playback - Determines how multilingual audio should be played back. - - - - V4L2_CID_MPEG_VIDEO_ENCODING  - enum v4l2_mpeg_video_encoding - MPEG Video encoding -method. This control is specific to multiplexed MPEG streams. -Possible values are: - - - - - - V4L2_MPEG_VIDEO_ENCODING_MPEG_1  - MPEG-1 Video encoding - - - V4L2_MPEG_VIDEO_ENCODING_MPEG_2  - MPEG-2 Video encoding - - - V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVC  - MPEG-4 AVC (H.264) Video encoding - - - - - - - V4L2_CID_MPEG_VIDEO_ASPECT  - enum v4l2_mpeg_video_aspect - Video aspect. -Possible values are: - - - - - - V4L2_MPEG_VIDEO_ASPECT_1x1  - - - V4L2_MPEG_VIDEO_ASPECT_4x3  - - - V4L2_MPEG_VIDEO_ASPECT_16x9  - - - V4L2_MPEG_VIDEO_ASPECT_221x100  - - - - - - - V4L2_CID_MPEG_VIDEO_B_FRAMES  - integer - Number of B-Frames -(default 2) - - - - V4L2_CID_MPEG_VIDEO_GOP_SIZE  - integer - GOP size (default -12) - - - - V4L2_CID_MPEG_VIDEO_GOP_CLOSURE  - boolean - GOP closure (default -1) - - - - V4L2_CID_MPEG_VIDEO_PULLDOWN  - boolean - Enable 3:2 pulldown -(default 0) - - - - V4L2_CID_MPEG_VIDEO_BITRATE_MODE  - enum v4l2_mpeg_video_bitrate_mode - Video bitrate mode. -Possible values are: - - - - - - V4L2_MPEG_VIDEO_BITRATE_MODE_VBR  - Variable bitrate - - - V4L2_MPEG_VIDEO_BITRATE_MODE_CBR  - Constant bitrate - - - - - - - V4L2_CID_MPEG_VIDEO_BITRATE  - integer - Video bitrate in bits -per second. - - - - V4L2_CID_MPEG_VIDEO_BITRATE_PEAK  - integer - Peak video bitrate in -bits per second. Must be larger or equal to the average video bitrate. -It is ignored if the video bitrate mode is set to constant -bitrate. - - - - V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION  - integer - For every captured -frame, skip this many subsequent frames (default 0). - - - - V4L2_CID_MPEG_VIDEO_MUTE  - boolean - - "Mutes" the video to a -fixed color when capturing. This is useful for testing, to produce a -fixed video bitstream. 0 = unmuted, 1 = muted. - - - - V4L2_CID_MPEG_VIDEO_MUTE_YUV  - integer - Sets the "mute" color -of the video. The supplied 32-bit integer is interpreted as follows (bit -0 = least significant bit): - - - - - - Bit 0:7 - V chrominance information - - - Bit 8:15 - U chrominance information - - - Bit 16:23 - Y luminance information - - - Bit 24:31 - Must be zero. - - - - - - - V4L2_CID_MPEG_VIDEO_DEC_PTS  - integer64 - This read-only control returns the -33-bit video Presentation Time Stamp as defined in ITU T-REC-H.222.0 and ISO/IEC 13818-1 of -the currently displayed frame. This is the same PTS as is used in &VIDIOC-DECODER-CMD;. - - - - V4L2_CID_MPEG_VIDEO_DEC_FRAME  - integer64 - This read-only control returns the -frame counter of the frame that is currently displayed (decoded). This value is reset to 0 whenever -the decoder is started. - - - - - V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE  - boolean - - If enabled the decoder expects to receive a single slice per buffer, otherwise -the decoder expects a single frame in per buffer. Applicable to the decoder, all codecs. - - - - - - V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_ENABLE  - boolean - - Enable writing sample aspect ratio in the Video Usability Information. -Applicable to the H264 encoder. - - - - - V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC  - enum v4l2_mpeg_video_h264_vui_sar_idc - - VUI sample aspect ratio indicator for H.264 encoding. The value -is defined in the table E-1 in the standard. Applicable to the H264 encoder. - - - - - - - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_UNSPECIFIED  - Unspecified - - - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_1x1  - 1x1 - - - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_12x11  - 12x11 - - - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_10x11  - 10x11 - - - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_16x11  - 16x11 - - - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_40x33  - 40x33 - - - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_24x11  - 24x11 - - - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_20x11  - 20x11 - - - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_32x11  - 32x11 - - - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_80x33  - 80x33 - - - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_18x11  - 18x11 - - - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_15x11  - 15x11 - - - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_64x33  - 64x33 - - - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_160x99  - 160x99 - - - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_4x3  - 4x3 - - - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_3x2  - 3x2 - - - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_2x1  - 2x1 - - - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_EXTENDED  - Extended SAR - - - - - - - - V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_WIDTH  - integer - - Extended sample aspect ratio width for H.264 VUI encoding. -Applicable to the H264 encoder. - - - - - V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_HEIGHT  - integer - - Extended sample aspect ratio height for H.264 VUI encoding. -Applicable to the H264 encoder. - - - - - V4L2_CID_MPEG_VIDEO_H264_LEVEL  - enum v4l2_mpeg_video_h264_level - - The level information for the H264 video elementary stream. -Applicable to the H264 encoder. -Possible values are: - - - - - - V4L2_MPEG_VIDEO_H264_LEVEL_1_0  - Level 1.0 - - - V4L2_MPEG_VIDEO_H264_LEVEL_1B  - Level 1B - - - V4L2_MPEG_VIDEO_H264_LEVEL_1_1  - Level 1.1 - - - V4L2_MPEG_VIDEO_H264_LEVEL_1_2  - Level 1.2 - - - V4L2_MPEG_VIDEO_H264_LEVEL_1_3  - Level 1.3 - - - V4L2_MPEG_VIDEO_H264_LEVEL_2_0  - Level 2.0 - - - V4L2_MPEG_VIDEO_H264_LEVEL_2_1  - Level 2.1 - - - V4L2_MPEG_VIDEO_H264_LEVEL_2_2  - Level 2.2 - - - V4L2_MPEG_VIDEO_H264_LEVEL_3_0  - Level 3.0 - - - V4L2_MPEG_VIDEO_H264_LEVEL_3_1  - Level 3.1 - - - V4L2_MPEG_VIDEO_H264_LEVEL_3_2  - Level 3.2 - - - V4L2_MPEG_VIDEO_H264_LEVEL_4_0  - Level 4.0 - - - V4L2_MPEG_VIDEO_H264_LEVEL_4_1  - Level 4.1 - - - V4L2_MPEG_VIDEO_H264_LEVEL_4_2  - Level 4.2 - - - V4L2_MPEG_VIDEO_H264_LEVEL_5_0  - Level 5.0 - - - V4L2_MPEG_VIDEO_H264_LEVEL_5_1  - Level 5.1 - - - - - - - - V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL  - enum v4l2_mpeg_video_mpeg4_level - - The level information for the MPEG4 elementary stream. -Applicable to the MPEG4 encoder. -Possible values are: - - - - - - V4L2_MPEG_VIDEO_LEVEL_0  - Level 0 - - - V4L2_MPEG_VIDEO_LEVEL_0B  - Level 0b - - - V4L2_MPEG_VIDEO_LEVEL_1  - Level 1 - - - V4L2_MPEG_VIDEO_LEVEL_2  - Level 2 - - - V4L2_MPEG_VIDEO_LEVEL_3  - Level 3 - - - V4L2_MPEG_VIDEO_LEVEL_3B  - Level 3b - - - V4L2_MPEG_VIDEO_LEVEL_4  - Level 4 - - - V4L2_MPEG_VIDEO_LEVEL_5  - Level 5 - - - - - - - - V4L2_CID_MPEG_VIDEO_H264_PROFILE  - enum v4l2_mpeg_video_h264_profile - - The profile information for H264. -Applicable to the H264 encoder. -Possible values are: - - - - - - V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE  - Baseline profile - - - V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE  - Constrained Baseline profile - - - V4L2_MPEG_VIDEO_H264_PROFILE_MAIN  - Main profile - - - V4L2_MPEG_VIDEO_H264_PROFILE_EXTENDED  - Extended profile - - - V4L2_MPEG_VIDEO_H264_PROFILE_HIGH  - High profile - - - V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_10  - High 10 profile - - - V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_422  - High 422 profile - - - V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_444_PREDICTIVE  - High 444 Predictive profile - - - V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_10_INTRA  - High 10 Intra profile - - - V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_422_INTRA  - High 422 Intra profile - - - V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_444_INTRA  - High 444 Intra profile - - - V4L2_MPEG_VIDEO_H264_PROFILE_CAVLC_444_INTRA  - CAVLC 444 Intra profile - - - V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_BASELINE  - Scalable Baseline profile - - - V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_HIGH  - Scalable High profile - - - V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_HIGH_INTRA  - Scalable High Intra profile - - - V4L2_MPEG_VIDEO_H264_PROFILE_STEREO_HIGH  - Stereo High profile - - - V4L2_MPEG_VIDEO_H264_PROFILE_MULTIVIEW_HIGH  - Multiview High profile - - - - - - - - - V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE  - enum v4l2_mpeg_video_mpeg4_profile - - The profile information for MPEG4. -Applicable to the MPEG4 encoder. -Possible values are: - - - - - - V4L2_MPEG_VIDEO_PROFILE_SIMPLE  - Simple profile - - - V4L2_MPEG_VIDEO_PROFILE_ADVANCED_SIMPLE  - Advanced Simple profile - - - V4L2_MPEG_VIDEO_PROFILE_CORE  - Core profile - - - V4L2_MPEG_VIDEO_PROFILE_SIMPLE_SCALABLE  - Simple Scalable profile - - - V4L2_MPEG_VIDEO_PROFILE_ADVANCED_CODING_EFFICIENCY  - - - - - - - - - V4L2_CID_MPEG_VIDEO_MAX_REF_PIC  - integer - - The maximum number of reference pictures used for encoding. -Applicable to the encoder. - - - - - - V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE  - enum v4l2_mpeg_video_multi_slice_mode - - Determines how the encoder should handle division of frame into slices. -Applicable to the encoder. -Possible values are: - - - - - - V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE  - Single slice per frame. - - - V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_MAX_MB  - Multiple slices with set maximum number of macroblocks per slice. - - - V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_MAX_BYTES  - Multiple slice with set maximum size in bytes per slice. - - - - - - - - V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB  - integer - - The maximum number of macroblocks in a slice. Used when -V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE is set to V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_MAX_MB. -Applicable to the encoder. - - - - - V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES  - integer - - The maximum size of a slice in bytes. Used when -V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE is set to V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_MAX_BYTES. -Applicable to the encoder. - - - - - V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE  - enum v4l2_mpeg_video_h264_loop_filter_mode - - Loop filter mode for H264 encoder. -Possible values are: - - - - - - V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_ENABLED  - Loop filter is enabled. - - - V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED  - Loop filter is disabled. - - - V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED_AT_SLICE_BOUNDARY  - Loop filter is disabled at the slice boundary. - - - - - - - - V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA  - integer - - Loop filter alpha coefficient, defined in the H264 standard. -Applicable to the H264 encoder. - - - - - V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA  - integer - - Loop filter beta coefficient, defined in the H264 standard. -Applicable to the H264 encoder. - - - - - V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE  - enum v4l2_mpeg_video_h264_entropy_mode - - Entropy coding mode for H264 - CABAC/CAVALC. -Applicable to the H264 encoder. -Possible values are: - - - - - - V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC  - Use CAVLC entropy coding. - - - V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC  - Use CABAC entropy coding. - - - - - - - - V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM  - boolean - - Enable 8X8 transform for H264. Applicable to the H264 encoder. - - - - - V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB  - integer - - Cyclic intra macroblock refresh. This is the number of continuous macroblocks -refreshed every frame. Each frame a successive set of macroblocks is refreshed until the cycle completes and starts from the -top of the frame. Applicable to H264, H263 and MPEG4 encoder. - - - - - V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE  - boolean - - Frame level rate control enable. -If this control is disabled then the quantization parameter for each frame type is constant and set with appropriate controls -(e.g. V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP). -If frame rate control is enabled then quantization parameter is adjusted to meet the chosen bitrate. Minimum and maximum value -for the quantization parameter can be set with appropriate controls (e.g. V4L2_CID_MPEG_VIDEO_H263_MIN_QP). -Applicable to encoders. - - - - - V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE  - boolean - - Macroblock level rate control enable. -Applicable to the MPEG4 and H264 encoders. - - - - - V4L2_CID_MPEG_VIDEO_MPEG4_QPEL  - boolean - - Quarter pixel motion estimation for MPEG4. Applicable to the MPEG4 encoder. - - - - - V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP  - integer - - Quantization parameter for an I frame for H263. Valid range: from 1 to 31. - - - - - V4L2_CID_MPEG_VIDEO_H263_MIN_QP  - integer - - Minimum quantization parameter for H263. Valid range: from 1 to 31. - - - - - V4L2_CID_MPEG_VIDEO_H263_MAX_QP  - integer - - Maximum quantization parameter for H263. Valid range: from 1 to 31. - - - - - V4L2_CID_MPEG_VIDEO_H263_P_FRAME_QP  - integer - - Quantization parameter for an P frame for H263. Valid range: from 1 to 31. - - - - - V4L2_CID_MPEG_VIDEO_H263_B_FRAME_QP  - integer - - Quantization parameter for an B frame for H263. Valid range: from 1 to 31. - - - - - V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP  - integer - - Quantization parameter for an I frame for H264. Valid range: from 0 to 51. - - - - - V4L2_CID_MPEG_VIDEO_H264_MIN_QP  - integer - - Minimum quantization parameter for H264. Valid range: from 0 to 51. - - - - - V4L2_CID_MPEG_VIDEO_H264_MAX_QP  - integer - - Maximum quantization parameter for H264. Valid range: from 0 to 51. - - - - - V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP  - integer - - Quantization parameter for an P frame for H264. Valid range: from 0 to 51. - - - - - V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP  - integer - - Quantization parameter for an B frame for H264. Valid range: from 0 to 51. - - - - - V4L2_CID_MPEG_VIDEO_MPEG4_I_FRAME_QP  - integer - - Quantization parameter for an I frame for MPEG4. Valid range: from 1 to 31. - - - - - V4L2_CID_MPEG_VIDEO_MPEG4_MIN_QP  - integer - - Minimum quantization parameter for MPEG4. Valid range: from 1 to 31. - - - - - V4L2_CID_MPEG_VIDEO_MPEG4_MAX_QP  - integer - - Maximum quantization parameter for MPEG4. Valid range: from 1 to 31. - - - - - V4L2_CID_MPEG_VIDEO_MPEG4_P_FRAME_QP  - integer - - Quantization parameter for an P frame for MPEG4. Valid range: from 1 to 31. - - - - - V4L2_CID_MPEG_VIDEO_MPEG4_B_FRAME_QP  - integer - - Quantization parameter for an B frame for MPEG4. Valid range: from 1 to 31. - - - - - V4L2_CID_MPEG_VIDEO_VBV_SIZE  - integer - - The Video Buffer Verifier size in kilobytes, it is used as a limitation of frame skip. -The VBV is defined in the standard as a mean to verify that the produced stream will be successfully decoded. -The standard describes it as "Part of a hypothetical decoder that is conceptually connected to the -output of the encoder. Its purpose is to provide a constraint on the variability of the data rate that an -encoder or editing process may produce.". -Applicable to the MPEG1, MPEG2, MPEG4 encoders. - - - - - V4L2_CID_MPEG_VIDEO_VBV_DELAY  - integer - Sets the initial delay in milliseconds for -VBV buffer control. - - - - - V4L2_CID_MPEG_VIDEO_MV_H_SEARCH_RANGE  - integer - - Horizontal search range defines maximum horizontal search area in pixels -to search and match for the present Macroblock (MB) in the reference picture. This V4L2 control macro is used to set -horizontal search range for motion estimation module in video encoder. - - - - - V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE  - integer - - Vertical search range defines maximum vertical search area in pixels -to search and match for the present Macroblock (MB) in the reference picture. This V4L2 control macro is used to set -vertical search range for motion estimation module in video encoder. - - - - - V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME  - button - Force a key frame for the next queued buffer. Applicable to encoders. -This is a general, codec-agnostic keyframe control. - - - - - V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE  - integer - - The Coded Picture Buffer size in kilobytes, it is used as a limitation of frame skip. -The CPB is defined in the H264 standard as a mean to verify that the produced stream will be successfully decoded. -Applicable to the H264 encoder. - - - - - V4L2_CID_MPEG_VIDEO_H264_I_PERIOD  - integer - - Period between I-frames in the open GOP for H264. In case of an open GOP -this is the period between two I-frames. The period between IDR (Instantaneous Decoding Refresh) frames is taken from the GOP_SIZE control. -An IDR frame, which stands for Instantaneous Decoding Refresh is an I-frame after which no prior frames are -referenced. This means that a stream can be restarted from an IDR frame without the need to store or decode any -previous frames. Applicable to the H264 encoder. - - - - - V4L2_CID_MPEG_VIDEO_HEADER_MODE  - enum v4l2_mpeg_video_header_mode - - Determines whether the header is returned as the first buffer or is -it returned together with the first frame. Applicable to encoders. -Possible values are: - - - - - - V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE  - The stream header is returned separately in the first buffer. - - - V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME  - The stream header is returned together with the first encoded frame. - - - - - - - V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER  - boolean - Repeat the video sequence headers. Repeating these -headers makes random access to the video stream easier. Applicable to the MPEG1, 2 and 4 encoder. - - - V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER  - boolean - Enabled the deblocking post processing filter for MPEG4 decoder. -Applicable to the MPEG4 decoder. - - - - V4L2_CID_MPEG_VIDEO_MPEG4_VOP_TIME_RES  - integer - vop_time_increment_resolution value for MPEG4. Applicable to the MPEG4 encoder. - - - - V4L2_CID_MPEG_VIDEO_MPEG4_VOP_TIME_INC  - integer - vop_time_increment value for MPEG4. Applicable to the MPEG4 encoder. - - - - - V4L2_CID_MPEG_VIDEO_H264_SEI_FRAME_PACKING  - boolean - - Enable generation of frame packing supplemental enhancement information in the encoded bitstream. -The frame packing SEI message contains the arrangement of L and R planes for 3D viewing. Applicable to the H264 encoder. - - - - - V4L2_CID_MPEG_VIDEO_H264_SEI_FP_CURRENT_FRAME_0  - boolean - - Sets current frame as frame0 in frame packing SEI. -Applicable to the H264 encoder. - - - - - V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE  - enum v4l2_mpeg_video_h264_sei_fp_arrangement_type - - Frame packing arrangement type for H264 SEI. -Applicable to the H264 encoder. -Possible values are: - - - - - - V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_CHEKERBOARD  - Pixels are alternatively from L and R. - - - V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_COLUMN  - L and R are interlaced by column. - - - V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_ROW  - L and R are interlaced by row. - - - V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_SIDE_BY_SIDE  - L is on the left, R on the right. - - - V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_TOP_BOTTOM  - L is on top, R on bottom. - - - V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_TEMPORAL  - One view per frame. - - - - - - - - V4L2_CID_MPEG_VIDEO_H264_FMO  - boolean - - Enables flexible macroblock ordering in the encoded bitstream. It is a technique -used for restructuring the ordering of macroblocks in pictures. Applicable to the H264 encoder. - - - - - V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE  - enum v4l2_mpeg_video_h264_fmo_map_type - - When using FMO, the map type divides the image in different scan patterns of macroblocks. -Applicable to the H264 encoder. -Possible values are: - - - - - - V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_INTERLEAVED_SLICES  - Slices are interleaved one after other with macroblocks in run length order. - - - V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_SCATTERED_SLICES  - Scatters the macroblocks based on a mathematical function known to both encoder and decoder. - - - V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_FOREGROUND_WITH_LEFT_OVER  - Macroblocks arranged in rectangular areas or regions of interest. - - - V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_BOX_OUT  - Slice groups grow in a cyclic way from centre to outwards. - - - V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_RASTER_SCAN  - Slice groups grow in raster scan pattern from left to right. - - - V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_WIPE_SCAN  - Slice groups grow in wipe scan pattern from top to bottom. - - - V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_EXPLICIT  - User defined map type. - - - - - - - - V4L2_CID_MPEG_VIDEO_H264_FMO_SLICE_GROUP  - integer - - Number of slice groups in FMO. -Applicable to the H264 encoder. - - - - - V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_DIRECTION  - enum v4l2_mpeg_video_h264_fmo_change_dir - - Specifies a direction of the slice group change for raster and wipe maps. -Applicable to the H264 encoder. -Possible values are: - - - - - - V4L2_MPEG_VIDEO_H264_FMO_CHANGE_DIR_RIGHT  - Raster scan or wipe right. - - - V4L2_MPEG_VIDEO_H264_FMO_CHANGE_DIR_LEFT  - Reverse raster scan or wipe left. - - - - - - - - V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_RATE  - integer - - Specifies the size of the first slice group for raster and wipe map. -Applicable to the H264 encoder. - - - - - V4L2_CID_MPEG_VIDEO_H264_FMO_RUN_LENGTH  - integer - - Specifies the number of consecutive macroblocks for the interleaved map. -Applicable to the H264 encoder. - - - - - V4L2_CID_MPEG_VIDEO_H264_ASO  - boolean - - Enables arbitrary slice ordering in encoded bitstream. -Applicable to the H264 encoder. - - - - - V4L2_CID_MPEG_VIDEO_H264_ASO_SLICE_ORDER  - integer - Specifies the slice order in ASO. Applicable to the H264 encoder. -The supplied 32-bit integer is interpreted as follows (bit -0 = least significant bit): - - - - - - Bit 0:15 - Slice ID - - - Bit 16:32 - Slice position or order - - - - - - - - V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING  - boolean - - Enables H264 hierarchical coding. -Applicable to the H264 encoder. - - - - - V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_TYPE  - enum v4l2_mpeg_video_h264_hierarchical_coding_type - - Specifies the hierarchical coding type. -Applicable to the H264 encoder. -Possible values are: - - - - - - V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_B  - Hierarchical B coding. - - - V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_P  - Hierarchical P coding. - - - - - - - - V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER  - integer - - Specifies the number of hierarchical coding layers. -Applicable to the H264 encoder. - - - - - V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER_QP  - integer - Specifies a user defined QP for each layer. Applicable to the H264 encoder. -The supplied 32-bit integer is interpreted as follows (bit -0 = least significant bit): - - - - - - Bit 0:15 - QP value - - - Bit 16:32 - Layer number - - - - - - - -
-
- -
- MFC 5.1 MPEG Controls - - The following MPEG class controls deal with MPEG -decoding and encoding settings that are specific to the Multi Format Codec 5.1 device present -in the S5P family of SoCs by Samsung. - - - - MFC 5.1 Control IDs - - - - - - - - - - ID - Type - Description - - - - - - V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY_ENABLE  - boolean - If the display delay is enabled then the decoder is forced to return a -CAPTURE buffer (decoded frame) after processing a certain number of OUTPUT buffers. The delay can be set through -V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY. This feature can be used for example -for generating thumbnails of videos. Applicable to the H264 decoder. - - - - - V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY  - integer - Display delay value for H264 decoder. -The decoder is forced to return a decoded frame after the set 'display delay' number of frames. If this number is -low it may result in frames returned out of dispaly order, in addition the hardware may still be using the returned buffer -as a reference picture for subsequent frames. - - - - - V4L2_CID_MPEG_MFC51_VIDEO_H264_NUM_REF_PIC_FOR_P  - integer - The number of reference pictures used for encoding a P picture. -Applicable to the H264 encoder. - - - - V4L2_CID_MPEG_MFC51_VIDEO_PADDING  - boolean - Padding enable in the encoder - use a color instead of repeating border pixels. -Applicable to encoders. - - - - V4L2_CID_MPEG_MFC51_VIDEO_PADDING_YUV  - integer - Padding color in the encoder. Applicable to encoders. The supplied 32-bit integer is interpreted as follows (bit -0 = least significant bit): - - - - - - Bit 0:7 - V chrominance information - - - Bit 8:15 - U chrominance information - - - Bit 16:23 - Y luminance information - - - Bit 24:31 - Must be zero. - - - - - - - V4L2_CID_MPEG_MFC51_VIDEO_RC_REACTION_COEFF  - integer - Reaction coefficient for MFC rate control. Applicable to encoders. -Note 1: Valid only when the frame level RC is enabled. -Note 2: For tight CBR, this field must be small (ex. 2 ~ 10). -For VBR, this field must be large (ex. 100 ~ 1000). -Note 3: It is not recommended to use the greater number than FRAME_RATE * (10^9 / BIT_RATE). - - - - - V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_DARK  - boolean - Adaptive rate control for dark region. -Valid only when H.264 and macroblock level RC is enabled (V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE). -Applicable to the H264 encoder. - - - - V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_SMOOTH  - boolean - Adaptive rate control for smooth region. -Valid only when H.264 and macroblock level RC is enabled (V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE). -Applicable to the H264 encoder. - - - - V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_STATIC  - boolean - Adaptive rate control for static region. -Valid only when H.264 and macroblock level RC is enabled (V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE). -Applicable to the H264 encoder. - - - - V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_ACTIVITY  - boolean - Adaptive rate control for activity region. -Valid only when H.264 and macroblock level RC is enabled (V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE). -Applicable to the H264 encoder. - - - - V4L2_CID_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE  - enum v4l2_mpeg_mfc51_video_frame_skip_mode - - -Indicates in what conditions the encoder should skip frames. If encoding a frame would cause the encoded stream to be larger then -a chosen data limit then the frame will be skipped. -Possible values are: - - - - - - V4L2_MPEG_MFC51_FRAME_SKIP_MODE_DISABLED  - Frame skip mode is disabled. - - - V4L2_MPEG_MFC51_FRAME_SKIP_MODE_LEVEL_LIMIT  - Frame skip mode enabled and buffer limit is set by the chosen level and is defined by the standard. - - - V4L2_MPEG_MFC51_FRAME_SKIP_MODE_BUF_LIMIT  - Frame skip mode enabled and buffer limit is set by the VBV (MPEG1/2/4) or CPB (H264) buffer size control. - - - - - - - V4L2_CID_MPEG_MFC51_VIDEO_RC_FIXED_TARGET_BIT  - integer - Enable rate-control with fixed target bit. -If this setting is enabled, then the rate control logic of the encoder will calculate the average bitrate -for a GOP and keep it below or equal the set bitrate target. Otherwise the rate control logic calculates the -overall average bitrate for the stream and keeps it below or equal to the set bitrate. In the first case -the average bitrate for the whole stream will be smaller then the set bitrate. This is caused because the -average is calculated for smaller number of frames, on the other hand enabling this setting will ensure that -the stream will meet tight bandwidth constraints. Applicable to encoders. - - - - - V4L2_CID_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE  - enum v4l2_mpeg_mfc51_video_force_frame_type - - Force a frame type for the next queued buffer. Applicable to encoders. -Possible values are: - - - - - - V4L2_MPEG_MFC51_FORCE_FRAME_TYPE_DISABLED  - Forcing a specific frame type disabled. - - - V4L2_MPEG_MFC51_FORCE_FRAME_TYPE_I_FRAME  - Force an I-frame. - - - V4L2_MPEG_MFC51_FORCE_FRAME_TYPE_NOT_CODED  - Force a non-coded frame. - - - - - - -
-
- -
- CX2341x MPEG Controls - - The following MPEG class controls deal with MPEG -encoding settings that are specific to the Conexant CX23415 and -CX23416 MPEG encoding chips. - - - CX2341x Control IDs - - - - - - - - - - ID - Type - Description - - - - - - V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE  - enum v4l2_mpeg_cx2341x_video_spatial_filter_mode - Sets the Spatial -Filter mode (default MANUAL). Possible values -are: - - - - - - V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_MANUAL  - Choose the filter manually - - - V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_AUTO  - Choose the filter automatically - - - - - - - V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER  - integer (0-15) - The setting for the -Spatial Filter. 0 = off, 15 = maximum. (Default is 0.) - - - - V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE  - enum v4l2_mpeg_cx2341x_video_luma_spatial_filter_type - Select the algorithm -to use for the Luma Spatial Filter (default -1D_HOR). Possible values: - - - - - - V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_OFF  - No filter - - - V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_HOR  - One-dimensional horizontal - - - V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_VERT  - One-dimensional vertical - - - V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_HV_SEPARABLE  - Two-dimensional separable - - - V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_SYM_NON_SEPARABLE  - Two-dimensional symmetrical -non-separable - - - - - - - V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE  - enum v4l2_mpeg_cx2341x_video_chroma_spatial_filter_type - Select the algorithm -for the Chroma Spatial Filter (default 1D_HOR). -Possible values are: - - - - - - V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_OFF  - No filter - - - V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_1D_HOR  - One-dimensional horizontal - - - - - - - V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE  - enum v4l2_mpeg_cx2341x_video_temporal_filter_mode - Sets the Temporal -Filter mode (default MANUAL). Possible values -are: - - - - - - V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_MANUAL  - Choose the filter manually - - - V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_AUTO  - Choose the filter automatically - - - - - - - V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER  - integer (0-31) - The setting for the -Temporal Filter. 0 = off, 31 = maximum. (Default is 8 for full-scale -capturing and 0 for scaled capturing.) - - - - V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE  - enum v4l2_mpeg_cx2341x_video_median_filter_type - Median Filter Type -(default OFF). Possible values are: - - - - - - V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_OFF  - No filter - - - V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR  - Horizontal filter - - - V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_VERT  - Vertical filter - - - V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR_VERT  - Horizontal and vertical filter - - - V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_DIAG  - Diagonal filter - - - - - - - V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM  - integer (0-255) - Threshold above which -the luminance median filter is enabled (default 0) - - - - V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP  - integer (0-255) - Threshold below which -the luminance median filter is enabled (default 255) - - - - V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM  - integer (0-255) - Threshold above which -the chroma median filter is enabled (default 0) - - - - V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP  - integer (0-255) - Threshold below which -the chroma median filter is enabled (default 255) - - - - V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS  - boolean - - The CX2341X MPEG encoder -can insert one empty MPEG-2 PES packet into the stream between every -four video frames. The packet size is 2048 bytes, including the -packet_start_code_prefix and stream_id fields. The stream_id is 0xBF -(private stream 2). The payload consists of 0x00 bytes, to be filled -in by the application. 0 = do not insert, 1 = insert packets. - - - -
-
- -
- VPX Control Reference - - The VPX controls include controls for encoding parameters - of VPx video codec. - - - VPX Control IDs - - - - - - - - - - - ID - Type - Description - - - - - - - - V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS - enum v4l2_vp8_num_partitions - - The number of token partitions to use in VP8 encoder. -Possible values are: - - - - - - V4L2_CID_MPEG_VIDEO_VPX_1_PARTITION - 1 coefficient partition - - - V4L2_CID_MPEG_VIDEO_VPX_2_PARTITIONS - 2 coefficient partitions - - - V4L2_CID_MPEG_VIDEO_VPX_4_PARTITIONS - 4 coefficient partitions - - - V4L2_CID_MPEG_VIDEO_VPX_8_PARTITIONS - 8 coefficient partitions - - - - - - - - V4L2_CID_MPEG_VIDEO_VPX_IMD_DISABLE_4X4 - boolean - - Setting this prevents intra 4x4 mode in the intra mode decision. - - - - - V4L2_CID_MPEG_VIDEO_VPX_NUM_REF_FRAMES - enum v4l2_vp8_num_ref_frames - - The number of reference pictures for encoding P frames. -Possible values are: - - - - - - V4L2_CID_MPEG_VIDEO_VPX_1_REF_FRAME - Last encoded frame will be searched - - - V4L2_CID_MPEG_VIDEO_VPX_2_REF_FRAME - Two frames will be searched among the last encoded frame, the golden frame -and the alternate reference (altref) frame. The encoder implementation will decide which two are chosen. - - - V4L2_CID_MPEG_VIDEO_VPX_3_REF_FRAME - The last encoded frame, the golden frame and the altref frame will be searched. - - - - - - - - V4L2_CID_MPEG_VIDEO_VPX_FILTER_LEVEL - integer - - Indicates the loop filter level. The adjustment of the loop -filter level is done via a delta value against a baseline loop filter value. - - - - - V4L2_CID_MPEG_VIDEO_VPX_FILTER_SHARPNESS - integer - - This parameter affects the loop filter. Anything above -zero weakens the deblocking effect on the loop filter. - - - - - V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_REF_PERIOD - integer - - Sets the refresh period for the golden frame. The period is defined -in number of frames. For a value of 'n', every nth frame starting from the first key frame will be taken as a golden frame. -For eg. for encoding sequence of 0, 1, 2, 3, 4, 5, 6, 7 where the golden frame refresh period is set as 4, the frames -0, 4, 8 etc will be taken as the golden frames as frame 0 is always a key frame. - - - - - V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL - enum v4l2_vp8_golden_frame_sel - - Selects the golden frame for encoding. -Possible values are: - - - - - - V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_USE_PREV - Use the (n-2)th frame as a golden frame, current frame index being 'n'. - - - V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_USE_REF_PERIOD - Use the previous specific frame indicated by -V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_REF_PERIOD as a golden frame. - - - - - - - - V4L2_CID_MPEG_VIDEO_VPX_MIN_QP - integer - - Minimum quantization parameter for VP8. - - - - - V4L2_CID_MPEG_VIDEO_VPX_MAX_QP - integer - - Maximum quantization parameter for VP8. - - - - - V4L2_CID_MPEG_VIDEO_VPX_I_FRAME_QP  - integer - - Quantization parameter for an I frame for VP8. - - - - - V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP  - integer - - Quantization parameter for a P frame for VP8. - - - - - V4L2_CID_MPEG_VIDEO_VPX_PROFILE  - integer - - Select the desired profile for VPx encoder. -Acceptable values are 0, 1, 2 and 3 corresponding to encoder profiles 0, 1, 2 and 3. - - - - - -
- -
-
- -
- Camera Control Reference - - The Camera class includes controls for mechanical (or -equivalent digital) features of a device such as controllable lenses -or sensors. - - - Camera Control IDs - - - - - - - - - - ID - Type - Description - - - - - - V4L2_CID_CAMERA_CLASS  - class - The Camera class -descriptor. Calling &VIDIOC-QUERYCTRL; for this control will return a -description of this control class. - - - - - V4L2_CID_EXPOSURE_AUTO  - enum v4l2_exposure_auto_type - Enables automatic -adjustments of the exposure time and/or iris aperture. The effect of -manual changes of the exposure time or iris aperture while these -features are enabled is undefined, drivers should ignore such -requests. Possible values are: - - - - - - V4L2_EXPOSURE_AUTO  - Automatic exposure time, automatic iris -aperture. - - - V4L2_EXPOSURE_MANUAL  - Manual exposure time, manual iris. - - - V4L2_EXPOSURE_SHUTTER_PRIORITY  - Manual exposure time, auto iris. - - - V4L2_EXPOSURE_APERTURE_PRIORITY  - Auto exposure time, manual iris. - - - - - - - - V4L2_CID_EXPOSURE_ABSOLUTE  - integer - Determines the exposure -time of the camera sensor. The exposure time is limited by the frame -interval. Drivers should interpret the values as 100 µs units, -where the value 1 stands for 1/10000th of a second, 10000 for 1 second -and 100000 for 10 seconds. - - - - - V4L2_CID_EXPOSURE_AUTO_PRIORITY  - boolean - When -V4L2_CID_EXPOSURE_AUTO is set to -AUTO or APERTURE_PRIORITY, -this control determines if the device may dynamically vary the frame -rate. By default this feature is disabled (0) and the frame rate must -remain constant. - - - - - V4L2_CID_EXPOSURE_BIAS  - integer menu - Determines the automatic -exposure compensation, it is effective only when V4L2_CID_EXPOSURE_AUTO -control is set to AUTO, SHUTTER_PRIORITY -or APERTURE_PRIORITY. -It is expressed in terms of EV, drivers should interpret the values as 0.001 EV -units, where the value 1000 stands for +1 EV. -Increasing the exposure compensation value is equivalent to decreasing -the exposure value (EV) and will increase the amount of light at the image -sensor. The camera performs the exposure compensation by adjusting absolute -exposure time and/or aperture. - - - - - V4L2_CID_EXPOSURE_METERING  - enum v4l2_exposure_metering - Determines how the camera measures -the amount of light available for the frame exposure. Possible values are: - - - - - - V4L2_EXPOSURE_METERING_AVERAGE  - Use the light information coming from the entire frame -and average giving no weighting to any particular portion of the metered area. - - - - V4L2_EXPOSURE_METERING_CENTER_WEIGHTED  - Average the light information coming from the entire frame -giving priority to the center of the metered area. - - - V4L2_EXPOSURE_METERING_SPOT  - Measure only very small area at the center of the frame. - - - V4L2_EXPOSURE_METERING_MATRIX  - A multi-zone metering. The light intensity is measured -in several points of the frame and the results are combined. The -algorithm of the zones selection and their significance in calculating the -final value is device dependent. - - - - - - - - V4L2_CID_PAN_RELATIVE  - integer - This control turns the -camera horizontally by the specified amount. The unit is undefined. A -positive value moves the camera to the right (clockwise when viewed -from above), a negative value to the left. A value of zero does not -cause motion. This is a write-only control. - - - - - V4L2_CID_TILT_RELATIVE  - integer - This control turns the -camera vertically by the specified amount. The unit is undefined. A -positive value moves the camera up, a negative value down. A value of -zero does not cause motion. This is a write-only control. - - - - - V4L2_CID_PAN_RESET  - button - When this control is set, -the camera moves horizontally to the default position. - - - - - V4L2_CID_TILT_RESET  - button - When this control is set, -the camera moves vertically to the default position. - - - - - V4L2_CID_PAN_ABSOLUTE  - integer - This control -turns the camera horizontally to the specified position. Positive -values move the camera to the right (clockwise when viewed from above), -negative values to the left. Drivers should interpret the values as arc -seconds, with valid values between -180 * 3600 and +180 * 3600 -inclusive. - - - - - V4L2_CID_TILT_ABSOLUTE  - integer - This control -turns the camera vertically to the specified position. Positive values -move the camera up, negative values down. Drivers should interpret the -values as arc seconds, with valid values between -180 * 3600 and +180 -* 3600 inclusive. - - - - - V4L2_CID_FOCUS_ABSOLUTE  - integer - This control sets the -focal point of the camera to the specified position. The unit is -undefined. Positive values set the focus closer to the camera, -negative values towards infinity. - - - - - V4L2_CID_FOCUS_RELATIVE  - integer - This control moves the -focal point of the camera by the specified amount. The unit is -undefined. Positive values move the focus closer to the camera, -negative values towards infinity. This is a write-only control. - - - - - V4L2_CID_FOCUS_AUTO  - boolean - Enables continuous automatic -focus adjustments. The effect of manual focus adjustments while this feature -is enabled is undefined, drivers should ignore such requests. - - - - - V4L2_CID_AUTO_FOCUS_START  - button - Starts single auto focus process. -The effect of setting this control when V4L2_CID_FOCUS_AUTO -is set to TRUE (1) is undefined, drivers should ignore -such requests. - - - - - V4L2_CID_AUTO_FOCUS_STOP  - button - Aborts automatic focusing -started with V4L2_CID_AUTO_FOCUS_START control. It is -effective only when the continuous autofocus is disabled, that is when -V4L2_CID_FOCUS_AUTO control is set to FALSE - (0). - - - - - - V4L2_CID_AUTO_FOCUS_STATUS  - bitmask - - The automatic focus status. This is a read-only - control. - - - - - - V4L2_AUTO_FOCUS_STATUS_IDLE  - Automatic focus is not active. - - - V4L2_AUTO_FOCUS_STATUS_BUSY  - Automatic focusing is in progress. - - - V4L2_AUTO_FOCUS_STATUS_REACHED  - Focus has been reached. - - - V4L2_AUTO_FOCUS_STATUS_FAILED  - Automatic focus has failed, the driver will not - transition from this state until another action is - performed by an application. - - - - - -Setting V4L2_LOCK_FOCUS lock bit of the V4L2_CID_3A_LOCK - control may stop updates of the V4L2_CID_AUTO_FOCUS_STATUS -control value. - - - - - - V4L2_CID_AUTO_FOCUS_RANGE  - enum v4l2_auto_focus_range - - Determines auto focus distance range -for which lens may be adjusted. - - - - - - V4L2_AUTO_FOCUS_RANGE_AUTO  - The camera automatically selects the focus range. - - - V4L2_AUTO_FOCUS_RANGE_NORMAL  - Normal distance range, limited for best automatic focus -performance. - - - V4L2_AUTO_FOCUS_RANGE_MACRO  - Macro (close-up) auto focus. The camera will -use its minimum possible distance for auto focus. - - - V4L2_AUTO_FOCUS_RANGE_INFINITY  - The lens is set to focus on an object at infinite distance. - - - - - - - - V4L2_CID_ZOOM_ABSOLUTE  - integer - Specify the objective lens -focal length as an absolute value. The zoom unit is driver-specific and its -value should be a positive integer. - - - - - V4L2_CID_ZOOM_RELATIVE  - integer - Specify the objective lens -focal length relatively to the current value. Positive values move the zoom -lens group towards the telephoto direction, negative values towards the -wide-angle direction. The zoom unit is driver-specific. This is a write-only control. - - - - - V4L2_CID_ZOOM_CONTINUOUS  - integer - Move the objective lens group -at the specified speed until it reaches physical device limits or until an -explicit request to stop the movement. A positive value moves the zoom lens -group towards the telephoto direction. A value of zero stops the zoom lens -group movement. A negative value moves the zoom lens group towards the -wide-angle direction. The zoom speed unit is driver-specific. - - - - - V4L2_CID_IRIS_ABSOLUTE  - integer - This control sets the -camera's aperture to the specified value. The unit is undefined. -Larger values open the iris wider, smaller values close it. - - - - - V4L2_CID_IRIS_RELATIVE  - integer - This control modifies the -camera's aperture by the specified amount. The unit is undefined. -Positive values open the iris one step further, negative values close -it one step further. This is a write-only control. - - - - - V4L2_CID_PRIVACY  - boolean - Prevent video from being acquired -by the camera. When this control is set to TRUE (1), no -image can be captured by the camera. Common means to enforce privacy are -mechanical obturation of the sensor and firmware image processing, but the -device is not restricted to these methods. Devices that implement the privacy -control must support read access and may support write access. - - - - V4L2_CID_BAND_STOP_FILTER  - integer - Switch the band-stop filter of a -camera sensor on or off, or specify its strength. Such band-stop filters can -be used, for example, to filter out the fluorescent light component. - - - - - V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE  - enum v4l2_auto_n_preset_white_balance - Sets white balance to automatic, -manual or a preset. The presets determine color temperature of the light as -a hint to the camera for white balance adjustments resulting in most accurate -color representation. The following white balance presets are listed in order -of increasing color temperature. - - - - - - V4L2_WHITE_BALANCE_MANUAL  - Manual white balance. - - - V4L2_WHITE_BALANCE_AUTO  - Automatic white balance adjustments. - - - V4L2_WHITE_BALANCE_INCANDESCENT  - White balance setting for incandescent (tungsten) lighting. -It generally cools down the colors and corresponds approximately to 2500...3500 K -color temperature range. - - - V4L2_WHITE_BALANCE_FLUORESCENT  - White balance preset for fluorescent lighting. -It corresponds approximately to 4000...5000 K color temperature. - - - V4L2_WHITE_BALANCE_FLUORESCENT_H  - With this setting the camera will compensate for -fluorescent H lighting. - - - V4L2_WHITE_BALANCE_HORIZON  - White balance setting for horizon daylight. -It corresponds approximately to 5000 K color temperature. - - - V4L2_WHITE_BALANCE_DAYLIGHT  - White balance preset for daylight (with clear sky). -It corresponds approximately to 5000...6500 K color temperature. - - - V4L2_WHITE_BALANCE_FLASH  - With this setting the camera will compensate for the flash -light. It slightly warms up the colors and corresponds roughly to 5000...5500 K -color temperature. - - - V4L2_WHITE_BALANCE_CLOUDY  - White balance preset for moderately overcast sky. -This option corresponds approximately to 6500...8000 K color temperature -range. - - - V4L2_WHITE_BALANCE_SHADE  - White balance preset for shade or heavily overcast -sky. It corresponds approximately to 9000...10000 K color temperature. - - - - - - - - - V4L2_CID_WIDE_DYNAMIC_RANGE - boolean - - - Enables or disables the camera's wide dynamic -range feature. This feature allows to obtain clear images in situations where -intensity of the illumination varies significantly throughout the scene, i.e. -there are simultaneously very dark and very bright areas. It is most commonly -realized in cameras by combining two subsequent frames with different exposure -times. This control may be changed to a menu -control in the future, if more options are required. - - - - - V4L2_CID_IMAGE_STABILIZATION - boolean - - - Enables or disables image stabilization. - - - - - - V4L2_CID_ISO_SENSITIVITY  - integer menu - Determines ISO equivalent of an -image sensor indicating the sensor's sensitivity to light. The numbers are -expressed in arithmetic scale, as per standard, -where doubling the sensor sensitivity is represented by doubling the numerical -ISO value. Applications should interpret the values as standard ISO values -multiplied by 1000, e.g. control value 800 stands for ISO 0.8. Drivers will -usually support only a subset of standard ISO values. The effect of setting -this control while the V4L2_CID_ISO_SENSITIVITY_AUTO -control is set to a value other than V4L2_CID_ISO_SENSITIVITY_MANUAL - is undefined, drivers should ignore such requests. - - - - - V4L2_CID_ISO_SENSITIVITY_AUTO  - enum v4l2_iso_sensitivity_type - Enables or disables automatic ISO -sensitivity adjustments. - - - - - - V4L2_CID_ISO_SENSITIVITY_MANUAL  - Manual ISO sensitivity. - - - V4L2_CID_ISO_SENSITIVITY_AUTO  - Automatic ISO sensitivity adjustments. - - - - - - - - V4L2_CID_SCENE_MODE  - enum v4l2_scene_mode - This control allows to select -scene programs as the camera automatic modes optimized for common shooting -scenes. Within these modes the camera determines best exposure, aperture, -focusing, light metering, white balance and equivalent sensitivity. The -controls of those parameters are influenced by the scene mode control. -An exact behavior in each mode is subject to the camera specification. - -When the scene mode feature is not used, this control should be set to -V4L2_SCENE_MODE_NONE to make sure the other possibly -related controls are accessible. The following scene programs are defined: - - - - - - - - V4L2_SCENE_MODE_NONE  - The scene mode feature is disabled. - - - V4L2_SCENE_MODE_BACKLIGHT  - Backlight. Compensates for dark shadows when light is - coming from behind a subject, also by automatically turning - on the flash. - - - V4L2_SCENE_MODE_BEACH_SNOW  - Beach and snow. This mode compensates for all-white or -bright scenes, which tend to look gray and low contrast, when camera's automatic -exposure is based on an average scene brightness. To compensate, this mode -automatically slightly overexposes the frames. The white balance may also be -adjusted to compensate for the fact that reflected snow looks bluish rather -than white. - - - V4L2_SCENE_MODE_CANDLELIGHT  - Candle light. The camera generally raises the ISO -sensitivity and lowers the shutter speed. This mode compensates for relatively -close subject in the scene. The flash is disabled in order to preserve the -ambiance of the light. - - - V4L2_SCENE_MODE_DAWN_DUSK  - Dawn and dusk. Preserves the colors seen in low -natural light before dusk and after down. The camera may turn off the flash, -and automatically focus at infinity. It will usually boost saturation and -lower the shutter speed. - - - V4L2_SCENE_MODE_FALL_COLORS  - Fall colors. Increases saturation and adjusts white -balance for color enhancement. Pictures of autumn leaves get saturated reds -and yellows. - - - V4L2_SCENE_MODE_FIREWORKS  - Fireworks. Long exposure times are used to capture -the expanding burst of light from a firework. The camera may invoke image -stabilization. - - - V4L2_SCENE_MODE_LANDSCAPE  - Landscape. The camera may choose a small aperture to -provide deep depth of field and long exposure duration to help capture detail -in dim light conditions. The focus is fixed at infinity. Suitable for distant -and wide scenery. - - - V4L2_SCENE_MODE_NIGHT  - Night, also known as Night Landscape. Designed for low -light conditions, it preserves detail in the dark areas without blowing out bright -objects. The camera generally sets itself to a medium-to-high ISO sensitivity, -with a relatively long exposure time, and turns flash off. As such, there will be -increased image noise and the possibility of blurred image. - - - V4L2_SCENE_MODE_PARTY_INDOOR  - Party and indoor. Designed to capture indoor scenes -that are lit by indoor background lighting as well as the flash. The camera -usually increases ISO sensitivity, and adjusts exposure for the low light -conditions. - - - V4L2_SCENE_MODE_PORTRAIT  - Portrait. The camera adjusts the aperture so that the -depth of field is reduced, which helps to isolate the subject against a smooth -background. Most cameras recognize the presence of faces in the scene and focus -on them. The color hue is adjusted to enhance skin tones. The intensity of the -flash is often reduced. - - - V4L2_SCENE_MODE_SPORTS  - Sports. Significantly increases ISO and uses a fast -shutter speed to freeze motion of rapidly-moving subjects. Increased image -noise may be seen in this mode. - - - V4L2_SCENE_MODE_SUNSET  - Sunset. Preserves deep hues seen in sunsets and -sunrises. It bumps up the saturation. - - - V4L2_SCENE_MODE_TEXT  - Text. It applies extra contrast and sharpness, it is -typically a black-and-white mode optimized for readability. Automatic focus -may be switched to close-up mode and this setting may also involve some -lens-distortion correction. - - - - - - - - V4L2_CID_3A_LOCK - bitmask - - - This control locks or unlocks the automatic -focus, exposure and white balance. The automatic adjustments can be paused -independently by setting the corresponding lock bit to 1. The camera then retains -the settings until the lock bit is cleared. The following lock bits are defined: - - - - - - - V4L2_LOCK_EXPOSURE - Automatic exposure adjustments lock. - - - V4L2_LOCK_WHITE_BALANCE - Automatic white balance adjustments lock. - - - V4L2_LOCK_FOCUS - Automatic focus lock. - - - - - -When a given algorithm is not enabled, drivers should ignore requests -to lock it and should return no error. An example might be an application -setting bit V4L2_LOCK_WHITE_BALANCE when the -V4L2_CID_AUTO_WHITE_BALANCE control is set to -FALSE. The value of this control may be changed -by exposure, white balance or focus controls. - - - - - V4L2_CID_PAN_SPEED  - integer - This control turns the -camera horizontally at the specific speed. The unit is undefined. A -positive value moves the camera to the right (clockwise when viewed -from above), a negative value to the left. A value of zero stops the motion -if one is in progress and has no effect otherwise. - - - - - V4L2_CID_TILT_SPEED  - integer - This control turns the -camera vertically at the specified speed. The unit is undefined. A -positive value moves the camera up, a negative value down. A value of zero -stops the motion if one is in progress and has no effect otherwise. - - - - - -
-
- -
- FM Transmitter Control Reference - - The FM Transmitter (FM_TX) class includes controls for common features of -FM transmissions capable devices. Currently this class includes parameters for audio -compression, pilot tone generation, audio deviation limiter, RDS transmission and -tuning power features. - - - FM_TX Control IDs - - - - - - - - - - - ID - Type - Description - - - - - - V4L2_CID_FM_TX_CLASS  - class - The FM_TX class -descriptor. Calling &VIDIOC-QUERYCTRL; for this control will return a -description of this control class. - - - V4L2_CID_RDS_TX_DEVIATION  - integer - - Configures RDS signal frequency deviation level in Hz. -The range and step are driver-specific. - - - V4L2_CID_RDS_TX_PI  - integer - - Sets the RDS Programme Identification field -for transmission. - - - V4L2_CID_RDS_TX_PTY  - integer - - Sets the RDS Programme Type field for transmission. -This encodes up to 31 pre-defined programme types. - - - V4L2_CID_RDS_TX_PS_NAME  - string - - Sets the Programme Service name (PS_NAME) for transmission. -It is intended for static display on a receiver. It is the primary aid to listeners in programme service -identification and selection. In Annex E of , the RDS specification, -there is a full description of the correct character encoding for Programme Service name strings. -Also from RDS specification, PS is usually a single eight character text. However, it is also possible -to find receivers which can scroll strings sized as 8 x N characters. So, this control must be configured -with steps of 8 characters. The result is it must always contain a string with size multiple of 8. - - - V4L2_CID_RDS_TX_RADIO_TEXT  - string - - Sets the Radio Text info for transmission. It is a textual description of -what is being broadcasted. RDS Radio Text can be applied when broadcaster wishes to transmit longer PS names, -programme-related information or any other text. In these cases, RadioText should be used in addition to -V4L2_CID_RDS_TX_PS_NAME. The encoding for Radio Text strings is also fully described -in Annex E of . The length of Radio Text strings depends on which RDS Block is being -used to transmit it, either 32 (2A block) or 64 (2B block). However, it is also possible -to find receivers which can scroll strings sized as 32 x N or 64 x N characters. So, this control must be configured -with steps of 32 or 64 characters. The result is it must always contain a string with size multiple of 32 or 64. - - - V4L2_CID_RDS_TX_MONO_STEREO  - boolean - - Sets the Mono/Stereo bit of the Decoder Identification code. If set, -then the audio was recorded as stereo. - - - V4L2_CID_RDS_TX_ARTIFICIAL_HEAD  - boolean - - Sets the -Artificial Head bit of the Decoder -Identification code. If set, then the audio was recorded using an artificial head. - - - V4L2_CID_RDS_TX_COMPRESSED  - boolean - - Sets the Compressed bit of the Decoder Identification code. If set, -then the audio is compressed. - - - V4L2_CID_RDS_TX_DYNAMIC_PTY  - boolean - - Sets the Dynamic PTY bit of the Decoder Identification code. If set, -then the PTY code is dynamically switched. - - - V4L2_CID_RDS_TX_TRAFFIC_ANNOUNCEMENT  - boolean - - If set, then a traffic announcement is in progress. - - - V4L2_CID_RDS_TX_TRAFFIC_PROGRAM  - boolean - - If set, then the tuned programme carries traffic announcements. - - - V4L2_CID_RDS_TX_MUSIC_SPEECH  - boolean - - If set, then this channel broadcasts music. If cleared, then it -broadcasts speech. If the transmitter doesn't make this distinction, then it should be set. - - - V4L2_CID_RDS_TX_ALT_FREQS_ENABLE  - boolean - - If set, then transmit alternate frequencies. - - - V4L2_CID_RDS_TX_ALT_FREQS  - __u32 array - - The alternate frequencies in kHz units. The RDS standard allows -for up to 25 frequencies to be defined. Drivers may support fewer frequencies so check -the array size. - - - V4L2_CID_AUDIO_LIMITER_ENABLED  - boolean - - Enables or disables the audio deviation limiter feature. -The limiter is useful when trying to maximize the audio volume, minimize receiver-generated -distortion and prevent overmodulation. - - - - V4L2_CID_AUDIO_LIMITER_RELEASE_TIME  - integer - - Sets the audio deviation limiter feature release time. -Unit is in useconds. Step and range are driver-specific. - - - V4L2_CID_AUDIO_LIMITER_DEVIATION  - integer - - Configures audio frequency deviation level in Hz. -The range and step are driver-specific. - - - V4L2_CID_AUDIO_COMPRESSION_ENABLED  - boolean - - Enables or disables the audio compression feature. -This feature amplifies signals below the threshold by a fixed gain and compresses audio -signals above the threshold by the ratio of Threshold/(Gain + Threshold). - - - V4L2_CID_AUDIO_COMPRESSION_GAIN  - integer - - Sets the gain for audio compression feature. It is -a dB value. The range and step are driver-specific. - - - V4L2_CID_AUDIO_COMPRESSION_THRESHOLD  - integer - - Sets the threshold level for audio compression freature. -It is a dB value. The range and step are driver-specific. - - - V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME  - integer - - Sets the attack time for audio compression feature. -It is a useconds value. The range and step are driver-specific. - - - V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME  - integer - - Sets the release time for audio compression feature. -It is a useconds value. The range and step are driver-specific. - - - V4L2_CID_PILOT_TONE_ENABLED  - boolean - - Enables or disables the pilot tone generation feature. - - - V4L2_CID_PILOT_TONE_DEVIATION  - integer - - Configures pilot tone frequency deviation level. Unit is -in Hz. The range and step are driver-specific. - - - V4L2_CID_PILOT_TONE_FREQUENCY  - integer - - Configures pilot tone frequency value. Unit is -in Hz. The range and step are driver-specific. - - - V4L2_CID_TUNE_PREEMPHASIS  - enum v4l2_preemphasis - - Configures the pre-emphasis value for broadcasting. -A pre-emphasis filter is applied to the broadcast to accentuate the high audio frequencies. -Depending on the region, a time constant of either 50 or 75 useconds is used. The enum v4l2_preemphasis -defines possible values for pre-emphasis. Here they are: - - - - - V4L2_PREEMPHASIS_DISABLED  - No pre-emphasis is applied. - - - V4L2_PREEMPHASIS_50_uS  - A pre-emphasis of 50 uS is used. - - - V4L2_PREEMPHASIS_75_uS  - A pre-emphasis of 75 uS is used. - - - - - - - V4L2_CID_TUNE_POWER_LEVEL  - integer - - Sets the output power level for signal transmission. -Unit is in dBuV. Range and step are driver-specific. - - - V4L2_CID_TUNE_ANTENNA_CAPACITOR  - integer - - This selects the value of antenna tuning capacitor -manually or automatically if set to zero. Unit, range and step are driver-specific. - - - - -
- -For more details about RDS specification, refer to - document, from CENELEC. -
- -
- Flash Control Reference - - - The V4L2 flash controls are intended to provide generic access - to flash controller devices. Flash controller devices are - typically used in digital cameras. - - - - The interface can support both LED and xenon flash devices. As - of writing this, there is no xenon flash driver using this - interface. - - -
- Supported use cases - -
- Unsynchronised LED flash (software strobe) - - - Unsynchronised LED flash is controlled directly by the - host as the sensor. The flash must be enabled by the host - before the exposure of the image starts and disabled once - it ends. The host is fully responsible for the timing of - the flash. - - - Example of such device: Nokia N900. -
- -
- Synchronised LED flash (hardware strobe) - - - The synchronised LED flash is pre-programmed by the host - (power and timeout) but controlled by the sensor through a - strobe signal from the sensor to the flash. - - - - The sensor controls the flash duration and timing. This - information typically must be made available to the - sensor. - - -
- -
- LED flash as torch - - - LED flash may be used as torch in conjunction with another - use case involving camera or individually. - - - - - Flash Control IDs - - - - - - - - - - - ID - Type - Description - - - - - - V4L2_CID_FLASH_CLASS - class - - - The FLASH class descriptor. - - - V4L2_CID_FLASH_LED_MODE - menu - - - Defines the mode of the flash LED, - the high-power white LED attached to the flash controller. - Setting this control may not be possible in presence of - some faults. See V4L2_CID_FLASH_FAULT. - - - - - - V4L2_FLASH_LED_MODE_NONE - Off. - - - V4L2_FLASH_LED_MODE_FLASH - Flash mode. - - - V4L2_FLASH_LED_MODE_TORCH - Torch mode. See V4L2_CID_FLASH_TORCH_INTENSITY. - - - - - - V4L2_CID_FLASH_STROBE_SOURCE - menu - - Defines the source of the flash LED - strobe. - - - - - - V4L2_FLASH_STROBE_SOURCE_SOFTWARE - The flash strobe is triggered by using - the V4L2_CID_FLASH_STROBE control. - - - V4L2_FLASH_STROBE_SOURCE_EXTERNAL - The flash strobe is triggered by an - external source. Typically this is a sensor, - which makes it possible to synchronises the - flash strobe start to exposure start. - - - - - - V4L2_CID_FLASH_STROBE - button - - - Strobe flash. Valid when - V4L2_CID_FLASH_LED_MODE is set to - V4L2_FLASH_LED_MODE_FLASH and V4L2_CID_FLASH_STROBE_SOURCE - is set to V4L2_FLASH_STROBE_SOURCE_SOFTWARE. Setting this - control may not be possible in presence of some faults. - See V4L2_CID_FLASH_FAULT. - - - V4L2_CID_FLASH_STROBE_STOP - button - - Stop flash strobe immediately. - - - V4L2_CID_FLASH_STROBE_STATUS - boolean - - - Strobe status: whether the flash - is strobing at the moment or not. This is a read-only - control. - - - V4L2_CID_FLASH_TIMEOUT - integer - - - Hardware timeout for flash. The - flash strobe is stopped after this period of time has - passed from the start of the strobe. - - - V4L2_CID_FLASH_INTENSITY - integer - - - Intensity of the flash strobe when - the flash LED is in flash mode - (V4L2_FLASH_LED_MODE_FLASH). The unit should be milliamps - (mA) if possible. - - - V4L2_CID_FLASH_TORCH_INTENSITY - integer - - - Intensity of the flash LED in - torch mode (V4L2_FLASH_LED_MODE_TORCH). The unit should be - milliamps (mA) if possible. Setting this control may not - be possible in presence of some faults. See - V4L2_CID_FLASH_FAULT. - - - V4L2_CID_FLASH_INDICATOR_INTENSITY - integer - - - Intensity of the indicator LED. - The indicator LED may be fully independent of the flash - LED. The unit should be microamps (uA) if possible. - - - V4L2_CID_FLASH_FAULT - bitmask - - - Faults related to the flash. The - faults tell about specific problems in the flash chip - itself or the LEDs attached to it. Faults may prevent - further use of some of the flash controls. In particular, - V4L2_CID_FLASH_LED_MODE is set to V4L2_FLASH_LED_MODE_NONE - if the fault affects the flash LED. Exactly which faults - have such an effect is chip dependent. Reading the faults - resets the control and returns the chip to a usable state - if possible. - - - - - - V4L2_FLASH_FAULT_OVER_VOLTAGE - Flash controller voltage to the flash LED - has exceeded the limit specific to the flash - controller. - - - V4L2_FLASH_FAULT_TIMEOUT - The flash strobe was still on when - the timeout set by the user --- - V4L2_CID_FLASH_TIMEOUT control --- has expired. - Not all flash controllers may set this in all - such conditions. - - - V4L2_FLASH_FAULT_OVER_TEMPERATURE - The flash controller has overheated. - - - V4L2_FLASH_FAULT_SHORT_CIRCUIT - The short circuit protection of the flash - controller has been triggered. - - - V4L2_FLASH_FAULT_OVER_CURRENT - Current in the LED power supply has exceeded the limit - specific to the flash controller. - - - V4L2_FLASH_FAULT_INDICATOR - The flash controller has detected a short or open - circuit condition on the indicator LED. - - - V4L2_FLASH_FAULT_UNDER_VOLTAGE - Flash controller voltage to the flash LED - has been below the minimum limit specific to the flash - controller. - - - V4L2_FLASH_FAULT_INPUT_VOLTAGE - The input voltage of the flash controller is below - the limit under which strobing the flash at full current - will not be possible.The condition persists until this flag - is no longer set. - - - V4L2_FLASH_FAULT_LED_OVER_TEMPERATURE - The temperature of the LED has exceeded its - allowed upper limit. - - - - - - V4L2_CID_FLASH_CHARGE - boolean - - Enable or disable charging of the xenon - flash capacitor. - - - V4L2_CID_FLASH_READY - boolean - - - Is the flash ready to strobe? - Xenon flashes require their capacitors charged before - strobing. LED flashes often require a cooldown period - after strobe during which another strobe will not be - possible. This is a read-only control. - - - - -
-
-
-
- -
- JPEG Control Reference - The JPEG class includes controls for common features of JPEG - encoders and decoders. Currently it includes features for codecs - implementing progressive baseline DCT compression process with - Huffman entrophy coding. - - JPEG Control IDs - - - - - - - - - - - ID - Type - Description - - - - - - V4L2_CID_JPEG_CLASS  - class - The JPEG class descriptor. Calling - &VIDIOC-QUERYCTRL; for this control will return a description of this - control class. - - - - - V4L2_CID_JPEG_CHROMA_SUBSAMPLING - menu - - - The chroma subsampling factors describe how - each component of an input image is sampled, in respect to maximum - sample rate in each spatial dimension. See , - clause A.1.1. for more details. The - V4L2_CID_JPEG_CHROMA_SUBSAMPLING control determines how - Cb and Cr components are downsampled after coverting an input image - from RGB to Y'CbCr color space. - - - - - - - V4L2_JPEG_CHROMA_SUBSAMPLING_444 - No chroma subsampling, each pixel has - Y, Cr and Cb values. - - - V4L2_JPEG_CHROMA_SUBSAMPLING_422 - Horizontally subsample Cr, Cb components - by a factor of 2. - - - V4L2_JPEG_CHROMA_SUBSAMPLING_420 - Subsample Cr, Cb components horizontally - and vertically by 2. - - - V4L2_JPEG_CHROMA_SUBSAMPLING_411 - Horizontally subsample Cr, Cb components - by a factor of 4. - - - V4L2_JPEG_CHROMA_SUBSAMPLING_410 - Subsample Cr, Cb components horizontally - by 4 and vertically by 2. - - - V4L2_JPEG_CHROMA_SUBSAMPLING_GRAY - Use only luminance component. - - - - - - V4L2_CID_JPEG_RESTART_INTERVAL - integer - - - The restart interval determines an interval of inserting RSTm - markers (m = 0..7). The purpose of these markers is to additionally - reinitialize the encoder process, in order to process blocks of - an image independently. - For the lossy compression processes the restart interval unit is - MCU (Minimum Coded Unit) and its value is contained in DRI - (Define Restart Interval) marker. If - V4L2_CID_JPEG_RESTART_INTERVAL control is set to 0, - DRI and RSTm markers will not be inserted. - - - - V4L2_CID_JPEG_COMPRESSION_QUALITY - integer - - - - V4L2_CID_JPEG_COMPRESSION_QUALITY control - determines trade-off between image quality and size. - It provides simpler method for applications to control image quality, - without a need for direct reconfiguration of luminance and chrominance - quantization tables. - - In cases where a driver uses quantization tables configured directly - by an application, using interfaces defined elsewhere, - V4L2_CID_JPEG_COMPRESSION_QUALITY control should be set - by driver to 0. - - The value range of this control is driver-specific. Only - positive, non-zero values are meaningful. The recommended range - is 1 - 100, where larger values correspond to better image quality. - - - - - V4L2_CID_JPEG_ACTIVE_MARKER - bitmask - - - Specify which JPEG markers are included - in compressed stream. This control is valid only for encoders. - - - - - - - V4L2_JPEG_ACTIVE_MARKER_APP0 - Application data segment APP0. - - V4L2_JPEG_ACTIVE_MARKER_APP1 - Application data segment APP1. - - V4L2_JPEG_ACTIVE_MARKER_COM - Comment segment. - - V4L2_JPEG_ACTIVE_MARKER_DQT - Quantization tables segment. - - V4L2_JPEG_ACTIVE_MARKER_DHT - Huffman tables segment. - - - - - - - -
- For more details about JPEG specification, refer - to , , - . -
- -
- Image Source Control Reference - - - The Image Source control class is intended for low-level - control of image source devices such as image sensors. The - devices feature an analogue to digital converter and a bus - transmitter to transmit the image data out of the device. - - - - Image Source Control IDs - - - - - - - - - - - ID - Type - Description - - - - - - V4L2_CID_IMAGE_SOURCE_CLASS - class - - - The IMAGE_SOURCE class descriptor. - - - V4L2_CID_VBLANK - integer - - - Vertical blanking. The idle period - after every frame during which no image data is produced. - The unit of vertical blanking is a line. Every line has - length of the image width plus horizontal blanking at the - pixel rate defined by - V4L2_CID_PIXEL_RATE control in the - same sub-device. - - - V4L2_CID_HBLANK - integer - - - Horizontal blanking. The idle - period after every line of image data during which no - image data is produced. The unit of horizontal blanking is - pixels. - - - V4L2_CID_ANALOGUE_GAIN - integer - - - Analogue gain is gain affecting - all colour components in the pixel matrix. The gain - operation is performed in the analogue domain before A/D - conversion. - - - - V4L2_CID_TEST_PATTERN_RED - integer - - - Test pattern red colour component. - - - - V4L2_CID_TEST_PATTERN_GREENR - integer - - - Test pattern green (next to red) - colour component. - - - - V4L2_CID_TEST_PATTERN_BLUE - integer - - - Test pattern blue colour component. - - - - V4L2_CID_TEST_PATTERN_GREENB - integer - - - Test pattern green (next to blue) - colour component. - - - - - -
- -
- -
- Image Process Control Reference - - - The Image Process control class is intended for low-level control of - image processing functions. Unlike - V4L2_CID_IMAGE_SOURCE_CLASS, the controls in - this class affect processing the image, and do not control capturing - of it. - - - - Image Process Control IDs - - - - - - - - - - - ID - Type - Description - - - - - - V4L2_CID_IMAGE_PROC_CLASS - class - - - The IMAGE_PROC class descriptor. - - - V4L2_CID_LINK_FREQ - integer menu - - - Data bus frequency. Together with the - media bus pixel code, bus type (clock cycles per sample), the - data bus frequency defines the pixel rate - (V4L2_CID_PIXEL_RATE) in the - pixel array (or possibly elsewhere, if the device is not an - image sensor). The frame rate can be calculated from the pixel - clock, image width and height and horizontal and vertical - blanking. While the pixel rate control may be defined elsewhere - than in the subdev containing the pixel array, the frame rate - cannot be obtained from that information. This is because only - on the pixel array it can be assumed that the vertical and - horizontal blanking information is exact: no other blanking is - allowed in the pixel array. The selection of frame rate is - performed by selecting the desired horizontal and vertical - blanking. The unit of this control is Hz. - - - V4L2_CID_PIXEL_RATE - 64-bit integer - - - Pixel rate in the source pads of - the subdev. This control is read-only and its unit is - pixels / second. - - - - V4L2_CID_TEST_PATTERN - menu - - - Some capture/display/sensor devices have - the capability to generate test pattern images. These hardware - specific test patterns can be used to test if a device is working - properly. - - - - -
- -
- -
- Digital Video Control Reference - - - The Digital Video control class is intended to control receivers - and transmitters for VGA, - DVI - (Digital Visual Interface), HDMI () and DisplayPort (). - These controls are generally expected to be private to the receiver or transmitter - subdevice that implements them, so they are only exposed on the - /dev/v4l-subdev* device node. - - - Note that these devices can have multiple input or output pads which are - hooked up to e.g. HDMI connectors. Even though the subdevice will receive or - transmit video from/to only one of those pads, the other pads can still be - active when it comes to EDID (Extended Display Identification Data, - ) and HDCP (High-bandwidth Digital Content - Protection System, ) processing, allowing the device - to do the fairly slow EDID/HDCP handling in advance. This allows for quick - switching between connectors. - - These pads appear in several of the controls in this section as - bitmasks, one bit for each pad. Bit 0 corresponds to pad 0, bit 1 to pad 1, - etc. The maximum value of the control is the set of valid pads. - - - Digital Video Control IDs - - - - - - - - - - - ID - Type - Description - - - - - - V4L2_CID_DV_CLASS - class - - - The Digital Video class descriptor. - - - V4L2_CID_DV_TX_HOTPLUG - bitmask - - - Many connectors have a hotplug pin which is high - if EDID information is available from the source. This control shows the - state of the hotplug pin as seen by the transmitter. - Each bit corresponds to an output pad on the transmitter. If an output pad - does not have an associated hotplug pin, then the bit for that pad will be 0. - This read-only control is applicable to DVI-D, HDMI and DisplayPort connectors. - - - - V4L2_CID_DV_TX_RXSENSE - bitmask - - - Rx Sense is the detection of pull-ups on the TMDS - clock lines. This normally means that the sink has left/entered standby (i.e. - the transmitter can sense that the receiver is ready to receive video). - Each bit corresponds to an output pad on the transmitter. If an output pad - does not have an associated Rx Sense, then the bit for that pad will be 0. - This read-only control is applicable to DVI-D and HDMI devices. - - - - V4L2_CID_DV_TX_EDID_PRESENT - bitmask - - - When the transmitter sees the hotplug signal from the - receiver it will attempt to read the EDID. If set, then the transmitter has read - at least the first block (= 128 bytes). - Each bit corresponds to an output pad on the transmitter. If an output pad - does not support EDIDs, then the bit for that pad will be 0. - This read-only control is applicable to VGA, DVI-A/D, HDMI and DisplayPort connectors. - - - - V4L2_CID_DV_TX_MODE - enum v4l2_dv_tx_mode - - - HDMI transmitters can transmit in DVI-D mode (just video) - or in HDMI mode (video + audio + auxiliary data). This control selects which mode - to use: V4L2_DV_TX_MODE_DVI_D or V4L2_DV_TX_MODE_HDMI. - This control is applicable to HDMI connectors. - - - - V4L2_CID_DV_TX_RGB_RANGE - enum v4l2_dv_rgb_range - - - Select the quantization range for RGB output. V4L2_DV_RANGE_AUTO - follows the RGB quantization range specified in the standard for the video interface - (ie. for HDMI). V4L2_DV_RANGE_LIMITED and V4L2_DV_RANGE_FULL override the standard - to be compatible with sinks that have not implemented the standard correctly - (unfortunately quite common for HDMI and DVI-D). Full range allows all possible values to be - used whereas limited range sets the range to (16 << (N-8)) - (235 << (N-8)) - where N is the number of bits per component. - This control is applicable to VGA, DVI-A/D, HDMI and DisplayPort connectors. - - - - V4L2_CID_DV_TX_IT_CONTENT_TYPE - enum v4l2_dv_it_content_type - - Configures the IT Content Type - of the transmitted video. This information is sent over HDMI and DisplayPort connectors - as part of the AVI InfoFrame. The term 'IT Content' is used for content that originates - from a computer as opposed to content from a TV broadcast or an analog source. The - enum v4l2_dv_it_content_type defines the possible content types: - - - - - - V4L2_DV_IT_CONTENT_TYPE_GRAPHICS  - Graphics content. Pixel data should be passed unfiltered and without - analog reconstruction. - - - V4L2_DV_IT_CONTENT_TYPE_PHOTO  - Photo content. The content is derived from digital still pictures. - The content should be passed through with minimal scaling and picture - enhancements. - - - V4L2_DV_IT_CONTENT_TYPE_CINEMA  - Cinema content. - - - V4L2_DV_IT_CONTENT_TYPE_GAME  - Game content. Audio and video latency should be minimized. - - - V4L2_DV_IT_CONTENT_TYPE_NO_ITC  - No IT Content information is available and the ITC bit in the AVI - InfoFrame is set to 0. - - - - - - V4L2_CID_DV_RX_POWER_PRESENT - bitmask - - - Detects whether the receiver receives power from the source - (e.g. HDMI carries 5V on one of the pins). This is often used to power an eeprom - which contains EDID information, such that the source can read the EDID even if - the sink is in standby/power off. - Each bit corresponds to an input pad on the transmitter. If an input pad - cannot detect whether power is present, then the bit for that pad will be 0. - This read-only control is applicable to DVI-D, HDMI and DisplayPort connectors. - - - - V4L2_CID_DV_RX_RGB_RANGE - enum v4l2_dv_rgb_range - - - Select the quantization range for RGB input. V4L2_DV_RANGE_AUTO - follows the RGB quantization range specified in the standard for the video interface - (ie. for HDMI). V4L2_DV_RANGE_LIMITED and V4L2_DV_RANGE_FULL override the standard - to be compatible with sources that have not implemented the standard correctly - (unfortunately quite common for HDMI and DVI-D). Full range allows all possible values to be - used whereas limited range sets the range to (16 << (N-8)) - (235 << (N-8)) - where N is the number of bits per component. - This control is applicable to VGA, DVI-A/D, HDMI and DisplayPort connectors. - - - - V4L2_CID_DV_RX_IT_CONTENT_TYPE - enum v4l2_dv_it_content_type - - Reads the IT Content Type - of the received video. This information is sent over HDMI and DisplayPort connectors - as part of the AVI InfoFrame. The term 'IT Content' is used for content that originates - from a computer as opposed to content from a TV broadcast or an analog source. See - V4L2_CID_DV_TX_IT_CONTENT_TYPE for the available content types. - - - - -
- -
- -
- FM Receiver Control Reference - - The FM Receiver (FM_RX) class includes controls for common features of - FM Reception capable devices. - - - FM_RX Control IDs - - - - - - - - - - - ID - Type - Description - - - - - - V4L2_CID_FM_RX_CLASS  - class - The FM_RX class -descriptor. Calling &VIDIOC-QUERYCTRL; for this control will return a -description of this control class. - - - V4L2_CID_RDS_RECEPTION  - boolean - Enables/disables RDS - reception by the radio tuner - - - V4L2_CID_RDS_RX_PTY  - integer - - Gets RDS Programme Type field. -This encodes up to 31 pre-defined programme types. - - - V4L2_CID_RDS_RX_PS_NAME  - string - - Gets the Programme Service name (PS_NAME). -It is intended for static display on a receiver. It is the primary aid to listeners in programme service -identification and selection. In Annex E of , the RDS specification, -there is a full description of the correct character encoding for Programme Service name strings. -Also from RDS specification, PS is usually a single eight character text. However, it is also possible -to find receivers which can scroll strings sized as 8 x N characters. So, this control must be configured -with steps of 8 characters. The result is it must always contain a string with size multiple of 8. - - - V4L2_CID_RDS_RX_RADIO_TEXT  - string - - Gets the Radio Text info. It is a textual description of -what is being broadcasted. RDS Radio Text can be applied when broadcaster wishes to transmit longer PS names, -programme-related information or any other text. In these cases, RadioText can be used in addition to -V4L2_CID_RDS_RX_PS_NAME. The encoding for Radio Text strings is also fully described -in Annex E of . The length of Radio Text strings depends on which RDS Block is being -used to transmit it, either 32 (2A block) or 64 (2B block). However, it is also possible -to find receivers which can scroll strings sized as 32 x N or 64 x N characters. So, this control must be configured -with steps of 32 or 64 characters. The result is it must always contain a string with size multiple of 32 or 64. - - - V4L2_CID_RDS_RX_TRAFFIC_ANNOUNCEMENT  - boolean - - If set, then a traffic announcement is in progress. - - - V4L2_CID_RDS_RX_TRAFFIC_PROGRAM  - boolean - - If set, then the tuned programme carries traffic announcements. - - - V4L2_CID_RDS_RX_MUSIC_SPEECH  - boolean - - If set, then this channel broadcasts music. If cleared, then it -broadcasts speech. If the transmitter doesn't make this distinction, then it will be set. - - - V4L2_CID_TUNE_DEEMPHASIS  - enum v4l2_deemphasis - - Configures the de-emphasis value for reception. -A de-emphasis filter is applied to the broadcast to accentuate the high audio frequencies. -Depending on the region, a time constant of either 50 or 75 useconds is used. The enum v4l2_deemphasis -defines possible values for de-emphasis. Here they are: - - - - - V4L2_DEEMPHASIS_DISABLED  - No de-emphasis is applied. - - - V4L2_DEEMPHASIS_50_uS  - A de-emphasis of 50 uS is used. - - - V4L2_DEEMPHASIS_75_uS  - A de-emphasis of 75 uS is used. - - - - - - - - -
-
- -
- Detect Control Reference - - The Detect class includes controls for common features of - various motion or object detection capable devices. - - - Detect Control IDs - - - - - - - - - - - ID - Type - Description - - - - - - V4L2_CID_DETECT_CLASS  - class - The Detect class -descriptor. Calling &VIDIOC-QUERYCTRL; for this control will return a -description of this control class. - - - V4L2_CID_DETECT_MD_MODE  - menu - Sets the motion detection mode. - - - - - - V4L2_DETECT_MD_MODE_DISABLED - Disable motion detection. - - - V4L2_DETECT_MD_MODE_GLOBAL - Use a single motion detection threshold. - - - V4L2_DETECT_MD_MODE_THRESHOLD_GRID - The image is divided into a grid, each cell with its own - motion detection threshold. These thresholds are set through the - V4L2_CID_DETECT_MD_THRESHOLD_GRID matrix control. - - - V4L2_DETECT_MD_MODE_REGION_GRID - The image is divided into a grid, each cell with its own - region value that specifies which per-region motion detection thresholds - should be used. Each region has its own thresholds. How these per-region - thresholds are set up is driver-specific. The region values for the grid are set - through the V4L2_CID_DETECT_MD_REGION_GRID matrix - control. - - - - - - V4L2_CID_DETECT_MD_GLOBAL_THRESHOLD  - integer - - Sets the global motion detection threshold to be - used with the V4L2_DETECT_MD_MODE_GLOBAL motion detection mode. - - - V4L2_CID_DETECT_MD_THRESHOLD_GRID  - __u16 matrix - - Sets the motion detection thresholds for each cell in the grid. - To be used with the V4L2_DETECT_MD_MODE_THRESHOLD_GRID - motion detection mode. Matrix element (0, 0) represents the cell at the top-left of the - grid. - - - V4L2_CID_DETECT_MD_REGION_GRID  - __u8 matrix - - Sets the motion detection region value for each cell in the grid. - To be used with the V4L2_DETECT_MD_MODE_REGION_GRID - motion detection mode. Matrix element (0, 0) represents the cell at the top-left of the - grid. - - - -
- -
- -
- RF Tuner Control Reference - - -The RF Tuner (RF_TUNER) class includes controls for common features of devices -having RF tuner. - - -In this context, RF tuner is radio receiver circuit between antenna and -demodulator. It receives radio frequency (RF) from the antenna and converts that -received signal to lower intermediate frequency (IF) or baseband frequency (BB). -Tuners that could do baseband output are often called Zero-IF tuners. Older -tuners were typically simple PLL tuners inside a metal box, whilst newer ones -are highly integrated chips without a metal box "silicon tuners". These controls -are mostly applicable for new feature rich silicon tuners, just because older -tuners does not have much adjustable features. - - -For more information about RF tuners see -Tuner (radio) -and -RF front end -from Wikipedia. - - - - RF_TUNER Control IDs - - - - - - - - - - - ID - Type - - - Description - - - - - - V4L2_CID_RF_TUNER_CLASS  - class - The RF_TUNER class -descriptor. Calling &VIDIOC-QUERYCTRL; for this control will return a -description of this control class. - - - V4L2_CID_RF_TUNER_BANDWIDTH_AUTO  - boolean - - - Enables/disables tuner radio channel -bandwidth configuration. In automatic mode bandwidth configuration is performed -by the driver. - - - V4L2_CID_RF_TUNER_BANDWIDTH  - integer - - - Filter(s) on tuner signal path are used to -filter signal according to receiving party needs. Driver configures filters to -fulfill desired bandwidth requirement. Used when V4L2_CID_RF_TUNER_BANDWIDTH_AUTO is not -set. Unit is in Hz. The range and step are driver-specific. - - - V4L2_CID_RF_TUNER_LNA_GAIN_AUTO  - boolean - - - Enables/disables LNA automatic gain control (AGC) - - - V4L2_CID_RF_TUNER_MIXER_GAIN_AUTO  - boolean - - - Enables/disables mixer automatic gain control (AGC) - - - V4L2_CID_RF_TUNER_IF_GAIN_AUTO  - boolean - - - Enables/disables IF automatic gain control (AGC) - - - V4L2_CID_RF_TUNER_RF_GAIN  - integer - - - The RF amplifier is the very first -amplifier on the receiver signal path, just right after the antenna input. -The difference between the LNA gain and the RF gain in this document is that -the LNA gain is integrated in the tuner chip while the RF gain is a separate -chip. There may be both RF and LNA gain controls in the same device. -The range and step are driver-specific. - - - V4L2_CID_RF_TUNER_LNA_GAIN  - integer - - - LNA (low noise amplifier) gain is first -gain stage on the RF tuner signal path. It is located very close to tuner -antenna input. Used when V4L2_CID_RF_TUNER_LNA_GAIN_AUTO is not set. -See V4L2_CID_RF_TUNER_RF_GAIN to understand how RF gain -and LNA gain differs from the each others. -The range and step are driver-specific. - - - V4L2_CID_RF_TUNER_MIXER_GAIN  - integer - - - Mixer gain is second gain stage on the RF -tuner signal path. It is located inside mixer block, where RF signal is -down-converted by the mixer. Used when V4L2_CID_RF_TUNER_MIXER_GAIN_AUTO -is not set. The range and step are driver-specific. - - - V4L2_CID_RF_TUNER_IF_GAIN  - integer - - - IF gain is last gain stage on the RF tuner -signal path. It is located on output of RF tuner. It controls signal level of -intermediate frequency output or baseband output. Used when -V4L2_CID_RF_TUNER_IF_GAIN_AUTO is not set. The range and step are -driver-specific. - - - V4L2_CID_RF_TUNER_PLL_LOCK  - boolean - - - Is synthesizer PLL locked? RF tuner is -receiving given frequency when that control is set. This is a read-only control. - - - - -
-
-
diff --git a/Documentation/DocBook/media/v4l/crop.pdf b/Documentation/DocBook/media/v4l/crop.pdf deleted file mode 100644 index c9fb81cd32f3..000000000000 Binary files a/Documentation/DocBook/media/v4l/crop.pdf and /dev/null differ diff --git a/Documentation/DocBook/media/v4l/dev-capture.xml b/Documentation/DocBook/media/v4l/dev-capture.xml deleted file mode 100644 index e1c5f9406d6a..000000000000 --- a/Documentation/DocBook/media/v4l/dev-capture.xml +++ /dev/null @@ -1,110 +0,0 @@ - Video Capture Interface - - Video capture devices sample an analog video signal and store -the digitized images in memory. Today nearly all devices can capture -at full 25 or 30 frames/second. With this interface applications can -control the capture process and move images from the driver into user -space. - - Conventionally V4L2 video capture devices are accessed through -character device special files named /dev/video -and /dev/video0 to -/dev/video63 with major number 81 and minor -numbers 0 to 63. /dev/video is typically a -symbolic link to the preferred video device. Note the same device -files are used for video output devices. - -
- Querying Capabilities - - Devices supporting the video capture interface set the -V4L2_CAP_VIDEO_CAPTURE or -V4L2_CAP_VIDEO_CAPTURE_MPLANE flag in the -capabilities field of &v4l2-capability; -returned by the &VIDIOC-QUERYCAP; ioctl. As secondary device functions -they may also support the video overlay -(V4L2_CAP_VIDEO_OVERLAY) and the raw VBI capture -(V4L2_CAP_VBI_CAPTURE) interface. At least one of -the read/write or streaming I/O methods must be supported. Tuners and -audio inputs are optional. -
- -
- Supplemental Functions - - Video capture devices shall support audio input, tuner, controls, -cropping and scaling and streaming parameter ioctls as needed. -The video input and video standard ioctls must be supported by -all video capture devices. -
- -
- Image Format Negotiation - - The result of a capture operation is determined by -cropping and image format parameters. The former select an area of the -video picture to capture, the latter how images are stored in memory, -&ie; in RGB or YUV format, the number of bits per pixel or width and -height. Together they also define how images are scaled in the -process. - - As usual these parameters are not reset -at &func-open; time to permit Unix tool chains, programming a device -and then reading from it as if it was a plain file. Well written V4L2 -applications ensure they really get what they want, including cropping -and scaling. - - Cropping initialization at minimum requires to reset the -parameters to defaults. An example is given in . - - To query the current image format applications set the -type field of a &v4l2-format; to -V4L2_BUF_TYPE_VIDEO_CAPTURE or -V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE and call the -&VIDIOC-G-FMT; ioctl with a pointer to this structure. Drivers fill -the &v4l2-pix-format; pix or the -&v4l2-pix-format-mplane; pix_mp member of the -fmt union. - - To request different parameters applications set the -type field of a &v4l2-format; as above and -initialize all fields of the &v4l2-pix-format; -vbi member of the -fmt union, or better just modify the -results of VIDIOC_G_FMT, and call the -&VIDIOC-S-FMT; ioctl with a pointer to this structure. Drivers may -adjust the parameters and finally return the actual parameters as -VIDIOC_G_FMT does. - - Like VIDIOC_S_FMT the -&VIDIOC-TRY-FMT; ioctl can be used to learn about hardware limitations -without disabling I/O or possibly time consuming hardware -preparations. - - The contents of &v4l2-pix-format; and &v4l2-pix-format-mplane; -are discussed in . See also the specification of the -VIDIOC_G_FMT, VIDIOC_S_FMT -and VIDIOC_TRY_FMT ioctls for details. Video -capture devices must implement both the -VIDIOC_G_FMT and -VIDIOC_S_FMT ioctl, even if -VIDIOC_S_FMT ignores all requests and always -returns default parameters as VIDIOC_G_FMT does. -VIDIOC_TRY_FMT is optional. -
- -
- Reading Images - - A video capture device may support the read() function and/or streaming (memory mapping or user pointer) I/O. See for details. -
diff --git a/Documentation/DocBook/media/v4l/dev-codec.xml b/Documentation/DocBook/media/v4l/dev-codec.xml deleted file mode 100644 index ff44c16fc080..000000000000 --- a/Documentation/DocBook/media/v4l/dev-codec.xml +++ /dev/null @@ -1,27 +0,0 @@ - Codec Interface - - A V4L2 codec can compress, decompress, transform, or otherwise -convert video data from one format into another format, in memory. Typically -such devices are memory-to-memory devices (i.e. devices with the -V4L2_CAP_VIDEO_M2M or V4L2_CAP_VIDEO_M2M_MPLANE -capability set). - - - A memory-to-memory video node acts just like a normal video node, but it -supports both output (sending frames from memory to the codec hardware) and -capture (receiving the processed frames from the codec hardware into memory) -stream I/O. An application will have to setup the stream -I/O for both sides and finally call &VIDIOC-STREAMON; for both capture and output -to start the codec. - - Video compression codecs use the MPEG controls to setup their codec parameters -(note that the MPEG controls actually support many more codecs than just MPEG). -See . - - Memory-to-memory devices can often be used as a shared resource: you can -open the video node multiple times, each application setting up their own codec properties -that are local to the file handle, and each can use it independently from the others. -The driver will arbitrate access to the codec and reprogram it whenever another file -handler gets access. This is different from the usual video node behavior where the video properties -are global to the device (i.e. changing something through one file handle is visible -through another file handle). diff --git a/Documentation/DocBook/media/v4l/dev-effect.xml b/Documentation/DocBook/media/v4l/dev-effect.xml deleted file mode 100644 index 2350a67c0710..000000000000 --- a/Documentation/DocBook/media/v4l/dev-effect.xml +++ /dev/null @@ -1,17 +0,0 @@ - Effect Devices Interface - - - Suspended - - This interface has been be suspended from the V4L2 API -implemented in Linux 2.6 until we have more experience with effect -device interfaces. - - - A V4L2 video effect device can do image effects, filtering, or -combine two or more images or image streams. For example video -transitions or wipes. Applications send data to be processed and -receive the result data either with &func-read; and &func-write; -functions, or through the streaming I/O mechanism. - - [to do] diff --git a/Documentation/DocBook/media/v4l/dev-event.xml b/Documentation/DocBook/media/v4l/dev-event.xml deleted file mode 100644 index 19f4becfae34..000000000000 --- a/Documentation/DocBook/media/v4l/dev-event.xml +++ /dev/null @@ -1,43 +0,0 @@ - Event Interface - - The V4L2 event interface provides a means for a user to get - immediately notified on certain conditions taking place on a device. - This might include start of frame or loss of signal events, for - example. Changes in the value or state of a V4L2 control can also be - reported through events. - - - To receive events, the events the user is interested in first must - be subscribed using the &VIDIOC-SUBSCRIBE-EVENT; ioctl. Once an event is - subscribed, the events of subscribed types are dequeueable using the - &VIDIOC-DQEVENT; ioctl. Events may be unsubscribed using - VIDIOC_UNSUBSCRIBE_EVENT ioctl. The special event type V4L2_EVENT_ALL may - be used to unsubscribe all the events the driver supports. - - The event subscriptions and event queues are specific to file - handles. Subscribing an event on one file handle does not affect - other file handles. - - The information on dequeueable events is obtained by using select or - poll system calls on video devices. The V4L2 events use POLLPRI events on - poll system call and exceptions on select system call. - - Starting with kernel 3.1 certain guarantees can be given with - regards to events: - - Each subscribed event has its own internal dedicated event queue. -This means that flooding of one event type will not interfere with other -event types. - - - If the internal event queue for a particular subscribed event -becomes full, then the oldest event in that queue will be dropped. - - - Where applicable, certain event types can ensure that the payload -of the oldest event that is about to be dropped will be merged with the payload -of the next oldest event. Thus ensuring that no information is lost, but only an -intermediate step leading up to that information. See the documentation for the -event you want to subscribe to whether this is applicable for that event or not. - - diff --git a/Documentation/DocBook/media/v4l/dev-osd.xml b/Documentation/DocBook/media/v4l/dev-osd.xml deleted file mode 100644 index 54853329140b..000000000000 --- a/Documentation/DocBook/media/v4l/dev-osd.xml +++ /dev/null @@ -1,149 +0,0 @@ - Video Output Overlay Interface - Also known as On-Screen Display (OSD) - - Some video output devices can overlay a framebuffer image onto -the outgoing video signal. Applications can set up such an overlay -using this interface, which borrows structures and ioctls of the Video Overlay interface. - - The OSD function is accessible through the same character -special file as the Video Output function. -Note the default function of such a /dev/video device -is video capturing or output. The OSD function is only available after -calling the &VIDIOC-S-FMT; ioctl. - -
- Querying Capabilities - - Devices supporting the Video Output -Overlay interface set the -V4L2_CAP_VIDEO_OUTPUT_OVERLAY flag in the -capabilities field of &v4l2-capability; -returned by the &VIDIOC-QUERYCAP; ioctl. -
- -
- Framebuffer - - Contrary to the Video Overlay -interface the framebuffer is normally implemented on the TV card and -not the graphics card. On Linux it is accessible as a framebuffer -device (/dev/fbN). Given a V4L2 device, -applications can find the corresponding framebuffer device by calling -the &VIDIOC-G-FBUF; ioctl. It returns, amongst other information, the -physical address of the framebuffer in the -base field of &v4l2-framebuffer;. The -framebuffer device ioctl FBIOGET_FSCREENINFO -returns the same address in the smem_start -field of struct fb_fix_screeninfo. The -FBIOGET_FSCREENINFO ioctl and struct -fb_fix_screeninfo are defined in the -linux/fb.h header file. - - The width and height of the framebuffer depends on the -current video standard. A V4L2 driver may reject attempts to change -the video standard (or any other ioctl which would imply a framebuffer -size change) with an &EBUSY; until all applications closed the -framebuffer device. - - - Finding a framebuffer device for OSD - - -#include <linux/fb.h> - -&v4l2-framebuffer; fbuf; -unsigned int i; -int fb_fd; - -if (-1 == ioctl(fd, VIDIOC_G_FBUF, &fbuf)) { - perror("VIDIOC_G_FBUF"); - exit(EXIT_FAILURE); -} - -for (i = 0; i < 30; i++) { - char dev_name[16]; - struct fb_fix_screeninfo si; - - snprintf(dev_name, sizeof(dev_name), "/dev/fb%u", i); - - fb_fd = open(dev_name, O_RDWR); - if (-1 == fb_fd) { - switch (errno) { - case ENOENT: /* no such file */ - case ENXIO: /* no driver */ - continue; - - default: - perror("open"); - exit(EXIT_FAILURE); - } - } - - if (0 == ioctl(fb_fd, FBIOGET_FSCREENINFO, &si)) { - if (si.smem_start == (unsigned long)fbuf.base) - break; - } else { - /* Apparently not a framebuffer device. */ - } - - close(fb_fd); - fb_fd = -1; -} - -/* fb_fd is the file descriptor of the framebuffer device - for the video output overlay, or -1 if no device was found. */ - - -
- -
- Overlay Window and Scaling - - The overlay is controlled by source and target rectangles. -The source rectangle selects a subsection of the framebuffer image to -be overlaid, the target rectangle an area in the outgoing video signal -where the image will appear. Drivers may or may not support scaling, -and arbitrary sizes and positions of these rectangles. Further drivers -may support any (or none) of the clipping/blending methods defined for -the Video Overlay interface. - - A &v4l2-window; defines the size of the source rectangle, -its position in the framebuffer and the clipping/blending method to be -used for the overlay. To get the current parameters applications set -the type field of a &v4l2-format; to -V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY and call the -&VIDIOC-G-FMT; ioctl. The driver fills the -v4l2_window substructure named -win. It is not possible to retrieve a -previously programmed clipping list or bitmap. - - To program the source rectangle applications set the -type field of a &v4l2-format; to -V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY, initialize -the win substructure and call the -&VIDIOC-S-FMT; ioctl. The driver adjusts the parameters against -hardware limits and returns the actual parameters as -VIDIOC_G_FMT does. Like -VIDIOC_S_FMT, the &VIDIOC-TRY-FMT; ioctl can be -used to learn about driver capabilities without actually changing -driver state. Unlike VIDIOC_S_FMT this also works -after the overlay has been enabled. - - A &v4l2-crop; defines the size and position of the target -rectangle. The scaling factor of the overlay is implied by the width -and height given in &v4l2-window; and &v4l2-crop;. The cropping API -applies to Video Output and Video -Output Overlay devices in the same way as to -Video Capture and Video -Overlay devices, merely reversing the direction of the -data flow. For more information see . -
- -
- Enabling Overlay - - There is no V4L2 ioctl to enable or disable the overlay, -however the framebuffer interface of the driver may support the -FBIOBLANK ioctl. -
diff --git a/Documentation/DocBook/media/v4l/dev-output.xml b/Documentation/DocBook/media/v4l/dev-output.xml deleted file mode 100644 index 9130a3dc7880..000000000000 --- a/Documentation/DocBook/media/v4l/dev-output.xml +++ /dev/null @@ -1,106 +0,0 @@ - Video Output Interface - - Video output devices encode stills or image sequences as -analog video signal. With this interface applications can -control the encoding process and move images from user space to -the driver. - - Conventionally V4L2 video output devices are accessed through -character device special files named /dev/video -and /dev/video0 to -/dev/video63 with major number 81 and minor -numbers 0 to 63. /dev/video is typically a -symbolic link to the preferred video device. Note the same device -files are used for video capture devices. - -
- Querying Capabilities - - Devices supporting the video output interface set the -V4L2_CAP_VIDEO_OUTPUT or -V4L2_CAP_VIDEO_OUTPUT_MPLANE flag in the -capabilities field of &v4l2-capability; -returned by the &VIDIOC-QUERYCAP; ioctl. As secondary device functions -they may also support the raw VBI -output (V4L2_CAP_VBI_OUTPUT) interface. At -least one of the read/write or streaming I/O methods must be -supported. Modulators and audio outputs are optional. -
- -
- Supplemental Functions - - Video output devices shall support audio output, modulator, controls, -cropping and scaling and streaming parameter ioctls as needed. -The video output and video standard ioctls must be supported by -all video output devices. -
- -
- Image Format Negotiation - - The output is determined by cropping and image format -parameters. The former select an area of the video picture where the -image will appear, the latter how images are stored in memory, &ie; in -RGB or YUV format, the number of bits per pixel or width and height. -Together they also define how images are scaled in the process. - - As usual these parameters are not reset -at &func-open; time to permit Unix tool chains, programming a device -and then writing to it as if it was a plain file. Well written V4L2 -applications ensure they really get what they want, including cropping -and scaling. - - Cropping initialization at minimum requires to reset the -parameters to defaults. An example is given in . - - To query the current image format applications set the -type field of a &v4l2-format; to -V4L2_BUF_TYPE_VIDEO_OUTPUT or -V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE and call the -&VIDIOC-G-FMT; ioctl with a pointer to this structure. Drivers fill -the &v4l2-pix-format; pix or the -&v4l2-pix-format-mplane; pix_mp member of the -fmt union. - - To request different parameters applications set the -type field of a &v4l2-format; as above and -initialize all fields of the &v4l2-pix-format; -vbi member of the -fmt union, or better just modify the -results of VIDIOC_G_FMT, and call the -&VIDIOC-S-FMT; ioctl with a pointer to this structure. Drivers may -adjust the parameters and finally return the actual parameters as -VIDIOC_G_FMT does. - - Like VIDIOC_S_FMT the -&VIDIOC-TRY-FMT; ioctl can be used to learn about hardware limitations -without disabling I/O or possibly time consuming hardware -preparations. - - The contents of &v4l2-pix-format; and &v4l2-pix-format-mplane; -are discussed in . See also the specification of the -VIDIOC_G_FMT, VIDIOC_S_FMT -and VIDIOC_TRY_FMT ioctls for details. Video -output devices must implement both the -VIDIOC_G_FMT and -VIDIOC_S_FMT ioctl, even if -VIDIOC_S_FMT ignores all requests and always -returns default parameters as VIDIOC_G_FMT does. -VIDIOC_TRY_FMT is optional. -
- -
- Writing Images - - A video output device may support the write() function and/or streaming (memory mapping or user pointer) I/O. See for details. -
diff --git a/Documentation/DocBook/media/v4l/dev-overlay.xml b/Documentation/DocBook/media/v4l/dev-overlay.xml deleted file mode 100644 index cc6e0c5c960c..000000000000 --- a/Documentation/DocBook/media/v4l/dev-overlay.xml +++ /dev/null @@ -1,368 +0,0 @@ - Video Overlay Interface - Also known as Framebuffer Overlay or Previewing - - Video overlay devices have the ability to genlock (TV-)video -into the (VGA-)video signal of a graphics card, or to store captured -images directly in video memory of a graphics card, typically with -clipping. This can be considerable more efficient than capturing -images and displaying them by other means. In the old days when only -nuclear power plants needed cooling towers this used to be the only -way to put live video into a window. - - Video overlay devices are accessed through the same character -special files as video capture devices. -Note the default function of a /dev/video device -is video capturing. The overlay function is only available after -calling the &VIDIOC-S-FMT; ioctl. - - The driver may support simultaneous overlay and capturing -using the read/write and streaming I/O methods. If so, operation at -the nominal frame rate of the video standard is not guaranteed. Frames -may be directed away from overlay to capture, or one field may be used -for overlay and the other for capture if the capture parameters permit -this. - - Applications should use different file descriptors for -capturing and overlay. This must be supported by all drivers capable -of simultaneous capturing and overlay. Optionally these drivers may -also permit capturing and overlay with a single file descriptor for -compatibility with V4L and earlier versions of V4L2. - A common application of two file descriptors is the -XFree86 Xv/V4L interface driver and -a V4L2 application. While the X server controls video overlay, the -application can take advantage of memory mapping and DMA. - In the opinion of the designers of this API, no driver -writer taking the efforts to support simultaneous capturing and -overlay will restrict this ability by requiring a single file -descriptor, as in V4L and earlier versions of V4L2. Making this -optional means applications depending on two file descriptors need -backup routines to be compatible with all drivers, which is -considerable more work than using two fds in applications which do -not. Also two fd's fit the general concept of one file descriptor for -each logical stream. Hence as a complexity trade-off drivers -must support two file descriptors and -may support single fd operation. - - -
- Querying Capabilities - - Devices supporting the video overlay interface set the -V4L2_CAP_VIDEO_OVERLAY flag in the -capabilities field of &v4l2-capability; -returned by the &VIDIOC-QUERYCAP; ioctl. The overlay I/O method specified -below must be supported. Tuners and audio inputs are optional. -
- -
- Supplemental Functions - - Video overlay devices shall support audio input, tuner, controls, -cropping and scaling and streaming parameter ioctls as needed. -The video input and video standard ioctls must be supported by -all video overlay devices. -
- -
- Setup - - Before overlay can commence applications must program the -driver with frame buffer parameters, namely the address and size of -the frame buffer and the image format, for example RGB 5:6:5. The -&VIDIOC-G-FBUF; and &VIDIOC-S-FBUF; ioctls are available to get -and set these parameters, respectively. The -VIDIOC_S_FBUF ioctl is privileged because it -allows to set up DMA into physical memory, bypassing the memory -protection mechanisms of the kernel. Only the superuser can change the -frame buffer address and size. Users are not supposed to run TV -applications as root or with SUID bit set. A small helper application -with suitable privileges should query the graphics system and program -the V4L2 driver at the appropriate time. - - Some devices add the video overlay to the output signal -of the graphics card. In this case the frame buffer is not modified by -the video device, and the frame buffer address and pixel format are -not needed by the driver. The VIDIOC_S_FBUF ioctl -is not privileged. An application can check for this type of device by -calling the VIDIOC_G_FBUF ioctl. - - A driver may support any (or none) of five clipping/blending -methods: - - Chroma-keying displays the overlaid image only where -pixels in the primary graphics surface assume a certain color. - - - A bitmap can be specified where each bit corresponds -to a pixel in the overlaid image. When the bit is set, the -corresponding video pixel is displayed, otherwise a pixel of the -graphics surface. - - - A list of clipping rectangles can be specified. In -these regions no video is displayed, so the -graphics surface can be seen here. - - - The framebuffer has an alpha channel that can be used -to clip or blend the framebuffer with the video. - - - A global alpha value can be specified to blend the -framebuffer contents with video images. - - - - When simultaneous capturing and overlay is supported and -the hardware prohibits different image and frame buffer formats, the -format requested first takes precedence. The attempt to capture -(&VIDIOC-S-FMT;) or overlay (&VIDIOC-S-FBUF;) may fail with an -&EBUSY; or return accordingly modified parameters.. -
- -
- Overlay Window - - The overlaid image is determined by cropping and overlay -window parameters. The former select an area of the video picture to -capture, the latter how images are overlaid and clipped. Cropping -initialization at minimum requires to reset the parameters to -defaults. An example is given in . - - The overlay window is described by a &v4l2-window;. It -defines the size of the image, its position over the graphics surface -and the clipping to be applied. To get the current parameters -applications set the type field of a -&v4l2-format; to V4L2_BUF_TYPE_VIDEO_OVERLAY and -call the &VIDIOC-G-FMT; ioctl. The driver fills the -v4l2_window substructure named -win. It is not possible to retrieve a -previously programmed clipping list or bitmap. - - To program the overlay window applications set the -type field of a &v4l2-format; to -V4L2_BUF_TYPE_VIDEO_OVERLAY, initialize the -win substructure and call the -&VIDIOC-S-FMT; ioctl. The driver adjusts the parameters against -hardware limits and returns the actual parameters as -VIDIOC_G_FMT does. Like -VIDIOC_S_FMT, the &VIDIOC-TRY-FMT; ioctl can be -used to learn about driver capabilities without actually changing -driver state. Unlike VIDIOC_S_FMT this also works -after the overlay has been enabled. - - The scaling factor of the overlaid image is implied by the -width and height given in &v4l2-window; and the size of the cropping -rectangle. For more information see . - - When simultaneous capturing and overlay is supported and -the hardware prohibits different image and window sizes, the size -requested first takes precedence. The attempt to capture or overlay as -well (&VIDIOC-S-FMT;) may fail with an &EBUSY; or return accordingly -modified parameters. - - - struct <structname>v4l2_window</structname> - - &cs-str; - - - &v4l2-rect; - w - Size and position of the window relative to the -top, left corner of the frame buffer defined with &VIDIOC-S-FBUF;. The -window can extend the frame buffer width and height, the -x and y -coordinates can be negative, and it can lie completely outside the -frame buffer. The driver clips the window accordingly, or if that is -not possible, modifies its size and/or position. - - - &v4l2-field; - field - Applications set this field to determine which -video field shall be overlaid, typically one of -V4L2_FIELD_ANY (0), -V4L2_FIELD_TOP, -V4L2_FIELD_BOTTOM or -V4L2_FIELD_INTERLACED. Drivers may have to choose -a different field order and return the actual setting here. - - - __u32 - chromakey - When chroma-keying has been negotiated with -&VIDIOC-S-FBUF; applications set this field to the desired pixel value -for the chroma key. The format is the same as the pixel format of the -framebuffer (&v4l2-framebuffer; -fmt.pixelformat field), with bytes in host -order. E. g. for V4L2_PIX_FMT_BGR24 -the value should be 0xRRGGBB on a little endian, 0xBBGGRR on a big -endian host. - - - &v4l2-clip; * - clips - When chroma-keying has not -been negotiated and &VIDIOC-G-FBUF; indicated this capability, -applications can set this field to point to an array of -clipping rectangles. - - - - - Like the window coordinates -w, clipping rectangles are defined relative -to the top, left corner of the frame buffer. However clipping -rectangles must not extend the frame buffer width and height, and they -must not overlap. If possible applications should merge adjacent -rectangles. Whether this must create x-y or y-x bands, or the order of -rectangles, is not defined. When clip lists are not supported the -driver ignores this field. Its contents after calling &VIDIOC-S-FMT; -are undefined. - - - __u32 - clipcount - When the application set the -clips field, this field must contain the -number of clipping rectangles in the list. When clip lists are not -supported the driver ignores this field, its contents after calling -VIDIOC_S_FMT are undefined. When clip lists are -supported but no clipping is desired this field must be set to -zero. - - - void * - bitmap - When chroma-keying has -not been negotiated and &VIDIOC-G-FBUF; indicated -this capability, applications can set this field to point to a -clipping bit mask. - - - It must be of the same size -as the window, w.width and -w.height. Each bit corresponds to a pixel -in the overlaid image, which is displayed only when the bit is -set. Pixel coordinates translate to bits like: - -((__u8 *) bitmap)[w.width * y + x / 8] & (1 << (x & 7))where 0 ≤ x < -w.width and 0 ≤ -y <w.height. - Should we require - w.width to be a multiple of - eight? - When a clipping -bit mask is not supported the driver ignores this field, its contents -after calling &VIDIOC-S-FMT; are undefined. When a bit mask is supported -but no clipping is desired this field must be set to -NULL.Applications need not create a -clip list or bit mask. When they pass both, or despite negotiating -chroma-keying, the results are undefined. Regardless of the chosen -method, the clipping abilities of the hardware may be limited in -quantity or quality. The results when these limits are exceeded are -undefined. - When the image is written into frame buffer -memory it will be undesirable if the driver clips out less pixels -than expected, because the application and graphics system are not -aware these regions need to be refreshed. The driver should clip out -more pixels or not write the image at all. - - - - __u8 - global_alpha - The global alpha value used to blend the -framebuffer with video images, if global alpha blending has been -negotiated (V4L2_FBUF_FLAG_GLOBAL_ALPHA, see -&VIDIOC-S-FBUF;, ). - - - - - Note this field was added in Linux 2.6.23, extending the structure. However -the VIDIOC_G/S/TRY_FMT ioctls, -which take a pointer to a v4l2_format parent structure with padding -bytes at the end, are not affected. - - - -
- - - struct <structname>v4l2_clip</structname><footnote> - <para>The X Window system defines "regions" which are -vectors of struct BoxRec { short x1, y1, x2, y2; } with width = x2 - -x1 and height = y2 - y1, so one cannot pass X11 clip lists -directly.</para> - </footnote> - - &cs-str; - - - &v4l2-rect; - c - Coordinates of the clipping rectangle, relative to -the top, left corner of the frame buffer. Only window pixels -outside all clipping rectangles are -displayed. - - - &v4l2-clip; * - next - Pointer to the next clipping rectangle, NULL when -this is the last rectangle. Drivers ignore this field, it cannot be -used to pass a linked list of clipping rectangles. - - - -
- - - - - struct <structname>v4l2_rect</structname> - - &cs-str; - - - __s32 - left - Horizontal offset of the top, left corner of the -rectangle, in pixels. - - - __s32 - top - Vertical offset of the top, left corner of the -rectangle, in pixels. Offsets increase to the right and down. - - - __u32 - width - Width of the rectangle, in pixels. - - - __u32 - height - Height of the rectangle, in pixels. - - - -
-
- -
- Enabling Overlay - - To start or stop the frame buffer overlay applications call -the &VIDIOC-OVERLAY; ioctl. -
diff --git a/Documentation/DocBook/media/v4l/dev-radio.xml b/Documentation/DocBook/media/v4l/dev-radio.xml deleted file mode 100644 index 3e6ac73b36af..000000000000 --- a/Documentation/DocBook/media/v4l/dev-radio.xml +++ /dev/null @@ -1,49 +0,0 @@ - Radio Interface - - This interface is intended for AM and FM (analog) radio -receivers and transmitters. - - Conventionally V4L2 radio devices are accessed through -character device special files named /dev/radio -and /dev/radio0 to -/dev/radio63 with major number 81 and minor -numbers 64 to 127. - -
- Querying Capabilities - - Devices supporting the radio interface set the -V4L2_CAP_RADIO and -V4L2_CAP_TUNER or -V4L2_CAP_MODULATOR flag in the -capabilities field of &v4l2-capability; -returned by the &VIDIOC-QUERYCAP; ioctl. Other combinations of -capability flags are reserved for future extensions. -
- -
- Supplemental Functions - - Radio devices can support controls, and must support the tuner or modulator ioctls. - - They do not support the video input or output, audio input -or output, video standard, cropping and scaling, compression and -streaming parameter, or overlay ioctls. All other ioctls and I/O -methods are reserved for future extensions. -
- -
- Programming - - Radio devices may have a couple audio controls (as discussed -in ) such as a volume control, possibly custom -controls. Further all radio devices have one tuner or modulator (these are -discussed in ) with index number zero to select -the radio frequency and to determine if a monaural or FM stereo -program is received/emitted. Drivers switch automatically between AM and FM -depending on the selected frequency. The &VIDIOC-G-TUNER; or -&VIDIOC-G-MODULATOR; ioctl -reports the supported frequency range. -
diff --git a/Documentation/DocBook/media/v4l/dev-raw-vbi.xml b/Documentation/DocBook/media/v4l/dev-raw-vbi.xml deleted file mode 100644 index 78599bbd58f7..000000000000 --- a/Documentation/DocBook/media/v4l/dev-raw-vbi.xml +++ /dev/null @@ -1,345 +0,0 @@ - Raw VBI Data Interface - - VBI is an abbreviation of Vertical Blanking Interval, a gap -in the sequence of lines of an analog video signal. During VBI -no picture information is transmitted, allowing some time while the -electron beam of a cathode ray tube TV returns to the top of the -screen. Using an oscilloscope you will find here the vertical -synchronization pulses and short data packages ASK -modulatedASK: Amplitude-Shift Keying. A high signal -level represents a '1' bit, a low level a '0' bit. -onto the video signal. These are transmissions of services such as -Teletext or Closed Caption. - - Subject of this interface type is raw VBI data, as sampled off -a video signal, or to be added to a signal for output. -The data format is similar to uncompressed video images, a number of -lines times a number of samples per line, we call this a VBI image. - - Conventionally V4L2 VBI devices are accessed through character -device special files named /dev/vbi and -/dev/vbi0 to /dev/vbi31 with -major number 81 and minor numbers 224 to 255. -/dev/vbi is typically a symbolic link to the -preferred VBI device. This convention applies to both input and output -devices. - - To address the problems of finding related video and VBI -devices VBI capturing and output is also available as device function -under /dev/video. To capture or output raw VBI -data with these devices applications must call the &VIDIOC-S-FMT; -ioctl. Accessed as /dev/vbi, raw VBI capturing -or output is the default device function. - -
- Querying Capabilities - - Devices supporting the raw VBI capturing or output API set -the V4L2_CAP_VBI_CAPTURE or -V4L2_CAP_VBI_OUTPUT flags, respectively, in the -capabilities field of &v4l2-capability; -returned by the &VIDIOC-QUERYCAP; ioctl. At least one of the -read/write, streaming or asynchronous I/O methods must be -supported. VBI devices may or may not have a tuner or modulator. -
- -
- Supplemental Functions - - VBI devices shall support video -input or output, tuner or -modulator, and controls ioctls -as needed. The video standard ioctls provide -information vital to program a VBI device, therefore must be -supported. -
- -
- Raw VBI Format Negotiation - - Raw VBI sampling abilities can vary, in particular the -sampling frequency. To properly interpret the data V4L2 specifies an -ioctl to query the sampling parameters. Moreover, to allow for some -flexibility applications can also suggest different parameters. - - As usual these parameters are not -reset at &func-open; time to permit Unix tool chains, programming a -device and then reading from it as if it was a plain file. Well -written V4L2 applications should always ensure they really get what -they want, requesting reasonable parameters and then checking if the -actual parameters are suitable. - - To query the current raw VBI capture parameters -applications set the type field of a -&v4l2-format; to V4L2_BUF_TYPE_VBI_CAPTURE or -V4L2_BUF_TYPE_VBI_OUTPUT, and call the -&VIDIOC-G-FMT; ioctl with a pointer to this structure. Drivers fill -the &v4l2-vbi-format; vbi member of the -fmt union. - - To request different parameters applications set the -type field of a &v4l2-format; as above and -initialize all fields of the &v4l2-vbi-format; -vbi member of the -fmt union, or better just modify the -results of VIDIOC_G_FMT, and call the -&VIDIOC-S-FMT; ioctl with a pointer to this structure. Drivers return -an &EINVAL; only when the given parameters are ambiguous, otherwise -they modify the parameters according to the hardware capabilities and -return the actual parameters. When the driver allocates resources at -this point, it may return an &EBUSY; to indicate the returned -parameters are valid but the required resources are currently not -available. That may happen for instance when the video and VBI areas -to capture would overlap, or when the driver supports multiple opens -and another process already requested VBI capturing or output. Anyway, -applications must expect other resource allocation points which may -return EBUSY, at the &VIDIOC-STREAMON; ioctl -and the first read(), write() and select() call. - - VBI devices must implement both the -VIDIOC_G_FMT and -VIDIOC_S_FMT ioctl, even if -VIDIOC_S_FMT ignores all requests and always -returns default parameters as VIDIOC_G_FMT does. -VIDIOC_TRY_FMT is optional. - - - struct <structname>v4l2_vbi_format</structname> - - &cs-str; - - - __u32 - sampling_rate - Samples per second, i. e. unit 1 Hz. - - - __u32 - offset - Horizontal offset of the VBI image, -relative to the leading edge of the line synchronization pulse and -counted in samples: The first sample in the VBI image will be located -offset / -sampling_rate seconds following the leading -edge. See also . - - - __u32 - samples_per_line - - - - __u32 - sample_format - Defines the sample format as in , a four-character-code. - A few devices may be unable to -sample VBI data at all but can extend the video capture window to the -VBI region. - Usually this is -V4L2_PIX_FMT_GREY, i. e. each sample -consists of 8 bits with lower values oriented towards the black level. -Do not assume any other correlation of values with the signal level. -For example, the MSB does not necessarily indicate if the signal is -'high' or 'low' because 128 may not be the mean value of the -signal. Drivers shall not convert the sample format by software. - - - __u32 - start[2] - This is the scanning system line number -associated with the first line of the VBI image, of the first and the -second field respectively. See and - for valid values. -The V4L2_VBI_ITU_525_F1_START, -V4L2_VBI_ITU_525_F2_START, -V4L2_VBI_ITU_625_F1_START and -V4L2_VBI_ITU_625_F2_START defines give the start line -numbers for each field for each 525 or 625 line format as a convenience. -Don't forget that ITU line numbering starts at 1, not 0. -VBI input drivers can return start values 0 if the hardware cannot -reliable identify scanning lines, VBI acquisition may not require this -information. - - - __u32 - count[2] - The number of lines in the first and second -field image, respectively. - - - Drivers should be as -flexibility as possible. For example, it may be possible to extend or -move the VBI capture window down to the picture area, implementing a -'full field mode' to capture data service transmissions embedded in -the picture.An application can set the first or second -count value to zero if no data is required -from the respective field; count[1] if the -scanning system is progressive, &ie; not interlaced. The -corresponding start value shall be ignored by the application and -driver. Anyway, drivers may not support single field capturing and -return both count values non-zero.Both -count values set to zero, or line numbers -outside the bounds depicted in and , or a field image covering -lines of two fields, are invalid and shall not be returned by the -driver.To initialize the start -and count fields, applications must first -determine the current video standard selection. The &v4l2-std-id; or -the framelines field of &v4l2-standard; can -be evaluated for this purpose. - - - __u32 - flags - See below. Currently -only drivers set flags, applications must set this field to -zero. - - - __u32 - reserved[2] - This array is reserved for future extensions. -Drivers and applications must set it to zero. - - - -
- - - Raw VBI Format Flags - - &cs-def; - - - V4L2_VBI_UNSYNC - 0x0001 - This flag indicates hardware which does not -properly distinguish between fields. Normally the VBI image stores the -first field (lower scanning line numbers) first in memory. This may be -a top or bottom field depending on the video standard. When this flag -is set the first or second field may be stored first, however the -fields are still in correct temporal order with the older field first -in memory. - Most VBI services transmit on both fields, but -some have different semantics depending on the field number. These -cannot be reliable decoded or encoded when -V4L2_VBI_UNSYNC is set. - - - - V4L2_VBI_INTERLACED - 0x0002 - By default the two field images will be passed -sequentially; all lines of the first field followed by all lines of -the second field (compare -V4L2_FIELD_SEQ_TB and -V4L2_FIELD_SEQ_BT, whether the top or bottom -field is first in memory depends on the video standard). When this -flag is set, the two fields are interlaced (cf. -V4L2_FIELD_INTERLACED). The first line of the -first field followed by the first line of the second field, then the -two second lines, and so on. Such a layout may be necessary when the -hardware has been programmed to capture or output interlaced video -images and is unable to separate the fields for VBI capturing at -the same time. For simplicity setting this flag implies that both -count values are equal and non-zero. - - - -
- -
- Line synchronization - - - - - - - - - Line synchronization diagram - - -
- -
- ITU-R 525 line numbering (M/NTSC and M/PAL) - - - - - - - - - NTSC field synchronization diagram - - - (1) For the purpose of this specification field 2 -starts in line 264 and not 263.5 because half line capturing is not -supported. - - -
- -
- ITU-R 625 line numbering - - - - - - - - - PAL/SECAM field synchronization diagram - - - (1) For the purpose of this specification field 2 -starts in line 314 and not 313.5 because half line capturing is not -supported. - - -
- - Remember the VBI image format depends on the selected -video standard, therefore the application must choose a new standard or -query the current standard first. Attempts to read or write data ahead -of format negotiation, or after switching the video standard which may -invalidate the negotiated VBI parameters, should be refused by the -driver. A format change during active I/O is not permitted. -
- -
- Reading and writing VBI images - - To assure synchronization with the field number and easier -implementation, the smallest unit of data passed at a time is one -frame, consisting of two fields of VBI images immediately following in -memory. - - The total size of a frame computes as follows: - - -(count[0] + count[1]) * -samples_per_line * sample size in bytes - - The sample size is most likely always one byte, -applications must check the sample_format -field though, to function properly with other drivers. - - A VBI device may support read/write and/or streaming (memory mapping or user pointer) I/O. The latter bears the -possibility of synchronizing video and -VBI data by using buffer timestamps. - - Remember the &VIDIOC-STREAMON; ioctl and the first read(), -write() and select() call can be resource allocation points returning -an &EBUSY; if the required hardware resources are temporarily -unavailable, for example the device is already in use by another -process. -
diff --git a/Documentation/DocBook/media/v4l/dev-rds.xml b/Documentation/DocBook/media/v4l/dev-rds.xml deleted file mode 100644 index be2f33737323..000000000000 --- a/Documentation/DocBook/media/v4l/dev-rds.xml +++ /dev/null @@ -1,196 +0,0 @@ - RDS Interface - - The Radio Data System transmits supplementary -information in binary format, for example the station name or travel -information, on an inaudible audio subcarrier of a radio program. This -interface is aimed at devices capable of receiving and/or transmitting RDS -information. - - For more information see the core RDS standard -and the RBDS standard . - - Note that the RBDS standard as is used in the USA is almost identical -to the RDS standard. Any RDS decoder/encoder can also handle RBDS. Only some of the -fields have slightly different meanings. See the RBDS standard for more -information. - - The RBDS standard also specifies support for MMBS (Modified Mobile Search). -This is a proprietary format which seems to be discontinued. The RDS interface does not -support this format. Should support for MMBS (or the so-called 'E blocks' in general) -be needed, then please contact the linux-media mailing list: &v4l-ml;. - -
- Querying Capabilities - - Devices supporting the RDS capturing API set -the V4L2_CAP_RDS_CAPTURE flag in -the capabilities field of &v4l2-capability; -returned by the &VIDIOC-QUERYCAP; ioctl. Any tuner that supports RDS -will set the V4L2_TUNER_CAP_RDS flag in -the capability field of &v4l2-tuner;. If -the driver only passes RDS blocks without interpreting the data -the V4L2_TUNER_CAP_RDS_BLOCK_IO flag has to be -set, see Reading RDS data. -For future use the -flag V4L2_TUNER_CAP_RDS_CONTROLS has also been -defined. However, a driver for a radio tuner with this capability does -not yet exist, so if you are planning to write such a driver you -should discuss this on the linux-media mailing list: &v4l-ml;. - - Whether an RDS signal is present can be detected by looking -at the rxsubchans field of &v4l2-tuner;: -the V4L2_TUNER_SUB_RDS will be set if RDS data -was detected. - - Devices supporting the RDS output API -set the V4L2_CAP_RDS_OUTPUT flag in -the capabilities field of &v4l2-capability; -returned by the &VIDIOC-QUERYCAP; ioctl. -Any modulator that supports RDS will set the -V4L2_TUNER_CAP_RDS flag in the capability -field of &v4l2-modulator;. -In order to enable the RDS transmission one must set the V4L2_TUNER_SUB_RDS -bit in the txsubchans field of &v4l2-modulator;. -If the driver only passes RDS blocks without interpreting the data -the V4L2_TUNER_CAP_RDS_BLOCK_IO flag has to be set. If the -tuner is capable of handling RDS entities like program identification codes and radio -text, the flag V4L2_TUNER_CAP_RDS_CONTROLS should be set, -see Writing RDS data and -FM Transmitter Control Reference. -
- -
- Reading RDS data - - RDS data can be read from the radio device -with the &func-read; function. The data is packed in groups of three bytes. -
- -
- Writing RDS data - - RDS data can be written to the radio device -with the &func-write; function. The data is packed in groups of three bytes, -as follows: -
- -
- RDS datastructures - - struct -<structname>v4l2_rds_data</structname> - - - - - - - __u8 - lsb - Least Significant Byte of RDS Block - - - __u8 - msb - Most Significant Byte of RDS Block - - - __u8 - block - Block description - - - -
- - Block description - - - - - - Bits 0-2 - Block (aka offset) of the received data. - - - Bits 3-5 - Deprecated. Currently identical to bits 0-2. Do not use these bits. - - - Bit 6 - Corrected bit. Indicates that an error was corrected for this data block. - - - Bit 7 - Error bit. Indicates that an uncorrectable error occurred during reception of this block. - - - -
- - - Block defines - - - - - - - - V4L2_RDS_BLOCK_MSK - - 7 - Mask for bits 0-2 to get the block ID. - - - V4L2_RDS_BLOCK_A - - 0 - Block A. - - - V4L2_RDS_BLOCK_B - - 1 - Block B. - - - V4L2_RDS_BLOCK_C - - 2 - Block C. - - - V4L2_RDS_BLOCK_D - - 3 - Block D. - - - V4L2_RDS_BLOCK_C_ALT - - 4 - Block C'. - - - V4L2_RDS_BLOCK_INVALID - read-only - 7 - An invalid block. - - - V4L2_RDS_BLOCK_CORRECTED - read-only - 0x40 - A bit error was detected but corrected. - - - V4L2_RDS_BLOCK_ERROR - read-only - 0x80 - An uncorrectable error occurred. - - - -
-
diff --git a/Documentation/DocBook/media/v4l/dev-sdr.xml b/Documentation/DocBook/media/v4l/dev-sdr.xml deleted file mode 100644 index 6da1157fb5bd..000000000000 --- a/Documentation/DocBook/media/v4l/dev-sdr.xml +++ /dev/null @@ -1,126 +0,0 @@ - Software Defined Radio Interface (SDR) - - -SDR is an abbreviation of Software Defined Radio, the radio device -which uses application software for modulation or demodulation. This interface -is intended for controlling and data streaming of such devices. - - - -SDR devices are accessed through character device special files named -/dev/swradio0 to /dev/swradio255 -with major number 81 and dynamically allocated minor numbers 0 to 255. - - -
- Querying Capabilities - - -Devices supporting the SDR receiver interface set the -V4L2_CAP_SDR_CAPTURE and -V4L2_CAP_TUNER flag in the -capabilities field of &v4l2-capability; -returned by the &VIDIOC-QUERYCAP; ioctl. That flag means the device has an -Analog to Digital Converter (ADC), which is a mandatory element for the SDR receiver. - - -Devices supporting the SDR transmitter interface set the -V4L2_CAP_SDR_OUTPUT and -V4L2_CAP_MODULATOR flag in the -capabilities field of &v4l2-capability; -returned by the &VIDIOC-QUERYCAP; ioctl. That flag means the device has an -Digital to Analog Converter (DAC), which is a mandatory element for the SDR transmitter. - - -At least one of the read/write, streaming or asynchronous I/O methods must -be supported. - -
- -
- Supplemental Functions - - -SDR devices can support controls, and must -support the tuner ioctls. Tuner ioctls are used -for setting the ADC/DAC sampling rate (sampling frequency) and the possible -radio frequency (RF). - - - -The V4L2_TUNER_SDR tuner type is used for setting SDR -device ADC/DAC frequency, and the V4L2_TUNER_RF -tuner type is used for setting radio frequency. -The tuner index of the RF tuner (if any) must always follow the SDR tuner index. -Normally the SDR tuner is #0 and the RF tuner is #1. - - - -The &VIDIOC-S-HW-FREQ-SEEK; ioctl is not supported. - -
- -
- Data Format Negotiation - - -The SDR device uses the format ioctls to -select the capture and output format. Both the sampling resolution and the data -streaming format are bound to that selectable format. In addition to the basic -format ioctls, the &VIDIOC-ENUM-FMT; ioctl -must be supported as well. - - - -To use the format ioctls applications set the -type field of a &v4l2-format; to -V4L2_BUF_TYPE_SDR_CAPTURE or -V4L2_BUF_TYPE_SDR_OUTPUT and use the &v4l2-sdr-format; -sdr member of the fmt -union as needed per the desired operation. -Currently there is two fields, pixelformat and -buffersize, of struct &v4l2-sdr-format; which are -used. Content of the pixelformat is V4L2 FourCC -code of the data format. The buffersize field is -maximum buffer size in bytes required for data transfer, set by the driver in -order to inform application. - - - - struct <structname>v4l2_sdr_format</structname> - - &cs-str; - - - __u32 - pixelformat - -The data format or type of compression, set by the application. This is a -little endian four character code. -V4L2 defines SDR formats in . - - - - __u32 - buffersize - -Maximum size in bytes required for data. Value is set by the driver. - - - - __u8 - reserved[24] - This array is reserved for future extensions. -Drivers and applications must set it to zero. - - - -
- - -An SDR device may support read/write -and/or streaming (memory mapping -or user pointer) I/O. - - -
diff --git a/Documentation/DocBook/media/v4l/dev-sliced-vbi.xml b/Documentation/DocBook/media/v4l/dev-sliced-vbi.xml deleted file mode 100644 index 0aec62ed2bf8..000000000000 --- a/Documentation/DocBook/media/v4l/dev-sliced-vbi.xml +++ /dev/null @@ -1,706 +0,0 @@ - Sliced VBI Data Interface - - VBI stands for Vertical Blanking Interval, a gap in the -sequence of lines of an analog video signal. During VBI no picture -information is transmitted, allowing some time while the electron beam -of a cathode ray tube TV returns to the top of the screen. - - Sliced VBI devices use hardware to demodulate data transmitted -in the VBI. V4L2 drivers shall not do this by -software, see also the raw VBI -interface. The data is passed as short packets of fixed size, -covering one scan line each. The number of packets per video frame is -variable. - - Sliced VBI capture and output devices are accessed through the -same character special files as raw VBI devices. When a driver -supports both interfaces, the default function of a -/dev/vbi device is raw VBI -capturing or output, and the sliced VBI function is only available -after calling the &VIDIOC-S-FMT; ioctl as defined below. Likewise a -/dev/video device may support the sliced VBI API, -however the default function here is video capturing or output. -Different file descriptors must be used to pass raw and sliced VBI -data simultaneously, if this is supported by the driver. - -
- Querying Capabilities - - Devices supporting the sliced VBI capturing or output API -set the V4L2_CAP_SLICED_VBI_CAPTURE or -V4L2_CAP_SLICED_VBI_OUTPUT flag respectively, in -the capabilities field of &v4l2-capability; -returned by the &VIDIOC-QUERYCAP; ioctl. At least one of the -read/write, streaming or asynchronous I/O -methods must be supported. Sliced VBI devices may have a tuner -or modulator. -
- -
- Supplemental Functions - - Sliced VBI devices shall support video -input or output and tuner or -modulator ioctls if they have these capabilities, and they may -support control ioctls. The video standard ioctls provide information -vital to program a sliced VBI device, therefore must be -supported. -
- -
- Sliced VBI Format Negotiation - - To find out which data services are supported by the -hardware applications can call the &VIDIOC-G-SLICED-VBI-CAP; ioctl. -All drivers implementing the sliced VBI interface must support this -ioctl. The results may differ from those of the &VIDIOC-S-FMT; ioctl -when the number of VBI lines the hardware can capture or output per -frame, or the number of services it can identify on a given line are -limited. For example on PAL line 16 the hardware may be able to look -for a VPS or Teletext signal, but not both at the same time. - - To determine the currently selected services applications -set the type field of &v4l2-format; to - V4L2_BUF_TYPE_SLICED_VBI_CAPTURE or -V4L2_BUF_TYPE_SLICED_VBI_OUTPUT, and the &VIDIOC-G-FMT; -ioctl fills the fmt.sliced member, a -&v4l2-sliced-vbi-format;. - - Applications can request different parameters by -initializing or modifying the fmt.sliced -member and calling the &VIDIOC-S-FMT; ioctl with a pointer to the -v4l2_format structure. - - The sliced VBI API is more complicated than the raw VBI API -because the hardware must be told which VBI service to expect on each -scan line. Not all services may be supported by the hardware on all -lines (this is especially true for VBI output where Teletext is often -unsupported and other services can only be inserted in one specific -line). In many cases, however, it is sufficient to just set the -service_set field to the required services -and let the driver fill the service_lines -array according to hardware capabilities. Only if more precise control -is needed should the programmer set the -service_lines array explicitly. - - The &VIDIOC-S-FMT; ioctl modifies the parameters -according to hardware capabilities. When the driver allocates -resources at this point, it may return an &EBUSY; if the required -resources are temporarily unavailable. Other resource allocation -points which may return EBUSY can be the -&VIDIOC-STREAMON; ioctl and the first &func-read;, &func-write; and -&func-select; call. - - - struct -<structname>v4l2_sliced_vbi_format</structname> - - - - - - - - - - __u32 - service_set - If -service_set is non-zero when passed with -&VIDIOC-S-FMT; or &VIDIOC-TRY-FMT;, the -service_lines array will be filled by the -driver according to the services specified in this field. For example, -if service_set is initialized with -V4L2_SLICED_TELETEXT_B | V4L2_SLICED_WSS_625, a -driver for the cx25840 video decoder sets lines 7-22 of both -fieldsAccording to ETS 300 706 lines 6-22 of the -first field and lines 5-22 of the second field may carry Teletext -data. to V4L2_SLICED_TELETEXT_B -and line 23 of the first field to -V4L2_SLICED_WSS_625. If -service_set is set to zero, then the values -of service_lines will be used instead. -On return the driver sets this field to the union of all -elements of the returned service_lines -array. It may contain less services than requested, perhaps just one, -if the hardware cannot handle more services simultaneously. It may be -empty (zero) if none of the requested services are supported by the -hardware. - - - __u16 - service_lines[2][24] - Applications initialize this -array with sets of data services the driver shall look for or insert -on the respective scan line. Subject to hardware capabilities drivers -return the requested set, a subset, which may be just a single -service, or an empty set. When the hardware cannot handle multiple -services on the same line the driver shall choose one. No assumptions -can be made on which service the driver chooses.Data -services are defined in . Array indices -map to ITU-R line numbers (see also and ) as follows: - - - - - Element - 525 line systems - 625 line systems - - - - - service_lines[0][1] - 1 - 1 - - - - - service_lines[0][23] - 23 - 23 - - - - - service_lines[1][1] - 264 - 314 - - - - - service_lines[1][23] - 286 - 336 - - - - - - Drivers must set -service_lines[0][0] and -service_lines[1][0] to zero. -The V4L2_VBI_ITU_525_F1_START, -V4L2_VBI_ITU_525_F2_START, -V4L2_VBI_ITU_625_F1_START and -V4L2_VBI_ITU_625_F2_START defines give the start -line numbers for each field for each 525 or 625 line format as a -convenience. Don't forget that ITU line numbering starts at 1, not 0. - - - - __u32 - io_size - Maximum number of bytes passed by -one &func-read; or &func-write; call, and the buffer size in bytes for -the &VIDIOC-QBUF; and &VIDIOC-DQBUF; ioctl. Drivers set this field to -the size of &v4l2-sliced-vbi-data; times the number of non-zero -elements in the returned service_lines -array (that is the number of lines potentially carrying data). - - - __u32 - reserved[2] - This array is reserved for future -extensions. Applications and drivers must set it to zero. - - - -
- - - - Sliced VBI services - - - - - - - - - - Symbol - Value - Reference - Lines, usually - Payload - - - - - V4L2_SLICED_TELETEXT_B -(Teletext System B) - 0x0001 - , - PAL/SECAM line 7-22, 320-335 (second field 7-22) - Last 42 of the 45 byte Teletext packet, that is -without clock run-in and framing code, lsb first transmitted. - - - V4L2_SLICED_VPS - 0x0400 - - PAL line 16 - Byte number 3 to 15 according to Figure 9 of -ETS 300 231, lsb first transmitted. - - - V4L2_SLICED_CAPTION_525 - 0x1000 - - NTSC line 21, 284 (second field 21) - Two bytes in transmission order, including parity -bit, lsb first transmitted. - - - V4L2_SLICED_WSS_625 - 0x4000 - , - PAL/SECAM line 23 - -Byte 0 1 - msb lsb msb lsb - Bit 7 6 5 4 3 2 1 0 x x 13 12 11 10 9 - - - - V4L2_SLICED_VBI_525 - 0x1000 - Set of services applicable to 525 -line systems. - - - V4L2_SLICED_VBI_625 - 0x4401 - Set of services applicable to 625 -line systems. - - - -
- - Drivers may return an &EINVAL; when applications attempt to -read or write data without prior format negotiation, after switching -the video standard (which may invalidate the negotiated VBI -parameters) and after switching the video input (which may change the -video standard as a side effect). The &VIDIOC-S-FMT; ioctl may return -an &EBUSY; when applications attempt to change the format while i/o is -in progress (between a &VIDIOC-STREAMON; and &VIDIOC-STREAMOFF; call, -and after the first &func-read; or &func-write; call). -
- -
- Reading and writing sliced VBI data - - A single &func-read; or &func-write; call must pass all data -belonging to one video frame. That is an array of -v4l2_sliced_vbi_data structures with one or -more elements and a total size not exceeding -io_size bytes. Likewise in streaming I/O -mode one buffer of io_size bytes must -contain data of one video frame. The id of -unused v4l2_sliced_vbi_data elements must be -zero. - - - struct -<structname>v4l2_sliced_vbi_data</structname> - - &cs-def; - - - __u32 - id - A flag from -identifying the type of data in this packet. Only a single bit must be -set. When the id of a captured packet is -zero, the packet is empty and the contents of other fields are -undefined. Applications shall ignore empty packets. When the -id of a packet for output is zero the -contents of the data field are undefined -and the driver must no longer insert data on the requested -field and -line. - - - __u32 - field - The video field number this data has been captured -from, or shall be inserted at. 0 for the first -field, 1 for the second field. - - - __u32 - line - The field (as opposed to frame) line number this -data has been captured from, or shall be inserted at. See and for valid -values. Sliced VBI capture devices can set the line number of all -packets to 0 if the hardware cannot reliably -identify scan lines. The field number must always be valid. - - - __u32 - reserved - This field is reserved for future extensions. -Applications and drivers must set it to zero. - - - __u8 - data[48] - The packet payload. See for the contents and number of -bytes passed for each data type. The contents of padding bytes at the -end of this array are undefined, drivers and applications shall ignore -them. - - - -
- - Packets are always passed in ascending line number order, -without duplicate line numbers. The &func-write; function and the -&VIDIOC-QBUF; ioctl must return an &EINVAL; when applications violate -this rule. They must also return an &EINVAL; when applications pass an -incorrect field or line number, or a combination of -field, line and -id which has not been negotiated with the -&VIDIOC-G-FMT; or &VIDIOC-S-FMT; ioctl. When the line numbers are -unknown the driver must pass the packets in transmitted order. The -driver can insert empty packets with id set -to zero anywhere in the packet array. - - To assure synchronization and to distinguish from frame -dropping, when a captured frame does not carry any of the requested -data services drivers must pass one or more empty packets. When an -application fails to pass VBI data in time for output, the driver -must output the last VPS and WSS packet again, and disable the output -of Closed Caption and Teletext data, or output data which is ignored -by Closed Caption and Teletext decoders. - - A sliced VBI device may support read/write and/or streaming (memory mapping and/or user -pointer) I/O. The latter bears the possibility of synchronizing -video and VBI data by using buffer timestamps. - -
- -
- Sliced VBI Data in MPEG Streams - - If a device can produce an MPEG output stream, it may be -capable of providing negotiated sliced VBI -services as data embedded in the MPEG stream. Users or -applications control this sliced VBI data insertion with the V4L2_CID_MPEG_STREAM_VBI_FMT -control. - - If the driver does not provide the V4L2_CID_MPEG_STREAM_VBI_FMT -control, or only allows that control to be set to -V4L2_MPEG_STREAM_VBI_FMT_NONE, then the device -cannot embed sliced VBI data in the MPEG stream. - - The -V4L2_CID_MPEG_STREAM_VBI_FMT control does not implicitly set -the device driver to capture nor cease capturing sliced VBI data. The -control only indicates to embed sliced VBI data in the MPEG stream, if -an application has negotiated sliced VBI service be captured. - - It may also be the case that a device can embed sliced VBI -data in only certain types of MPEG streams: for example in an MPEG-2 -PS but not an MPEG-2 TS. In this situation, if sliced VBI data -insertion is requested, the sliced VBI data will be embedded in MPEG -stream types when supported, and silently omitted from MPEG stream -types where sliced VBI data insertion is not supported by the device. - - - The following subsections specify the format of the -embedded sliced VBI data. - -
- MPEG Stream Embedded, Sliced VBI Data Format: NONE - The -V4L2_MPEG_STREAM_VBI_FMT_NONE embedded sliced VBI -format shall be interpreted by drivers as a control to cease -embedding sliced VBI data in MPEG streams. Neither the device nor -driver shall insert "empty" embedded sliced VBI data packets in the -MPEG stream when this format is set. No MPEG stream data structures -are specified for this format. -
- -
- MPEG Stream Embedded, Sliced VBI Data Format: IVTV - The -V4L2_MPEG_STREAM_VBI_FMT_IVTV embedded sliced VBI -format, when supported, indicates to the driver to embed up to 36 -lines of sliced VBI data per frame in an MPEG-2 Private -Stream 1 PES packet encapsulated in an MPEG-2 -Program Pack in the MPEG stream. - - Historical context: This format -specification originates from a custom, embedded, sliced VBI data -format used by the ivtv driver. This format -has already been informally specified in the kernel sources in the -file Documentation/video4linux/cx2341x/README.vbi -. The maximum size of the payload and other aspects of this format -are driven by the CX23415 MPEG decoder's capabilities and limitations -with respect to extracting, decoding, and displaying sliced VBI data -embedded within an MPEG stream. - - This format's use is not exclusive to -the ivtv driver nor -exclusive to CX2341x devices, as the sliced VBI data packet insertion -into the MPEG stream is implemented in driver software. At least the -cx18 driver provides sliced VBI data insertion -into an MPEG-2 PS in this format as well. - - The following definitions specify the payload of the -MPEG-2 Private Stream 1 PES packets that contain -sliced VBI data when -V4L2_MPEG_STREAM_VBI_FMT_IVTV is set. -(The MPEG-2 Private Stream 1 PES packet header -and encapsulating MPEG-2 Program Pack header are -not detailed here. Please refer to the MPEG-2 specifications for -details on those packet headers.) - - The payload of the MPEG-2 Private Stream 1 PES - packets that contain sliced VBI data is specified by -&v4l2-mpeg-vbi-fmt-ivtv;. The payload is variable -length, depending on the actual number of lines of sliced VBI data -present in a video frame. The payload may be padded at the end with -unspecified fill bytes to align the end of the payload to a 4-byte -boundary. The payload shall never exceed 1552 bytes (2 fields with -18 lines/field with 43 bytes of data/line and a 4 byte magic number). - - - - struct <structname>v4l2_mpeg_vbi_fmt_ivtv</structname> - - - &cs-ustr; - - - __u8 - magic[4] - - A "magic" constant from that indicates -this is a valid sliced VBI data payload and also indicates which -member of the anonymous union, itv0 or -ITV0, to use for the payload data. - - - union - (anonymous) - - - - struct - v4l2_mpeg_vbi_itv0 - - itv0 - The primary form of the sliced VBI data payload -that contains anywhere from 1 to 35 lines of sliced VBI data. -Line masks are provided in this form of the payload indicating -which VBI lines are provided. - - - - struct - v4l2_mpeg_vbi_ITV0 - - ITV0 - An alternate form of the sliced VBI data payload -used when 36 lines of sliced VBI data are present. No line masks are -provided in this form of the payload; all valid line mask bits are -implcitly set. - - - -
- - - Magic Constants for &v4l2-mpeg-vbi-fmt-ivtv; - <structfield>magic</structfield> field - - &cs-def; - - - Defined Symbol - Value - Description - - - - - V4L2_MPEG_VBI_IVTV_MAGIC0 - - "itv0" - Indicates the itv0 -member of the union in &v4l2-mpeg-vbi-fmt-ivtv; is valid. - - - V4L2_MPEG_VBI_IVTV_MAGIC1 - - "ITV0" - Indicates the ITV0 -member of the union in &v4l2-mpeg-vbi-fmt-ivtv; is valid and -that 36 lines of sliced VBI data are present. - - - -
- - - struct <structname>v4l2_mpeg_vbi_itv0</structname> - - - &cs-str; - - - __le32 - linemask[2] - Bitmasks indicating the VBI service lines -present. These linemask values are stored -in little endian byte order in the MPEG stream. Some reference -linemask bit positions with their -corresponding VBI line number and video field are given below. -b0 indicates the least significant bit of a -linemask value: -linemask[0] b0: line 6 first field -linemask[0] b17: line 23 first field -linemask[0] b18: line 6 second field -linemask[0] b31: line 19 second field -linemask[1] b0: line 20 second field -linemask[1] b3: line 23 second field -linemask[1] b4-b31: unused and set to 0 - - - struct - v4l2_mpeg_vbi_itv0_line - - line[35] - This is a variable length array that holds from 1 -to 35 lines of sliced VBI data. The sliced VBI data lines present -correspond to the bits set in the linemask -array, starting from b0 of -linemask[0] up through b31 of -linemask[0], and from b0 - of linemask[1] up through b -3 of linemask[1]. -line[0] corresponds to the first bit -found set in the linemask array, -line[1] corresponds to the second bit -found set in the linemask array, etc. -If no linemask array bits are set, then -line[0] may contain one line of -unspecified data that should be ignored by applications. - - - -
- - - struct <structname>v4l2_mpeg_vbi_ITV0</structname> - - - &cs-str; - - - struct - v4l2_mpeg_vbi_itv0_line - - line[36] - A fixed length array of 36 lines of sliced VBI -data. line[0] through line -[17] correspond to lines 6 through 23 of the -first field. line[18] through -line[35] corresponds to lines 6 -through 23 of the second field. - - - -
- - - struct <structname>v4l2_mpeg_vbi_itv0_line</structname> - - - &cs-str; - - - __u8 - id - A line identifier value from - that indicates -the type of sliced VBI data stored on this line. - - - __u8 - data[42] - The sliced VBI data for the line. - - - -
- - - Line Identifiers for struct <link - linkend="v4l2-mpeg-vbi-itv0-line"><structname> -v4l2_mpeg_vbi_itv0_line</structname></link> <structfield>id -</structfield> field - - &cs-def; - - - Defined Symbol - Value - Description - - - - - V4L2_MPEG_VBI_IVTV_TELETEXT_B - - 1 - Refer to -Sliced VBI services for a description of the line payload. - - - V4L2_MPEG_VBI_IVTV_CAPTION_525 - - 4 - Refer to -Sliced VBI services for a description of the line payload. - - - V4L2_MPEG_VBI_IVTV_WSS_625 - - 5 - Refer to -Sliced VBI services for a description of the line payload. - - - V4L2_MPEG_VBI_IVTV_VPS - - 7 - Refer to -Sliced VBI services for a description of the line payload. - - - -
- -
-
diff --git a/Documentation/DocBook/media/v4l/dev-subdev.xml b/Documentation/DocBook/media/v4l/dev-subdev.xml deleted file mode 100644 index f4bc27af83eb..000000000000 --- a/Documentation/DocBook/media/v4l/dev-subdev.xml +++ /dev/null @@ -1,478 +0,0 @@ - Sub-device Interface - - 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. - - 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. - - 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 - - query, read and write sub-devices controls - subscribe and unsubscribe to events and retrieve them - negotiate image formats on individual pads - - - - Sub-device character device nodes, conventionally named - /dev/v4l-subdev*, use major number 81. - -
- Controls - 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. - - 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. - - Applications can access those hidden controls through the sub-device - node with the V4L2 control API described in . 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. - - - Depending on the driver, those controls might also be exposed through - one (or several) V4L2 device nodes. -
- -
- Events - V4L2 sub-devices can notify applications of events as described in - . 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. -
- -
- Pad-level Formats - - 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 not need to use the API described in - this section. - - For the purpose of this section, the term - format means the combination of media bus data - format, frame width and frame height. - - Image formats are typically negotiated on video capture and - output devices using the format and selection 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. - - 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 - , where - image scaling can be performed on both the video sensor and the host image - processing hardware. - -
- Image Format Negotiation on Pipelines - - - - - - - - - High quality and high speed pipeline configuration - - -
- - 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. - - Drivers that implement the media - API 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. - - 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. - - 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. - -
- Format Negotiation - - 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. - - Central to the format negotiation mechanism are the get/set format - operations. When called with the which argument - set to V4L2_SUBDEV_FORMAT_TRY, 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). - - 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 on the same sub-device file - handle. Several applications querying the same sub-device at - the same time will thus not interact with each other. - - 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 format 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. - - 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). - - 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: - - 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. - 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. - - - - 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. - - - shows a sample configuration sequence for the pipeline described in - (table - columns list entity names and pad numbers). - - - Sample Pipeline Configuration - - - - - - - - - - - - Sensor/0 format - Frontend/0 format - Frontend/1 format - Scaler/0 format - Scaler/0 compose selection rectangle - Scaler/1 format - - - - - Initial state - 2048x1536/SGRBG8_1X8 - (default) - (default) - (default) - (default) - (default) - - - Configure frontend sink format - 2048x1536/SGRBG8_1X8 - 2048x1536/SGRBG8_1X8 - 2046x1534/SGRBG8_1X8 - (default) - (default) - (default) - - - Configure scaler sink format - 2048x1536/SGRBG8_1X8 - 2048x1536/SGRBG8_1X8 - 2046x1534/SGRBG8_1X8 - 2046x1534/SGRBG8_1X8 - 0,0/2046x1534 - 2046x1534/SGRBG8_1X8 - - - Configure scaler sink compose selection - 2048x1536/SGRBG8_1X8 - 2048x1536/SGRBG8_1X8 - 2046x1534/SGRBG8_1X8 - 2046x1534/SGRBG8_1X8 - 0,0/1280x960 - 1280x960/SGRBG8_1X8 - - - -
- - - - Initial state. The sensor source pad format is - set to its native 3MP size and V4L2_MBUS_FMT_SGRBG8_1X8 - media bus code. Formats on the host frontend and scaler sink - and source pads have the default values, as well as the - compose rectangle on the scaler's sink pad. - - The application configures the frontend sink - pad format's size to 2048x1536 and its media bus code to - V4L2_MBUS_FMT_SGRBG_1X8. The driver propagates the format to - the frontend source pad. - - The application configures the scaler sink pad - format's size to 2046x1534 and the media bus code to - V4L2_MBUS_FMT_SGRBG_1X8 to match the frontend source size and - media bus code. The media bus code on the sink pad is set to - V4L2_MBUS_FMT_SGRBG_1X8. The driver propagates the size to the - compose selection rectangle on the scaler's sink pad, and the - format to the scaler source pad. - - The application configures the size of the compose - selection rectangle of the scaler's sink pad 1280x960. The driver - propagates the size to the scaler's source pad - format. - - - - - When satisfied with the try results, applications can set the active - formats by setting the which argument to - V4L2_SUBDEV_FORMAT_ACTIVE. 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. - -
- -
- Selections: cropping, scaling and composition - - 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 an image sensor or a 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. - - 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. - - As for pad formats, drivers store try and active - rectangles for the selection targets . - - On sink pads, cropping is applied relative 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 scaling operation changes the size of the image by - scaling it to new dimensions. The scaling ratio isn't specified - explicitly, but is implied from the original and scaled image - sizes. Both sizes are represented by &v4l2-rect;. - - Scaling support is optional. When supported by a subdev, - the crop rectangle on the subdev's sink pad is scaled to the - size configured using the &VIDIOC-SUBDEV-S-SELECTION; IOCTL - using V4L2_SEL_TGT_COMPOSE - selection target on the same pad. If the subdev supports scaling - but not composing, the top and left values are not used and must - always be set to zero. - - On source pads, cropping is similar to sink pads, with the - exception that the source size from which the cropping is - performed, is the COMPOSE rectangle on the sink pad. In both - sink and source pads, the crop rectangle must be entirely - contained inside the source image size for the crop - operation. - - The drivers should always use the closest possible - rectangle the user requests on all selection targets, unless - specifically told otherwise. - V4L2_SEL_FLAG_GE and - V4L2_SEL_FLAG_LE flags may be - used to round the image size either up or down. -
- -
- Types of selection targets - -
- Actual targets - - Actual targets (without a postfix) reflect the actual - hardware configuration at any point of time. There is a BOUNDS - target corresponding to every actual target. -
- -
- BOUNDS targets - - BOUNDS targets is the smallest rectangle that contains all - valid actual rectangles. It may not be possible to set the actual - rectangle as large as the BOUNDS rectangle, however. This may be - because e.g. a sensor's pixel array is not rectangular but - cross-shaped or round. The maximum size may also be smaller than the - BOUNDS rectangle. -
- -
- -
- Order of configuration and format propagation - - Inside subdevs, the order of image processing steps will - always be from the sink pad towards the source pad. This is also - reflected in the order in which the configuration must be - performed by the user: the changes made will be propagated to - any subsequent stages. If this behaviour is not desired, the - user must set - V4L2_SEL_FLAG_KEEP_CONFIG flag. This - flag causes no propagation of the changes are allowed in any - circumstances. This may also cause the accessed rectangle to be - adjusted by the driver, depending on the properties of the - underlying hardware. - - The coordinates to a step always refer to the actual size - of the previous step. The exception to this rule is the source - compose rectangle, which refers to the sink compose bounds - rectangle --- if it is supported by the hardware. - - - Sink pad format. The user configures the sink pad - format. This format defines the parameters of the image the - entity receives through the pad for further processing. - - Sink pad actual crop selection. The sink pad crop - defines the crop performed to the sink pad format. - - Sink pad actual compose selection. The size of the - sink pad compose rectangle defines the scaling ratio compared - to the size of the sink pad crop rectangle. The location of - the compose rectangle specifies the location of the actual - sink compose rectangle in the sink compose bounds - rectangle. - - Source pad actual crop selection. Crop on the source - pad defines crop performed to the image in the sink compose - bounds rectangle. - - Source pad format. The source pad format defines the - output pixel format of the subdev, as well as the other - parameters with the exception of the image width and height. - Width and height are defined by the size of the source pad - actual crop selection. - - - Accessing any of the above rectangles not supported by the - subdev will return EINVAL. Any rectangle - referring to a previous unsupported rectangle coordinates will - instead refer to the previous supported rectangle. For example, - if sink crop is not supported, the compose selection will refer - to the sink pad format dimensions instead. - -
- Image processing in subdevs: simple crop example - - - - - -
- - In the above example, the subdev supports cropping on its - sink pad. To configure it, the user sets the media bus format on - the subdev's sink pad. Now the actual crop rectangle can be set - on the sink pad --- the location and size of this rectangle - reflect the location and size of a rectangle to be cropped from - the sink format. The size of the sink crop rectangle will also - be the size of the format of the subdev's source pad. - -
- Image processing in subdevs: scaling with multiple sources - - - - - -
- - In this example, the subdev is capable of first cropping, - then scaling and finally cropping for two source pads - individually from the resulting scaled image. The location of - the scaled image in the cropped image is ignored in sink compose - target. Both of the locations of the source crop rectangles - refer to the sink scaling rectangle, independently cropping an - area at location specified by the source crop rectangle from - it. - -
- Image processing in subdevs: scaling and composition - with multiple sinks and sources - - - - - -
- - The subdev driver supports two sink pads and two source - pads. The images from both of the sink pads are individually - cropped, then scaled and further composed on the composition - bounds rectangle. From that, two independent streams are cropped - and sent out of the subdev from the source pads. - -
- -
- - &sub-subdev-formats; diff --git a/Documentation/DocBook/media/v4l/dev-teletext.xml b/Documentation/DocBook/media/v4l/dev-teletext.xml deleted file mode 100644 index bd21c64d70f3..000000000000 --- a/Documentation/DocBook/media/v4l/dev-teletext.xml +++ /dev/null @@ -1,29 +0,0 @@ - Teletext Interface - - This interface was aimed at devices receiving and demodulating -Teletext data [, ], evaluating the -Teletext packages and storing formatted pages in cache memory. Such -devices are usually implemented as microcontrollers with serial -interface (I2C) and could be found on old -TV cards, dedicated Teletext decoding cards and home-brew devices -connected to the PC parallel port. - - The Teletext API was designed by Martin Buck. It was defined in -the kernel header file linux/videotext.h, the -specification is available from -ftp://ftp.gwdg.de/pub/linux/misc/videotext/. (Videotext is the name of -the German public television Teletext service.) - - Eventually the Teletext API was integrated into the V4L API -with character device file names /dev/vtx0 to -/dev/vtx31, device major number 81, minor numbers -192 to 223. - - However, teletext decoders were quickly replaced by more -generic VBI demodulators and those dedicated teletext decoders no longer exist. -For many years the vtx devices were still around, even though nobody used -them. So the decision was made to finally remove support for the Teletext API in -kernel 2.6.37. - - Modern devices all use the raw or -sliced VBI API. diff --git a/Documentation/DocBook/media/v4l/driver.xml b/Documentation/DocBook/media/v4l/driver.xml deleted file mode 100644 index 7c6638bacedb..000000000000 --- a/Documentation/DocBook/media/v4l/driver.xml +++ /dev/null @@ -1,200 +0,0 @@ - V4L2 Driver Programming - - - - to do - diff --git a/Documentation/DocBook/media/v4l/fdl-appendix.xml b/Documentation/DocBook/media/v4l/fdl-appendix.xml deleted file mode 100644 index 71299a3897c4..000000000000 --- a/Documentation/DocBook/media/v4l/fdl-appendix.xml +++ /dev/null @@ -1,671 +0,0 @@ - - - - - - Version 1.1, March 2000 - - - 2000Free Software Foundation, Inc. - - - -
Free Software Foundation, Inc. 59 Temple Place, - Suite 330, Boston, MA - 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies of this - license document, but changing it is not allowed. -
-
-
- GNU Free Documentation License - - - 0. PREAMBLE - - The purpose of this License is to make a manual, textbook, or - other written document free in the sense of - freedom: to assure everyone the effective freedom to copy and - redistribute it, with or without modifying it, either - commercially or noncommercially. Secondarily, this License - preserves for the author and publisher a way to get credit for - their work, while not being considered responsible for - modifications made by others. - - - - This License is a kind of copyleft, which means - that derivative works of the document must themselves be free in - the same sense. It complements the GNU General Public License, - which is a copyleft license designed for free software. - - - - We have designed this License in order to use it for manuals for - free software, because free software needs free documentation: a - free program should come with manuals providing the same - freedoms that the software does. But this License is not limited - to software manuals; it can be used for any textual work, - regardless of subject matter or whether it is published as a - printed book. We recommend this License principally for works - whose purpose is instruction or reference. - - - - 1. APPLICABILITY AND DEFINITIONS - - This License applies to any manual or other work that contains a - notice placed by the copyright holder saying it can be - distributed under the terms of this License. The - Document, below, refers to any such manual or - work. Any member of the public is a licensee, and is addressed - as you. - - - - A Modified Version of the Document means any work - containing the Document or a portion of it, either copied - verbatim, or with modifications and/or translated into another - language. - - - - A Secondary Section is a named appendix or a - front-matter section of the Document that deals exclusively - with the relationship of the publishers or authors of the - Document to the Document's overall subject (or to related - matters) and contains nothing that could fall directly within - that overall subject. (For example, if the Document is in part a - textbook of mathematics, a Secondary Section may not explain any - mathematics.) The relationship could be a matter of historical - connection with the subject or with related matters, or of - legal, commercial, philosophical, ethical or political position - regarding them. - - - - The Invariant Sections are certain Secondary Sections whose titles - are designated, as being those of Invariant Sections, in the - notice that says that the Document is released under this - License. - - - - The Cover Texts are certain short passages of - text that are listed, as Front-Cover Texts or Back-Cover Texts, - in the notice that says that the Document is released under this - License. - - - - A Transparent copy of the Document means a machine-readable - copy, represented in a format whose specification is available - to the general public, whose contents can be viewed and edited - directly and straightforwardly with generic text editors or (for - images composed of pixels) generic paint programs or (for - drawings) some widely available drawing editor, and that is - suitable for input to text formatters or for automatic - translation to a variety of formats suitable for input to text - formatters. A copy made in an otherwise Transparent file format - whose markup has been designed to thwart or discourage - subsequent modification by readers is not Transparent. A copy - that is not Transparent is called - Opaque. - - - - Examples of suitable formats for Transparent copies include - plain ASCII without markup, Texinfo input format, LaTeX input - format, SGML or XML using a publicly available DTD, and - standard-conforming simple HTML designed for human - modification. Opaque formats include PostScript, PDF, - proprietary formats that can be read and edited only by - proprietary word processors, SGML or XML for which the DTD - and/or processing tools are not generally available, and the - machine-generated HTML produced by some word processors for - output purposes only. - - - - The Title Page means, for a printed book, the - title page itself, plus such following pages as are needed to - hold, legibly, the material this License requires to appear in - the title page. For works in formats which do not have any title - page as such, Title Page means the text near the - most prominent appearance of the work's title, preceding the - beginning of the body of the text. - - - - - 2. VERBATIM COPYING - - You may copy and distribute the Document in any medium, either - commercially or noncommercially, provided that this License, the - copyright notices, and the license notice saying this License - applies to the Document are reproduced in all copies, and that - you add no other conditions whatsoever to those of this - License. You may not use technical measures to obstruct or - control the reading or further copying of the copies you make or - distribute. However, you may accept compensation in exchange for - copies. If you distribute a large enough number of copies you - must also follow the conditions in section 3. - - - - You may also lend copies, under the same conditions stated - above, and you may publicly display copies. - - - - - 3. COPYING IN QUANTITY - - If you publish printed copies of the Document numbering more than 100, - and the Document's license notice requires Cover Texts, you must enclose - the copies in covers that carry, clearly and legibly, all these - Cover Texts: Front-Cover Texts on the front cover, and - Back-Cover Texts on the back cover. Both covers must also - clearly and legibly identify you as the publisher of these - copies. The front cover must present the full title with all - words of the title equally prominent and visible. You may add - other material on the covers in addition. Copying with changes - limited to the covers, as long as they preserve the title of the - Document and satisfy these - conditions, can be treated as verbatim copying in other - respects. - - - - If the required texts for either cover are too voluminous to fit - legibly, you should put the first ones listed (as many as fit - reasonably) on the actual cover, and continue the rest onto - adjacent pages. - - - - If you publish or distribute Opaque copies of the Document numbering more than 100, - you must either include a machine-readable Transparent copy along with - each Opaque copy, or state in or with each Opaque copy a - publicly-accessible computer-network location containing a - complete Transparent copy of the Document, free of added - material, which the general network-using public has access to - download anonymously at no charge using public-standard network - protocols. If you use the latter option, you must take - reasonably prudent steps, when you begin distribution of Opaque - copies in quantity, to ensure that this Transparent copy will - remain thus accessible at the stated location until at least one - year after the last time you distribute an Opaque copy (directly - or through your agents or retailers) of that edition to the - public. - - - - It is requested, but not required, that you contact the authors - of the Document well before - redistributing any large number of copies, to give them a chance - to provide you with an updated version of the Document. - - - - - 4. MODIFICATIONS - - You may copy and distribute a Modified Version of the Document under the conditions of - sections 2 and 3 above, provided that you release - the Modified Version under precisely this License, with the - Modified Version filling the role of the Document, thus - licensing distribution and modification of the Modified Version - to whoever possesses a copy of it. In addition, you must do - these things in the Modified Version: - - - - - - A - - Use in the Title - Page (and on the covers, if any) a title distinct - from that of the Document, and from those of - previous versions (which should, if there were any, be - listed in the History section of the Document). You may - use the same title as a previous version if the original - publisher of that version gives permission. - - - - - - - B - - List on the Title - Page, as authors, one or more persons or entities - responsible for authorship of the modifications in the - Modified Version, - together with at least five of the principal authors of - the Document (all of - its principal authors, if it has less than five). - - - - - - - C - - State on the Title - Page the name of the publisher of the Modified Version, as the - publisher. - - - - - - - D - - Preserve all the copyright notices of the Document. - - - - - - - E - - Add an appropriate copyright notice for your modifications - adjacent to the other copyright notices. - - - - - - - F - - Include, immediately after the copyright notices, a - license notice giving the public permission to use the - Modified Version under - the terms of this License, in the form shown in the - Addendum below. - - - - - - - G - - Preserve in that license notice the full lists of Invariant Sections and - required Cover - Texts given in the Document's license notice. - - - - - - - H - - Include an unaltered copy of this License. - - - - - - - I - - Preserve the section entitled History, and - its title, and add to it an item stating at least the - title, year, new authors, and publisher of the Modified Version as given on - the Title Page. If - there is no section entitled History in the - Document, create one - stating the title, year, authors, and publisher of the - Document as given on its Title Page, then add an item - describing the Modified Version as stated in the previous - sentence. - - - - - - - J - - Preserve the network location, if any, given in the Document for public access - to a Transparent - copy of the Document, and likewise the network locations - given in the Document for previous versions it was based - on. These may be placed in the History - section. You may omit a network location for a work that - was published at least four years before the Document - itself, or if the original publisher of the version it - refers to gives permission. - - - - - - - K - - In any section entitled Acknowledgements or - Dedications, preserve the section's title, - and preserve in the section all the substance and tone of - each of the contributor acknowledgements and/or - dedications given therein. - - - - - - - L - - Preserve all the Invariant - Sections of the Document, unaltered in their - text and in their titles. Section numbers or the - equivalent are not considered part of the section titles. - - - - - - - M - - Delete any section entitled - Endorsements. Such a section may not be - included in the Modified - Version. - - - - - - - N - - Do not retitle any existing section as - Endorsements or to conflict in title with - any Invariant - Section. - - - - - - - If the Modified Version - includes new front-matter sections or appendices that qualify as - Secondary Sections and - contain no material copied from the Document, you may at your - option designate some or all of these sections as invariant. To - do this, add their titles to the list of Invariant Sections in the - Modified Version's license notice. These titles must be - distinct from any other section titles. - - - - You may add a section entitled Endorsements, - provided it contains nothing but endorsements of your Modified Version by various - parties--for example, statements of peer review or that the text - has been approved by an organization as the authoritative - definition of a standard. - - - - You may add a passage of up to five words as a Front-Cover Text, and a passage - of up to 25 words as a Back-Cover Text, to the end of - the list of Cover Texts - in the Modified Version. - Only one passage of Front-Cover Text and one of Back-Cover Text - may be added by (or through arrangements made by) any one - entity. If the Document - already includes a cover text for the same cover, previously - added by you or by arrangement made by the same entity you are - acting on behalf of, you may not add another; but you may - replace the old one, on explicit permission from the previous - publisher that added the old one. - - - - The author(s) and publisher(s) of the Document do not by this License - give permission to use their names for publicity for or to - assert or imply endorsement of any Modified Version . - - - - - 5. COMBINING DOCUMENTS - - You may combine the Document - with other documents released under this License, under the - terms defined in section 4 - above for modified versions, provided that you include in the - combination all of the Invariant - Sections of all of the original documents, unmodified, - and list them all as Invariant Sections of your combined work in - its license notice. - - - - The combined work need only contain one copy of this License, - and multiple identical Invariant - Sections may be replaced with a single copy. If there are - multiple Invariant Sections with the same name but different - contents, make the title of each such section unique by adding - at the end of it, in parentheses, the name of the original - author or publisher of that section if known, or else a unique - number. Make the same adjustment to the section titles in the - list of Invariant Sections in the license notice of the combined - work. - - - - In the combination, you must combine any sections entitled - History in the various original documents, - forming one section entitled History; likewise - combine any sections entitled Acknowledgements, - and any sections entitled Dedications. You must - delete all sections entitled Endorsements. - - - - - 6. COLLECTIONS OF DOCUMENTS - - You may make a collection consisting of the Document and other documents - released under this License, and replace the individual copies - of this License in the various documents with a single copy that - is included in the collection, provided that you follow the - rules of this License for verbatim copying of each of the - documents in all other respects. - - - - You may extract a single document from such a collection, and - distribute it individually under this License, provided you - insert a copy of this License into the extracted document, and - follow this License in all other respects regarding verbatim - copying of that document. - - - - - 7. AGGREGATION WITH INDEPENDENT WORKS - - A compilation of the Document or its derivatives with - other separate and independent documents or works, in or on a - volume of a storage or distribution medium, does not as a whole - count as a Modified Version - of the Document, provided no compilation copyright is claimed - for the compilation. Such a compilation is called an - aggregate, and this License does not apply to the - other self-contained works thus compiled with the Document , on - account of their being thus compiled, if they are not themselves - derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these - copies of the Document, then if the Document is less than one - quarter of the entire aggregate, the Document's Cover Texts may - be placed on covers that surround only the Document within the - aggregate. Otherwise they must appear on covers around the whole - aggregate. - - - - - 8. TRANSLATION - - Translation is considered a kind of modification, so you may - distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with - translations requires special permission from their copyright - holders, but you may include translations of some or all - Invariant Sections in addition to the original versions of these - Invariant Sections. You may include a translation of this - License provided that you also include the original English - version of this License. In case of a disagreement between the - translation and the original English version of this License, - the original English version will prevail. - - - - - 9. TERMINATION - - You may not copy, modify, sublicense, or distribute the Document except as expressly - provided for under this License. Any other attempt to copy, - modify, sublicense or distribute the Document is void, and will - automatically terminate your rights under this License. However, - parties who have received copies, or rights, from you under this - License will not have their licenses terminated so long as such - parties remain in full compliance. - - - - - 10. FUTURE REVISIONS OF THIS LICENSE - - The Free Software - Foundation may publish new, revised versions of the GNU - Free Documentation License from time to time. Such new versions - will be similar in spirit to the present version, but may differ - in detail to address new problems or concerns. See http://www.gnu.org/copyleft/. - - - - Each version of the License is given a distinguishing version - number. If the Document - specifies that a particular numbered version of this License - or any later version applies to it, you have the - option of following the terms and conditions either of that - specified version or of any later version that has been - published (not as a draft) by the Free Software Foundation. If - the Document does not specify a version number of this License, - you may choose any version ever published (not as a draft) by - the Free Software Foundation. - - - - - Addendum - - To use this License in a document you have written, include a copy of - the License in the document and put the following copyright and - license notices just after the title page: - - -
- - Copyright © YEAR YOUR NAME. - - - Permission is granted to copy, distribute and/or modify this - document under the terms of the GNU Free Documentation - License, Version 1.1 or any later version published by the - Free Software Foundation; with the Invariant Sections being LIST - THEIR TITLES, with the Front-Cover Texts being LIST, - and with the Back-Cover - Texts being LIST. A copy of the license is included in - the section entitled GNU Free Documentation - License. - -
- - - If you have no Invariant - Sections, write with no Invariant Sections - instead of saying which ones are invariant. If you have no - Front-Cover Texts, write - no Front-Cover Texts instead of - Front-Cover Texts being LIST; likewise for Back-Cover Texts. - - - - If your document contains nontrivial examples of program code, - we recommend releasing these examples in parallel under your - choice of free software license, such as the GNU General Public - License, to permit their use in free software. - -
-
- - - - - - diff --git a/Documentation/DocBook/media/v4l/fieldseq_bt.pdf b/Documentation/DocBook/media/v4l/fieldseq_bt.pdf deleted file mode 100644 index 26598b23f80d..000000000000 Binary files a/Documentation/DocBook/media/v4l/fieldseq_bt.pdf and /dev/null differ diff --git a/Documentation/DocBook/media/v4l/fieldseq_tb.pdf b/Documentation/DocBook/media/v4l/fieldseq_tb.pdf deleted file mode 100644 index 4965b22ddb3a..000000000000 Binary files a/Documentation/DocBook/media/v4l/fieldseq_tb.pdf and /dev/null differ diff --git a/Documentation/DocBook/media/v4l/func-close.xml b/Documentation/DocBook/media/v4l/func-close.xml deleted file mode 100644 index 232920d2f3c6..000000000000 --- a/Documentation/DocBook/media/v4l/func-close.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - V4L2 close() - &manvol; - - - - v4l2-close - Close a V4L2 device - - - - - #include <unistd.h> - - int close - int fd - - - - - - Arguments - - - - fd - - &fd; - - - - - - - Description - - Closes the device. Any I/O in progress is terminated and -resources associated with the file descriptor are freed. However data -format parameters, current input or output, control values or other -properties remain unchanged. - - - - Return Value - - The function returns 0 on -success, -1 on failure and the -errno is set appropriately. Possible error -codes: - - - - EBADF - - fd is not a valid open file -descriptor. - - - - - diff --git a/Documentation/DocBook/media/v4l/func-ioctl.xml b/Documentation/DocBook/media/v4l/func-ioctl.xml deleted file mode 100644 index 4394184a1a6d..000000000000 --- a/Documentation/DocBook/media/v4l/func-ioctl.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - V4L2 ioctl() - &manvol; - - - - v4l2-ioctl - Program a V4L2 device - - - - - #include <sys/ioctl.h> - - int ioctl - int fd - int request - void *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - V4L2 ioctl request code as defined in the videodev2.h header file, for example -VIDIOC_QUERYCAP. - - - - argp - - Pointer to a function parameter, usually a structure. - - - - - - - Description - - The ioctl() function is used to program -V4L2 devices. The argument fd must be an open -file descriptor. An ioctl request has encoded -in it whether the argument is an input, output or read/write -parameter, and the size of the argument argp in -bytes. Macros and defines specifying V4L2 ioctl requests are located -in the videodev2.h header file. -Applications should use their own copy, not include the version in the -kernel sources on the system they compile on. All V4L2 ioctl requests, -their respective function and parameters are specified in . - - - - &return-value; - When an ioctl that takes an output or read/write parameter fails, - the parameter remains unmodified. - - diff --git a/Documentation/DocBook/media/v4l/func-mmap.xml b/Documentation/DocBook/media/v4l/func-mmap.xml deleted file mode 100644 index f31ad71bf301..000000000000 --- a/Documentation/DocBook/media/v4l/func-mmap.xml +++ /dev/null @@ -1,183 +0,0 @@ - - - V4L2 mmap() - &manvol; - - - - v4l2-mmap - Map device memory into application address space - - - - - -#include <unistd.h> -#include <sys/mman.h> - - void *mmap - void *start - size_t length - int prot - int flags - int fd - off_t offset - - - - - - Arguments - - - start - - Map the buffer to this address in the -application's address space. When the MAP_FIXED -flag is specified, start must be a multiple of the -pagesize and mmap will fail when the specified address -cannot be used. Use of this option is discouraged; applications should -just specify a NULL pointer here. - - - - length - - Length of the memory area to map. This must be the -same value as returned by the driver in the &v4l2-buffer; -length field for the -single-planar API, and the same value as returned by the driver -in the &v4l2-plane; length field for the -multi-planar API. - - - - prot - - The prot argument describes the -desired memory protection. Regardless of the device type and the -direction of data exchange it should be set to -PROT_READ | PROT_WRITE, -permitting read and write access to image buffers. Drivers should -support at least this combination of flags. Note the Linux -video-buf kernel module, which is used by the -bttv, saa7134, saa7146, cx88 and vivi driver supports only -PROT_READ | PROT_WRITE. When -the driver does not support the desired protection the -mmap() function fails. - Note device memory accesses (⪚ the memory on a -graphics card with video capturing hardware) may incur a performance -penalty compared to main memory accesses, or reads may be -significantly slower than writes or vice versa. Other I/O methods may -be more efficient in this case. - - - - flags - - The flags parameter -specifies the type of the mapped object, mapping options and whether -modifications made to the mapped copy of the page are private to the -process or are to be shared with other references. - MAP_FIXED requests that the -driver selects no other address than the one specified. If the -specified address cannot be used, mmap() will fail. If -MAP_FIXED is specified, -start must be a multiple of the pagesize. Use -of this option is discouraged. - One of the MAP_SHARED or -MAP_PRIVATE flags must be set. -MAP_SHARED allows applications to share the -mapped memory with other (⪚ child-) processes. Note the Linux -video-buf module which is used by the bttv, -saa7134, saa7146, cx88 and vivi driver supports only -MAP_SHARED. MAP_PRIVATE -requests copy-on-write semantics. V4L2 applications should not set the -MAP_PRIVATE, MAP_DENYWRITE, -MAP_EXECUTABLE or MAP_ANON -flag. - - - - fd - - &fd; - - - - offset - - Offset of the buffer in device memory. This must be the -same value as returned by the driver in the &v4l2-buffer; -m union offset field for -the single-planar API, and the same value as returned by the driver -in the &v4l2-plane; m union -mem_offset field for the multi-planar API. - - - - - - - Description - - The mmap() function asks to map -length bytes starting at -offset in the memory of the device specified by -fd into the application address space, -preferably at address start. This latter -address is a hint only, and is usually specified as 0. - - Suitable length and offset parameters are queried with the -&VIDIOC-QUERYBUF; ioctl. Buffers must be allocated with the -&VIDIOC-REQBUFS; ioctl before they can be queried. - - To unmap buffers the &func-munmap; function is used. - - - - Return Value - - On success mmap() returns a pointer to -the mapped buffer. On error MAP_FAILED (-1) is -returned, and the errno variable is set -appropriately. Possible error codes are: - - - - EBADF - - fd is not a valid file -descriptor. - - - - EACCES - - fd is -not open for reading and writing. - - - - EINVAL - - The start or -length or offset are not -suitable. (E. g. they are too large, or not aligned on a -PAGESIZE boundary.) - The flags or -prot value is not supported. - No buffers have been allocated with the -&VIDIOC-REQBUFS; ioctl. - - - - ENOMEM - - Not enough physical or virtual memory was available to -complete the request. - - - - - diff --git a/Documentation/DocBook/media/v4l/func-munmap.xml b/Documentation/DocBook/media/v4l/func-munmap.xml deleted file mode 100644 index 860d49ca54a5..000000000000 --- a/Documentation/DocBook/media/v4l/func-munmap.xml +++ /dev/null @@ -1,76 +0,0 @@ - - - V4L2 munmap() - &manvol; - - - - v4l2-munmap - Unmap device memory - - - - - -#include <unistd.h> -#include <sys/mman.h> - - int munmap - void *start - size_t length - - - - - Arguments - - - start - - Address of the mapped buffer as returned by the -&func-mmap; function. - - - - length - - Length of the mapped buffer. This must be the same -value as given to mmap() and returned by the -driver in the &v4l2-buffer; length -field for the single-planar API and in the &v4l2-plane; -length field for the multi-planar API. - - - - - - - Description - - Unmaps a previously with the &func-mmap; function mapped -buffer and frees it, if possible. - - - - Return Value - - On success munmap() returns 0, on -failure -1 and the errno variable is set -appropriately: - - - - EINVAL - - The start or -length is incorrect, or no buffers have been -mapped yet. - - - - - diff --git a/Documentation/DocBook/media/v4l/func-open.xml b/Documentation/DocBook/media/v4l/func-open.xml deleted file mode 100644 index cf64e207c3ee..000000000000 --- a/Documentation/DocBook/media/v4l/func-open.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - V4L2 open() - &manvol; - - - - v4l2-open - Open a V4L2 device - - - - - #include <fcntl.h> - - int open - const char *device_name - int flags - - - - - - Arguments - - - - device_name - - Device to be opened. - - - - flags - - Open flags. Access mode must be -O_RDWR. This is just a technicality, input devices -still support only reading and output devices only writing. - When the O_NONBLOCK flag is -given, the read() function and the &VIDIOC-DQBUF; ioctl will return -the &EAGAIN; when no data is available or no buffer is in the driver -outgoing queue, otherwise these functions block until data becomes -available. All V4L2 drivers exchanging data with applications must -support the O_NONBLOCK flag. - Other flags have no effect. - - - - - - Description - - To open a V4L2 device applications call -open() with the desired device name. This -function has no side effects; all data format parameters, current -input or output, control values or other properties remain unchanged. -At the first open() call after loading the driver -they will be reset to default values, drivers are never in an -undefined state. - - - Return Value - - On success open returns the new file -descriptor. On error -1 is returned, and the errno -variable is set appropriately. Possible error codes are: - - - - EACCES - - The caller has no permission to access the -device. - - - - EBUSY - - The driver does not support multiple opens and the -device is already in use. - - - - ENXIO - - No device corresponding to this device special file -exists. - - - - ENOMEM - - Not enough kernel memory was available to complete the -request. - - - - EMFILE - - The process already has the maximum number of -files open. - - - - ENFILE - - The limit on the total number of files open on the -system has been reached. - - - - - diff --git a/Documentation/DocBook/media/v4l/func-poll.xml b/Documentation/DocBook/media/v4l/func-poll.xml deleted file mode 100644 index 4c73f115219b..000000000000 --- a/Documentation/DocBook/media/v4l/func-poll.xml +++ /dev/null @@ -1,142 +0,0 @@ - - - V4L2 poll() - &manvol; - - - - v4l2-poll - Wait for some event on a file descriptor - - - - - #include <sys/poll.h> - - int poll - struct pollfd *ufds - unsigned int nfds - int timeout - - - - - - Description - - With the poll() function applications -can suspend execution until the driver has captured data or is ready -to accept data for output. - - When streaming I/O has been negotiated this function waits -until a buffer has been filled by the capture device and can be dequeued -with the &VIDIOC-DQBUF; ioctl. For output devices this function waits -until the device is ready to accept a new buffer to be queued up with -the &VIDIOC-QBUF; ioctl for display. When buffers are already in the outgoing -queue of the driver (capture) or the incoming queue isn't full (display) -the function returns immediately. - - On success poll() returns the number of -file descriptors that have been selected (that is, file descriptors -for which the revents field of the -respective pollfd structure is non-zero). -Capture devices set the POLLIN and -POLLRDNORM flags in the -revents field, output devices the -POLLOUT and POLLWRNORM -flags. When the function timed out it returns a value of zero, on -failure it returns -1 and the -errno variable is set appropriately. When the -application did not call &VIDIOC-STREAMON; the -poll() function succeeds, but sets the -POLLERR flag in the -revents field. When the -application has called &VIDIOC-STREAMON; for a capture device but hasn't -yet called &VIDIOC-QBUF;, the poll() function -succeeds and sets the POLLERR flag in the -revents field. For output devices this -same situation will cause poll() to succeed -as well, but it sets the POLLOUT and -POLLWRNORM flags in the revents -field. - - If an event occurred (see &VIDIOC-DQEVENT;) then -POLLPRI will be set in the revents -field and poll() will return. - - When use of the read() function has -been negotiated and the driver does not capture yet, the -poll function starts capturing. When that fails -it returns a POLLERR as above. Otherwise it waits -until data has been captured and can be read. When the driver captures -continuously (as opposed to, for example, still images) the function -may return immediately. - - When use of the write() function has -been negotiated and the driver does not stream yet, the -poll function starts streaming. When that fails -it returns a POLLERR as above. Otherwise it waits -until the driver is ready for a non-blocking -write() call. - - If the caller is only interested in events (just -POLLPRI is set in the events -field), then poll() will not -start streaming if the driver does not stream yet. This makes it -possible to just poll for events and not for buffers. - - All drivers implementing the read() or -write() function or streaming I/O must also -support the poll() function. - - For more details see the -poll() manual page. - - - - Return Value - - On success, poll() returns the number -structures which have non-zero revents -fields, or zero if the call timed out. On error --1 is returned, and the -errno variable is set appropriately: - - - - EBADF - - One or more of the ufds members -specify an invalid file descriptor. - - - - EBUSY - - The driver does not support multiple read or write -streams and the device is already in use. - - - - EFAULT - - ufds references an inaccessible -memory area. - - - - EINTR - - The call was interrupted by a signal. - - - - EINVAL - - The nfds argument is greater -than OPEN_MAX. - - - - - diff --git a/Documentation/DocBook/media/v4l/func-read.xml b/Documentation/DocBook/media/v4l/func-read.xml deleted file mode 100644 index e218bbfbd362..000000000000 --- a/Documentation/DocBook/media/v4l/func-read.xml +++ /dev/null @@ -1,181 +0,0 @@ - - - V4L2 read() - &manvol; - - - - v4l2-read - Read from a V4L2 device - - - - - #include <unistd.h> - - ssize_t read - int fd - void *buf - size_t count - - - - - - Arguments - - - - fd - - &fd; - - - - buf - - - - - - count - - - - - - - - - Description - - read() attempts to read up to -count bytes from file descriptor -fd into the buffer starting at -buf. The layout of the data in the buffer is -discussed in the respective device interface section, see ##. If count is zero, -read() returns zero and has no other results. If -count is greater than -SSIZE_MAX, the result is unspecified. Regardless -of the count value each -read() call will provide at most one frame (two -fields) worth of data. - - By default read() blocks until data -becomes available. When the O_NONBLOCK flag was -given to the &func-open; function it -returns immediately with an &EAGAIN; when no data is available. The -&func-select; or &func-poll; functions -can always be used to suspend execution until data becomes available. All -drivers supporting the read() function must also -support select() and -poll(). - - Drivers can implement read functionality in different -ways, using a single or multiple buffers and discarding the oldest or -newest frames once the internal buffers are filled. - - read() never returns a "snapshot" of a -buffer being filled. Using a single buffer the driver will stop -capturing when the application starts reading the buffer until the -read is finished. Thus only the period of the vertical blanking -interval is available for reading, or the capture rate must fall below -the nominal frame rate of the video standard. - -The behavior of -read() when called during the active picture -period or the vertical blanking separating the top and bottom field -depends on the discarding policy. A driver discarding the oldest -frames keeps capturing into an internal buffer, continuously -overwriting the previously, not read frame, and returns the frame -being received at the time of the read() call as -soon as it is complete. - - A driver discarding the newest frames stops capturing until -the next read() call. The frame being received at -read() time is discarded, returning the following -frame instead. Again this implies a reduction of the capture rate to -one half or less of the nominal frame rate. An example of this model -is the video read mode of the bttv driver, initiating a DMA to user -memory when read() is called and returning when -the DMA finished. - - In the multiple buffer model drivers maintain a ring of -internal buffers, automatically advancing to the next free buffer. -This allows continuous capturing when the application can empty the -buffers fast enough. Again, the behavior when the driver runs out of -free buffers depends on the discarding policy. - - Applications can get and set the number of buffers used -internally by the driver with the &VIDIOC-G-PARM; and &VIDIOC-S-PARM; -ioctls. They are optional, however. The discarding policy is not -reported and cannot be changed. For minimum requirements see . - - - - Return Value - - On success, the number of bytes read is returned. It is not -an error if this number is smaller than the number of bytes requested, -or the amount of data required for one frame. This may happen for -example because read() was interrupted by a -signal. On error, -1 is returned, and the errno -variable is set appropriately. In this case the next read will start -at the beginning of a new frame. Possible error codes are: - - - - EAGAIN - - Non-blocking I/O has been selected using -O_NONBLOCK and no data was immediately available for reading. - - - - EBADF - - fd is not a valid file -descriptor or is not open for reading, or the process already has the -maximum number of files open. - - - - EBUSY - - The driver does not support multiple read streams and the -device is already in use. - - - - EFAULT - - buf references an inaccessible -memory area. - - - - EINTR - - The call was interrupted by a signal before any -data was read. - - - - EIO - - I/O error. This indicates some hardware problem or a -failure to communicate with a remote device (USB camera etc.). - - - - EINVAL - - The read() function is not -supported by this driver, not on this device, or generally not on this -type of device. - - - - - diff --git a/Documentation/DocBook/media/v4l/func-select.xml b/Documentation/DocBook/media/v4l/func-select.xml deleted file mode 100644 index e12a60d9bd85..000000000000 --- a/Documentation/DocBook/media/v4l/func-select.xml +++ /dev/null @@ -1,130 +0,0 @@ - - - V4L2 select() - &manvol; - - - - v4l2-select - Synchronous I/O multiplexing - - - - - -#include <sys/time.h> -#include <sys/types.h> -#include <unistd.h> - - int select - int nfds - fd_set *readfds - fd_set *writefds - fd_set *exceptfds - struct timeval *timeout - - - - - - Description - - With the select() function applications -can suspend execution until the driver has captured data or is ready -to accept data for output. - - When streaming I/O has been negotiated this function waits -until a buffer has been filled or displayed and can be dequeued with -the &VIDIOC-DQBUF; ioctl. When buffers are already in the outgoing -queue of the driver the function returns immediately. - - On success select() returns the total -number of bits set in the fd_sets. When the -function timed out it returns a value of zero. On failure it returns --1 and the errno -variable is set appropriately. When the application did not call -&VIDIOC-QBUF; or &VIDIOC-STREAMON; yet the -select() function succeeds, setting the bit of -the file descriptor in readfds or -writefds, but subsequent &VIDIOC-DQBUF; calls -will fail.The Linux kernel implements -select() like the &func-poll; function, but -select() cannot return a -POLLERR. - - - When use of the read() function has -been negotiated and the driver does not capture yet, the -select() function starts capturing. When that -fails, select() returns successful and a -subsequent read() call, which also attempts to -start capturing, will return an appropriate error code. When the -driver captures continuously (as opposed to, for example, still -images) and data is already available the -select() function returns immediately. - - When use of the write() function has -been negotiated the select() function just waits -until the driver is ready for a non-blocking -write() call. - - All drivers implementing the read() or -write() function or streaming I/O must also -support the select() function. - - For more details see the select() -manual page. - - - - - Return Value - - On success, select() returns the number -of descriptors contained in the three returned descriptor sets, which -will be zero if the timeout expired. On error --1 is returned, and the -errno variable is set appropriately; the sets and -timeout are undefined. Possible error codes -are: - - - - EBADF - - One or more of the file descriptor sets specified a -file descriptor that is not open. - - - - EBUSY - - The driver does not support multiple read or write -streams and the device is already in use. - - - - EFAULT - - The readfds, -writefds, exceptfds or -timeout pointer references an inaccessible memory -area. - - - - EINTR - - The call was interrupted by a signal. - - - - EINVAL - - The nfds argument is less than -zero or greater than FD_SETSIZE. - - - - - diff --git a/Documentation/DocBook/media/v4l/func-write.xml b/Documentation/DocBook/media/v4l/func-write.xml deleted file mode 100644 index 575207885726..000000000000 --- a/Documentation/DocBook/media/v4l/func-write.xml +++ /dev/null @@ -1,128 +0,0 @@ - - - V4L2 write() - &manvol; - - - - v4l2-write - Write to a V4L2 device - - - - - #include <unistd.h> - - ssize_t write - int fd - void *buf - size_t count - - - - - - Arguments - - - - fd - - &fd; - - - - buf - - - - - - count - - - - - - - - - Description - - write() writes up to -count bytes to the device referenced by the -file descriptor fd from the buffer starting at -buf. When the hardware outputs are not active -yet, this function enables them. When count is -zero, write() returns -0 without any other effect. - - When the application does not provide more data in time, the -previous video frame, raw VBI image, sliced VPS or WSS data is -displayed again. Sliced Teletext or Closed Caption data is not -repeated, the driver inserts a blank line instead. - - - - Return Value - - On success, the number of bytes written are returned. Zero -indicates nothing was written. On error, -1 -is returned, and the errno variable is set -appropriately. In this case the next write will start at the beginning -of a new frame. Possible error codes are: - - - - EAGAIN - - Non-blocking I/O has been selected using the O_NONBLOCK flag and no -buffer space was available to write the data immediately. - - - - EBADF - - fd is not a valid file -descriptor or is not open for writing. - - - - EBUSY - - The driver does not support multiple write streams and the -device is already in use. - - - - EFAULT - - buf references an inaccessible -memory area. - - - - EINTR - - The call was interrupted by a signal before any -data was written. - - - - EIO - - I/O error. This indicates some hardware problem. - - - - EINVAL - - The write() function is not -supported by this driver, not on this device, or generally not on this -type of device. - - - - - diff --git a/Documentation/DocBook/media/v4l/gen-errors.xml b/Documentation/DocBook/media/v4l/gen-errors.xml deleted file mode 100644 index 7e29a4e1f696..000000000000 --- a/Documentation/DocBook/media/v4l/gen-errors.xml +++ /dev/null @@ -1,77 +0,0 @@ -Generic Error Codes - - - Generic error codes - - &cs-str; - - - - EAGAIN (aka EWOULDBLOCK) - The ioctl can't be handled because the device is in state where - it can't perform it. This could happen for example in case where - device is sleeping and ioctl is performed to query statistics. - It is also returned when the ioctl would need to wait - for an event, but the device was opened in non-blocking mode. - - - - EBADF - The file descriptor is not a valid. - - - EBUSY - The ioctl can't be handled because the device is busy. This is - typically return while device is streaming, and an ioctl tried to - change something that would affect the stream, or would require the - usage of a hardware resource that was already allocated. The ioctl - must not be retried without performing another action to fix the - problem first (typically: stop the stream before retrying). - - - EFAULT - There was a failure while copying data from/to userspace, - probably caused by an invalid pointer reference. - - - EINVAL - One or more of the ioctl parameters are invalid or out of the - allowed range. This is a widely used error code. See the individual - ioctl requests for specific causes. - - - ENODEV - Device not found or was removed. - - - ENOMEM - There's not enough memory to handle the desired operation. - - - ENOTTY - The ioctl is not supported by the driver, actually meaning that - the required functionality is not available, or the file - descriptor is not for a media device. - - - ENOSPC - On USB devices, the stream ioctl's can return this error, meaning - that this request would overcommit the usb bandwidth reserved - for periodic transfers (up to 80% of the USB bandwidth). - - - EPERM - Permission denied. Can be returned if the device needs write - permission, or some special capabilities is needed - (e. g. root) - - - -
- -Note 1: ioctls may return other error codes. Since errors may have side -effects such as a driver reset, applications should abort on unexpected errors. - - -Note 2: Request-specific error codes are listed in the individual -requests descriptions. diff --git a/Documentation/DocBook/media/v4l/io.xml b/Documentation/DocBook/media/v4l/io.xml deleted file mode 100644 index 21a3dde8f95d..000000000000 --- a/Documentation/DocBook/media/v4l/io.xml +++ /dev/null @@ -1,1545 +0,0 @@ - Input/Output - - The V4L2 API defines several different methods to read from or -write to a device. All drivers exchanging data with applications must -support at least one of them. - - The classic I/O method using the read() -and write() function is automatically selected -after opening a V4L2 device. When the driver does not support this -method attempts to read or write will fail at any time. - - Other methods must be negotiated. To select the streaming I/O -method with memory mapped or user buffers applications call the -&VIDIOC-REQBUFS; ioctl. The asynchronous I/O method is not defined -yet. - - Video overlay can be considered another I/O method, although -the application does not directly receive the image data. It is -selected by initiating video overlay with the &VIDIOC-S-FMT; ioctl. -For more information see . - - Generally exactly one I/O method, including overlay, is -associated with each file descriptor. The only exceptions are -applications not exchanging data with a driver ("panel applications", -see ) and drivers permitting simultaneous video capturing -and overlay using the same file descriptor, for compatibility with V4L -and earlier versions of V4L2. - - VIDIOC_S_FMT and -VIDIOC_REQBUFS would permit this to some degree, -but for simplicity drivers need not support switching the I/O method -(after first switching away from read/write) other than by closing -and reopening the device. - - The following sections describe the various I/O methods in -more detail. - -
- Read/Write - - Input and output devices support the -read() and write() function, -respectively, when the V4L2_CAP_READWRITE flag in -the capabilities field of &v4l2-capability; -returned by the &VIDIOC-QUERYCAP; ioctl is set. - - Drivers may need the CPU to copy the data, but they may also -support DMA to or from user memory, so this I/O method is not -necessarily less efficient than other methods merely exchanging buffer -pointers. It is considered inferior though because no meta-information -like frame counters or timestamps are passed. This information is -necessary to recognize frame dropping and to synchronize with other -data streams. However this is also the simplest I/O method, requiring -little or no setup to exchange data. It permits command line stunts -like this (the vidctrl tool is -fictitious): - - - -> vidctrl /dev/video --input=0 --format=YUYV --size=352x288 -> dd if=/dev/video of=myimage.422 bs=202752 count=1 - - - - To read from the device applications use the -&func-read; function, to write the &func-write; function. -Drivers must implement one I/O method if they -exchange data with applications, but it need not be this. - It would be desirable if applications could depend on -drivers supporting all I/O interfaces, but as much as the complex -memory mapping I/O can be inadequate for some devices we have no -reason to require this interface, which is most useful for simple -applications capturing still images. - When reading or writing is supported, the driver -must also support the &func-select; and &func-poll; -function. - At the driver level select() and -poll() are the same, and -select() is too important to be optional. - -
- -
- Streaming I/O (Memory Mapping) - - Input and output devices support this I/O method when the -V4L2_CAP_STREAMING flag in the -capabilities field of &v4l2-capability; -returned by the &VIDIOC-QUERYCAP; ioctl is set. There are two -streaming methods, to determine if the memory mapping flavor is -supported applications must call the &VIDIOC-REQBUFS; ioctl with the memory type set to V4L2_MEMORY_MMAP. - - Streaming is an I/O method where only pointers to buffers -are exchanged between application and driver, the data itself is not -copied. Memory mapping is primarily intended to map buffers in device -memory into the application's address space. Device memory can be for -example the video memory on a graphics card with a video capture -add-on. However, being the most efficient I/O method available for a -long time, many other drivers support streaming as well, allocating -buffers in DMA-able main memory. - - A driver can support many sets of buffers. Each set is -identified by a unique buffer type value. The sets are independent and -each set can hold a different type of data. To access different sets -at the same time different file descriptors must be used. - One could use one file descriptor and set the buffer -type field accordingly when calling &VIDIOC-QBUF; etc., but it makes -the select() function ambiguous. We also like the -clean approach of one file descriptor per logical stream. Video -overlay for example is also a logical stream, although the CPU is not -needed for continuous operation. - - - To allocate device buffers applications call the -&VIDIOC-REQBUFS; ioctl with the desired number of buffers and buffer -type, for example V4L2_BUF_TYPE_VIDEO_CAPTURE. -This ioctl can also be used to change the number of buffers or to free -the allocated memory, provided none of the buffers are still -mapped. - - Before applications can access the buffers they must map -them into their address space with the &func-mmap; function. The -location of the buffers in device memory can be determined with the -&VIDIOC-QUERYBUF; ioctl. In the single-planar API case, the -m.offset and length -returned in a &v4l2-buffer; are passed as sixth and second parameter to the -mmap() function. When using the multi-planar API, -&v4l2-buffer; contains an array of &v4l2-plane; structures, each -containing its own m.offset and -length. When using the multi-planar API, every -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. - - - Mapping buffers in the single-planar API - -&v4l2-requestbuffers; reqbuf; -struct { - void *start; - size_t length; -} *buffers; -unsigned int i; - -memset(&reqbuf, 0, sizeof(reqbuf)); -reqbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; -reqbuf.memory = V4L2_MEMORY_MMAP; -reqbuf.count = 20; - -if (-1 == ioctl (fd, &VIDIOC-REQBUFS;, &reqbuf)) { - 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; - - memset(&buffer, 0, sizeof(buffer)); - buffer.type = reqbuf.type; - buffer.memory = V4L2_MEMORY_MMAP; - buffer.index = i; - - if (-1 == ioctl (fd, &VIDIOC-QUERYBUF;, &buffer)) { - perror("VIDIOC_QUERYBUF"); - exit(EXIT_FAILURE); - } - - buffers[i].length = buffer.length; /* remember for munmap() */ - - buffers[i].start = mmap(NULL, buffer.length, - PROT_READ | PROT_WRITE, /* recommended */ - MAP_SHARED, /* recommended */ - fd, buffer.m.offset); - - if (MAP_FAILED == buffers[i].start) { - /* If you do not exit here you should unmap() and free() - the buffers mapped so far. */ - perror("mmap"); - exit(EXIT_FAILURE); - } -} - -/* Cleanup. */ - -for (i = 0; i < reqbuf.count; i++) - munmap(buffers[i].start, buffers[i].length); - - - - - Mapping buffers in the multi-planar API - -&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]); - - - - Conceptually streaming drivers maintain two buffer queues, an incoming -and an outgoing queue. They separate the synchronous capture or output -operation locked to a video clock from the application which is -subject to random disk or network delays and preemption by -other processes, thereby reducing the probability of data loss. -The queues are organized as FIFOs, buffers will be -output in the order enqueued in the incoming FIFO, and were -captured in the order dequeued from the outgoing FIFO. - - The driver may require a minimum number of buffers enqueued -at all times to function, apart of this no limit exists on the number -of buffers applications can enqueue in advance, or dequeue and -process. They can also enqueue in a different order than buffers have -been dequeued, and the driver can fill enqueued -empty buffers in any order. - Random enqueue order permits applications processing -images out of order (such as video codecs) to return buffers earlier, -reducing the probability of data loss. Random fill order allows -drivers to reuse buffers on a LIFO-basis, taking advantage of caches -holding scatter-gather lists and the like. - The index number of a buffer (&v4l2-buffer; -index) plays no role here, it only -identifies the buffer. - - Initially all mapped buffers are in dequeued state, -inaccessible by the driver. For capturing applications it is customary -to first enqueue all mapped buffers, then to start capturing and enter -the read loop. Here the application waits until a filled buffer can be -dequeued, and re-enqueues the buffer when the data is no longer -needed. Output applications fill and enqueue buffers, when enough -buffers are stacked up the output is started with -VIDIOC_STREAMON. In the write loop, when -the application runs out of free buffers, it must wait until an empty -buffer can be dequeued and reused. - - To enqueue and dequeue a buffer applications use the -&VIDIOC-QBUF; and &VIDIOC-DQBUF; ioctl. The status of a buffer being -mapped, enqueued, full or empty can be determined at any time using the -&VIDIOC-QUERYBUF; ioctl. Two methods exist to suspend execution of the -application until one or more buffers can be dequeued. By default -VIDIOC_DQBUF blocks when no buffer is in the -outgoing queue. When the O_NONBLOCK flag was -given to the &func-open; function, VIDIOC_DQBUF -returns immediately with an &EAGAIN; when no buffer is available. The -&func-select; or &func-poll; functions are always available. - - To start and stop capturing or output applications call the -&VIDIOC-STREAMON; and &VIDIOC-STREAMOFF; ioctl. Note -VIDIOC_STREAMOFF removes all buffers from both -queues as a side effect. Since there is no notion of doing anything -"now" on a multitasking system, if an application needs to synchronize -with another event it should examine the &v4l2-buffer; -timestamp of captured or outputted buffers. - - - Drivers implementing memory mapping I/O must -support the VIDIOC_REQBUFS, -VIDIOC_QUERYBUF, -VIDIOC_QBUF, VIDIOC_DQBUF, -VIDIOC_STREAMON and -VIDIOC_STREAMOFF ioctl, the -mmap(), munmap(), -select() and poll() -function. - At the driver level select() and -poll() are the same, and -select() is too important to be optional. The -rest should be evident. - - - [capture example] - -
- -
- Streaming I/O (User Pointers) - - Input and output devices support this I/O method when the -V4L2_CAP_STREAMING flag in the -capabilities field of &v4l2-capability; -returned by the &VIDIOC-QUERYCAP; ioctl is set. If the particular user -pointer method (not only memory mapping) is supported must be -determined by calling the &VIDIOC-REQBUFS; ioctl with the memory type set to V4L2_MEMORY_USERPTR. - - This I/O method combines advantages of the read/write and -memory mapping methods. Buffers (planes) are allocated by the application -itself, and can reside for example in virtual or shared memory. Only -pointers to data are exchanged, these pointers and meta-information -are passed in &v4l2-buffer; (or in &v4l2-plane; in the multi-planar API case). -The driver must be switched into user pointer I/O mode by calling the -&VIDIOC-REQBUFS; with the desired buffer type. No buffers (planes) are allocated -beforehand, consequently they are not indexed and cannot be queried like mapped -buffers with the VIDIOC_QUERYBUF ioctl. - - - Initiating streaming I/O with user pointers - - -&v4l2-requestbuffers; reqbuf; - -memset (&reqbuf, 0, sizeof (reqbuf)); -reqbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; -reqbuf.memory = V4L2_MEMORY_USERPTR; - -if (ioctl (fd, &VIDIOC-REQBUFS;, &reqbuf) == -1) { - if (errno == EINVAL) - printf ("Video capturing or user pointer streaming is not supported\n"); - else - perror ("VIDIOC_REQBUFS"); - - exit (EXIT_FAILURE); -} - - - - Buffer (plane) addresses and sizes are passed on the fly with the -&VIDIOC-QBUF; ioctl. Although buffers are commonly cycled, -applications can pass different addresses and sizes at each -VIDIOC_QBUF call. If required by the hardware the -driver swaps memory pages within physical memory to create a -continuous area of memory. This happens transparently to the -application in the virtual memory subsystem of the kernel. When buffer -pages have been swapped out to disk they are brought back and finally -locked in physical memory for DMA. - We expect that frequently used buffers are typically not -swapped out. Anyway, the process of swapping, locking or generating -scatter-gather lists may be time consuming. The delay can be masked by -the depth of the incoming buffer queue, and perhaps by maintaining -caches assuming a buffer will be soon enqueued again. On the other -hand, to optimize memory usage drivers can limit the number of buffers -locked in advance and recycle the most recently used buffers first. Of -course, the pages of empty buffers in the incoming queue need not be -saved to disk. Output buffers must be saved on the incoming and -outgoing queue because an application may share them with other -processes. - - - Filled or displayed buffers are dequeued with the -&VIDIOC-DQBUF; ioctl. The driver can unlock the memory pages at any -time between the completion of the DMA and this ioctl. The memory is -also unlocked when &VIDIOC-STREAMOFF; is called, &VIDIOC-REQBUFS;, or -when the device is closed. Applications must take care not to free -buffers without dequeuing. For once, the buffers remain locked until -further, wasting physical memory. Second the driver will not be -notified when the memory is returned to the application's free list -and subsequently reused for other purposes, possibly completing the -requested DMA and overwriting valuable data. - - For capturing applications it is customary to enqueue a -number of empty buffers, to start capturing and enter the read loop. -Here the application waits until a filled buffer can be dequeued, and -re-enqueues the buffer when the data is no longer needed. Output -applications fill and enqueue buffers, when enough buffers are stacked -up output is started. In the write loop, when the application -runs out of free buffers it must wait until an empty buffer can be -dequeued and reused. Two methods exist to suspend execution of the -application until one or more buffers can be dequeued. By default -VIDIOC_DQBUF blocks when no buffer is in the -outgoing queue. When the O_NONBLOCK flag was -given to the &func-open; function, VIDIOC_DQBUF -returns immediately with an &EAGAIN; when no buffer is available. The -&func-select; or &func-poll; function are always available. - - To start and stop capturing or output applications call the -&VIDIOC-STREAMON; and &VIDIOC-STREAMOFF; ioctl. Note -VIDIOC_STREAMOFF removes all buffers from both -queues and unlocks all buffers as a side effect. Since there is no -notion of doing anything "now" on a multitasking system, if an -application needs to synchronize with another event it should examine -the &v4l2-buffer; timestamp of captured -or outputted buffers. - - Drivers implementing user pointer I/O must -support the VIDIOC_REQBUFS, -VIDIOC_QBUF, VIDIOC_DQBUF, -VIDIOC_STREAMON and -VIDIOC_STREAMOFF ioctl, the -select() and poll() function. - At the driver level select() and -poll() are the same, and -select() is too important to be optional. The -rest should be evident. - -
- -
- Streaming I/O (DMA buffer importing) - -The DMABUF framework provides a generic method for sharing buffers -between multiple devices. Device drivers that support DMABUF can export a DMA -buffer to userspace as a file descriptor (known as the exporter role), import a -DMA buffer from userspace using a file descriptor previously exported for a -different or the same device (known as the importer role), or both. This -section describes the DMABUF importer role API in V4L2. - - Refer to DMABUF exporting for -details about exporting V4L2 buffers as DMABUF file descriptors. - -Input and output devices support the streaming I/O method when the -V4L2_CAP_STREAMING flag in the -capabilities field of &v4l2-capability; returned by -the &VIDIOC-QUERYCAP; ioctl is set. Whether importing DMA buffers through -DMABUF file descriptors is supported is determined by calling the -&VIDIOC-REQBUFS; ioctl with the memory type set to -V4L2_MEMORY_DMABUF. - - This I/O method is dedicated to sharing DMA buffers between different -devices, which may be V4L devices or other video-related devices (e.g. DRM). -Buffers (planes) are allocated by a driver on behalf of an application. Next, -these buffers are exported to the application as file descriptors using an API -which is specific for an allocator driver. Only such file descriptor are -exchanged. The descriptors and meta-information are passed in &v4l2-buffer; (or -in &v4l2-plane; in the multi-planar API case). The driver must be switched -into DMABUF I/O mode by calling the &VIDIOC-REQBUFS; with the desired buffer -type. - - - Initiating streaming I/O with DMABUF file descriptors - - -&v4l2-requestbuffers; reqbuf; - -memset(&reqbuf, 0, sizeof (reqbuf)); -reqbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; -reqbuf.memory = V4L2_MEMORY_DMABUF; -reqbuf.count = 1; - -if (ioctl(fd, &VIDIOC-REQBUFS;, &reqbuf) == -1) { - if (errno == EINVAL) - printf("Video capturing or DMABUF streaming is not supported\n"); - else - perror("VIDIOC_REQBUFS"); - - exit(EXIT_FAILURE); -} - - - - The buffer (plane) file descriptor is passed on the fly with the -&VIDIOC-QBUF; ioctl. In case of multiplanar buffers, every plane can be -associated with a different DMABUF descriptor. Although buffers are commonly -cycled, applications can pass a different DMABUF descriptor at each -VIDIOC_QBUF call. - - - Queueing DMABUF using single plane API - - -int buffer_queue(int v4lfd, int index, int dmafd) -{ - &v4l2-buffer; buf; - - memset(&buf, 0, sizeof buf); - buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - buf.memory = V4L2_MEMORY_DMABUF; - buf.index = index; - buf.m.fd = dmafd; - - if (ioctl(v4lfd, &VIDIOC-QBUF;, &buf) == -1) { - perror("VIDIOC_QBUF"); - return -1; - } - - return 0; -} - - - - - Queueing DMABUF using multi plane API - - -int buffer_queue_mp(int v4lfd, int index, int dmafd[], int n_planes) -{ - &v4l2-buffer; buf; - &v4l2-plane; planes[VIDEO_MAX_PLANES]; - int i; - - memset(&buf, 0, sizeof buf); - buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE; - buf.memory = V4L2_MEMORY_DMABUF; - buf.index = index; - buf.m.planes = planes; - buf.length = n_planes; - - memset(&planes, 0, sizeof planes); - - for (i = 0; i < n_planes; ++i) - buf.m.planes[i].m.fd = dmafd[i]; - - if (ioctl(v4lfd, &VIDIOC-QBUF;, &buf) == -1) { - perror("VIDIOC_QBUF"); - return -1; - } - - return 0; -} - - - - Captured or displayed buffers are dequeued with the -&VIDIOC-DQBUF; ioctl. The driver can unlock the buffer at any -time between the completion of the DMA and this ioctl. The memory is -also unlocked when &VIDIOC-STREAMOFF; is called, &VIDIOC-REQBUFS;, or -when the device is closed. - - For capturing applications it is customary to enqueue a -number of empty buffers, to start capturing and enter the read loop. -Here the application waits until a filled buffer can be dequeued, and -re-enqueues the buffer when the data is no longer needed. Output -applications fill and enqueue buffers, when enough buffers are stacked -up output is started. In the write loop, when the application -runs out of free buffers it must wait until an empty buffer can be -dequeued and reused. Two methods exist to suspend execution of the -application until one or more buffers can be dequeued. By default -VIDIOC_DQBUF blocks when no buffer is in the -outgoing queue. When the O_NONBLOCK flag was -given to the &func-open; function, VIDIOC_DQBUF -returns immediately with an &EAGAIN; when no buffer is available. The -&func-select; and &func-poll; functions are always available. - - To start and stop capturing or displaying applications call the -&VIDIOC-STREAMON; and &VIDIOC-STREAMOFF; ioctls. Note that -VIDIOC_STREAMOFF removes all buffers from both queues and -unlocks all buffers as a side effect. Since there is no notion of doing -anything "now" on a multitasking system, if an application needs to synchronize -with another event it should examine the &v4l2-buffer; -timestamp of captured or outputted buffers. - - Drivers implementing DMABUF importing I/O must support the -VIDIOC_REQBUFS, VIDIOC_QBUF, -VIDIOC_DQBUF, VIDIOC_STREAMON and -VIDIOC_STREAMOFF ioctls, and the -select() and poll() functions. - -
- -
- Asynchronous I/O - - This method is not defined yet. -
- -
- Buffers - - A buffer contains data exchanged by application and -driver using one of the Streaming I/O methods. In the multi-planar API, the -data is held in planes, while the buffer structure acts as a container -for the planes. Only pointers to buffers (planes) are exchanged, the data -itself is not copied. These pointers, together with meta-information like -timestamps or field parity, are stored in a struct -v4l2_buffer, argument to -the &VIDIOC-QUERYBUF;, &VIDIOC-QBUF; and &VIDIOC-DQBUF; ioctl. -In the multi-planar API, some plane-specific members of struct -v4l2_buffer, such as pointers and sizes for each -plane, are stored in struct v4l2_plane instead. -In that case, struct v4l2_buffer contains an array of -plane structures. - - Dequeued video buffers come with timestamps. The driver - decides at which part of the frame and with which clock the - timestamp is taken. Please see flags in the masks - V4L2_BUF_FLAG_TIMESTAMP_MASK and - V4L2_BUF_FLAG_TSTAMP_SRC_MASK in . These flags are always valid and constant - across all buffers during the whole video stream. Changes in these - flags may take place as a side effect of &VIDIOC-S-INPUT; or - &VIDIOC-S-OUTPUT; however. The - V4L2_BUF_FLAG_TIMESTAMP_COPY timestamp type - which is used by e.g. on mem-to-mem devices is an exception to the - rule: the timestamp source flags are copied from the OUTPUT video - buffer to the CAPTURE video buffer. - - - struct <structname>v4l2_buffer</structname> - - &cs-ustr; - - - __u32 - index - - Number of the buffer, set by the application except -when calling &VIDIOC-DQBUF;, then it is set by the driver. -This field can range from zero to the number of buffers allocated -with the &VIDIOC-REQBUFS; ioctl (&v4l2-requestbuffers; count), -plus any buffers allocated with &VIDIOC-CREATE-BUFS; minus one. - - - __u32 - type - - Type of the buffer, same as &v4l2-format; -type or &v4l2-requestbuffers; -type, set by the application. See - - - __u32 - bytesused - - The number of bytes occupied by the data in the -buffer. It depends on the negotiated data format and may change with -each buffer for compressed variable size data like JPEG images. -Drivers must set this field when type -refers to a capture stream, applications when it refers to an output stream. -If the application sets this to 0 for an output stream, then -bytesused will be set to the size of the -buffer (see the length field of this struct) by -the driver. For multiplanar formats this field is ignored and the -planes pointer is used instead. - - - __u32 - flags - - Flags set by the application or driver, see . - - - __u32 - field - - Indicates the field order of the image in the -buffer, see . This field is not used when -the buffer contains VBI data. Drivers must set it when -type refers to a capture stream, -applications when it refers to an output stream. - - - struct timeval - timestamp - - For capture streams this is time when the first data - byte was captured, as returned by the - clock_gettime() function for the relevant - clock id; see V4L2_BUF_FLAG_TIMESTAMP_* in - . For output streams the driver - stores the time at which the last data byte was actually sent out - in the timestamp field. This permits - applications to monitor the drift between the video and system - clock. For output streams that use V4L2_BUF_FLAG_TIMESTAMP_COPY - the application has to fill in the timestamp which will be copied - by the driver to the capture stream. - - - &v4l2-timecode; - timecode - - When type is -V4L2_BUF_TYPE_VIDEO_CAPTURE and the -V4L2_BUF_FLAG_TIMECODE flag is set in -flags, this structure contains a frame -timecode. In V4L2_FIELD_ALTERNATE -mode the top and bottom field contain the same timecode. -Timecodes are intended to help video editing and are typically recorded on -video tapes, but also embedded in compressed formats like MPEG. This -field is independent of the timestamp and -sequence fields. - - - __u32 - sequence - - Set by the driver, counting the frames (not fields!) in -sequence. This field is set for both input and output devices. - - - In V4L2_FIELD_ALTERNATE mode the top and -bottom field have the same sequence number. The count starts at zero -and includes dropped or repeated frames. A dropped frame was received -by an input device but could not be stored due to lack of free buffer -space. A repeated frame was displayed again by an output device -because the application did not pass new data in -time.Note this may count the frames received -e.g. over USB, without taking into account the frames dropped by the -remote hardware due to limited compression throughput or bus -bandwidth. These devices identify by not enumerating any video -standards, see . - - - __u32 - memory - - This field must be set by applications and/or drivers -in accordance with the selected I/O method. See - - - union - m - - - - __u32 - offset - For the single-planar API and when -memory is V4L2_MEMORY_MMAP this -is the offset of the buffer from the start of the device memory. The value is -returned by the driver and apart of serving as parameter to the &func-mmap; -function not useful for applications. See for details - - - - - unsigned long - userptr - For the single-planar API and when -memory is V4L2_MEMORY_USERPTR -this is a pointer to the buffer (casted to unsigned long type) in virtual -memory, set by the application. See for details. - - - - - struct v4l2_plane - *planes - 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 length field of this - v4l2_buffer structure. - - - - int - fd - For the single-plane API and when -memory is V4L2_MEMORY_DMABUF this -is the file descriptor associated with a DMABUF buffer. - - - __u32 - length - - Size of the buffer (not the payload) in bytes for the - single-planar API. This is set by the driver based on the calls to - &VIDIOC-REQBUFS; and/or &VIDIOC-CREATE-BUFS;. For the multi-planar API the application sets - this to the number of elements in the planes - array. The driver will fill in the actual number of valid elements in - that array. - - - - __u32 - reserved2 - - A place holder for future extensions. Drivers and applications -must set this to 0. - - - __u32 - reserved - - A place holder for future extensions. Drivers and applications -must set this to 0. - - - -
- - - struct <structname>v4l2_plane</structname> - - &cs-ustr; - - - __u32 - bytesused - - The number of bytes occupied by data in the plane - (its payload). Drivers must set this field when type - refers to a capture stream, applications when it refers to an output stream. - If the application sets this to 0 for an output stream, then - bytesused will be set to the size of the - plane (see the length field of this struct) - by the driver. Note that the actual image data starts at - data_offset which may not be 0. - - - __u32 - length - - Size in bytes of the plane (not its payload). This is set by the driver - based on the calls to &VIDIOC-REQBUFS; and/or &VIDIOC-CREATE-BUFS;. - - - union - m - - - - - - __u32 - mem_offset - When the memory type in the containing &v4l2-buffer; is - V4L2_MEMORY_MMAP, this is the value that - should be passed to &func-mmap;, similar to the - offset field in &v4l2-buffer;. - - - - unsigned long - userptr - When the memory type in the containing &v4l2-buffer; is - V4L2_MEMORY_USERPTR, this is a userspace - pointer to the memory allocated for this plane by an application. - - - - - int - fd - When the memory type in the containing &v4l2-buffer; is - V4L2_MEMORY_DMABUF, this is a file - descriptor associated with a DMABUF buffer, similar to the - fd field in &v4l2-buffer;. - - - __u32 - data_offset - - Offset in bytes to video data in the plane. - Drivers must set this field when type - refers to a capture stream, applications when it refers to an output stream. - Note that data_offset is included in bytesused. - So the size of the image in the plane is - bytesused-data_offset at - offset data_offset from the start of the plane. - - - - __u32 - reserved[11] - - Reserved for future use. Should be zeroed by drivers and - applications. - - - -
- - - enum v4l2_buf_type - - &cs-def; - - - V4L2_BUF_TYPE_VIDEO_CAPTURE - 1 - Buffer of a single-planar video capture stream, see . - - - V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE - - 9 - Buffer of a multi-planar video capture stream, see . - - - V4L2_BUF_TYPE_VIDEO_OUTPUT - 2 - Buffer of a single-planar video output stream, see . - - - V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE - - 10 - Buffer of a multi-planar video output stream, see . - - - V4L2_BUF_TYPE_VIDEO_OVERLAY - 3 - Buffer for video overlay, see . - - - V4L2_BUF_TYPE_VBI_CAPTURE - 4 - Buffer of a raw VBI capture stream, see . - - - V4L2_BUF_TYPE_VBI_OUTPUT - 5 - Buffer of a raw VBI output stream, see . - - - V4L2_BUF_TYPE_SLICED_VBI_CAPTURE - 6 - Buffer of a sliced VBI capture stream, see . - - - V4L2_BUF_TYPE_SLICED_VBI_OUTPUT - 7 - Buffer of a sliced VBI output stream, see . - - - V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY - 8 - Buffer for video output overlay (OSD), see . - - - V4L2_BUF_TYPE_SDR_CAPTURE - 11 - Buffer for Software Defined Radio (SDR) capture stream, see - . - - - V4L2_BUF_TYPE_SDR_OUTPUT - 12 - Buffer for Software Defined Radio (SDR) output stream, see - . - - - -
- - - Buffer Flags - - &cs-def; - - - V4L2_BUF_FLAG_MAPPED - 0x00000001 - The buffer resides in device memory and has been mapped -into the application's address space, see for details. -Drivers set or clear this flag when the -VIDIOC_QUERYBUF, VIDIOC_QBUF or VIDIOC_DQBUF ioctl is called. Set by the driver. - - - V4L2_BUF_FLAG_QUEUED - 0x00000002 - Internally drivers maintain two buffer queues, an -incoming and outgoing queue. When this flag is set, the buffer is -currently on the incoming queue. It automatically moves to the -outgoing queue after the buffer has been filled (capture devices) or -displayed (output devices). Drivers set or clear this flag when the -VIDIOC_QUERYBUF ioctl is called. After -(successful) calling the VIDIOC_QBUF ioctl it is -always set and after VIDIOC_DQBUF always -cleared. - - - V4L2_BUF_FLAG_DONE - 0x00000004 - When this flag is set, the buffer is currently on -the outgoing queue, ready to be dequeued from the driver. Drivers set -or clear this flag when the VIDIOC_QUERYBUF ioctl -is called. After calling the VIDIOC_QBUF or -VIDIOC_DQBUF it is always cleared. Of course a -buffer cannot be on both queues at the same time, the -V4L2_BUF_FLAG_QUEUED and -V4L2_BUF_FLAG_DONE flag are mutually exclusive. -They can be both cleared however, then the buffer is in "dequeued" -state, in the application domain so to say. - - - V4L2_BUF_FLAG_ERROR - 0x00000040 - When this flag is set, the buffer has been dequeued - successfully, although the data might have been corrupted. - This is recoverable, streaming may continue as normal and - the buffer may be reused normally. - Drivers set this flag when the VIDIOC_DQBUF - ioctl is called. - - - V4L2_BUF_FLAG_KEYFRAME - 0x00000008 - Drivers set or clear this flag when calling the -VIDIOC_DQBUF ioctl. It may be set by video -capture devices when the buffer contains a compressed image which is a -key frame (or field), &ie; can be decompressed on its own. Also known as -an I-frame. Applications can set this bit when type -refers to an output stream. - - - V4L2_BUF_FLAG_PFRAME - 0x00000010 - Similar to V4L2_BUF_FLAG_KEYFRAME -this flags predicted frames or fields which contain only differences to a -previous key frame. Applications can set this bit when type -refers to an output stream. - - - V4L2_BUF_FLAG_BFRAME - 0x00000020 - Similar to V4L2_BUF_FLAG_KEYFRAME -this flags a bi-directional predicted frame or field which contains only -the differences between the current frame and both the preceding and following -key frames to specify its content. Applications can set this bit when -type refers to an output stream. - - - V4L2_BUF_FLAG_TIMECODE - 0x00000100 - The timecode field is valid. -Drivers set or clear this flag when the VIDIOC_DQBUF -ioctl is called. Applications can set this bit and the corresponding -timecode structure when type -refers to an output stream. - - - V4L2_BUF_FLAG_PREPARED - 0x00000400 - The buffer has been prepared for I/O and can be queued by the -application. Drivers set or clear this flag when the -VIDIOC_QUERYBUF, VIDIOC_PREPARE_BUF, VIDIOC_QBUF or VIDIOC_DQBUF ioctl is called. - - - V4L2_BUF_FLAG_NO_CACHE_INVALIDATE - 0x00000800 - Caches do not have to be invalidated for this buffer. -Typically applications shall use this flag if the data captured in the buffer -is not going to be touched by the CPU, instead the buffer will, probably, be -passed on to a DMA-capable hardware unit for further processing or output. - - - - V4L2_BUF_FLAG_NO_CACHE_CLEAN - 0x00001000 - Caches do not have to be cleaned for this buffer. -Typically applications shall use this flag for output buffers if the data -in this buffer has not been created by the CPU but by some DMA-capable unit, -in which case caches have not been used. - - - V4L2_BUF_FLAG_LAST - 0x00100000 - Last buffer produced by the hardware. mem2mem codec drivers -set this flag on the capture queue for the last buffer when the -VIDIOC_QUERYBUF or -VIDIOC_DQBUF ioctl is called. Due to hardware -limitations, the last buffer may be empty. In this case the driver will set the -bytesused field to 0, regardless of the format. Any -Any subsequent call to the VIDIOC_DQBUF ioctl -will not block anymore, but return an &EPIPE;. - - - V4L2_BUF_FLAG_TIMESTAMP_MASK - 0x0000e000 - Mask for timestamp types below. To test the - timestamp type, mask out bits not belonging to timestamp - type by performing a logical and operation with buffer - flags and timestamp mask. - - - V4L2_BUF_FLAG_TIMESTAMP_UNKNOWN - 0x00000000 - Unknown timestamp type. This type is used by - drivers before Linux 3.9 and may be either monotonic (see - below) or realtime (wall clock). Monotonic clock has been - favoured in embedded systems whereas most of the drivers - use the realtime clock. Either kinds of timestamps are - available in user space via - clock_gettime(2) using clock IDs - CLOCK_MONOTONIC and - CLOCK_REALTIME, respectively. - - - V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC - 0x00002000 - The buffer timestamp has been taken from the - CLOCK_MONOTONIC clock. To access the - same clock outside V4L2, use - clock_gettime(2). - - - V4L2_BUF_FLAG_TIMESTAMP_COPY - 0x00004000 - The CAPTURE buffer timestamp has been taken from the - corresponding OUTPUT buffer. This flag applies only to mem2mem devices. - - - V4L2_BUF_FLAG_TSTAMP_SRC_MASK - 0x00070000 - Mask for timestamp sources below. The timestamp source - defines the point of time the timestamp is taken in relation to - the frame. Logical 'and' operation between the - flags field and - V4L2_BUF_FLAG_TSTAMP_SRC_MASK produces the - value of the timestamp source. Applications must set the timestamp - source when type refers to an output stream - and V4L2_BUF_FLAG_TIMESTAMP_COPY is set. - - - V4L2_BUF_FLAG_TSTAMP_SRC_EOF - 0x00000000 - End Of Frame. The buffer timestamp has been taken - when the last pixel of the frame has been received or the - last pixel of the frame has been transmitted. In practice, - software generated timestamps will typically be read from - the clock a small amount of time after the last pixel has - been received or transmitten, depending on the system and - other activity in it. - - - V4L2_BUF_FLAG_TSTAMP_SRC_SOE - 0x00010000 - Start Of Exposure. The buffer timestamp has been - taken when the exposure of the frame has begun. This is - only valid for the - V4L2_BUF_TYPE_VIDEO_CAPTURE buffer - type. - - - -
- - - enum v4l2_memory - - &cs-def; - - - V4L2_MEMORY_MMAP - 1 - The buffer is used for memory -mapping I/O. - - - V4L2_MEMORY_USERPTR - 2 - The buffer is used for user -pointer I/O. - - - V4L2_MEMORY_OVERLAY - 3 - [to do] - - - V4L2_MEMORY_DMABUF - 4 - The buffer is used for DMA shared -buffer I/O. - - - -
- -
- Timecodes - - The v4l2_timecode structure is -designed to hold a or similar timecode. -(struct timeval timestamps are stored in -&v4l2-buffer; field timestamp.) - - - struct <structname>v4l2_timecode</structname> - - &cs-str; - - - __u32 - type - Frame rate the timecodes are based on, see . - - - __u32 - flags - Timecode flags, see . - - - __u8 - frames - Frame count, 0 ... 23/24/29/49/59, depending on the - type of timecode. - - - __u8 - seconds - Seconds count, 0 ... 59. This is a binary, not BCD number. - - - __u8 - minutes - Minutes count, 0 ... 59. This is a binary, not BCD number. - - - __u8 - hours - Hours count, 0 ... 29. This is a binary, not BCD number. - - - __u8 - userbits[4] - The "user group" bits from the timecode. - - - -
- - - Timecode Types - - &cs-def; - - - V4L2_TC_TYPE_24FPS - 1 - 24 frames per second, i. e. film. - - - V4L2_TC_TYPE_25FPS - 2 - 25 frames per second, &ie; PAL or SECAM video. - - - V4L2_TC_TYPE_30FPS - 3 - 30 frames per second, &ie; NTSC video. - - - V4L2_TC_TYPE_50FPS - 4 - - - - V4L2_TC_TYPE_60FPS - 5 - - - - -
- - - Timecode Flags - - &cs-def; - - - V4L2_TC_FLAG_DROPFRAME - 0x0001 - Indicates "drop frame" semantics for counting frames -in 29.97 fps material. When set, frame numbers 0 and 1 at the start of -each minute, except minutes 0, 10, 20, 30, 40, 50 are omitted from the -count. - - - V4L2_TC_FLAG_COLORFRAME - 0x0002 - The "color frame" flag. - - - V4L2_TC_USERBITS_field - 0x000C - Field mask for the "binary group flags". - - - V4L2_TC_USERBITS_USERDEFINED - 0x0000 - Unspecified format. - - - V4L2_TC_USERBITS_8BITCHARS - 0x0008 - 8-bit ISO characters. - - - -
-
-
- -
- Field Order - - We have to distinguish between progressive and interlaced -video. Progressive video transmits all lines of a video image -sequentially. Interlaced video divides an image into two fields, -containing only the odd and even lines of the image, respectively. -Alternating the so called odd and even field are transmitted, and due -to a small delay between fields a cathode ray TV displays the lines -interleaved, yielding the original frame. This curious technique was -invented because at refresh rates similar to film the image would -fade out too quickly. Transmitting fields reduces the flicker without -the necessity of doubling the frame rate and with it the bandwidth -required for each channel. - - It is important to understand a video camera does not expose -one frame at a time, merely transmitting the frames separated into -fields. The fields are in fact captured at two different instances in -time. An object on screen may well move between one field and the -next. For applications analysing motion it is of paramount importance -to recognize which field of a frame is older, the temporal -order. - - When the driver provides or accepts images field by field -rather than interleaved, it is also important applications understand -how the fields combine to frames. We distinguish between top (aka odd) and -bottom (aka even) fields, the spatial order: The first line -of the top field is the first line of an interlaced frame, the first -line of the bottom field is the second line of that frame. - - However because fields were captured one after the other, -arguing whether a frame commences with the top or bottom field is -pointless. Any two successive top and bottom, or bottom and top fields -yield a valid frame. Only when the source was progressive to begin -with, ⪚ when transferring film to video, two fields may come from -the same frame, creating a natural order. - - Counter to intuition the top field is not necessarily the -older field. Whether the older field contains the top or bottom lines -is a convention determined by the video standard. Hence the -distinction between temporal and spatial order of fields. The diagrams -below should make this clearer. - - All video capture and output devices must report the current -field order. Some drivers may permit the selection of a different -order, to this end applications initialize the -field field of &v4l2-pix-format; before -calling the &VIDIOC-S-FMT; ioctl. If this is not desired it should -have the value V4L2_FIELD_ANY (0). - - - enum v4l2_field - - &cs-def; - - - V4L2_FIELD_ANY - 0 - Applications request this field order when any -one of the V4L2_FIELD_NONE, -V4L2_FIELD_TOP, -V4L2_FIELD_BOTTOM, or -V4L2_FIELD_INTERLACED formats is acceptable. -Drivers choose depending on hardware capabilities or e. g. the -requested image size, and return the actual field order. Drivers must -never return V4L2_FIELD_ANY. If multiple -field orders are possible the driver must choose one of the possible -field orders during &VIDIOC-S-FMT; or &VIDIOC-TRY-FMT;. &v4l2-buffer; -field can never be -V4L2_FIELD_ANY. - - - V4L2_FIELD_NONE - 1 - Images are in progressive format, not interlaced. -The driver may also indicate this order when it cannot distinguish -between V4L2_FIELD_TOP and -V4L2_FIELD_BOTTOM. - - - V4L2_FIELD_TOP - 2 - Images consist of the top (aka odd) field only. - - - V4L2_FIELD_BOTTOM - 3 - Images consist of the bottom (aka even) field only. -Applications may wish to prevent a device from capturing interlaced -images because they will have "comb" or "feathering" artefacts around -moving objects. - - - V4L2_FIELD_INTERLACED - 4 - Images contain both fields, interleaved line by -line. The temporal order of the fields (whether the top or bottom -field is first transmitted) depends on the current video standard. -M/NTSC transmits the bottom field first, all other standards the top -field first. - - - V4L2_FIELD_SEQ_TB - 5 - Images contain both fields, the top field lines -are stored first in memory, immediately followed by the bottom field -lines. Fields are always stored in temporal order, the older one first -in memory. Image sizes refer to the frame, not fields. - - - V4L2_FIELD_SEQ_BT - 6 - Images contain both fields, the bottom field -lines are stored first in memory, immediately followed by the top -field lines. Fields are always stored in temporal order, the older one -first in memory. Image sizes refer to the frame, not fields. - - - V4L2_FIELD_ALTERNATE - 7 - The two fields of a frame are passed in separate -buffers, in temporal order, &ie; the older one first. To indicate the field -parity (whether the current field is a top or bottom field) the driver -or application, depending on data direction, must set &v4l2-buffer; -field to -V4L2_FIELD_TOP or -V4L2_FIELD_BOTTOM. Any two successive fields pair -to build a frame. If fields are successive, without any dropped fields -between them (fields can drop individually), can be determined from -the &v4l2-buffer; sequence field. This format -cannot be selected when using the read/write I/O method since there -is no way to communicate if a field was a top or bottom field. - - - V4L2_FIELD_INTERLACED_TB - 8 - Images contain both fields, interleaved line by -line, top field first. The top field is transmitted first. - - - V4L2_FIELD_INTERLACED_BT - 9 - Images contain both fields, interleaved line by -line, top field first. The bottom field is transmitted first. - - - -
- -
- Field Order, Top Field First Transmitted - - - - - - - - -
- -
- Field Order, Bottom Field First Transmitted - - - - - - - - -
-
diff --git a/Documentation/DocBook/media/v4l/keytable.c.xml b/Documentation/DocBook/media/v4l/keytable.c.xml deleted file mode 100644 index d53254a3be15..000000000000 --- a/Documentation/DocBook/media/v4l/keytable.c.xml +++ /dev/null @@ -1,172 +0,0 @@ - -/* keytable.c - This program allows checking/replacing keys at IR - - Copyright (C) 2006-2009 Mauro Carvalho Chehab <mchehab@infradead.org> - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - */ - -#include <ctype.h> -#include <errno.h> -#include <fcntl.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <linux/input.h> -#include <sys/ioctl.h> - -#include "parse.h" - -void prtcode (int *codes) -{ - struct parse_key *p; - - for (p=keynames;p->name!=NULL;p++) { - if (p->value == (unsigned)codes[1]) { - printf("scancode 0x%04x = %s (0x%02x)\n", codes[0], p->name, codes[1]); - return; - } - } - - if (isprint (codes[1])) - printf("scancode %d = '%c' (0x%02x)\n", codes[0], codes[1], codes[1]); - else - printf("scancode %d = 0x%02x\n", codes[0], codes[1]); -} - -int parse_code(char *string) -{ - struct parse_key *p; - - for (p=keynames;p->name!=NULL;p++) { - if (!strcasecmp(p->name, string)) { - return p->value; - } - } - return -1; -} - -int main (int argc, char *argv[]) -{ - int fd; - unsigned int i, j; - int codes[2]; - - if (argc<2 || argc>4) { - printf ("usage: %s <device> to get table; or\n" - " %s <device> <scancode> <keycode>\n" - " %s <device> <keycode_file>\n",*argv,*argv,*argv); - return -1; - } - - if ((fd = open(argv[1], O_RDONLY)) < 0) { - perror("Couldn't open input device"); - return(-1); - } - - if (argc==4) { - int value; - - value=parse_code(argv[3]); - - if (value==-1) { - value = strtol(argv[3], NULL, 0); - if (errno) - perror("value"); - } - - codes [0] = (unsigned) strtol(argv[2], NULL, 0); - codes [1] = (unsigned) value; - - if(ioctl(fd, EVIOCSKEYCODE, codes)) - perror ("EVIOCSKEYCODE"); - - if(ioctl(fd, EVIOCGKEYCODE, codes)==0) - prtcode(codes); - return 0; - } - - if (argc==3) { - FILE *fin; - int value; - char *scancode, *keycode, s[2048]; - - fin=fopen(argv[2],"r"); - if (fin==NULL) { - perror ("opening keycode file"); - return -1; - } - - /* Clears old table */ - for (j = 0; j < 256; j++) { - for (i = 0; i < 256; i++) { - codes[0] = (j << 8) | i; - codes[1] = KEY_RESERVED; - ioctl(fd, EVIOCSKEYCODE, codes); - } - } - - while (fgets(s,sizeof(s),fin)) { - scancode=strtok(s,"\n\t =:"); - if (!scancode) { - perror ("parsing input file scancode"); - return -1; - } - if (!strcasecmp(scancode, "scancode")) { - scancode = strtok(NULL,"\n\t =:"); - if (!scancode) { - perror ("parsing input file scancode"); - return -1; - } - } - - keycode=strtok(NULL,"\n\t =:("); - if (!keycode) { - perror ("parsing input file keycode"); - return -1; - } - - // printf ("parsing %s=%s:", scancode, keycode); - value=parse_code(keycode); - // printf ("\tvalue=%d\n",value); - - if (value==-1) { - value = strtol(keycode, NULL, 0); - if (errno) - perror("value"); - } - - codes [0] = (unsigned) strtol(scancode, NULL, 0); - codes [1] = (unsigned) value; - - // printf("\t%04x=%04x\n",codes[0], codes[1]); - if(ioctl(fd, EVIOCSKEYCODE, codes)) { - fprintf(stderr, "Setting scancode 0x%04x with 0x%04x via ",codes[0], codes[1]); - perror ("EVIOCSKEYCODE"); - } - - if(ioctl(fd, EVIOCGKEYCODE, codes)==0) - prtcode(codes); - } - return 0; - } - - /* Get scancode table */ - for (j = 0; j < 256; j++) { - for (i = 0; i < 256; i++) { - codes[0] = (j << 8) | i; - if (!ioctl(fd, EVIOCGKEYCODE, codes) && codes[1] != KEY_RESERVED) - prtcode(codes); - } - } - return 0; -} - - diff --git a/Documentation/DocBook/media/v4l/libv4l.xml b/Documentation/DocBook/media/v4l/libv4l.xml deleted file mode 100644 index d3b71e20003c..000000000000 --- a/Documentation/DocBook/media/v4l/libv4l.xml +++ /dev/null @@ -1,160 +0,0 @@ -Libv4l Userspace Library -
- Introduction - - libv4l is a collection of libraries which adds a thin abstraction -layer on top of video4linux2 devices. The purpose of this (thin) layer -is to make it easy for application writers to support a wide variety of -devices without having to write separate code for different devices in the -same class. -An example of using libv4l is provided by -v4l2grab. - - - libv4l consists of 3 different libraries: -
- libv4lconvert - - libv4lconvert is a library that converts several -different pixelformats found in V4L2 drivers into a few common RGB and -YUY formats. - It currently accepts the following V4L2 driver formats: -V4L2_PIX_FMT_BGR24, -V4L2_PIX_FMT_HM12, -V4L2_PIX_FMT_JPEG, -V4L2_PIX_FMT_MJPEG, -V4L2_PIX_FMT_MR97310A, -V4L2_PIX_FMT_OV511, -V4L2_PIX_FMT_OV518, -V4L2_PIX_FMT_PAC207, -V4L2_PIX_FMT_PJPG, -V4L2_PIX_FMT_RGB24, -V4L2_PIX_FMT_SBGGR8, -V4L2_PIX_FMT_SGBRG8, -V4L2_PIX_FMT_SGRBG8, -V4L2_PIX_FMT_SN9C10X, -V4L2_PIX_FMT_SN9C20X_I420, -V4L2_PIX_FMT_SPCA501, -V4L2_PIX_FMT_SPCA505, -V4L2_PIX_FMT_SPCA508, -V4L2_PIX_FMT_SPCA561, -V4L2_PIX_FMT_SQ905C, -V4L2_PIX_FMT_SRGGB8, -V4L2_PIX_FMT_UYVY, -V4L2_PIX_FMT_YUV420, -V4L2_PIX_FMT_YUYV, -V4L2_PIX_FMT_YVU420, -and V4L2_PIX_FMT_YVYU. - - Later on libv4lconvert was expanded to also be able to do -various video processing functions to improve webcam video quality. -The video processing is split in to 2 parts: libv4lconvert/control and -libv4lconvert/processing. - - The control part is used to offer video controls which can -be used to control the video processing functions made available by - libv4lconvert/processing. These controls are stored application wide -(until reboot) by using a persistent shared memory object. - - libv4lconvert/processing offers the actual video -processing functionality. -
-
- libv4l1 - This library offers functions that can be used to quickly -make v4l1 applications work with v4l2 devices. These functions work exactly -like the normal open/close/etc, except that libv4l1 does full emulation of -the v4l1 api on top of v4l2 drivers, in case of v4l1 drivers it -will just pass calls through. - Since those functions are emulations of the old V4L1 API, -it shouldn't be used for new applications. -
-
- libv4l2 - This library should be used for all modern V4L2 -applications. - It provides handles to call V4L2 open/ioctl/close/poll -methods. Instead of just providing the raw output of the device, it enhances -the calls in the sense that it will use libv4lconvert to provide more video -formats and to enhance the image quality. - In most cases, libv4l2 just passes the calls directly -through to the v4l2 driver, intercepting the calls to -VIDIOC_TRY_FMT, -VIDIOC_G_FMT -VIDIOC_S_FMT -VIDIOC_ENUM_FRAMESIZES -and VIDIOC_ENUM_FRAMEINTERVALS -in order to emulate the formats -V4L2_PIX_FMT_BGR24, -V4L2_PIX_FMT_RGB24, -V4L2_PIX_FMT_YUV420, -and V4L2_PIX_FMT_YVU420, -if they aren't available in the driver. -VIDIOC_ENUM_FMT -keeps enumerating the hardware supported formats, plus the emulated formats -offered by libv4l at the end. - -
- Libv4l device control functions - The common file operation methods are provided by -libv4l. - Those functions operate just like glibc -open/close/dup/ioctl/read/mmap/munmap: - - int v4l2_open(const char *file, int oflag, -...) - -operates like the standard open() function. - - int v4l2_close(int fd) - -operates like the standard close() function. - - int v4l2_dup(int fd) - -operates like the standard dup() function, duplicating a file handler. - - int v4l2_ioctl (int fd, unsigned long int request, ...) - -operates like the standard ioctl() function. - - int v4l2_read (int fd, void* buffer, size_t n) - -operates like the standard read() function. - - void v4l2_mmap(void *start, size_t length, int prot, int flags, int fd, int64_t offset); - -operates like the standard mmap() function. - - int v4l2_munmap(void *_start, size_t length); - -operates like the standard munmap() function. - - - Those functions provide additional control: - - int v4l2_fd_open(int fd, int v4l2_flags) - -opens an already opened fd for further use through v4l2lib and possibly -modify libv4l2's default behavior through the v4l2_flags argument. -Currently, v4l2_flags can be V4L2_DISABLE_CONVERSION, -to disable format conversion. - - int v4l2_set_control(int fd, int cid, int value) - -This function takes a value of 0 - 65535, and then scales that range to -the actual range of the given v4l control id, and then if the cid exists -and is not locked sets the cid to the scaled value. - - int v4l2_get_control(int fd, int cid) - -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 -accessed for some reason, or some error occurred 0 is returned. - - -
-
-
- - v4l1compat.so wrapper library - - This library intercepts calls to -open/close/ioctl/mmap/mmunmap operations and redirects them to the libv4l -counterparts, by using LD_PRELOAD=/usr/lib/v4l1compat.so. It also -emulates V4L1 calls via V4L2 API. - It allows usage of binary legacy applications that -still don't use libv4l. -
- -
diff --git a/Documentation/DocBook/media/v4l/lirc_device_interface.xml b/Documentation/DocBook/media/v4l/lirc_device_interface.xml deleted file mode 100644 index f53ad58027a7..000000000000 --- a/Documentation/DocBook/media/v4l/lirc_device_interface.xml +++ /dev/null @@ -1,255 +0,0 @@ -
-LIRC Device Interface - - -
-Introduction - -The LIRC device interface is a bi-directional interface for -transporting raw IR data between userspace and kernelspace. Fundamentally, -it is just a chardev (/dev/lircX, for X = 0, 1, 2, ...), with a number -of standard struct file_operations defined on it. With respect to -transporting raw IR data to and fro, the essential fops are read, write -and ioctl. - -Example dmesg output upon a driver registering w/LIRC: -
- $ dmesg |grep lirc_dev - lirc_dev: IR Remote Control driver registered, major 248 - rc rc0: lirc_dev: driver ir-lirc-codec (mceusb) registered at minor = 0 -
- -What you should see for a chardev: -
- $ ls -l /dev/lirc* - crw-rw---- 1 root root 248, 0 Jul 2 22:20 /dev/lirc0 -
-
- -
-LIRC read fop - -The lircd userspace daemon reads raw IR data from the LIRC chardev. The -exact format of the data depends on what modes a driver supports, and what -mode has been selected. lircd obtains supported modes and sets the active mode -via the ioctl interface, detailed at . The generally -preferred mode is LIRC_MODE_MODE2, in which packets containing an int value -describing an IR signal are read from the chardev. - -See also http://www.lirc.org/html/technical.html for more info. -
- -
-LIRC write fop - -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 -data must start and end with a pulse, therefore, the data must always include -an uneven number of samples. The write function must block until the data has -been transmitted by the hardware. If more data is provided than the hardware -can send, the driver returns EINVAL. - -
- -
-LIRC ioctl fop - -The LIRC device's ioctl definition is bound by the ioctl function -definition of struct file_operations, leaving us with an unsigned int -for the ioctl command and an unsigned long for the arg. For the purposes -of ioctl portability across 32-bit and 64-bit, these values are capped -to their 32-bit sizes. - -The following ioctls can be used to change specific hardware settings. -In general each driver should have a default set of settings. The driver -implementation is expected to re-apply the default settings when the device -is closed by user-space, so that every application opening the device can rely -on working with the default settings initially. - - - - LIRC_GET_FEATURES - - Obviously, get the underlying hardware device's features. If a driver - does not announce support of certain features, calling of the corresponding - ioctls is undefined. - - - - LIRC_GET_SEND_MODE - - Get supported transmit mode. Only LIRC_MODE_PULSE is supported by lircd. - - - - LIRC_GET_REC_MODE - - Get supported receive modes. Only LIRC_MODE_MODE2 and LIRC_MODE_LIRCCODE - are supported by lircd. - - - - LIRC_GET_SEND_CARRIER - - Get carrier frequency (in Hz) currently used for transmit. - - - - LIRC_GET_REC_CARRIER - - Get carrier frequency (in Hz) currently used for IR reception. - - - - LIRC_{G,S}ET_{SEND,REC}_DUTY_CYCLE - - Get/set the duty cycle (from 0 to 100) of the carrier signal. Currently, - no special meaning is defined for 0 or 100, but this could be used to switch - off carrier generation in the future, so these values should be reserved. - - - - LIRC_GET_REC_RESOLUTION - - Some receiver have maximum resolution which is defined by internal - sample rate or data format limitations. E.g. it's common that signals can - only be reported in 50 microsecond steps. This integer value is used by - lircd to automatically adjust the steps tolerance value in the lircd - config file. - - - - LIRC_GET_M{IN,AX}_TIMEOUT - - Some devices have internal timers that can be used to detect when - there's no IR activity for a long time. This can help lircd in detecting - that a IR signal is finished and can speed up the decoding process. - Returns an integer value with the minimum/maximum timeout that can be - set. Some devices have a fixed timeout, in that case both ioctls will - return the same value even though the timeout cannot be changed. - - - - LIRC_GET_M{IN,AX}_FILTER_{PULSE,SPACE} - - Some devices are able to filter out spikes in the incoming signal - using given filter rules. These ioctls return the hardware capabilities - that describe the bounds of the possible filters. Filter settings depend - on the IR protocols that are expected. lircd derives the settings from - all protocols definitions found in its config file. - - - - LIRC_GET_LENGTH - - Retrieves the code length in bits (only for LIRC_MODE_LIRCCODE). - Reads on the device must be done in blocks matching the bit count. - The bit could should be rounded up so that it matches full bytes. - - - - LIRC_SET_{SEND,REC}_MODE - - Set send/receive mode. Largely obsolete for send, as only - LIRC_MODE_PULSE is supported. - - - - LIRC_SET_{SEND,REC}_CARRIER - - Set send/receive carrier (in Hz). Return 0 on success. - - - - LIRC_SET_TRANSMITTER_MASK - - This enables the given set of transmitters. The first transmitter - is encoded by the least significant bit, etc. When an invalid bit mask - is given, i.e. a bit is set, even though the device does not have so many - transitters, then this ioctl returns the number of available transitters - and does nothing otherwise. - - - - LIRC_SET_REC_TIMEOUT - - Sets the integer value for IR inactivity timeout (cf. - LIRC_GET_MIN_TIMEOUT and LIRC_GET_MAX_TIMEOUT). A value of 0 (if - supported by the hardware) disables all hardware timeouts and data should - be reported as soon as possible. If the exact value cannot be set, then - the next possible value _greater_ than the given value should be set. - - - - LIRC_SET_REC_TIMEOUT_REPORTS - - Enable (1) or disable (0) timeout reports in LIRC_MODE_MODE2. By - default, timeout reports should be turned off. - - - - LIRC_SET_REC_FILTER_{,PULSE,SPACE} - - Pulses/spaces shorter than this are filtered out by hardware. If - filters cannot be set independently for pulse/space, the corresponding - ioctls must return an error and LIRC_SET_REC_FILTER shall be used instead. - - - - LIRC_SET_MEASURE_CARRIER_MODE - - Enable (1)/disable (0) measure mode. If enabled, from the next key - press on, the driver will send LIRC_MODE2_FREQUENCY packets. By default - this should be turned off. - - - - LIRC_SET_REC_{DUTY_CYCLE,CARRIER}_RANGE - - To set a range use LIRC_SET_REC_DUTY_CYCLE_RANGE/LIRC_SET_REC_CARRIER_RANGE - with the lower bound first and later LIRC_SET_REC_DUTY_CYCLE/LIRC_SET_REC_CARRIER - with the upper bound. - - - - LIRC_NOTIFY_DECODE - - This ioctl is called by lircd whenever a successful decoding of an - incoming IR signal could be done. This can be used by supporting hardware - to give visual feedback to the user e.g. by flashing a LED. - - - - LIRC_SETUP_{START,END} - - Setting of several driver parameters can be optimized by encapsulating - the according ioctl calls with LIRC_SETUP_START/LIRC_SETUP_END. When a - driver receives a LIRC_SETUP_START ioctl it can choose to not commit - further setting changes to the hardware until a LIRC_SETUP_END is received. - But this is open to the driver implementation and every driver must also - handle parameter changes which are not encapsulated by LIRC_SETUP_START - and LIRC_SETUP_END. Drivers can also choose to ignore these ioctls. - - - - LIRC_SET_WIDEBAND_RECEIVER - - Some receivers are equipped with special wide band receiver which is intended - to be used to learn output of existing remote. - Calling that ioctl with (1) will enable it, and with (0) disable it. - This might be useful of receivers that have otherwise narrow band receiver - that prevents them to be used with some remotes. - Wide band receiver might also be more precise - On the other hand its disadvantage it usually reduced range of reception. - Note: wide band receiver might be implictly enabled if you enable - carrier reports. In that case it will be disabled as soon as you disable - carrier reports. Trying to disable wide band receiver while carrier - reports are active will do nothing. - - - -
- &return-value; -
-
-
diff --git a/Documentation/DocBook/media/v4l/media-controller.xml b/Documentation/DocBook/media/v4l/media-controller.xml deleted file mode 100644 index 5f2fc07a93d7..000000000000 --- a/Documentation/DocBook/media/v4l/media-controller.xml +++ /dev/null @@ -1,105 +0,0 @@ - - - - Laurent - Pinchart -
laurent.pinchart@ideasonboard.com
- Initial version. -
-
- - 2010 - Laurent Pinchart - - - - - - 1.0.0 - 2010-11-10 - lp - Initial revision - - -
- -Media Controller API - - - Media Controller - -
- Introduction - 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. - 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. - 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. - 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. - The media controller API aims at solving those problems. -
- -
- Media device model - 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 and Linux Kernel interfaces are modelled as graph objects on - an oriented graph. The object types that constitute the graph are: - - 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. - An interface - is a graph representation of a Linux Kernel userspace API interface, - like a device node or a sysfs file that controls one or more entities - in the graph. - A pad - is a data 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. - A data 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. - An interface link - is a point-to-point bidirectional control connection between a Linux - Kernel interface and an entity.m - -
- - - &sub-media-types; -
- - - Function Reference - - &sub-media-func-open; - &sub-media-func-close; - &sub-media-func-ioctl; - - &sub-media-ioc-device-info; - &sub-media-ioc-g-topology; - &sub-media-ioc-enum-entities; - &sub-media-ioc-enum-links; - &sub-media-ioc-setup-link; - diff --git a/Documentation/DocBook/media/v4l/media-func-close.xml b/Documentation/DocBook/media/v4l/media-func-close.xml deleted file mode 100644 index be149c802aeb..000000000000 --- a/Documentation/DocBook/media/v4l/media-func-close.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - media close() - &manvol; - - - - media-close - Close a media device - - - - - #include <unistd.h> - - int close - int fd - - - - - - Arguments - - - - fd - - &fd; - - - - - - - Description - - Closes the media device. Resources associated with the file descriptor - are freed. The device configuration remain unchanged. - - - - Return Value - - close returns 0 on success. On error, -1 is - returned, and errno is set appropriately. Possible error - codes are: - - - - EBADF - - fd is not a valid open file descriptor. - - - - - - diff --git a/Documentation/DocBook/media/v4l/media-func-ioctl.xml b/Documentation/DocBook/media/v4l/media-func-ioctl.xml deleted file mode 100644 index 39478d0fbcaa..000000000000 --- a/Documentation/DocBook/media/v4l/media-func-ioctl.xml +++ /dev/null @@ -1,73 +0,0 @@ - - - media ioctl() - &manvol; - - - - media-ioctl - Control a media device - - - - - #include <sys/ioctl.h> - - int ioctl - int fd - int request - void *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - Media ioctl request code as defined in the media.h header file, - for example MEDIA_IOC_SETUP_LINK. - - - - argp - - Pointer to a request-specific structure. - - - - - - - Description - The ioctl() function manipulates media device - parameters. The argument fd must be an open file - descriptor. - The ioctl request 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 - argp in bytes. - 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 - . - - - - &return-value; - - Request-specific error codes are listed in the - individual requests descriptions. - When an ioctl that takes an output or read/write parameter fails, - the parameter remains unmodified. - - diff --git a/Documentation/DocBook/media/v4l/media-func-open.xml b/Documentation/DocBook/media/v4l/media-func-open.xml deleted file mode 100644 index 122374a3e894..000000000000 --- a/Documentation/DocBook/media/v4l/media-func-open.xml +++ /dev/null @@ -1,94 +0,0 @@ - - - media open() - &manvol; - - - - media-open - Open a media device - - - - - #include <fcntl.h> - - int open - const char *device_name - int flags - - - - - - Arguments - - - - device_name - - Device to be opened. - - - - flags - - Open flags. Access mode must be either O_RDONLY - or O_RDWR. Other flags have no effect. - - - - - - Description - To open a media device applications call open() - with the desired device name. The function has no side effects; the device - configuration remain unchanged. - When the device is opened in read-only mode, attempts to modify its - configuration will result in an error, and errno will be - set to EBADF. - - - Return Value - - open returns the new file descriptor on success. - On error, -1 is returned, and errno is set appropriately. - Possible error codes are: - - - - EACCES - - The requested access to the file is not allowed. - - - - EMFILE - - The process already has the maximum number of files open. - - - - - ENFILE - - The system limit on the total number of open files has been - reached. - - - - ENOMEM - - Insufficient kernel memory was available. - - - - ENXIO - - No device corresponding to this device special file exists. - - - - - - diff --git a/Documentation/DocBook/media/v4l/media-ioc-device-info.xml b/Documentation/DocBook/media/v4l/media-ioc-device-info.xml deleted file mode 100644 index b0a21ac300b8..000000000000 --- a/Documentation/DocBook/media/v4l/media-ioc-device-info.xml +++ /dev/null @@ -1,132 +0,0 @@ - - - ioctl MEDIA_IOC_DEVICE_INFO - &manvol; - - - - MEDIA_IOC_DEVICE_INFO - Query device information - - - - - - int ioctl - int fd - int request - struct media_device_info *argp - - - - - - Arguments - - - - fd - - File descriptor returned by - open(). - - - - request - - MEDIA_IOC_DEVICE_INFO - - - - argp - - - - - - - - - Description - - All media devices must support the MEDIA_IOC_DEVICE_INFO - 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. - - - struct <structname>media_device_info</structname> - - &cs-str; - - - char - driver[16] - Name of the driver implementing the media API as a - NUL-terminated ASCII string. The driver version is stored in the - driver_version field. - 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. - - - char - model[32] - Device model name as a NUL-terminated UTF-8 string. The - device version is stored in the device_version - field and is not be appended to the model name. - - - char - serial[40] - Serial number as a NUL-terminated ASCII string. - - - char - bus_info[32] - 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. - - - __u32 - media_version - Media API version, formatted with the - KERNEL_VERSION() macro. - - - __u32 - hw_revision - Hardware device revision in a driver-specific format. - - - __u32 - driver_version - Media device driver version, formatted with the - KERNEL_VERSION() macro. Together with the - driver field this identifies a particular - driver. - - - __u32 - reserved[31] - Reserved for future extensions. Drivers and applications must - set this array to zero. - - - -
- The serial and bus_info - 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 - bus_info field can be used instead. The - bus_info field is guaranteed to be unique, but - can vary across reboots or device unplug/replug. -
- - - &return-value; - -
diff --git a/Documentation/DocBook/media/v4l/media-ioc-enum-entities.xml b/Documentation/DocBook/media/v4l/media-ioc-enum-entities.xml deleted file mode 100644 index 0c4f96bfc2de..000000000000 --- a/Documentation/DocBook/media/v4l/media-ioc-enum-entities.xml +++ /dev/null @@ -1,180 +0,0 @@ - - - ioctl MEDIA_IOC_ENUM_ENTITIES - &manvol; - - - - MEDIA_IOC_ENUM_ENTITIES - Enumerate entities and their properties - - - - - - int ioctl - int fd - int request - struct media_entity_desc *argp - - - - - - Arguments - - - - fd - - File descriptor returned by - open(). - - - - request - - MEDIA_IOC_ENUM_ENTITIES - - - - argp - - - - - - - - - Description - 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. - Entities can be enumerated by or'ing the id with the - MEDIA_ENT_ID_FLAG_NEXT 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. - Entity IDs can be non-contiguous. Applications must - not try to enumerate entities by calling - MEDIA_IOC_ENUM_ENTITIES with increasing id's until they get an error. - - - struct <structname>media_entity_desc</structname> - - - - - - - - - __u32 - id - - - Entity id, set by the application. When the id is or'ed with - MEDIA_ENT_ID_FLAG_NEXT, the driver clears the - flag and returns the first entity with a larger id. - - - char - name[32] - - - Entity name as an UTF-8 NULL-terminated string. - - - __u32 - type - - - Entity type, see for details. - - - __u32 - revision - - - Entity revision. Always zero (obsolete) - - - __u32 - flags - - - Entity flags, see for details. - - - __u32 - group_id - - - Entity group ID. Always zero (obsolete) - - - __u16 - pads - - - Number of pads - - - __u16 - links - - - Total number of outbound links. Inbound links are not counted - in this field. - - - union - - - - struct - dev - - Valid for (sub-)devices that create a single device node. - - - - - __u32 - major - Device node major number. - - - - - __u32 - minor - Device node minor number. - - - - __u8 - raw[184] - - - - - -
-
- - - &return-value; - - - - EINVAL - - The &media-entity-desc; id references - a non-existing entity. - - - - -
diff --git a/Documentation/DocBook/media/v4l/media-ioc-enum-links.xml b/Documentation/DocBook/media/v4l/media-ioc-enum-links.xml deleted file mode 100644 index 2bbeea9f3e18..000000000000 --- a/Documentation/DocBook/media/v4l/media-ioc-enum-links.xml +++ /dev/null @@ -1,160 +0,0 @@ - - - ioctl MEDIA_IOC_ENUM_LINKS - &manvol; - - - - MEDIA_IOC_ENUM_LINKS - Enumerate all pads and links for a given entity - - - - - - int ioctl - int fd - int request - struct media_links_enum *argp - - - - - - Arguments - - - - fd - - File descriptor returned by - open(). - - - - request - - MEDIA_IOC_ENUM_LINKS - - - - argp - - - - - - - - - Description - - 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 - pads and links fields. - They then call the MEDIA_IOC_ENUM_LINKS ioctl with a pointer to this - structure. - If the pads field is not NULL, the driver - fills the pads 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. - If the links field is not NULL, the driver - fills the links 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. - Only forward links that originate at one of the entity's source pads - are returned during the enumeration process. - - - struct <structname>media_links_enum</structname> - - &cs-str; - - - __u32 - entity - Entity id, set by the application. - - - &media-pad-desc; - *pads - Pointer to a pads array allocated by the application. Ignored - if NULL. - - - &media-link-desc; - *links - Pointer to a links array allocated by the application. Ignored - if NULL. - - - - - - - struct <structname>media_pad_desc</structname> - - &cs-str; - - - __u32 - entity - ID of the entity this pad belongs to. - - - __u16 - index - 0-based pad index. - - - __u32 - flags - Pad flags, see for more details. - - - -
- - - struct <structname>media_link_desc</structname> - - &cs-str; - - - &media-pad-desc; - source - Pad at the origin of this link. - - - &media-pad-desc; - sink - Pad at the target of this link. - - - __u32 - flags - Link flags, see for more details. - - - - - -
- - - &return-value; - - - - EINVAL - - The &media-links-enum; id references - a non-existing entity. - - - - -
diff --git a/Documentation/DocBook/media/v4l/media-ioc-g-topology.xml b/Documentation/DocBook/media/v4l/media-ioc-g-topology.xml deleted file mode 100644 index e0d49fa329f0..000000000000 --- a/Documentation/DocBook/media/v4l/media-ioc-g-topology.xml +++ /dev/null @@ -1,391 +0,0 @@ - - - ioctl MEDIA_IOC_G_TOPOLOGY - &manvol; - - - - MEDIA_IOC_G_TOPOLOGY - Enumerate the graph topology and graph element properties - - - - - - int ioctl - int fd - int request - struct media_v2_topology *argp - - - - - - Arguments - - - - fd - - File descriptor returned by - open(). - - - - request - - MEDIA_IOC_G_TOPOLOGY - - - - argp - - - - - - - - - Description - The typical usage of this ioctl is to call it twice. - On the first call, the structure defined at &media-v2-topology; should - be zeroed. At return, if no errors happen, this ioctl will return the - topology_version and the total number of entities, - interfaces, pads and links. - Before the second call, the userspace should allocate arrays to - store the graph elements that are desired, putting the pointers to them - at the ptr_entities, ptr_interfaces, ptr_links and/or ptr_pads, keeping - the other values untouched. - If the topology_version remains the same, the - ioctl should fill the desired arrays with the media graph elements. - - - struct <structname>media_v2_topology</structname> - - - - - - - - - __u64 - topology_version - - - Version of the media graph topology. When the graph is - created, this field starts with zero. Every time a graph - element is added or removed, this field is - incremented. - - - __u64 - num_entities - - - Number of entities in the graph - - - __u64 - ptr_entities - - - A pointer to a memory area where the entities array - will be stored, converted to a 64-bits integer. - It can be zero. if zero, the ioctl won't store the - entities. It will just update - num_entities - - - __u64 - num_interfaces - - - Number of interfaces in the graph - - - __u64 - ptr_interfaces - - - A pointer to a memory area where the interfaces array - will be stored, converted to a 64-bits integer. - It can be zero. if zero, the ioctl won't store the - interfaces. It will just update - num_interfaces - - - __u64 - num_pads - - - Total number of pads in the graph - - - __u64 - ptr_pads - - - A pointer to a memory area where the pads array - will be stored, converted to a 64-bits integer. - It can be zero. if zero, the ioctl won't store the - pads. It will just update - num_pads - - - __u64 - num_links - - - Total number of data and interface links in the graph - - - __u64 - ptr_links - - - A pointer to a memory area where the links array - will be stored, converted to a 64-bits integer. - It can be zero. if zero, the ioctl won't store the - links. It will just update - num_links - - - -
- - - struct <structname>media_v2_entity</structname> - - - - - - - - - __u32 - id - - - Unique ID for the entity. - - - char - name[64] - - - Entity name as an UTF-8 NULL-terminated string. - - - __u32 - function - - - Entity main function, see for details. - - - __u32 - reserved[12] - Reserved for future extensions. Drivers and applications must - set this array to zero. - - - -
- - - struct <structname>media_v2_interface</structname> - - - - - - - - - __u32 - id - - - Unique ID for the interface. - - - __u32 - intf_type - - - Interface type, see for details. - - - __u32 - flags - - - Interface flags. Currently unused. - - - __u32 - reserved[9] - - - Reserved for future extensions. Drivers and applications must - set this array to zero. - - - struct media_v2_intf_devnode - devnode - - - Used only for device node interfaces. See for details.. - - - -
- - - struct <structname>media_v2_interface</structname> - - - - - - - - - __u32 - major - - - Device node major number. - - - __u32 - minor - - - Device node minor number. - - - -
- - - struct <structname>media_v2_pad</structname> - - - - - - - - - __u32 - id - - - Unique ID for the pad. - - - __u32 - entity_id - - - Unique ID for the entity where this pad belongs. - - - __u32 - flags - - - Pad flags, see for more details. - - - __u32 - reserved[9] - - - Reserved for future extensions. Drivers and applications must - set this array to zero. - - - -
- - - struct <structname>media_v2_pad</structname> - - - - - - - - - __u32 - id - - - Unique ID for the pad. - - - __u32 - source_id - - - - On pad to pad links: unique ID for the source pad. - On interface to entity links: unique ID for the interface. - - - - __u32 - sink_id - - - - On pad to pad links: unique ID for the sink pad. - On interface to entity links: unique ID for the entity. - - - - __u32 - flags - - - Link flags, see for more details. - - - __u32 - reserved[5] - - - Reserved for future extensions. Drivers and applications must - set this array to zero. - - - - - -
- - - &return-value; - - - - ENOSPC - - This is returned when either one or more of the num_entities, - num_interfaces, num_links or num_pads are non-zero and are smaller - than the actual number of elements inside the graph. This may happen - if the topology_version changed when compared - to the last time this ioctl was called. Userspace should usually - free the area for the pointers, zero the struct elements and call - this ioctl again. - - - - -
diff --git a/Documentation/DocBook/media/v4l/media-ioc-setup-link.xml b/Documentation/DocBook/media/v4l/media-ioc-setup-link.xml deleted file mode 100644 index fc2e522ee65a..000000000000 --- a/Documentation/DocBook/media/v4l/media-ioc-setup-link.xml +++ /dev/null @@ -1,84 +0,0 @@ - - - ioctl MEDIA_IOC_SETUP_LINK - &manvol; - - - - MEDIA_IOC_SETUP_LINK - Modify the properties of a link - - - - - - int ioctl - int fd - int request - struct media_link_desc *argp - - - - - - Arguments - - - - fd - - File descriptor returned by - open(). - - - - request - - MEDIA_IOC_SETUP_LINK - - - - argp - - - - - - - - - Description - - 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. - The only configurable property is the ENABLED - link flag to enable/disable a link. Links marked with the - IMMUTABLE link flag can not be enabled or disabled. - - 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;. - Only links marked with the DYNAMIC link flag can - be enabled/disabled while streaming media data. Attempting to enable or - disable a streaming non-dynamic link will return an &EBUSY;. - If the specified link can't be found the driver returns with an - &EINVAL;. - - - - &return-value; - - - - EINVAL - - The &media-link-desc; references a non-existing link, or the - link is immutable and an attempt to modify its configuration was made. - - - - - - diff --git a/Documentation/DocBook/media/v4l/media-types.xml b/Documentation/DocBook/media/v4l/media-types.xml deleted file mode 100644 index 95aa1f9c836a..000000000000 --- a/Documentation/DocBook/media/v4l/media-types.xml +++ /dev/null @@ -1,379 +0,0 @@ -
-Types and flags used to represent the media graph elements - - - Media entity types - - - - - - MEDIA_ENT_F_UNKNOWN and MEDIA_ENT_F_V4L2_SUBDEV_UNKNOWN - Unknown entity. That generally indicates that - a driver didn't initialize properly the entity, with is a Kernel bug - - - MEDIA_ENT_F_IO_V4L - Data streaming input and/or output entity. - - - MEDIA_ENT_F_IO_VBI - V4L VBI streaming input or output entity - - - MEDIA_ENT_F_IO_SWRADIO - V4L Software Digital Radio (SDR) streaming input or output entity - - - MEDIA_ENT_F_IO_DTV - DVB Digital TV streaming input or output entity - - - MEDIA_ENT_F_DTV_DEMOD - Digital TV demodulator entity. - - - MEDIA_ENT_F_TS_DEMUX - MPEG Transport stream demux entity. Could be implemented on hardware or in Kernelspace by the Linux DVB subsystem. - - - MEDIA_ENT_F_DTV_CA - Digital TV Conditional Access module (CAM) entity - - - MEDIA_ENT_F_DTV_NET_DECAP - Digital TV network ULE/MLE desencapsulation entity. Could be implemented on hardware or in Kernelspace - - - MEDIA_ENT_F_CONN_RF - Connector for a Radio Frequency (RF) signal. - - - MEDIA_ENT_F_CONN_SVIDEO - Connector for a S-Video signal. - - - MEDIA_ENT_F_CONN_COMPOSITE - Connector for a RGB composite signal. - - - MEDIA_ENT_F_CAM_SENSOR - Camera video sensor entity. - - - MEDIA_ENT_F_FLASH - Flash controller entity. - - - MEDIA_ENT_F_LENS - Lens controller entity. - - - MEDIA_ENT_F_ATV_DECODER - Analog video decoder, the basic function of the video decoder - is to accept analogue video from a wide variety of sources such as - broadcast, DVD players, cameras and video cassette recorders, in - either NTSC, PAL, SECAM or HD format, separating the stream - into its component parts, luminance and chrominance, and output - it in some digital video standard, with appropriate timing - signals. - - - MEDIA_ENT_F_TUNER - Digital TV, analog TV, radio and/or software radio tuner, - with consists on a PLL tuning stage that converts radio - frequency (RF) signal into an Intermediate Frequency (IF). - Modern tuners have internally IF-PLL decoders for audio - and video, but older models have those stages implemented - on separate entities. - - - - MEDIA_ENT_F_IF_VID_DECODER - IF-PLL video decoder. It receives the IF from a PLL - and decodes the analog TV video signal. This is commonly - found on some very old analog tuners, like Philips MK3 - designs. They all contain a tda9887 (or some software - compatible similar chip, like tda9885). Those devices - use a different I2C address than the tuner PLL. - - - - MEDIA_ENT_F_IF_AUD_DECODER - IF-PLL sound decoder. It receives the IF from a PLL - and decodes the analog TV audio signal. This is commonly - found on some very old analog hardware, like Micronas - msp3400, Philips tda9840, tda985x, etc. Those devices - use a different I2C address than the tuner PLL and - should be controlled together with the IF-PLL video - decoder. - - - - MEDIA_ENT_F_AUDIO_CAPTURE - Audio Capture Function Entity. - - - MEDIA_ENT_F_AUDIO_PLAYBACK - Audio Playback Function Entity. - - - MEDIA_ENT_F_AUDIO_MIXER - Audio Mixer Function Entity. - - - MEDIA_ENT_F_PROC_VIDEO_COMPOSER - Video composer (blender). An entity capable of video - composing must have at least two sink pads and one source - pad, and composes input video frames onto output video - frames. Composition can be performed using alpha blending, - color keying, raster operations (ROP), stitching or any other - means. - - - - MEDIA_ENT_F_PROC_VIDEO_PIXEL_FORMATTER - Video pixel formatter. An entity capable of pixel formatting - must have at least one sink pad and one source pad. Read - pixel formatters read pixels from memory and perform a subset - of unpacking, cropping, color keying, alpha multiplication - and pixel encoding conversion. Write pixel formatters perform - a subset of dithering, pixel encoding conversion and packing - and write pixels to memory. - - - - MEDIA_ENT_F_PROC_VIDEO_PIXEL_ENC_CONV - Video pixel encoding converter. An entity capable of pixel - enconding conversion must have at least one sink pad and one - source pad, and convert the encoding of pixels received on - its sink pad(s) to a different encoding output on its source - pad(s). Pixel encoding conversion includes but isn't limited - to RGB to/from HSV, RGB to/from YUV and CFA (Bayer) to RGB - conversions. - - - - MEDIA_ENT_F_PROC_VIDEO_LUT - Video look-up table. An entity capable of video lookup table - processing must have one sink pad and one source pad. It uses - the values of the pixels received on its sink pad to look up - entries in internal tables and output them on its source pad. - The lookup processing can be performed on all components - separately or combine them for multi-dimensional table - lookups. - - - - MEDIA_ENT_F_PROC_VIDEO_SCALER - Video scaler. An entity capable of video scaling must have - at least one sink pad and one source pad, and scale the - video frame(s) received on its sink pad(s) to a different - resolution output on its source pad(s). The range of - supported scaling ratios is entity-specific and can differ - between the horizontal and vertical directions (in particular - scaling can be supported in one direction only). Binning and - skipping are considered as scaling. - - - - MEDIA_ENT_F_PROC_VIDEO_STATISTICS - Video statistics computation (histogram, 3A, ...). An entity - capable of statistics computation must have one sink pad and - one source pad. It computes statistics over the frames - received on its sink pad and outputs the statistics data on - its source pad. - - - - -
- - - Media entity flags - - - - - - MEDIA_ENT_FL_DEFAULT - Default entity for its type. Used to discover the default - audio, VBI and video devices, the default camera sensor, ... - - - MEDIA_ENT_FL_CONNECTOR - The entity represents a data conector - - - -
- - - Media interface types - - - - - - - MEDIA_INTF_T_DVB_FE - Device node interface for the Digital TV frontend - typically, /dev/dvb/adapter?/frontend? - - - MEDIA_INTF_T_DVB_DEMUX - Device node interface for the Digital TV demux - typically, /dev/dvb/adapter?/demux? - - - MEDIA_INTF_T_DVB_DVR - Device node interface for the Digital TV DVR - typically, /dev/dvb/adapter?/dvr? - - - MEDIA_INTF_T_DVB_CA - Device node interface for the Digital TV Conditional Access - typically, /dev/dvb/adapter?/ca? - - - MEDIA_INTF_T_DVB_FE - Device node interface for the Digital TV network control - typically, /dev/dvb/adapter?/net? - - - MEDIA_INTF_T_V4L_VIDEO - Device node interface for video (V4L) - typically, /dev/video? - - - MEDIA_INTF_T_V4L_VBI - Device node interface for VBI (V4L) - typically, /dev/vbi? - - - MEDIA_INTF_T_V4L_RADIO - Device node interface for radio (V4L) - typically, /dev/vbi? - - - MEDIA_INTF_T_V4L_SUBDEV - Device node interface for a V4L subdevice - typically, /dev/v4l-subdev? - - - MEDIA_INTF_T_V4L_SWRADIO - Device node interface for Software Defined Radio (V4L) - typically, /dev/swradio? - - - MEDIA_INTF_T_ALSA_PCM_CAPTURE - Device node interface for ALSA PCM Capture - typically, /dev/snd/pcmC?D?c - - - MEDIA_INTF_T_ALSA_PCM_PLAYBACK - Device node interface for ALSA PCM Playback - typically, /dev/snd/pcmC?D?p - - - MEDIA_INTF_T_ALSA_CONTROL - Device node interface for ALSA Control - typically, /dev/snd/controlC? - - - MEDIA_INTF_T_ALSA_COMPRESS - Device node interface for ALSA Compress - typically, /dev/snd/compr? - - - MEDIA_INTF_T_ALSA_RAWMIDI - Device node interface for ALSA Raw MIDI - typically, /dev/snd/midi? - - - MEDIA_INTF_T_ALSA_HWDEP - Device node interface for ALSA Hardware Dependent - typically, /dev/snd/hwC?D? - - - MEDIA_INTF_T_ALSA_SEQUENCER - Device node interface for ALSA Sequencer - typically, /dev/snd/seq - - - MEDIA_INTF_T_ALSA_TIMER - Device node interface for ALSA Timer - typically, /dev/snd/timer - - - -
- - - Media pad flags - - - - - - MEDIA_PAD_FL_SINK - Input pad, relative to the entity. Input pads sink data and - are targets of links. - - - MEDIA_PAD_FL_SOURCE - Output pad, relative to the entity. Output pads source data - and are origins of links. - - - MEDIA_PAD_FL_MUST_CONNECT - If this flag is set and the pad is linked to any other - pad, then at least one of those links must be enabled for the - entity to be able to stream. There could be temporary reasons - (e.g. device configuration dependent) for the pad to need - enabled links even when this flag isn't set; the absence of the - flag doesn't imply there is none. - - - -
- - One and only one of MEDIA_PAD_FL_SINK and - MEDIA_PAD_FL_SOURCE must be set for every pad. - - - Media link flags - - - - - - MEDIA_LNK_FL_ENABLED - 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. - - - MEDIA_LNK_FL_IMMUTABLE - The link enabled state can't be modified at runtime. An - immutable link is always enabled. - - - MEDIA_LNK_FL_DYNAMIC - The link enabled state can be modified during streaming. This - flag is set by drivers and is read-only for applications. - - - MEDIA_LNK_FL_LINK_TYPE - This is a bitmask that defines the type of the link. - Currently, two types of links are supported: - MEDIA_LNK_FL_DATA_LINK - if the link is between two pads - MEDIA_LNK_FL_INTERFACE_LINK - if the link is between an interface and an entity - - - - - -
diff --git a/Documentation/DocBook/media/v4l/pipeline.pdf b/Documentation/DocBook/media/v4l/pipeline.pdf deleted file mode 100644 index ee3e37f04b6a..000000000000 Binary files a/Documentation/DocBook/media/v4l/pipeline.pdf and /dev/null differ diff --git a/Documentation/DocBook/media/v4l/pixfmt-grey.xml b/Documentation/DocBook/media/v4l/pixfmt-grey.xml deleted file mode 100644 index bee970d3f76d..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-grey.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - V4L2_PIX_FMT_GREY ('GREY') - &manvol; - - - V4L2_PIX_FMT_GREY - Grey-scale image - - - Description - - This is a grey-scale image. It is really a degenerate -Y'CbCr format which simply contains no Cb or Cr data. - - - <constant>V4L2_PIX_FMT_GREY</constant> 4 × 4 -pixel image - - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - Y'00 - Y'01 - Y'02 - Y'03 - - - start + 4: - Y'10 - Y'11 - Y'12 - Y'13 - - - start + 8: - Y'20 - Y'21 - Y'22 - Y'23 - - - start + 12: - Y'30 - Y'31 - Y'32 - Y'33 - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-m420.xml b/Documentation/DocBook/media/v4l/pixfmt-m420.xml deleted file mode 100644 index aadae92c5d04..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-m420.xml +++ /dev/null @@ -1,139 +0,0 @@ - - - V4L2_PIX_FMT_M420 ('M420') - &manvol; - - - V4L2_PIX_FMT_M420 - Format with ½ horizontal and vertical chroma - resolution, also known as YUV 4:2:0. Hybrid plane line-interleaved - layout. - - - Description - - M420 is a YUV format with ½ horizontal and vertical chroma - subsampling (YUV 4:2:0). Pixels are organized as interleaved luma and - chroma planes. Two lines of luma data are followed by one line of chroma - data. - The luma plane has one byte per pixel. The chroma plane contains - interleaved CbCr pixels subsampled by ½ in the horizontal and - vertical directions. Each CbCr pair belongs to four pixels. For example, -Cb0/Cr0 belongs to -Y'00, Y'01, -Y'10, Y'11. - - All line lengths are identical: if the Y lines include pad bytes - so do the CbCr lines. - - - <constant>V4L2_PIX_FMT_M420</constant> 4 × 4 -pixel image - - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - Y'00 - Y'01 - Y'02 - Y'03 - - - start + 4: - Y'10 - Y'11 - Y'12 - Y'13 - - - start + 8: - Cb00 - Cr00 - Cb01 - Cr01 - - - start + 16: - Y'20 - Y'21 - Y'22 - Y'23 - - - start + 20: - Y'30 - Y'31 - Y'32 - Y'33 - - - start + 24: - Cb10 - Cr10 - Cb11 - Cr11 - - - - - - - - - Color Sample Location. - - - - - - - 01 - 23 - - - 0 - YY - YY - - - - C - C - - - 1 - YY - YY - - - - - - 2 - YY - YY - - - - C - C - - - 3 - YY - YY - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-nv12.xml b/Documentation/DocBook/media/v4l/pixfmt-nv12.xml deleted file mode 100644 index 84dd4fd7cb80..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-nv12.xml +++ /dev/null @@ -1,143 +0,0 @@ - - - V4L2_PIX_FMT_NV12 ('NV12'), V4L2_PIX_FMT_NV21 ('NV21') - &manvol; - - - V4L2_PIX_FMT_NV12 - V4L2_PIX_FMT_NV21 - Formats with ½ horizontal and vertical -chroma resolution, also known as YUV 4:2:0. One luminance and one -chrominance plane with alternating chroma samples as opposed to -V4L2_PIX_FMT_YVU420 - - - Description - - These are two-plane versions of the YUV 4:2:0 format. -The three components are separated into two sub-images or planes. The -Y plane is first. The Y plane has one byte per pixel. For -V4L2_PIX_FMT_NV12, a combined CbCr plane -immediately follows the Y plane in memory. 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, -Cb0/Cr0 belongs to -Y'00, Y'01, -Y'10, Y'11. -V4L2_PIX_FMT_NV21 is the same except the Cb and -Cr bytes are swapped, the CrCb plane starts with a Cr byte. - - If the Y plane has pad bytes after each row, then the -CbCr plane has as many pad bytes after its rows. - - - <constant>V4L2_PIX_FMT_NV12</constant> 4 × 4 -pixel image - - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - Y'00 - Y'01 - Y'02 - Y'03 - - - start + 4: - Y'10 - Y'11 - Y'12 - Y'13 - - - start + 8: - Y'20 - Y'21 - Y'22 - Y'23 - - - start + 12: - Y'30 - Y'31 - Y'32 - Y'33 - - - start + 16: - Cb00 - Cr00 - Cb01 - Cr01 - - - start + 20: - Cb10 - Cr10 - Cb11 - Cr11 - - - - - - - - - Color Sample Location. - - - - - - - 01 - 23 - - - 0 - YY - YY - - - - C - C - - - 1 - YY - YY - - - - - - 2 - YY - YY - - - - C - C - - - 3 - YY - YY - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-nv12m.xml b/Documentation/DocBook/media/v4l/pixfmt-nv12m.xml deleted file mode 100644 index f3a3d459fcdf..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-nv12m.xml +++ /dev/null @@ -1,153 +0,0 @@ - - - V4L2_PIX_FMT_NV12M ('NM12'), V4L2_PIX_FMT_NV21M ('NM21'), V4L2_PIX_FMT_NV12MT_16X16 - &manvol; - - - V4L2_PIX_FMT_NV12M - V4L2_PIX_FMT_NV21M - V4L2_PIX_FMT_NV12MT_16X16 - Variation of V4L2_PIX_FMT_NV12 and V4L2_PIX_FMT_NV21 with planes - non contiguous in memory. - - - Description - - 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. -V4L2_PIX_FMT_NV12M differs from V4L2_PIX_FMT_NV12 - 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, -Cb0/Cr0 belongs to -Y'00, Y'01, -Y'10, Y'11. -V4L2_PIX_FMT_NV12MT_16X16 is the tiled version of -V4L2_PIX_FMT_NV12M with 16x16 macroblock tiles. Here pixels -are arranged in 16x16 2D tiles and tiles are arranged in linear order in memory. -V4L2_PIX_FMT_NV21M is the same as V4L2_PIX_FMT_NV12M -except the Cb and Cr bytes are swapped, the CrCb plane starts with a Cr byte. - - V4L2_PIX_FMT_NV12M is intended to be -used only in drivers and applications that support the multi-planar API, -described in . - - If the Y plane has pad bytes after each row, then the -CbCr plane has as many pad bytes after its rows. - - - <constant>V4L2_PIX_FMT_NV12M</constant> 4 × 4 pixel image - - - Byte Order. - Each cell is one byte. - - - - - - start0 + 0: - Y'00 - Y'01 - Y'02 - Y'03 - - - start0 + 4: - Y'10 - Y'11 - Y'12 - Y'13 - - - start0 + 8: - Y'20 - Y'21 - Y'22 - Y'23 - - - start0 + 12: - Y'30 - Y'31 - Y'32 - Y'33 - - - - - - start1 + 0: - Cb00 - Cr00 - Cb01 - Cr01 - - - start1 + 4: - Cb10 - Cr10 - Cb11 - Cr11 - - - - - - - - - Color Sample Location. - - - - - - - 01 - 23 - - - 0 - YY - YY - - - - C - C - - - 1 - YY - YY - - - - - - 2 - YY - YY - - - - C - C - - - 3 - YY - YY - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-nv12mt.xml b/Documentation/DocBook/media/v4l/pixfmt-nv12mt.xml deleted file mode 100644 index 8a70a1707b7a..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-nv12mt.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - V4L2_PIX_FMT_NV12MT ('TM12') - &manvol; - - - V4L2_PIX_FMT_NV12MT - - 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 -V4L2_PIX_FMT_NV12 is the memory layout. Pixels are -grouped in macroblocks of 64x32 size. The order of macroblocks in memory is -also not standard. - - - - Description - - 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. - Width of the buffer has to be aligned to the multiple of 128, and -height alignment is 32. Every four adjacent buffers - two horizontally and two -vertically are grouped together and are located in memory in Z or flipped Z -order. - Layout of macroblocks in memory is presented in the following -figure. -
- <constant>V4L2_PIX_FMT_NV12MT</constant> macroblock Z shape -memory layout - - - - - -
- 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.
- In case of chroma the layout is identical. Cb and Cr samples are -interleaved. Height of the buffer is aligned to 32. - - - Memory layout of macroblocks in <constant>V4L2_PIX_FMT_NV12 -</constant> format pixel image - extreme case - -
- Example <constant>V4L2_PIX_FMT_NV12MT</constant> memory -layout of macroblocks - - - - - -
- Memory layout of macroblocks of V4L2_PIX_FMT_NV12MT - format in most extreme case. -
-
-
-
diff --git a/Documentation/DocBook/media/v4l/pixfmt-nv16.xml b/Documentation/DocBook/media/v4l/pixfmt-nv16.xml deleted file mode 100644 index 8ae1f8a810d0..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-nv16.xml +++ /dev/null @@ -1,166 +0,0 @@ - - - V4L2_PIX_FMT_NV16 ('NV16'), V4L2_PIX_FMT_NV61 ('NV61') - &manvol; - - - V4L2_PIX_FMT_NV16 - V4L2_PIX_FMT_NV61 - Formats with ½ horizontal -chroma resolution, also known as YUV 4:2:2. One luminance and one -chrominance plane with alternating chroma samples as opposed to -V4L2_PIX_FMT_YVU420 - - - Description - - These are two-plane versions of the YUV 4:2:2 format. -The three components are separated into two sub-images or planes. The -Y plane is first. The Y plane has one byte per pixel. For -V4L2_PIX_FMT_NV16, a combined CbCr plane -immediately follows the Y plane in memory. The CbCr plane is the same -width and height, in bytes, as the Y plane (and of the image). -Each CbCr pair belongs to two pixels. For example, -Cb0/Cr0 belongs to -Y'00, Y'01. -V4L2_PIX_FMT_NV61 is the same except the Cb and -Cr bytes are swapped, the CrCb plane starts with a Cr byte. - - If the Y plane has pad bytes after each row, then the -CbCr plane has as many pad bytes after its rows. - - - <constant>V4L2_PIX_FMT_NV16</constant> 4 × 4 -pixel image - - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - Y'00 - Y'01 - Y'02 - Y'03 - - - start + 4: - Y'10 - Y'11 - Y'12 - Y'13 - - - start + 8: - Y'20 - Y'21 - Y'22 - Y'23 - - - start + 12: - Y'30 - Y'31 - Y'32 - Y'33 - - - start + 16: - Cb00 - Cr00 - Cb01 - Cr01 - - - start + 20: - Cb10 - Cr10 - Cb11 - Cr11 - - - start + 24: - Cb20 - Cr20 - Cb21 - Cr21 - - - start + 28: - Cb30 - Cr30 - Cb31 - Cr31 - - - - - - - - - Color Sample Location. - - - - - - - 01 - 23 - - - 0 - YY - YY - - - - C - C - - - 1 - YY - YY - - - - C - C - - - - - - 2 - YY - YY - - - - C - C - - - 3 - YY - YY - - - - C - C - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-nv16m.xml b/Documentation/DocBook/media/v4l/pixfmt-nv16m.xml deleted file mode 100644 index fb2b5e35d665..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-nv16m.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - V4L2_PIX_FMT_NV16M ('NM16'), V4L2_PIX_FMT_NV61M ('NM61') - &manvol; - - - V4L2_PIX_FMT_NV16M - V4L2_PIX_FMT_NV61M - Variation of V4L2_PIX_FMT_NV16 and V4L2_PIX_FMT_NV61 with planes - non contiguous in memory. - - - Description - - This is a multi-planar, two-plane version of the YUV 4:2:2 format. -The three components are separated into two sub-images or planes. -V4L2_PIX_FMT_NV16M differs from V4L2_PIX_FMT_NV16 - in that the two planes are non-contiguous in memory, i.e. the chroma -plane does not necessarily immediately follow the luma plane. -The luminance data occupies the first plane. The Y plane has one byte per pixel. -In the second plane there is chrominance data with alternating chroma samples. -The CbCr plane is the same width and height, in bytes, as the Y plane. -Each CbCr pair belongs to two pixels. For example, -Cb0/Cr0 belongs to -Y'00, Y'01. -V4L2_PIX_FMT_NV61M is the same as V4L2_PIX_FMT_NV16M -except the Cb and Cr bytes are swapped, the CrCb plane starts with a Cr byte. - - V4L2_PIX_FMT_NV16M and -V4L2_PIX_FMT_NV61M are intended to be used only in drivers -and applications that support the multi-planar API, described in -. - - - <constant>V4L2_PIX_FMT_NV16M</constant> 4 × 4 pixel image - - - Byte Order. - Each cell is one byte. - - - - - - start0 + 0: - Y'00 - Y'01 - Y'02 - Y'03 - - - start0 + 4: - Y'10 - Y'11 - Y'12 - Y'13 - - - start0 + 8: - Y'20 - Y'21 - Y'22 - Y'23 - - - start0 + 12: - Y'30 - Y'31 - Y'32 - Y'33 - - - - - - start1 + 0: - Cb00 - Cr00 - Cb02 - Cr02 - - - start1 + 4: - Cb10 - Cr10 - Cb12 - Cr12 - - - start1 + 8: - Cb20 - Cr20 - Cb22 - Cr22 - - - start1 + 12: - Cb30 - Cr30 - Cb32 - Cr32 - - - - - - - - - Color Sample Location. - - - - - - - 01 - 23 - - - 0 - YY - YY - - - - C - C - - - 1 - YY - YY - - - - C - C - - - - - - 2 - YY - YY - - - - C - C - - - 3 - YY - YY - - - - C - C - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-nv24.xml b/Documentation/DocBook/media/v4l/pixfmt-nv24.xml deleted file mode 100644 index fb255f2ca9dd..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-nv24.xml +++ /dev/null @@ -1,121 +0,0 @@ - - - V4L2_PIX_FMT_NV24 ('NV24'), V4L2_PIX_FMT_NV42 ('NV42') - &manvol; - - - V4L2_PIX_FMT_NV24 - V4L2_PIX_FMT_NV42 - Formats with full horizontal and vertical -chroma resolutions, also known as YUV 4:4:4. One luminance and one -chrominance plane with alternating chroma samples as opposed to -V4L2_PIX_FMT_YVU420 - - - Description - - These are two-plane versions of the YUV 4:4:4 format. The three - components are separated into two sub-images or planes. The Y plane is - first, with each Y sample stored in one byte per pixel. For - V4L2_PIX_FMT_NV24, a combined CbCr plane - immediately follows the Y plane in memory. The CbCr plane has the same - width and height, in pixels, as the Y plane (and the image). Each line - contains one CbCr pair per pixel, with each Cb and Cr sample stored in - one byte. V4L2_PIX_FMT_NV42 is the same except that - the Cb and Cr samples are swapped, the CrCb plane starts with a Cr - sample. - - If the Y plane has pad bytes after each row, then the CbCr plane - has twice as many pad bytes after its rows. - - - <constant>V4L2_PIX_FMT_NV24</constant> 4 × 4 -pixel image - - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - Y'00 - Y'01 - Y'02 - Y'03 - - - start + 4: - Y'10 - Y'11 - Y'12 - Y'13 - - - start + 8: - Y'20 - Y'21 - Y'22 - Y'23 - - - start + 12: - Y'30 - Y'31 - Y'32 - Y'33 - - - start + 16: - Cb00 - Cr00 - Cb01 - Cr01 - Cb02 - Cr02 - Cb03 - Cr03 - - - start + 24: - Cb10 - Cr10 - Cb11 - Cr11 - Cb12 - Cr12 - Cb13 - Cr13 - - - start + 32: - Cb20 - Cr20 - Cb21 - Cr21 - Cb22 - Cr22 - Cb23 - Cr23 - - - start + 40: - Cb30 - Cr30 - Cb31 - Cr31 - Cb32 - Cr32 - Cb33 - Cr33 - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-packed-rgb.xml b/Documentation/DocBook/media/v4l/pixfmt-packed-rgb.xml deleted file mode 100644 index b60fb935b91b..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-packed-rgb.xml +++ /dev/null @@ -1,937 +0,0 @@ - - - Packed RGB formats - &manvol; - - - Packed RGB formats - Packed RGB formats - - - Description - - These formats are designed to match the pixel formats of -typical PC graphics frame buffers. They occupy 8, 16, 24 or 32 bits -per pixel. These are all packed-pixel formats, meaning all the data -for a pixel lie next to each other in memory. - - - Packed RGB Image Formats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Identifier - Code -   - Byte 0 in memory - Byte 1 - Byte 2 - Byte 3 - - -   -   - Bit - 7 - 6 - 5 - 4 - 3 - 2 - 1 - 0 -   - 7 - 6 - 5 - 4 - 3 - 2 - 1 - 0 -   - 7 - 6 - 5 - 4 - 3 - 2 - 1 - 0 -   - 7 - 6 - 5 - 4 - 3 - 2 - 1 - 0 - - - - - V4L2_PIX_FMT_RGB332 - 'RGB1' - - r2 - r1 - r0 - g2 - g1 - g0 - b1 - b0 - - - V4L2_PIX_FMT_ARGB444 - 'AR12' - - g3 - g2 - g1 - g0 - b3 - b2 - b1 - b0 - - a3 - a2 - a1 - a0 - r3 - r2 - r1 - r0 - - - V4L2_PIX_FMT_XRGB444 - 'XR12' - - g3 - g2 - g1 - g0 - b3 - b2 - b1 - b0 - - - - - - - - - - r3 - r2 - r1 - r0 - - - V4L2_PIX_FMT_ARGB555 - 'AR15' - - g2 - g1 - g0 - b4 - b3 - b2 - b1 - b0 - - a - r4 - r3 - r2 - r1 - r0 - g4 - g3 - - - V4L2_PIX_FMT_XRGB555 - 'XR15' - - g2 - g1 - g0 - b4 - b3 - b2 - b1 - b0 - - - - r4 - r3 - r2 - r1 - r0 - g4 - g3 - - - V4L2_PIX_FMT_RGB565 - 'RGBP' - - g2 - g1 - g0 - b4 - b3 - b2 - b1 - b0 - - r4 - r3 - r2 - r1 - r0 - g5 - g4 - g3 - - - V4L2_PIX_FMT_ARGB555X - 'AR15' | (1 << 31) - - a - r4 - r3 - r2 - r1 - r0 - g4 - g3 - - g2 - g1 - g0 - b4 - b3 - b2 - b1 - b0 - - - V4L2_PIX_FMT_XRGB555X - 'XR15' | (1 << 31) - - - - r4 - r3 - r2 - r1 - r0 - g4 - g3 - - g2 - g1 - g0 - b4 - b3 - b2 - b1 - b0 - - - V4L2_PIX_FMT_RGB565X - 'RGBR' - - r4 - r3 - r2 - r1 - r0 - g5 - g4 - g3 - - g2 - g1 - g0 - b4 - b3 - b2 - b1 - b0 - - - V4L2_PIX_FMT_BGR24 - 'BGR3' - - b7 - b6 - b5 - b4 - b3 - b2 - b1 - b0 - - g7 - g6 - g5 - g4 - g3 - g2 - g1 - g0 - - r7 - r6 - r5 - r4 - r3 - r2 - r1 - r0 - - - V4L2_PIX_FMT_RGB24 - 'RGB3' - - r7 - r6 - r5 - r4 - r3 - r2 - r1 - r0 - - g7 - g6 - g5 - g4 - g3 - g2 - g1 - g0 - - b7 - b6 - b5 - b4 - b3 - b2 - b1 - b0 - - - V4L2_PIX_FMT_BGR666 - 'BGRH' - - b5 - b4 - b3 - b2 - b1 - b0 - g5 - g4 - - g3 - g2 - g1 - g0 - r5 - r4 - r3 - r2 - - r1 - r0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - V4L2_PIX_FMT_ABGR32 - 'AR24' - - b7 - b6 - b5 - b4 - b3 - b2 - b1 - b0 - - g7 - g6 - g5 - g4 - g3 - g2 - g1 - g0 - - r7 - r6 - r5 - r4 - r3 - r2 - r1 - r0 - - a7 - a6 - a5 - a4 - a3 - a2 - a1 - a0 - - - V4L2_PIX_FMT_XBGR32 - 'XR24' - - b7 - b6 - b5 - b4 - b3 - b2 - b1 - b0 - - g7 - g6 - g5 - g4 - g3 - g2 - g1 - g0 - - r7 - r6 - r5 - r4 - r3 - r2 - r1 - r0 - - - - - - - - - - - - - - - - - - - - V4L2_PIX_FMT_ARGB32 - 'BA24' - - a7 - a6 - a5 - a4 - a3 - a2 - a1 - a0 - - r7 - r6 - r5 - r4 - r3 - r2 - r1 - r0 - - g7 - g6 - g5 - g4 - g3 - g2 - g1 - g0 - - b7 - b6 - b5 - b4 - b3 - b2 - b1 - b0 - - - V4L2_PIX_FMT_XRGB32 - 'BX24' - - - - - - - - - - - - - - - - - - - r7 - r6 - r5 - r4 - r3 - r2 - r1 - r0 - - g7 - g6 - g5 - g4 - g3 - g2 - g1 - g0 - - b7 - b6 - b5 - b4 - b3 - b2 - b1 - b0 - - - -
- - Bit 7 is the most significant bit. - - The usage and value of the alpha bits (a) in the ARGB and ABGR formats - (collectively referred to as alpha formats) depend on the device type and - hardware operation. Capture devices - (including capture queues of mem-to-mem devices) fill the alpha component in - memory. When the device outputs an alpha channel the alpha component will - have a meaningful value. Otherwise, when the device doesn't output an alpha - channel but can set the alpha bit to a user-configurable value, the V4L2_CID_ALPHA_COMPONENT - control is used to specify that alpha value, and the alpha component - of all pixels will be set to the value specified by that control. Otherwise - a corresponding format without an alpha component (XRGB or XBGR) must be - used instead of an alpha format. - - Output devices (including output queues - of mem-to-mem devices and video output overlay - devices) read the alpha component from memory. When the device processes the - alpha channel the alpha component must be filled with meaningful values by - applications. Otherwise a corresponding format without an alpha component - (XRGB or XBGR) must be used instead of an alpha format. - - The XRGB and XBGR formats contain undefined bits (-). Applications, - devices and drivers must ignore those bits, for both capture and output - devices. - - - <constant>V4L2_PIX_FMT_BGR24</constant> 4 × 4 pixel -image - - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - B00 - G00 - R00 - B01 - G01 - R01 - B02 - G02 - R02 - B03 - G03 - R03 - - - start + 12: - B10 - G10 - R10 - B11 - G11 - R11 - B12 - G12 - R12 - B13 - G13 - R13 - - - start + 24: - B20 - G20 - R20 - B21 - G21 - R21 - B22 - G22 - R22 - B23 - G23 - R23 - - - start + 36: - B30 - G30 - R30 - B31 - G31 - R31 - B32 - G32 - R32 - B33 - G33 - R33 - - - - - - - - - Formats defined in are - deprecated and must not be used by new drivers. They are documented here for - reference. The meaning of their alpha bits (a) is ill-defined and - interpreted as in either the corresponding ARGB or XRGB format, depending on - the driver. - - - Deprecated Packed RGB Image Formats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Identifier - Code -   - Byte 0 in memory - Byte 1 - Byte 2 - Byte 3 - - -   -   - Bit - 7 - 6 - 5 - 4 - 3 - 2 - 1 - 0 -   - 7 - 6 - 5 - 4 - 3 - 2 - 1 - 0 -   - 7 - 6 - 5 - 4 - 3 - 2 - 1 - 0 -   - 7 - 6 - 5 - 4 - 3 - 2 - 1 - 0 - - - - - V4L2_PIX_FMT_RGB444 - 'R444' - - g3 - g2 - g1 - g0 - b3 - b2 - b1 - b0 - - a3 - a2 - a1 - a0 - r3 - r2 - r1 - r0 - - - V4L2_PIX_FMT_RGB555 - 'RGBO' - - g2 - g1 - g0 - b4 - b3 - b2 - b1 - b0 - - a - r4 - r3 - r2 - r1 - r0 - g4 - g3 - - - V4L2_PIX_FMT_RGB555X - 'RGBQ' - - a - r4 - r3 - r2 - r1 - r0 - g4 - g3 - - g2 - g1 - g0 - b4 - b3 - b2 - b1 - b0 - - - V4L2_PIX_FMT_BGR32 - 'BGR4' - - b7 - b6 - b5 - b4 - b3 - b2 - b1 - b0 - - g7 - g6 - g5 - g4 - g3 - g2 - g1 - g0 - - r7 - r6 - r5 - r4 - r3 - r2 - r1 - r0 - - a7 - a6 - a5 - a4 - a3 - a2 - a1 - a0 - - - V4L2_PIX_FMT_RGB32 - 'RGB4' - - a7 - a6 - a5 - a4 - a3 - a2 - a1 - a0 - - r7 - r6 - r5 - r4 - r3 - r2 - r1 - r0 - - g7 - g6 - g5 - g4 - g3 - g2 - g1 - g0 - - b7 - b6 - b5 - b4 - b3 - b2 - b1 - b0 - - - -
- - A test utility to determine which RGB formats a driver -actually supports is available from the LinuxTV v4l-dvb repository. -See &v4l-dvb; for access instructions. - -
-
diff --git a/Documentation/DocBook/media/v4l/pixfmt-packed-yuv.xml b/Documentation/DocBook/media/v4l/pixfmt-packed-yuv.xml deleted file mode 100644 index 33fa5a47a865..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-packed-yuv.xml +++ /dev/null @@ -1,236 +0,0 @@ - - - Packed YUV formats - &manvol; - - - Packed YUV formats - Packed YUV formats - - - Description - - Similar to the packed RGB formats these formats store -the Y, Cb and Cr component of each pixel in one 16 or 32 bit -word. - - - Packed YUV Image Formats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Identifier - Code -   - Byte 0 in memory - Byte 1 - Byte 2 - Byte 3 - - -   -   - Bit - 7 - 6 - 5 - 4 - 3 - 2 - 1 - 0 -   - 7 - 6 - 5 - 4 - 3 - 2 - 1 - 0 -   - 7 - 6 - 5 - 4 - 3 - 2 - 1 - 0 -   - 7 - 6 - 5 - 4 - 3 - 2 - 1 - 0 - - - - - V4L2_PIX_FMT_YUV444 - 'Y444' - - Cb3 - Cb2 - Cb1 - Cb0 - Cr3 - Cr2 - Cr1 - Cr0 - - a3 - a2 - a1 - a0 - Y'3 - Y'2 - Y'1 - Y'0 - - - - V4L2_PIX_FMT_YUV555 - 'YUVO' - - Cb2 - Cb1 - Cb0 - Cr4 - Cr3 - Cr2 - Cr1 - Cr0 - - a - Y'4 - Y'3 - Y'2 - Y'1 - Y'0 - Cb4 - Cb3 - - - - V4L2_PIX_FMT_YUV565 - 'YUVP' - - Cb2 - Cb1 - Cb0 - Cr4 - Cr3 - Cr2 - Cr1 - Cr0 - - Y'4 - Y'3 - Y'2 - Y'1 - Y'0 - Cb5 - Cb4 - Cb3 - - - - V4L2_PIX_FMT_YUV32 - 'YUV4' - - a7 - a6 - a5 - a4 - a3 - a2 - a1 - a0 - - Y'7 - Y'6 - Y'5 - Y'4 - Y'3 - Y'2 - Y'1 - Y'0 - - Cb7 - Cb6 - Cb5 - Cb4 - Cb3 - Cb2 - Cb1 - Cb0 - - Cr7 - Cr6 - Cr5 - Cr4 - Cr3 - Cr2 - Cr1 - Cr0 - - - -
- - Bit 7 is the most significant bit. The value of a = alpha -bits is undefined when reading from the driver, ignored when writing -to the driver, except when alpha blending has been negotiated for a -Video Overlay or Video Output Overlay. - -
-
diff --git a/Documentation/DocBook/media/v4l/pixfmt-sbggr16.xml b/Documentation/DocBook/media/v4l/pixfmt-sbggr16.xml deleted file mode 100644 index 6494b05d84a1..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-sbggr16.xml +++ /dev/null @@ -1,83 +0,0 @@ - - - V4L2_PIX_FMT_SBGGR16 ('BYR2') - &manvol; - - - V4L2_PIX_FMT_SBGGR16 - Bayer RGB format - - - Description - - This format is similar to -V4L2_PIX_FMT_SBGGR8, except each pixel has -a depth of 16 bits. The least significant byte is stored at lower -memory addresses (little-endian). Note the actual sampling precision -may be lower than 16 bits, for example 10 bits per pixel with values -in range 0 to 1023. - - - <constant>V4L2_PIX_FMT_SBGGR16</constant> 4 × 4 -pixel image - - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - B00low - B00high - G01low - G01high - B02low - B02high - G03low - G03high - - - start + 8: - G10low - G10high - R11low - R11high - G12low - G12high - R13low - R13high - - - start + 16: - B20low - B20high - G21low - G21high - B22low - B22high - G23low - G23high - - - start + 24: - G30low - G30high - R31low - R31high - G32low - G32high - R33low - R33high - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-sbggr8.xml b/Documentation/DocBook/media/v4l/pixfmt-sbggr8.xml deleted file mode 100644 index 5eaf2b42d3f7..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-sbggr8.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - V4L2_PIX_FMT_SBGGR8 ('BA81') - &manvol; - - - V4L2_PIX_FMT_SBGGR8 - Bayer RGB format - - - Description - - This is commonly the native format of digital cameras, -reflecting the arrangement of sensors on the CCD device. Only one red, -green or blue value is given for each pixel. Missing components must -be interpolated from neighbouring pixels. From left to right the first -row consists of a blue and green value, the second row of a green and -red value. This scheme repeats to the right and down for every two -columns and rows. - - - <constant>V4L2_PIX_FMT_SBGGR8</constant> 4 × 4 -pixel image - - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - B00 - G01 - B02 - G03 - - - start + 4: - G10 - R11 - G12 - R13 - - - start + 8: - B20 - G21 - B22 - G23 - - - start + 12: - G30 - R31 - G32 - R33 - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-sdr-cs08.xml b/Documentation/DocBook/media/v4l/pixfmt-sdr-cs08.xml deleted file mode 100644 index 6118d8f7a20c..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-sdr-cs08.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - V4L2_SDR_FMT_CS8 ('CS08') - &manvol; - - - - V4L2_SDR_FMT_CS8 - - Complex signed 8-bit IQ sample - - - Description - -This format contains sequence of complex number samples. Each complex number -consist two parts, called In-phase and Quadrature (IQ). Both I and Q are -represented as a 8 bit signed number. I value comes first and Q value after -that. - - - <constant>V4L2_SDR_FMT_CS8</constant> 1 sample - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - I'0 - - - start + 1: - Q'0 - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-sdr-cs14le.xml b/Documentation/DocBook/media/v4l/pixfmt-sdr-cs14le.xml deleted file mode 100644 index e4b494ce1369..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-sdr-cs14le.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - V4L2_SDR_FMT_CS14LE ('CS14') - &manvol; - - - - V4L2_SDR_FMT_CS14LE - - Complex signed 14-bit little endian IQ sample - - - Description - -This format contains sequence of complex number samples. Each complex number -consist two parts, called In-phase and Quadrature (IQ). Both I and Q are -represented as a 14 bit signed little endian number. I value comes first -and Q value after that. 14 bit value is stored in 16 bit space with unused -high bits padded with 0. - - - <constant>V4L2_SDR_FMT_CS14LE</constant> 1 sample - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - I'0[7:0] - I'0[13:8] - - - start + 2: - Q'0[7:0] - Q'0[13:8] - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-sdr-cu08.xml b/Documentation/DocBook/media/v4l/pixfmt-sdr-cu08.xml deleted file mode 100644 index 2d80104c178b..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-sdr-cu08.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - V4L2_SDR_FMT_CU8 ('CU08') - &manvol; - - - - V4L2_SDR_FMT_CU8 - - Complex unsigned 8-bit IQ sample - - - Description - -This format contains sequence of complex number samples. Each complex number -consist two parts, called In-phase and Quadrature (IQ). Both I and Q are -represented as a 8 bit unsigned number. I value comes first and Q value after -that. - - - <constant>V4L2_SDR_FMT_CU8</constant> 1 sample - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - I'0 - - - start + 1: - Q'0 - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-sdr-cu16le.xml b/Documentation/DocBook/media/v4l/pixfmt-sdr-cu16le.xml deleted file mode 100644 index 26288ffa9071..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-sdr-cu16le.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - V4L2_SDR_FMT_CU16LE ('CU16') - &manvol; - - - - V4L2_SDR_FMT_CU16LE - - Complex unsigned 16-bit little endian IQ sample - - - Description - -This format contains sequence of complex number samples. Each complex number -consist two parts, called In-phase and Quadrature (IQ). Both I and Q are -represented as a 16 bit unsigned little endian number. I value comes first -and Q value after that. - - - <constant>V4L2_SDR_FMT_CU16LE</constant> 1 sample - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - I'0[7:0] - I'0[15:8] - - - start + 2: - Q'0[7:0] - Q'0[15:8] - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-sdr-ru12le.xml b/Documentation/DocBook/media/v4l/pixfmt-sdr-ru12le.xml deleted file mode 100644 index 3df076b99f94..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-sdr-ru12le.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - V4L2_SDR_FMT_RU12LE ('RU12') - &manvol; - - - - V4L2_SDR_FMT_RU12LE - - Real unsigned 12-bit little endian sample - - - Description - -This format contains sequence of real number samples. Each sample is -represented as a 12 bit unsigned little endian number. Sample is stored -in 16 bit space with unused high bits padded with 0. - - - <constant>V4L2_SDR_FMT_RU12LE</constant> 1 sample - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - I'0[7:0] - I'0[11:8] - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-sgbrg8.xml b/Documentation/DocBook/media/v4l/pixfmt-sgbrg8.xml deleted file mode 100644 index fee65dca79c5..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-sgbrg8.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - V4L2_PIX_FMT_SGBRG8 ('GBRG') - &manvol; - - - V4L2_PIX_FMT_SGBRG8 - Bayer RGB format - - - Description - - This is commonly the native format of digital cameras, -reflecting the arrangement of sensors on the CCD device. Only one red, -green or blue value is given for each pixel. Missing components must -be interpolated from neighbouring pixels. From left to right the first -row consists of a green and blue value, the second row of a red and -green value. This scheme repeats to the right and down for every two -columns and rows. - - - <constant>V4L2_PIX_FMT_SGBRG8</constant> 4 × 4 -pixel image - - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - G00 - B01 - G02 - B03 - - - start + 4: - R10 - G11 - R12 - G13 - - - start + 8: - G20 - B21 - G22 - B23 - - - start + 12: - R30 - G31 - R32 - G33 - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-sgrbg8.xml b/Documentation/DocBook/media/v4l/pixfmt-sgrbg8.xml deleted file mode 100644 index 7803b8c41b45..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-sgrbg8.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - V4L2_PIX_FMT_SGRBG8 ('GRBG') - &manvol; - - - V4L2_PIX_FMT_SGRBG8 - Bayer RGB format - - - Description - - This is commonly the native format of digital cameras, -reflecting the arrangement of sensors on the CCD device. Only one red, -green or blue value is given for each pixel. Missing components must -be interpolated from neighbouring pixels. From left to right the first -row consists of a green and blue value, the second row of a red and -green value. This scheme repeats to the right and down for every two -columns and rows. - - - <constant>V4L2_PIX_FMT_SGRBG8</constant> 4 × -4 pixel image - - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - G00 - R01 - G02 - R03 - - - start + 4: - B10 - G11 - B12 - G13 - - - start + 8: - G20 - R21 - G22 - R23 - - - start + 12: - B30 - G31 - B32 - G33 - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-srggb10.xml b/Documentation/DocBook/media/v4l/pixfmt-srggb10.xml deleted file mode 100644 index f34d03ebda3a..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-srggb10.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - V4L2_PIX_FMT_SRGGB10 ('RG10'), - V4L2_PIX_FMT_SGRBG10 ('BA10'), - V4L2_PIX_FMT_SGBRG10 ('GB10'), - V4L2_PIX_FMT_SBGGR10 ('BG10'), - - &manvol; - - - V4L2_PIX_FMT_SRGGB10 - V4L2_PIX_FMT_SGRBG10 - V4L2_PIX_FMT_SGBRG10 - V4L2_PIX_FMT_SBGGR10 - 10-bit Bayer formats expanded to 16 bits - - - Description - - These four pixel formats are raw sRGB / Bayer formats with -10 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 - - - <constant>V4L2_PIX_FMT_SBGGR10</constant> 4 × 4 -pixel image - - - Byte Order. - Each cell is one byte, high 6 bits in high bytes are 0. - - - - - - start + 0: - B00low - B00high - G01low - G01high - B02low - B02high - G03low - G03high - - - start + 8: - G10low - G10high - R11low - R11high - G12low - G12high - R13low - R13high - - - start + 16: - B20low - B20high - G21low - G21high - B22low - B22high - G23low - G23high - - - start + 24: - G30low - G30high - R31low - R31high - G32low - G32high - R33low - R33high - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-srggb10alaw8.xml b/Documentation/DocBook/media/v4l/pixfmt-srggb10alaw8.xml deleted file mode 100644 index d2e5845e57fb..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-srggb10alaw8.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - V4L2_PIX_FMT_SBGGR10ALAW8 ('aBA8'), - V4L2_PIX_FMT_SGBRG10ALAW8 ('aGA8'), - V4L2_PIX_FMT_SGRBG10ALAW8 ('agA8'), - V4L2_PIX_FMT_SRGGB10ALAW8 ('aRA8'), - - &manvol; - - - - V4L2_PIX_FMT_SBGGR10ALAW8 - - - V4L2_PIX_FMT_SGBRG10ALAW8 - - - V4L2_PIX_FMT_SGRBG10ALAW8 - - - V4L2_PIX_FMT_SRGGB10ALAW8 - - 10-bit Bayer formats compressed to 8 bits - - - Description - These four pixel formats are raw sRGB / Bayer - formats with 10 bits per color compressed to 8 bits each, - using the A-LAW algorithm. Each color component consumes 8 - bits of memory. In other respects this format is similar to - . - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-srggb10dpcm8.xml b/Documentation/DocBook/media/v4l/pixfmt-srggb10dpcm8.xml deleted file mode 100644 index bde89878c5c5..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-srggb10dpcm8.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - V4L2_PIX_FMT_SBGGR10DPCM8 ('bBA8'), - V4L2_PIX_FMT_SGBRG10DPCM8 ('bGA8'), - V4L2_PIX_FMT_SGRBG10DPCM8 ('BD10'), - V4L2_PIX_FMT_SRGGB10DPCM8 ('bRA8'), - - &manvol; - - - V4L2_PIX_FMT_SBGGR10DPCM8 - V4L2_PIX_FMT_SGBRG10DPCM8 - V4L2_PIX_FMT_SGRBG10DPCM8 - V4L2_PIX_FMT_SRGGB10DPCM8 - 10-bit Bayer formats compressed to 8 bits - - - Description - - These four pixel formats are raw sRGB / Bayer formats - with 10 bits per colour compressed to 8 bits each, using DPCM - compression. DPCM, differential pulse-code modulation, is lossy. - Each colour component consumes 8 bits of memory. In other respects - this format is similar to . - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-srggb10p.xml b/Documentation/DocBook/media/v4l/pixfmt-srggb10p.xml deleted file mode 100644 index a8cc102cde4f..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-srggb10p.xml +++ /dev/null @@ -1,99 +0,0 @@ - - - V4L2_PIX_FMT_SRGGB10P ('pRAA'), - V4L2_PIX_FMT_SGRBG10P ('pgAA'), - V4L2_PIX_FMT_SGBRG10P ('pGAA'), - V4L2_PIX_FMT_SBGGR10P ('pBAA'), - - &manvol; - - - V4L2_PIX_FMT_SRGGB10P - V4L2_PIX_FMT_SGRBG10P - V4L2_PIX_FMT_SGBRG10P - V4L2_PIX_FMT_SBGGR10P - 10-bit packed Bayer formats - - - Description - - These four pixel formats are packed raw sRGB / - Bayer formats with 10 bits per colour. Every four consecutive - colour components are packed into 5 bytes. Each of the first 4 - bytes contain the 8 high order bits of the pixels, and the - fifth byte contains the two least significants bits of each - pixel, in the same order. - - Each n-pixel row contains n/2 green samples and n/2 blue - or red samples, with alternating green-red and green-blue - rows. They are conventionally described as GRGR... BGBG..., - RGRG... GBGB..., etc. Below is an example of one of these - formats: - - - <constant>V4L2_PIX_FMT_SBGGR10P</constant> 4 × 4 - pixel image - - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - B00high - G01high - B02high - G03high - B00low(bits 7--6) - G01low(bits 5--4) - B02low(bits 3--2) - G03low(bits 1--0) - - - - start + 5: - G10high - R11high - G12high - R13high - G10low(bits 7--6) - R11low(bits 5--4) - G12low(bits 3--2) - R13low(bits 1--0) - - - - start + 10: - B20high - G21high - B22high - G23high - B20low(bits 7--6) - G21low(bits 5--4) - B22low(bits 3--2) - G23low(bits 1--0) - - - - start + 15: - G30high - R31high - G32high - R33high - G30low(bits 7--6) - R31low(bits 5--4) - G32low(bits 3--2) - R33low(bits 1--0) - - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-srggb12.xml b/Documentation/DocBook/media/v4l/pixfmt-srggb12.xml deleted file mode 100644 index 0c8e4adf417f..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-srggb12.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - V4L2_PIX_FMT_SRGGB12 ('RG12'), - V4L2_PIX_FMT_SGRBG12 ('BA12'), - V4L2_PIX_FMT_SGBRG12 ('GB12'), - V4L2_PIX_FMT_SBGGR12 ('BG12'), - - &manvol; - - - V4L2_PIX_FMT_SRGGB12 - V4L2_PIX_FMT_SGRBG12 - V4L2_PIX_FMT_SGBRG12 - V4L2_PIX_FMT_SBGGR12 - 12-bit Bayer formats expanded to 16 bits - - - Description - - These four pixel formats are raw sRGB / Bayer formats with -12 bits per colour. Each colour component is stored in a 16-bit word, with 4 -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 - - - <constant>V4L2_PIX_FMT_SBGGR12</constant> 4 × 4 -pixel image - - - Byte Order. - Each cell is one byte, high 6 bits in high bytes are 0. - - - - - - start + 0: - B00low - B00high - G01low - G01high - B02low - B02high - G03low - G03high - - - start + 8: - G10low - G10high - R11low - R11high - G12low - G12high - R13low - R13high - - - start + 16: - B20low - B20high - G21low - G21high - B22low - B22high - G23low - G23high - - - start + 24: - G30low - G30high - R31low - R31high - G32low - G32high - R33low - R33high - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-srggb8.xml b/Documentation/DocBook/media/v4l/pixfmt-srggb8.xml deleted file mode 100644 index 2570e3be3cf1..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-srggb8.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - V4L2_PIX_FMT_SRGGB8 ('RGGB') - &manvol; - - - V4L2_PIX_FMT_SRGGB8 - Bayer RGB format - - - Description - - This is commonly the native format of digital cameras, -reflecting the arrangement of sensors on the CCD device. Only one red, -green or blue value is given for each pixel. Missing components must -be interpolated from neighbouring pixels. From left to right the first -row consists of a red and green value, the second row of a green and -blue value. This scheme repeats to the right and down for every two -columns and rows. - - - <constant>V4L2_PIX_FMT_SRGGB8</constant> 4 × 4 -pixel image - - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - R00 - G01 - R02 - G03 - - - start + 4: - G10 - B11 - G12 - B13 - - - start + 8: - R20 - G21 - R22 - G23 - - - start + 12: - G30 - B31 - G32 - B33 - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-uv8.xml b/Documentation/DocBook/media/v4l/pixfmt-uv8.xml deleted file mode 100644 index c507c1f73cd0..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-uv8.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - V4L2_PIX_FMT_UV8 ('UV8') - &manvol; - - - V4L2_PIX_FMT_UV8 - UV plane interleaved - - - Description - In this format there is no Y plane, Only CbCr plane. ie - (UV interleaved) - - - <constant>V4L2_PIX_FMT_UV8</constant> - pixel image - - - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - Cb00 - Cr00 - Cb01 - Cr01 - - - start + 4: - Cb10 - Cr10 - Cb11 - Cr11 - - - start + 8: - Cb20 - Cr20 - Cb21 - Cr21 - - - start + 12: - Cb30 - Cr30 - Cb31 - Cr31 - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-uyvy.xml b/Documentation/DocBook/media/v4l/pixfmt-uyvy.xml deleted file mode 100644 index b1f6801a17ff..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-uyvy.xml +++ /dev/null @@ -1,120 +0,0 @@ - - - V4L2_PIX_FMT_UYVY ('UYVY') - &manvol; - - - V4L2_PIX_FMT_UYVY - Variation of -V4L2_PIX_FMT_YUYV with different order of samples -in memory - - - Description - - In this format each four bytes is two pixels. Each four -bytes is two Y's, a Cb and a Cr. Each Y goes to one of the pixels, and -the Cb and Cr belong to both pixels. As you can see, the Cr and Cb -components have half the horizontal resolution of the Y -component. - - - <constant>V4L2_PIX_FMT_UYVY</constant> 4 × 4 -pixel image - - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - Cb00 - Y'00 - Cr00 - Y'01 - Cb01 - Y'02 - Cr01 - Y'03 - - - start + 8: - Cb10 - Y'10 - Cr10 - Y'11 - Cb11 - Y'12 - Cr11 - Y'13 - - - start + 16: - Cb20 - Y'20 - Cr20 - Y'21 - Cb21 - Y'22 - Cr21 - Y'23 - - - start + 24: - Cb30 - Y'30 - Cr30 - Y'31 - Cb31 - Y'32 - Cr31 - Y'33 - - - - - - - - - Color Sample Location. - - - - - - - 01 - 23 - - - 0 - YCY - YCY - - - 1 - YCY - YCY - - - 2 - YCY - YCY - - - 3 - YCY - YCY - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-vyuy.xml b/Documentation/DocBook/media/v4l/pixfmt-vyuy.xml deleted file mode 100644 index 82803408b389..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-vyuy.xml +++ /dev/null @@ -1,120 +0,0 @@ - - - V4L2_PIX_FMT_VYUY ('VYUY') - &manvol; - - - V4L2_PIX_FMT_VYUY - Variation of -V4L2_PIX_FMT_YUYV with different order of samples -in memory - - - Description - - In this format each four bytes is two pixels. Each four -bytes is two Y's, a Cb and a Cr. Each Y goes to one of the pixels, and -the Cb and Cr belong to both pixels. As you can see, the Cr and Cb -components have half the horizontal resolution of the Y -component. - - - <constant>V4L2_PIX_FMT_VYUY</constant> 4 × 4 -pixel image - - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - Cr00 - Y'00 - Cb00 - Y'01 - Cr01 - Y'02 - Cb01 - Y'03 - - - start + 8: - Cr10 - Y'10 - Cb10 - Y'11 - Cr11 - Y'12 - Cb11 - Y'13 - - - start + 16: - Cr20 - Y'20 - Cb20 - Y'21 - Cr21 - Y'22 - Cb21 - Y'23 - - - start + 24: - Cr30 - Y'30 - Cb30 - Y'31 - Cr31 - Y'32 - Cb31 - Y'33 - - - - - - - - - Color Sample Location. - - - - - - - 01 - 23 - - - 0 - YCY - YCY - - - 1 - YCY - YCY - - - 2 - YCY - YCY - - - 3 - YCY - YCY - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-y10.xml b/Documentation/DocBook/media/v4l/pixfmt-y10.xml deleted file mode 100644 index d065043db8d8..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-y10.xml +++ /dev/null @@ -1,79 +0,0 @@ - - - V4L2_PIX_FMT_Y10 ('Y10 ') - &manvol; - - - V4L2_PIX_FMT_Y10 - Grey-scale image - - - Description - - This is a grey-scale image with a depth of 10 bits per pixel. Pixels -are stored in 16-bit words with unused high bits padded with 0. The least -significant byte is stored at lower memory addresses (little-endian). - - - <constant>V4L2_PIX_FMT_Y10</constant> 4 × 4 -pixel image - - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - Y'00low - Y'00high - Y'01low - Y'01high - Y'02low - Y'02high - Y'03low - Y'03high - - - start + 8: - Y'10low - Y'10high - Y'11low - Y'11high - Y'12low - Y'12high - Y'13low - Y'13high - - - start + 16: - Y'20low - Y'20high - Y'21low - Y'21high - Y'22low - Y'22high - Y'23low - Y'23high - - - start + 24: - Y'30low - Y'30high - Y'31low - Y'31high - Y'32low - Y'32high - Y'33low - Y'33high - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-y10b.xml b/Documentation/DocBook/media/v4l/pixfmt-y10b.xml deleted file mode 100644 index adb0ad808c93..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-y10b.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - V4L2_PIX_FMT_Y10BPACK ('Y10B') - &manvol; - - - V4L2_PIX_FMT_Y10BPACK - Grey-scale image as a bit-packed array - - - Description - - This is a packed grey-scale image format with a depth of 10 bits per - pixel. Pixels are stored in a bit-packed array of 10bit bits per pixel, - with no padding between them and with the most significant bits coming - first from the left. - - - <constant>V4L2_PIX_FMT_Y10BPACK</constant> 4 pixel data stream taking 5 bytes - - - Bit-packed representation - pixels cross the byte boundary and have a ratio of 5 bytes for each 4 - pixels. - - - - - - Y'00[9:2] - Y'00[1:0]Y'01[9:4] - Y'01[3:0]Y'02[9:6] - Y'02[5:0]Y'03[9:8] - Y'03[7:0] - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-y12.xml b/Documentation/DocBook/media/v4l/pixfmt-y12.xml deleted file mode 100644 index ff417b858cc9..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-y12.xml +++ /dev/null @@ -1,79 +0,0 @@ - - - V4L2_PIX_FMT_Y12 ('Y12 ') - &manvol; - - - V4L2_PIX_FMT_Y12 - Grey-scale image - - - Description - - This is a grey-scale image with a depth of 12 bits per pixel. Pixels -are stored in 16-bit words with unused high bits padded with 0. The least -significant byte is stored at lower memory addresses (little-endian). - - - <constant>V4L2_PIX_FMT_Y12</constant> 4 × 4 -pixel image - - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - Y'00low - Y'00high - Y'01low - Y'01high - Y'02low - Y'02high - Y'03low - Y'03high - - - start + 8: - Y'10low - Y'10high - Y'11low - Y'11high - Y'12low - Y'12high - Y'13low - Y'13high - - - start + 16: - Y'20low - Y'20high - Y'21low - Y'21high - Y'22low - Y'22high - Y'23low - Y'23high - - - start + 24: - Y'30low - Y'30high - Y'31low - Y'31high - Y'32low - Y'32high - Y'33low - Y'33high - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-y12i.xml b/Documentation/DocBook/media/v4l/pixfmt-y12i.xml deleted file mode 100644 index 4a2d1e5f67e4..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-y12i.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - V4L2_PIX_FMT_Y12I ('Y12I') - &manvol; - - - V4L2_PIX_FMT_Y12I - Interleaved grey-scale image, e.g. from a stereo-pair - - - Description - - This is a grey-scale image with a depth of 12 bits per pixel, but with -pixels from 2 sources interleaved and bit-packed. Each pixel is stored in a -24-bit word in the little-endian order. On a little-endian machine these pixels -can be deinterlaced using - - - -__u8 *buf; -left0 = 0xfff & *(__u16 *)buf; -right0 = *(__u16 *)(buf + 1) >> 4; - - - - - <constant>V4L2_PIX_FMT_Y12I</constant> 2 pixel data stream taking 3 bytes - - - Bit-packed representation - pixels cross the byte boundary and have a ratio of 3 bytes for each - interleaved pixel. - - - - - - Y'0left[7:0] - Y'0right[3:0]Y'0left[11:8] - Y'0right[11:4] - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-y16-be.xml b/Documentation/DocBook/media/v4l/pixfmt-y16-be.xml deleted file mode 100644 index cea53e1eaa43..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-y16-be.xml +++ /dev/null @@ -1,81 +0,0 @@ - - - V4L2_PIX_FMT_Y16_BE ('Y16 ' | (1 << 31)) - &manvol; - - - V4L2_PIX_FMT_Y16_BE - Grey-scale image - - - Description - - This is a grey-scale image with a depth of 16 bits per -pixel. The most significant byte is stored at lower memory addresses -(big-endian). Note the actual sampling precision may be lower than -16 bits, for example 10 bits per pixel with values in range 0 to -1023. - - - <constant>V4L2_PIX_FMT_Y16_BE</constant> 4 × 4 -pixel image - - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - Y'00high - Y'00low - Y'01high - Y'01low - Y'02high - Y'02low - Y'03high - Y'03low - - - start + 8: - Y'10high - Y'10low - Y'11high - Y'11low - Y'12high - Y'12low - Y'13high - Y'13low - - - start + 16: - Y'20high - Y'20low - Y'21high - Y'21low - Y'22high - Y'22low - Y'23high - Y'23low - - - start + 24: - Y'30high - Y'30low - Y'31high - Y'31low - Y'32high - Y'32low - Y'33high - Y'33low - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-y16.xml b/Documentation/DocBook/media/v4l/pixfmt-y16.xml deleted file mode 100644 index ff4f727d5624..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-y16.xml +++ /dev/null @@ -1,81 +0,0 @@ - - - V4L2_PIX_FMT_Y16 ('Y16 ') - &manvol; - - - V4L2_PIX_FMT_Y16 - Grey-scale image - - - Description - - This is a grey-scale image with a depth of 16 bits per -pixel. The least significant byte is stored at lower memory addresses -(little-endian). Note the actual sampling precision may be lower than -16 bits, for example 10 bits per pixel with values in range 0 to -1023. - - - <constant>V4L2_PIX_FMT_Y16</constant> 4 × 4 -pixel image - - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - Y'00low - Y'00high - Y'01low - Y'01high - Y'02low - Y'02high - Y'03low - Y'03high - - - start + 8: - Y'10low - Y'10high - Y'11low - Y'11high - Y'12low - Y'12high - Y'13low - Y'13high - - - start + 16: - Y'20low - Y'20high - Y'21low - Y'21high - Y'22low - Y'22high - Y'23low - Y'23high - - - start + 24: - Y'30low - Y'30high - Y'31low - Y'31high - Y'32low - Y'32high - Y'33low - Y'33high - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-y41p.xml b/Documentation/DocBook/media/v4l/pixfmt-y41p.xml deleted file mode 100644 index 98dcb91d2917..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-y41p.xml +++ /dev/null @@ -1,149 +0,0 @@ - - - V4L2_PIX_FMT_Y41P ('Y41P') - &manvol; - - - V4L2_PIX_FMT_Y41P - Format with ¼ horizontal chroma -resolution, also known as YUV 4:1:1 - - - Description - - In this format each 12 bytes is eight pixels. In the -twelve bytes are two CbCr pairs and eight Y's. The first CbCr pair -goes with the first four Y's, and the second CbCr pair goes with the -other four Y's. The Cb and Cr components have one fourth the -horizontal resolution of the Y component. - - Do not confuse this format with V4L2_PIX_FMT_YUV411P. -Y41P is derived from "YUV 4:1:1 packed", while -YUV411P stands for "YUV 4:1:1 planar". - - - <constant>V4L2_PIX_FMT_Y41P</constant> 8 × 4 -pixel image - - - Byte Order - Each cell is one byte. - - - - - - start + 0: - Cb00 - Y'00 - Cr00 - Y'01 - Cb01 - Y'02 - Cr01 - Y'03 - Y'04 - Y'05 - Y'06 - Y'07 - - - start + 12: - Cb10 - Y'10 - Cr10 - Y'11 - Cb11 - Y'12 - Cr11 - Y'13 - Y'14 - Y'15 - Y'16 - Y'17 - - - start + 24: - Cb20 - Y'20 - Cr20 - Y'21 - Cb21 - Y'22 - Cr21 - Y'23 - Y'24 - Y'25 - Y'26 - Y'27 - - - start + 36: - Cb30 - Y'30 - Cr30 - Y'31 - Cb31 - Y'32 - Cr31 - Y'33 - Y'34 - Y'35 - Y'36 - Y'37 - - - - - - - - Color Sample Location. - - - - - - - 01 - 23 - 45 - 67 - - - 0 - YYC - YY - YYC - YY - - - 1 - YYC - YY - YYC - YY - - - 2 - YYC - YY - YYC - YY - - - 3 - YYC - YY - YYC - YY - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-y8i.xml b/Documentation/DocBook/media/v4l/pixfmt-y8i.xml deleted file mode 100644 index 99f389d4c6c8..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-y8i.xml +++ /dev/null @@ -1,80 +0,0 @@ - - - V4L2_PIX_FMT_Y8I ('Y8I ') - &manvol; - - - V4L2_PIX_FMT_Y8I - Interleaved grey-scale image, e.g. from a stereo-pair - - - Description - - This is a grey-scale image with a depth of 8 bits per pixel, but with -pixels from 2 sources interleaved. Each pixel is stored in a 16-bit word. E.g. -the R200 RealSense camera stores pixel from the left sensor in lower and from -the right sensor in the higher 8 bits. - - - <constant>V4L2_PIX_FMT_Y8I</constant> 4 × 4 -pixel image - - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - Y'00left - Y'00right - Y'01left - Y'01right - Y'02left - Y'02right - Y'03left - Y'03right - - - start + 8: - Y'10left - Y'10right - Y'11left - Y'11right - Y'12left - Y'12right - Y'13left - Y'13right - - - start + 16: - Y'20left - Y'20right - Y'21left - Y'21right - Y'22left - Y'22right - Y'23left - Y'23right - - - start + 24: - Y'30left - Y'30right - Y'31left - Y'31right - Y'32left - Y'32right - Y'33left - Y'33right - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-yuv410.xml b/Documentation/DocBook/media/v4l/pixfmt-yuv410.xml deleted file mode 100644 index 0869dce5f92c..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-yuv410.xml +++ /dev/null @@ -1,133 +0,0 @@ - - - V4L2_PIX_FMT_YVU410 ('YVU9'), V4L2_PIX_FMT_YUV410 ('YUV9') - &manvol; - - - V4L2_PIX_FMT_YVU410 - V4L2_PIX_FMT_YUV410 - Planar formats with ¼ horizontal and -vertical chroma resolution, also known as YUV 4:1:0 - - - Description - - These are planar formats, 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. For -V4L2_PIX_FMT_YVU410, the Cr plane immediately -follows the Y plane in memory. The Cr plane is ¼ the width and -¼ the height of the Y plane (and of the image). Each Cr belongs -to 16 pixels, a four-by-four square of the image. Following the Cr -plane is the Cb plane, just like the Cr plane. -V4L2_PIX_FMT_YUV410 is the same, except the Cb -plane comes first, then the Cr plane. - - If the Y plane has pad bytes after each row, then the Cr -and Cb planes have ¼ as many pad bytes after their rows. In -other words, four Cx rows (including padding) are exactly as long as -one Y row (including padding). - - - <constant>V4L2_PIX_FMT_YVU410</constant> 4 × 4 -pixel image - - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - Y'00 - Y'01 - Y'02 - Y'03 - - - start + 4: - Y'10 - Y'11 - Y'12 - Y'13 - - - start + 8: - Y'20 - Y'21 - Y'22 - Y'23 - - - start + 12: - Y'30 - Y'31 - Y'32 - Y'33 - - - start + 16: - Cr00 - - - start + 17: - Cb00 - - - - - - - - - Color Sample Location. - - - - - - - 01 - 23 - - - 0 - YY - YY - - - - - - 1 - YY - YY - - - - C - - - - 2 - YY - YY - - - - - - 3 - YY - YY - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-yuv411p.xml b/Documentation/DocBook/media/v4l/pixfmt-yuv411p.xml deleted file mode 100644 index 086dc731bf02..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-yuv411p.xml +++ /dev/null @@ -1,147 +0,0 @@ - - - V4L2_PIX_FMT_YUV411P ('411P') - &manvol; - - - V4L2_PIX_FMT_YUV411P - Format with ¼ horizontal chroma resolution, -also known as YUV 4:1:1. Planar layout as opposed to -V4L2_PIX_FMT_Y41P - - - Description - - This format is not commonly used. This is a planar -format similar to the 4:2:2 planar format except with half as many -chroma. 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 plane immediately follows the Y plane in memory. The Cb plane is -¼ the width of the Y plane (and of the image). Each Cb belongs -to 4 pixels all on the same row. For example, -Cb0 belongs to Y'00, -Y'01, Y'02 and -Y'03. Following the Cb plane is the Cr plane, -just like the Cb plane. - - If the Y plane has pad bytes after each row, then the Cr -and Cb planes have ¼ as many pad bytes after their rows. In -other words, four C x rows (including padding) is exactly as long as -one Y row (including padding). - - - <constant>V4L2_PIX_FMT_YUV411P</constant> 4 × 4 -pixel image - - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - Y'00 - Y'01 - Y'02 - Y'03 - - - start + 4: - Y'10 - Y'11 - Y'12 - Y'13 - - - start + 8: - Y'20 - Y'21 - Y'22 - Y'23 - - - start + 12: - Y'30 - Y'31 - Y'32 - Y'33 - - - start + 16: - Cb00 - - - start + 17: - Cb10 - - - start + 18: - Cb20 - - - start + 19: - Cb30 - - - start + 20: - Cr00 - - - start + 21: - Cr10 - - - start + 22: - Cr20 - - - start + 23: - Cr30 - - - - - - - - - Color Sample Location. - - - - - - - 01 - 23 - - - 0 - YYC - YY - - - 1 - YYC - YY - - - 2 - YYC - YY - - - 3 - YYC - YY - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-yuv420.xml b/Documentation/DocBook/media/v4l/pixfmt-yuv420.xml deleted file mode 100644 index 48649fac1596..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-yuv420.xml +++ /dev/null @@ -1,149 +0,0 @@ - - - V4L2_PIX_FMT_YVU420 ('YV12'), V4L2_PIX_FMT_YUV420 ('YU12') - &manvol; - - - V4L2_PIX_FMT_YVU420 - V4L2_PIX_FMT_YUV420 - Planar formats with ½ horizontal and -vertical chroma resolution, also known as YUV 4:2:0 - - - Description - - These are planar formats, 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. For -V4L2_PIX_FMT_YVU420, the Cr plane immediately -follows the Y plane in memory. The Cr plane is half the width and half -the height of the Y plane (and of the image). Each Cr belongs to four -pixels, a two-by-two square of the image. For example, -Cr0 belongs to Y'00, -Y'01, Y'10, and -Y'11. Following the Cr plane is the Cb plane, -just like the Cr plane. V4L2_PIX_FMT_YUV420 is -the same except the Cb plane comes first, then the Cr plane. - - If the Y plane has pad bytes after each row, then the Cr -and Cb 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). - - - <constant>V4L2_PIX_FMT_YVU420</constant> 4 × 4 -pixel image - - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - Y'00 - Y'01 - Y'02 - Y'03 - - - start + 4: - Y'10 - Y'11 - Y'12 - Y'13 - - - start + 8: - Y'20 - Y'21 - Y'22 - Y'23 - - - start + 12: - Y'30 - Y'31 - Y'32 - Y'33 - - - start + 16: - Cr00 - Cr01 - - - start + 18: - Cr10 - Cr11 - - - start + 20: - Cb00 - Cb01 - - - start + 22: - Cb10 - Cb11 - - - - - - - - - Color Sample Location. - - - - - - - 01 - 23 - - - 0 - YY - YY - - - - C - C - - - 1 - YY - YY - - - - - - 2 - YY - YY - - - - C - C - - - 3 - YY - YY - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-yuv420m.xml b/Documentation/DocBook/media/v4l/pixfmt-yuv420m.xml deleted file mode 100644 index 7d13fe96657d..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-yuv420m.xml +++ /dev/null @@ -1,162 +0,0 @@ - - - V4L2_PIX_FMT_YUV420M ('YM12'), V4L2_PIX_FMT_YVU420M ('YM21') - &manvol; - - - V4L2_PIX_FMT_YUV420M - V4L2_PIX_FMT_YVU420M - Variation of V4L2_PIX_FMT_YUV420 and - V4L2_PIX_FMT_YVU420 with planes non contiguous - in memory. - - - - Description - - 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. -For V4L2_PIX_FMT_YUV420M 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, -Cb0 belongs to Y'00, -Y'01, Y'10, and -Y'11. The Cr data, just like the Cb plane, is -in the third plane. - - V4L2_PIX_FMT_YVU420M is the same except -the Cr data is stored in the second plane and the Cb data in the third plane. - - - 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). - - V4L2_PIX_FMT_YUV420M and -V4L2_PIX_FMT_YVU420M are intended to be -used only in drivers and applications that support the multi-planar API, -described in . - - - <constant>V4L2_PIX_FMT_YUV420M</constant> 4 × 4 -pixel image - - - Byte Order. - Each cell is one byte. - - - - - - start0 + 0: - Y'00 - Y'01 - Y'02 - Y'03 - - - start0 + 4: - Y'10 - Y'11 - Y'12 - Y'13 - - - start0 + 8: - Y'20 - Y'21 - Y'22 - Y'23 - - - start0 + 12: - Y'30 - Y'31 - Y'32 - Y'33 - - - - start1 + 0: - Cb00 - Cb01 - - - start1 + 2: - Cb10 - Cb11 - - - - start2 + 0: - Cr00 - Cr01 - - - start2 + 2: - Cr10 - Cr11 - - - - - - - - - Color Sample Location. - - - - - - - 01 - 23 - - - 0 - YY - YY - - - - C - C - - - 1 - YY - YY - - - - - - 2 - YY - YY - - - - C - C - - - 3 - YY - YY - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-yuv422m.xml b/Documentation/DocBook/media/v4l/pixfmt-yuv422m.xml deleted file mode 100644 index dd502802cb75..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-yuv422m.xml +++ /dev/null @@ -1,166 +0,0 @@ - - - V4L2_PIX_FMT_YUV422M ('YM16'), V4L2_PIX_FMT_YVU422M ('YM61') - &manvol; - - - V4L2_PIX_FMT_YUV422M - V4L2_PIX_FMT_YVU422M - Planar formats with ½ horizontal resolution, also - known as YUV and YVU 4:2:2 - - - - Description - - 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. -For V4L2_PIX_FMT_YUV422M the Cb data -constitutes the second plane which is half the width of the Y plane (and of the -image). Each Cb belongs to two pixels. For example, -Cb0 belongs to Y'00, -Y'01. The Cr data, just like the Cb plane, is -in the third plane. - - V4L2_PIX_FMT_YVU422M is the same except -the Cr data is stored in the second plane and the Cb data in the third plane. - - - 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). - - V4L2_PIX_FMT_YUV422M and -V4L2_PIX_FMT_YVU422M are intended to be -used only in drivers and applications that support the multi-planar API, -described in . - - - <constant>V4L2_PIX_FMT_YUV422M</constant> 4 × 4 -pixel image - - - Byte Order. - Each cell is one byte. - - - - - - start0 + 0: - Y'00 - Y'01 - Y'02 - Y'03 - - - start0 + 4: - Y'10 - Y'11 - Y'12 - Y'13 - - - start0 + 8: - Y'20 - Y'21 - Y'22 - Y'23 - - - start0 + 12: - Y'30 - Y'31 - Y'32 - Y'33 - - - - start1 + 0: - Cb00 - Cb01 - - - start1 + 2: - Cb10 - Cb11 - - - start1 + 4: - Cb20 - Cb21 - - - start1 + 6: - Cb30 - Cb31 - - - - start2 + 0: - Cr00 - Cr01 - - - start2 + 2: - Cr10 - Cr11 - - - start2 + 4: - Cr20 - Cr21 - - - start2 + 6: - Cr30 - Cr31 - - - - - - - - - Color Sample Location. - - - - - - - 01 - 23 - - - 0 - YCY - YCY - - - 1 - YCY - YCY - - - 2 - YCY - YCY - - - 3 - YCY - YCY - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-yuv422p.xml b/Documentation/DocBook/media/v4l/pixfmt-yuv422p.xml deleted file mode 100644 index 4ce6463fe0a5..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-yuv422p.xml +++ /dev/null @@ -1,153 +0,0 @@ - - - V4L2_PIX_FMT_YUV422P ('422P') - &manvol; - - - V4L2_PIX_FMT_YUV422P - Format with ½ horizontal chroma resolution, -also known as YUV 4:2:2. Planar layout as opposed to -V4L2_PIX_FMT_YUYV - - - Description - - This format is not commonly used. This is a planar -version of the YUYV 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 plane immediately follows the Y plane in -memory. The Cb plane is half the width of the Y plane (and of the -image). Each Cb belongs to two pixels. For example, -Cb0 belongs to Y'00, -Y'01. Following the Cb plane is the Cr plane, -just like the Cb plane. - - If the Y plane has pad bytes after each row, then the Cr -and Cb 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). - - - <constant>V4L2_PIX_FMT_YUV422P</constant> 4 × 4 -pixel image - - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - Y'00 - Y'01 - Y'02 - Y'03 - - - start + 4: - Y'10 - Y'11 - Y'12 - Y'13 - - - start + 8: - Y'20 - Y'21 - Y'22 - Y'23 - - - start + 12: - Y'30 - Y'31 - Y'32 - Y'33 - - - start + 16: - Cb00 - Cb01 - - - start + 18: - Cb10 - Cb11 - - - start + 20: - Cb20 - Cb21 - - - start + 22: - Cb30 - Cb31 - - - start + 24: - Cr00 - Cr01 - - - start + 26: - Cr10 - Cr11 - - - start + 28: - Cr20 - Cr21 - - - start + 30: - Cr30 - Cr31 - - - - - - - - - Color Sample Location. - - - - - - - 01 - 23 - - - 0 - YCY - YCY - - - 1 - YCY - YCY - - - 2 - YCY - YCY - - - 3 - YCY - YCY - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-yuv444m.xml b/Documentation/DocBook/media/v4l/pixfmt-yuv444m.xml deleted file mode 100644 index 1b7335940bc7..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-yuv444m.xml +++ /dev/null @@ -1,177 +0,0 @@ - - - V4L2_PIX_FMT_YUV444M ('YM24'), V4L2_PIX_FMT_YVU444M ('YM42') - &manvol; - - - V4L2_PIX_FMT_YUV444M - V4L2_PIX_FMT_YVU444M - Planar formats with full horizontal resolution, also - known as YUV and YVU 4:4:4 - - - - Description - - 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. -For V4L2_PIX_FMT_YUV444M the Cb data -constitutes the second plane which is the same width and height as the Y plane -(and as the image). The Cr data, just like the Cb plane, is in the third plane. - - - V4L2_PIX_FMT_YVU444M is the same except -the Cr data is stored in the second plane and the Cb data in the third plane. - - If the Y plane has pad bytes after each row, then the Cb -and Cr planes have the same number of pad bytes after their rows. - - V4L2_PIX_FMT_YUV444M and -V4L2_PIX_FMT_YUV444M are intended to be -used only in drivers and applications that support the multi-planar API, -described in . - - - <constant>V4L2_PIX_FMT_YUV444M</constant> 4 × 4 -pixel image - - - Byte Order. - Each cell is one byte. - - - - - - start0 + 0: - Y'00 - Y'01 - Y'02 - Y'03 - - - start0 + 4: - Y'10 - Y'11 - Y'12 - Y'13 - - - start0 + 8: - Y'20 - Y'21 - Y'22 - Y'23 - - - start0 + 12: - Y'30 - Y'31 - Y'32 - Y'33 - - - - start1 + 0: - Cb00 - Cb01 - Cb02 - Cb03 - - - start1 + 4: - Cb10 - Cb11 - Cb12 - Cb13 - - - start1 + 8: - Cb20 - Cb21 - Cb22 - Cb23 - - - start1 + 12: - Cb20 - Cb21 - Cb32 - Cb33 - - - - start2 + 0: - Cr00 - Cr01 - Cr02 - Cr03 - - - start2 + 4: - Cr10 - Cr11 - Cr12 - Cr13 - - - start2 + 8: - Cr20 - Cr21 - Cr22 - Cr23 - - - start2 + 12: - Cr30 - Cr31 - Cr32 - Cr33 - - - - - - - - - Color Sample Location. - - - - - - - 01 - 23 - - - 0 - YCYC - YCYC - - - 1 - YCYC - YCYC - - - 2 - YCYC - YCYC - - - 3 - YCYC - YCYC - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-yuyv.xml b/Documentation/DocBook/media/v4l/pixfmt-yuyv.xml deleted file mode 100644 index 58384092251a..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-yuyv.xml +++ /dev/null @@ -1,120 +0,0 @@ - - - V4L2_PIX_FMT_YUYV ('YUYV') - &manvol; - - - V4L2_PIX_FMT_YUYV - Packed format with ½ horizontal chroma -resolution, also known as YUV 4:2:2 - - - Description - - In this format each four bytes is two pixels. Each four -bytes is two Y's, a Cb and a Cr. Each Y goes to one of the pixels, and -the Cb and Cr belong to both pixels. As you can see, the Cr and Cb -components have half the horizontal resolution of the Y component. -V4L2_PIX_FMT_YUYV is known in the Windows -environment as YUY2. - - - <constant>V4L2_PIX_FMT_YUYV</constant> 4 × 4 -pixel image - - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - Y'00 - Cb00 - Y'01 - Cr00 - Y'02 - Cb01 - Y'03 - Cr01 - - - start + 8: - Y'10 - Cb10 - Y'11 - Cr10 - Y'12 - Cb11 - Y'13 - Cr11 - - - start + 16: - Y'20 - Cb20 - Y'21 - Cr20 - Y'22 - Cb21 - Y'23 - Cr21 - - - start + 24: - Y'30 - Cb30 - Y'31 - Cr30 - Y'32 - Cb31 - Y'33 - Cr31 - - - - - - - - - Color Sample Location. - - - - - - - 01 - 23 - - - 0 - YCY - YCY - - - 1 - YCY - YCY - - - 2 - YCY - YCY - - - 3 - YCY - YCY - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-yvyu.xml b/Documentation/DocBook/media/v4l/pixfmt-yvyu.xml deleted file mode 100644 index bfffdc76d3da..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-yvyu.xml +++ /dev/null @@ -1,120 +0,0 @@ - - - V4L2_PIX_FMT_YVYU ('YVYU') - &manvol; - - - V4L2_PIX_FMT_YVYU - Variation of -V4L2_PIX_FMT_YUYV with different order of samples -in memory - - - Description - - In this format each four bytes is two pixels. Each four -bytes is two Y's, a Cb and a Cr. Each Y goes to one of the pixels, and -the Cb and Cr belong to both pixels. As you can see, the Cr and Cb -components have half the horizontal resolution of the Y -component. - - - <constant>V4L2_PIX_FMT_YVYU</constant> 4 × 4 -pixel image - - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - Y'00 - Cr00 - Y'01 - Cb00 - Y'02 - Cr01 - Y'03 - Cb01 - - - start + 8: - Y'10 - Cr10 - Y'11 - Cb10 - Y'12 - Cr11 - Y'13 - Cb11 - - - start + 16: - Y'20 - Cr20 - Y'21 - Cb20 - Y'22 - Cr21 - Y'23 - Cb21 - - - start + 24: - Y'30 - Cr30 - Y'31 - Cb30 - Y'32 - Cr31 - Y'33 - Cb31 - - - - - - - - - Color Sample Location. - - - - - - - 01 - 23 - - - 0 - YCY - YCY - - - 1 - YCY - YCY - - - 2 - YCY - YCY - - - 3 - YCY - YCY - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt-z16.xml b/Documentation/DocBook/media/v4l/pixfmt-z16.xml deleted file mode 100644 index 1d9cb1684bd3..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-z16.xml +++ /dev/null @@ -1,81 +0,0 @@ - - - V4L2_PIX_FMT_Z16 ('Z16 ') - &manvol; - - - V4L2_PIX_FMT_Z16 - 16-bit depth data with distance values at each pixel - - - Description - - This is a 16-bit format, representing depth data. Each pixel is a -distance to the respective point in the image coordinates. Distance unit can -vary and has to be negotiated with the device separately. Each pixel is stored -in a 16-bit word in the little endian byte order. - - - - <constant>V4L2_PIX_FMT_Z16</constant> 4 × 4 -pixel image - - - Byte Order. - Each cell is one byte. - - - - - - start + 0: - Z00low - Z00high - Z01low - Z01high - Z02low - Z02high - Z03low - Z03high - - - start + 8: - Z10low - Z10high - Z11low - Z11high - Z12low - Z12high - Z13low - Z13high - - - start + 16: - Z20low - Z20high - Z21low - Z21high - Z22low - Z22high - Z23low - Z23high - - - start + 24: - Z30low - Z30high - Z31low - Z31high - Z32low - Z32high - Z33low - Z33high - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/pixfmt.xml b/Documentation/DocBook/media/v4l/pixfmt.xml deleted file mode 100644 index 5a08aeea4360..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt.xml +++ /dev/null @@ -1,2003 +0,0 @@ - Image Formats - - The V4L2 API was primarily designed for devices exchanging -image data with applications. The -v4l2_pix_format and v4l2_pix_format_mplane - structures define the format and layout of an image in memory. -The former is used with the single-planar API, while the latter is used with the -multi-planar version (see ). 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 -&VIDIOC-G-FBUF;.) - -
- Single-planar format structure - - struct <structname>v4l2_pix_format</structname> - - &cs-str; - - - __u32 - width - Image width in pixels. - - - __u32 - height - Image height in pixels. If field is - one of V4L2_FIELD_TOP, V4L2_FIELD_BOTTOM - or V4L2_FIELD_ALTERNATE then height refers to the - number of lines in the field, otherwise it refers to the number of - lines in the frame (which is twice the field height for interlaced - formats). - - - Applications set these fields to -request an image size, drivers return the closest possible values. In -case of planar formats the width and -height applies to the largest plane. To -avoid ambiguities drivers must return values rounded up to a multiple -of the scale factor of any smaller planes. For example when the image -format is YUV 4:2:0, width and -height must be multiples of two. - - - __u32 - pixelformat - The pixel format or type of compression, set by the -application. This is a little endian four character code. V4L2 defines -standard RGB formats in , YUV formats in , and reserved codes in - - - &v4l2-field; - field - Video images are typically interlaced. Applications -can request to capture or output only the top or bottom field, or both -fields interlaced or sequentially stored in one buffer or alternating -in separate buffers. Drivers return the actual field order selected. -For more details on fields see . - - - __u32 - bytesperline - Distance in bytes between the leftmost pixels in two -adjacent lines. - - - Both applications and drivers -can set this field to request padding bytes at the end of each line. -Drivers however may ignore the value requested by the application, -returning width times bytes per pixel or a -larger value required by the hardware. That implies applications can -just set this field to zero to get a reasonable -default.Video hardware may access padding bytes, -therefore they must reside in accessible memory. Consider cases where -padding bytes after the last line of an image cross a system page -boundary. Input devices may write padding bytes, the value is -undefined. Output devices ignore the contents of padding -bytes.When the image format is planar the -bytesperline value applies to the first -plane and is divided by the same factor as the -width field for the other planes. For -example the Cb and Cr planes of a YUV 4:2:0 image have half as many -padding bytes following each line as the Y plane. To avoid ambiguities -drivers must return a bytesperline value -rounded up to a multiple of the scale factor. -For compressed formats the bytesperline -value makes no sense. Applications and drivers must set this to 0 in -that case. - - - __u32 - sizeimage - Size in bytes of the buffer to hold a complete image, -set by the driver. Usually this is -bytesperline times -height. When the image consists of variable -length compressed data this is the maximum number of bytes required to -hold an image. - - - &v4l2-colorspace; - colorspace - This information supplements the -pixelformat and must be set by the driver for -capture streams and by the application for output streams, -see . - - - __u32 - priv - This field indicates whether the remaining fields of the -v4l2_pix_format structure, also called the extended -fields, are valid. When set to V4L2_PIX_FMT_PRIV_MAGIC, it -indicates that the extended fields have been correctly initialized. When set to -any other value it indicates that the extended fields contain undefined values. - -Applications that wish to use the pixel format extended fields must first -ensure that the feature is supported by querying the device for the -V4L2_CAP_EXT_PIX_FORMAT -capability. If the capability isn't set the pixel format extended fields are not -supported and using the extended fields will lead to undefined results. -To use the extended fields, applications must set the -priv field to -V4L2_PIX_FMT_PRIV_MAGIC, initialize all the extended fields -and zero the unused bytes of the v4l2_format -raw_data field. -When the priv field isn't set to -V4L2_PIX_FMT_PRIV_MAGIC drivers must act as if all the -extended fields were set to zero. On return drivers must set the -priv field to -V4L2_PIX_FMT_PRIV_MAGIC and all the extended fields to -applicable values. - - - __u32 - flags - Flags set by the application or driver, see . - - - &v4l2-ycbcr-encoding; - ycbcr_enc - This information supplements the -colorspace and must be set by the driver for -capture streams and by the application for output streams, -see . - - - &v4l2-quantization; - quantization - This information supplements the -colorspace and must be set by the driver for -capture streams and by the application for output streams, -see . - - - &v4l2-xfer-func; - xfer_func - This information supplements the -colorspace and must be set by the driver for -capture streams and by the application for output streams, -see . - - - -
-
- -
- Multi-planar format structures - The v4l2_plane_pix_format structures define - size and layout for each of the planes in a multi-planar format. - The v4l2_pix_format_mplane structure contains - information common to all planes (such as image width and height) and - an array of v4l2_plane_pix_format structures, - describing all planes of that format. - - struct <structname>v4l2_plane_pix_format</structname> - - &cs-str; - - - __u32 - sizeimage - Maximum size in bytes required for image data in this plane. - - - - __u32 - bytesperline - Distance in bytes between the leftmost pixels in two adjacent - lines. See &v4l2-pix-format;. - - - __u16 - reserved[6] - Reserved for future extensions. Should be zeroed by drivers and - applications. - - - -
- - struct <structname>v4l2_pix_format_mplane</structname> - - &cs-str; - - - __u32 - width - Image width in pixels. See &v4l2-pix-format;. - - - __u32 - height - Image height in pixels. See &v4l2-pix-format;. - - - __u32 - pixelformat - The pixel format. Both single- and multi-planar four character -codes can be used. - - - &v4l2-field; - field - See &v4l2-pix-format;. - - - &v4l2-colorspace; - colorspace - See &v4l2-pix-format;. - - - &v4l2-plane-pix-format; - plane_fmt[VIDEO_MAX_PLANES] - 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 num_planes - field. - - - __u8 - num_planes - Number of planes (i.e. separate memory buffers) for this format - and the number of valid entries in the - plane_fmt array. - - - __u8 - flags - Flags set by the application or driver, see . - - - &v4l2-ycbcr-encoding; - ycbcr_enc - This information supplements the -colorspace and must be set by the driver for -capture streams and by the application for output streams, -see . - - - &v4l2-quantization; - quantization - This information supplements the -colorspace and must be set by the driver for -capture streams and by the application for output streams, -see . - - - &v4l2-xfer-func; - xfer_func - This information supplements the -colorspace and must be set by the driver for -capture streams and by the application for output streams, -see . - - - __u8 - reserved[7] - Reserved for future extensions. Should be zeroed by drivers - and applications. - - - -
-
- -
- Standard Image Formats - - In order to exchange images between drivers and -applications, it is necessary to have standard image data formats -which both sides will interpret the same way. V4L2 includes several -such formats, and this section is intended to be an unambiguous -specification of the standard image data formats in V4L2. - - V4L2 drivers are not limited to these formats, however. -Driver-specific formats are possible. In that case the application may -depend on a codec to convert images to one of the standard formats -when needed. But the data can still be stored and retrieved in the -proprietary format. For example, a device may support a proprietary -compressed format. Applications can still capture and save the data in -the compressed format, saving much disk space, and later use a codec -to convert the images to the X Windows screen format when the video is -to be displayed. - - Even so, ultimately, some standard formats are needed, so -the V4L2 specification would not be complete without well-defined -standard formats. - - The V4L2 standard formats are mainly uncompressed formats. The -pixels are always arranged in memory from left to right, and from top -to bottom. The first byte of data in the image buffer is always for -the leftmost pixel of the topmost row. Following that is the pixel -immediately to its right, and so on until the end of the top row of -pixels. Following the rightmost pixel of the row there may be zero or -more bytes of padding to guarantee that each row of pixel data has a -certain alignment. Following the pad bytes, if any, is data for the -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. - - In V4L2 each format has an identifier which looks like -PIX_FMT_XXX, defined in the videodev2.h header file. These identifiers -represent four character (FourCC) codes -which are also listed below, however they are not the same as those -used in the Windows world. - - 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". -
- -
- Colorspaces - - 'Color' is a very complex concept and depends on physics, chemistry and -biology. Just because you have three numbers that describe the 'red', 'green' -and 'blue' components of the color of a pixel does not mean that you can accurately -display that color. A colorspace defines what it actually means -to have an RGB value of e.g. (255, 0, 0). That is, which color should be -reproduced on the screen in a perfectly calibrated environment. - - In order to do that we first need to have a good definition of -color, i.e. some way to uniquely and unambiguously define a color so that someone -else can reproduce it. Human color vision is trichromatic since the human eye has -color receptors that are sensitive to three different wavelengths of light. Hence -the need to use three numbers to describe color. Be glad you are not a mantis shrimp -as those are sensitive to 12 different wavelengths, so instead of RGB we would be -using the ABCDEFGHIJKL colorspace... - - Color exists only in the eye and brain and is the result of how strongly -color receptors are stimulated. This is based on the Spectral -Power Distribution (SPD) which is a graph showing the intensity (radiant power) -of the light at wavelengths covering the visible spectrum as it enters the eye. -The science of colorimetry is about the relationship between the SPD and color as -perceived by the human brain. - - Since the human eye has only three color receptors it is perfectly -possible that different SPDs will result in the same stimulation of those receptors -and are perceived as the same color, even though the SPD of the light is -different. - - In the 1920s experiments were devised to determine the relationship -between SPDs and the perceived color and that resulted in the CIE 1931 standard -that defines spectral weighting functions that model the perception of color. -Specifically that standard defines functions that can take an SPD and calculate -the stimulus for each color receptor. After some further mathematical transforms -these stimuli are known as the CIE XYZ tristimulus values -and these X, Y and Z values describe a color as perceived by a human unambiguously. -These X, Y and Z values are all in the range [0…1]. - - The Y value in the CIE XYZ colorspace corresponds to luminance. Often -the CIE XYZ colorspace is transformed to the normalized CIE xyY colorspace: - - x = X / (X + Y + Z) - y = Y / (X + Y + Z) - - The x and y values are the chromaticity coordinates and can be used to -define a color without the luminance component Y. It is very confusing to -have such similar names for these colorspaces. Just be aware that if colors -are specified with lower case 'x' and 'y', then the CIE xyY colorspace is -used. Upper case 'X' and 'Y' refer to the CIE XYZ colorspace. Also, y has nothing -to do with luminance. Together x and y specify a color, and Y the luminance. -That is really all you need to remember from a practical point of view. At -the end of this section you will find reading resources that go into much more -detail if you are interested. - - - A monitor or TV will reproduce colors by emitting light at three -different wavelengths, the combination of which will stimulate the color receptors -in the eye and thus cause the perception of color. Historically these wavelengths -were defined by the red, green and blue phosphors used in the displays. These -color primaries are part of what defines a colorspace. - - Different display devices will have different primaries and some -primaries are more suitable for some display technologies than others. This has -resulted in a variety of colorspaces that are used for different display -technologies or uses. To define a colorspace you need to define the three -color primaries (these are typically defined as x, y chromaticity coordinates -from the CIE xyY colorspace) but also the white reference: that is the color obtained -when all three primaries are at maximum power. This determines the relative power -or energy of the primaries. This is usually chosen to be close to daylight which has -been defined as the CIE D65 Illuminant. - - To recapitulate: the CIE XYZ colorspace uniquely identifies colors. -Other colorspaces are defined by three chromaticity coordinates defined in the -CIE xyY colorspace. Based on those a 3x3 matrix can be constructed that -transforms CIE XYZ colors to colors in the new colorspace. - - - Both the CIE XYZ and the RGB colorspace that are derived from the -specific chromaticity primaries are linear colorspaces. But neither the eye, -nor display technology is linear. Doubling the values of all components in -the linear colorspace will not be perceived as twice the intensity of the color. -So each colorspace also defines a transfer function that takes a linear color -component value and transforms it to the non-linear component value, which is a -closer match to the non-linear performance of both the eye and displays. Linear -component values are denoted RGB, non-linear are denoted as R'G'B'. In general -colors used in graphics are all R'G'B', except in openGL which uses linear RGB. -Special care should be taken when dealing with openGL to provide linear RGB colors -or to use the built-in openGL support to apply the inverse transfer function. - - The final piece that defines a colorspace is a function that -transforms non-linear R'G'B' to non-linear Y'CbCr. This function is determined -by the so-called luma coefficients. There may be multiple possible Y'CbCr -encodings allowed for the same colorspace. Many encodings of color -prefer to use luma (Y') and chroma (CbCr) instead of R'G'B'. Since the human -eye is more sensitive to differences in luminance than in color this encoding -allows one to reduce the amount of color information compared to the luma -data. Note that the luma (Y') is unrelated to the Y in the CIE XYZ colorspace. -Also note that Y'CbCr is often called YCbCr or YUV even though these are -strictly speaking wrong. - - Sometimes people confuse Y'CbCr as being a colorspace. This is not -correct, it is just an encoding of an R'G'B' color into luma and chroma -values. The underlying colorspace that is associated with the R'G'B' color -is also associated with the Y'CbCr color. - - The final step is how the RGB, R'G'B' or Y'CbCr values are -quantized. The CIE XYZ colorspace where X, Y and Z are in the range -[0…1] describes all colors that humans can perceive, but the transform to -another colorspace will produce colors that are outside the [0…1] range. -Once clamped to the [0…1] range those colors can no longer be reproduced -in that colorspace. This clamping is what reduces the extent or gamut of the -colorspace. How the range of [0…1] is translated to integer values in the -range of [0…255] (or higher, depending on the color depth) is called the -quantization. This is not part of the colorspace -definition. In practice RGB or R'G'B' values are full range, i.e. they -use the full [0…255] range. Y'CbCr values on the other hand are limited -range with Y' using [16…235] and Cb and Cr using [16…240]. - - Unfortunately, in some cases limited range RGB is also used -where the components use the range [16…235]. And full range Y'CbCr also exists -using the [0…255] range. - - In order to correctly interpret a color you need to know the -quantization range, whether it is R'G'B' or Y'CbCr, the used Y'CbCr encoding -and the colorspace. -From that information you can calculate the corresponding CIE XYZ color -and map that again to whatever colorspace your display device uses. - - The colorspace definition itself consists of the three -chromaticity primaries, the white reference chromaticity, a transfer -function and the luma coefficients needed to transform R'G'B' to Y'CbCr. While -some colorspace standards correctly define all four, quite often the colorspace -standard only defines some, and you have to rely on other standards for -the missing pieces. The fact that colorspaces are often a mix of different -standards also led to very confusing naming conventions where the name of -a standard was used to name a colorspace when in fact that standard was -part of various other colorspaces as well. - - If you want to read more about colors and colorspaces, then the -following resources are useful: is a good practical -book for video engineers, has a much broader scope and -describes many more aspects of color (physics, chemistry, biology, etc.). -The http://www.brucelindbloom.com -website is an excellent resource, especially with respect to the mathematics behind -colorspace conversions. The wikipedia CIE 1931 colorspace article -is also very useful. -
- -
- Defining Colorspaces in V4L2 - In V4L2 colorspaces are defined by four values. The first is the colorspace -identifier (&v4l2-colorspace;) which defines the chromaticities, the default transfer -function, the default Y'CbCr encoding and the default quantization method. The second -is the transfer function identifier (&v4l2-xfer-func;) to specify non-standard -transfer functions. The third is the Y'CbCr encoding identifier (&v4l2-ycbcr-encoding;) -to specify non-standard Y'CbCr encodings and the fourth is the quantization identifier -(&v4l2-quantization;) to specify non-standard quantization methods. Most of the time -only the colorspace field of &v4l2-pix-format; or &v4l2-pix-format-mplane; needs to -be filled in. Note that the default R'G'B' quantization is full range for all -colorspaces except for BT.2020 which uses limited range R'G'B' quantization. - - - V4L2 Colorspaces - - &cs-def; - - - Identifier - Details - - - - - V4L2_COLORSPACE_DEFAULT - The default colorspace. This can be used by applications to let the - driver fill in the colorspace. - - - V4L2_COLORSPACE_SMPTE170M - See . - - - V4L2_COLORSPACE_REC709 - See . - - - V4L2_COLORSPACE_SRGB - See . - - - V4L2_COLORSPACE_ADOBERGB - See . - - - V4L2_COLORSPACE_BT2020 - See . - - - V4L2_COLORSPACE_DCI_P3 - See . - - - V4L2_COLORSPACE_SMPTE240M - See . - - - V4L2_COLORSPACE_470_SYSTEM_M - See . - - - V4L2_COLORSPACE_470_SYSTEM_BG - See . - - - V4L2_COLORSPACE_JPEG - See . - - - V4L2_COLORSPACE_RAW - The raw colorspace. This is used for raw image capture where - the image is minimally processed and is using the internal colorspace - of the device. The software that processes an image using this - 'colorspace' will have to know the internals of the capture device. - - - -
- - - V4L2 Transfer Function - - &cs-def; - - - Identifier - Details - - - - - V4L2_XFER_FUNC_DEFAULT - Use the default transfer function as defined by the colorspace. - - - V4L2_XFER_FUNC_709 - Use the Rec. 709 transfer function. - - - V4L2_XFER_FUNC_SRGB - Use the sRGB transfer function. - - - V4L2_XFER_FUNC_ADOBERGB - Use the AdobeRGB transfer function. - - - V4L2_XFER_FUNC_SMPTE240M - Use the SMPTE 240M transfer function. - - - V4L2_XFER_FUNC_NONE - Do not use a transfer function (i.e. use linear RGB values). - - - V4L2_XFER_FUNC_DCI_P3 - Use the DCI-P3 transfer function. - - - V4L2_XFER_FUNC_SMPTE2084 - Use the SMPTE 2084 transfer function. - - - -
- - - V4L2 Y'CbCr Encodings - - &cs-def; - - - Identifier - Details - - - - - V4L2_YCBCR_ENC_DEFAULT - Use the default Y'CbCr encoding as defined by the colorspace. - - - V4L2_YCBCR_ENC_601 - Use the BT.601 Y'CbCr encoding. - - - V4L2_YCBCR_ENC_709 - Use the Rec. 709 Y'CbCr encoding. - - - V4L2_YCBCR_ENC_XV601 - Use the extended gamut xvYCC BT.601 encoding. - - - V4L2_YCBCR_ENC_XV709 - Use the extended gamut xvYCC Rec. 709 encoding. - - - V4L2_YCBCR_ENC_SYCC - Use the extended gamut sYCC encoding. - - - V4L2_YCBCR_ENC_BT2020 - Use the default non-constant luminance BT.2020 Y'CbCr encoding. - - - V4L2_YCBCR_ENC_BT2020_CONST_LUM - Use the constant luminance BT.2020 Yc'CbcCrc encoding. - - - -
- - - V4L2 Quantization Methods - - &cs-def; - - - Identifier - Details - - - - - V4L2_QUANTIZATION_DEFAULT - Use the default quantization encoding as defined by the colorspace. -This is always full range for R'G'B' (except for the BT.2020 colorspace) and usually -limited range for Y'CbCr. - - - V4L2_QUANTIZATION_FULL_RANGE - Use the full range quantization encoding. I.e. the range [0…1] -is mapped to [0…255] (with possible clipping to [1…254] to avoid the -0x00 and 0xff values). Cb and Cr are mapped from [-0.5…0.5] to [0…255] -(with possible clipping to [1…254] to avoid the 0x00 and 0xff values). - - - V4L2_QUANTIZATION_LIM_RANGE - Use the limited range quantization encoding. I.e. the range [0…1] -is mapped to [16…235]. Cb and Cr are mapped from [-0.5…0.5] to [16…240]. - - - - -
-
- -
- Detailed Colorspace Descriptions -
- Colorspace SMPTE 170M (<constant>V4L2_COLORSPACE_SMPTE170M</constant>) - The standard defines the colorspace used by NTSC and PAL and by SDTV -in general. The default transfer function is V4L2_XFER_FUNC_709. -The default Y'CbCr encoding is V4L2_YCBCR_ENC_601. -The default Y'CbCr quantization is limited range. The chromaticities of the primary colors and -the white reference are: - - SMPTE 170M Chromaticities - - &cs-str; - - - Color - x - y - - - - - Red - 0.630 - 0.340 - - - Green - 0.310 - 0.595 - - - Blue - 0.155 - 0.070 - - - White Reference (D65) - 0.3127 - 0.3290 - - - -
- The red, green and blue chromaticities are also often referred to -as the SMPTE C set, so this colorspace is sometimes called SMPTE C as well. - - - The transfer function defined for SMPTE 170M is the same as the -one defined in Rec. 709. - - L' = -1.099(-L)0.45 + 0.099 for L ≤ -0.018 - L' = 4.5L for -0.018 < L < 0.018 - L' = 1.099L0.45 - 0.099 for L ≥ 0.018 - - - - - - Inverse Transfer function: - - L = -((L' - 0.099) / -1.099)1/0.45 for L' ≤ -0.081 - L = L' / 4.5 for -0.081 < L' < 0.081 - L = ((L' + 0.099) / 1.099)1/0.45 for L' ≥ 0.081 - - - - - - The luminance (Y') and color difference (Cb and Cr) are obtained with -the following V4L2_YCBCR_ENC_601 encoding: - - Y' = 0.299R' + 0.587G' + 0.114B' - Cb = -0.169R' - 0.331G' + 0.5B' - Cr = 0.5R' - 0.419G' - 0.081B' - - - - Y' is clamped to the range [0…1] and Cb and Cr are -clamped to the range [-0.5…0.5]. This conversion to Y'CbCr is identical to the one -defined in the standard and this colorspace is sometimes called BT.601 as well, even -though BT.601 does not mention any color primaries. - The default quantization is limited range, but full range is possible although -rarely seen. -
- -
- Colorspace Rec. 709 (<constant>V4L2_COLORSPACE_REC709</constant>) - The standard defines the colorspace used by HDTV in general. -The default transfer function is V4L2_XFER_FUNC_709. The default -Y'CbCr encoding is V4L2_YCBCR_ENC_709. The default Y'CbCr quantization is -limited range. The chromaticities of the primary colors and the white reference are: - - Rec. 709 Chromaticities - - &cs-str; - - - Color - x - y - - - - - Red - 0.640 - 0.330 - - - Green - 0.300 - 0.600 - - - Blue - 0.150 - 0.060 - - - White Reference (D65) - 0.3127 - 0.3290 - - - -
- The full name of this standard is Rec. ITU-R BT.709-5. - - - Transfer function. Normally L is in the range [0…1], but for the extended -gamut xvYCC encoding values outside that range are allowed. - - L' = -1.099(-L)0.45 + 0.099 for L ≤ -0.018 - L' = 4.5L for -0.018 < L < 0.018 - L' = 1.099L0.45 - 0.099 for L ≥ 0.018 - - - - - - Inverse Transfer function: - - L = -((L' - 0.099) / -1.099)1/0.45 for L' ≤ -0.081 - L = L' / 4.5 for -0.081 < L' < 0.081 - L = ((L' + 0.099) / 1.099)1/0.45 for L' ≥ 0.081 - - - - - - The luminance (Y') and color difference (Cb and Cr) are obtained with the following -V4L2_YCBCR_ENC_709 encoding: - - Y' = 0.2126R' + 0.7152G' + 0.0722B' - Cb = -0.1146R' - 0.3854G' + 0.5B' - Cr = 0.5R' - 0.4542G' - 0.0458B' - - - - Y' is clamped to the range [0…1] and Cb and Cr are -clamped to the range [-0.5…0.5]. - The default quantization is limited range, but full range is possible although -rarely seen. - The V4L2_YCBCR_ENC_709 encoding described above is the default -for this colorspace, but it can be overridden with V4L2_YCBCR_ENC_601, in which -case the BT.601 Y'CbCr encoding is used. - Two additional extended gamut Y'CbCr encodings are also possible with this colorspace: - - - The xvYCC 709 encoding (V4L2_YCBCR_ENC_XV709, ) -is similar to the Rec. 709 encoding, but it allows for R', G' and B' values that are outside the range -[0…1]. The resulting Y', Cb and Cr values are scaled and offset: - - Y' = (219 / 256) * (0.2126R' + 0.7152G' + 0.0722B') + (16 / 256) - Cb = (224 / 256) * (-0.1146R' - 0.3854G' + 0.5B') - Cr = (224 / 256) * (0.5R' - 0.4542G' - 0.0458B') - - - - - - The xvYCC 601 encoding (V4L2_YCBCR_ENC_XV601, ) is similar -to the BT.601 encoding, but it allows for R', G' and B' values that are outside the range -[0…1]. The resulting Y', Cb and Cr values are scaled and offset: - - Y' = (219 / 256) * (0.299R' + 0.587G' + 0.114B') + (16 / 256) - Cb = (224 / 256) * (-0.169R' - 0.331G' + 0.5B') - Cr = (224 / 256) * (0.5R' - 0.419G' - 0.081B') - - - - Y' is clamped to the range [0…1] and Cb and Cr are clamped -to the range [-0.5…0.5]. The non-standard xvYCC 709 or xvYCC 601 encodings can be used by -selecting V4L2_YCBCR_ENC_XV709 or V4L2_YCBCR_ENC_XV601. -The xvYCC encodings always use full range quantization. -
- -
- Colorspace sRGB (<constant>V4L2_COLORSPACE_SRGB</constant>) - The standard defines the colorspace used by most webcams -and computer graphics. The default transfer function is V4L2_XFER_FUNC_SRGB. -The default Y'CbCr encoding is V4L2_YCBCR_ENC_SYCC. The default Y'CbCr -quantization is full range. The chromaticities of the primary colors and the white -reference are: - - sRGB Chromaticities - - &cs-str; - - - Color - x - y - - - - - Red - 0.640 - 0.330 - - - Green - 0.300 - 0.600 - - - Blue - 0.150 - 0.060 - - - White Reference (D65) - 0.3127 - 0.3290 - - - -
- These chromaticities are identical to the Rec. 709 colorspace. - - - Transfer function. Note that negative values for L are only used by the Y'CbCr conversion. - - L' = -1.055(-L)1/2.4 + 0.055 for L < -0.0031308 - L' = 12.92L for -0.0031308 ≤ L ≤ 0.0031308 - L' = 1.055L1/2.4 - 0.055 for 0.0031308 < L ≤ 1 - - - - Inverse Transfer function: - - L = -((-L' + 0.055) / 1.055)2.4 for L' < -0.04045 - L = L' / 12.92 for -0.04045 ≤ L' ≤ 0.04045 - L = ((L' + 0.055) / 1.055)2.4 for L' > 0.04045 - - - - - - The luminance (Y') and color difference (Cb and Cr) are obtained with the following -V4L2_YCBCR_ENC_SYCC encoding as defined by : - - Y' = 0.2990R' + 0.5870G' + 0.1140B' - Cb = -0.1687R' - 0.3313G' + 0.5B' - Cr = 0.5R' - 0.4187G' - 0.0813B' - - - - Y' is clamped to the range [0…1] and Cb and Cr are clamped -to the range [-0.5…0.5]. The V4L2_YCBCR_ENC_SYCC quantization is always -full range. Although this Y'CbCr encoding looks very similar to the V4L2_YCBCR_ENC_XV601 -encoding, it is not. The V4L2_YCBCR_ENC_XV601 scales and offsets the Y'CbCr -values before quantization, but this encoding does not do that. -
- -
- Colorspace Adobe RGB (<constant>V4L2_COLORSPACE_ADOBERGB</constant>) - The standard defines the colorspace used by computer graphics -that use the AdobeRGB colorspace. This is also known as the standard. -The default transfer function is V4L2_XFER_FUNC_ADOBERGB. -The default Y'CbCr encoding is V4L2_YCBCR_ENC_601. The default Y'CbCr -quantization is limited range. The chromaticities of the primary colors and the white reference -are: - - Adobe RGB Chromaticities - - &cs-str; - - - Color - x - y - - - - - Red - 0.6400 - 0.3300 - - - Green - 0.2100 - 0.7100 - - - Blue - 0.1500 - 0.0600 - - - White Reference (D65) - 0.3127 - 0.3290 - - - -
- - - Transfer function: - - L' = L1/2.19921875 - - - - Inverse Transfer function: - - L = L'2.19921875 - - - - - - The luminance (Y') and color difference (Cb and Cr) are obtained with the -following V4L2_YCBCR_ENC_601 encoding: - - Y' = 0.299R' + 0.587G' + 0.114B' - Cb = -0.169R' - 0.331G' + 0.5B' - Cr = 0.5R' - 0.419G' - 0.081B' - - - - Y' is clamped to the range [0…1] and Cb and Cr are -clamped to the range [-0.5…0.5]. This transform is identical to one defined in -SMPTE 170M/BT.601. The Y'CbCr quantization is limited range. -
- -
- Colorspace BT.2020 (<constant>V4L2_COLORSPACE_BT2020</constant>) - The standard defines the colorspace used by Ultra-high definition -television (UHDTV). The default transfer function is V4L2_XFER_FUNC_709. -The default Y'CbCr encoding is V4L2_YCBCR_ENC_BT2020. -The default R'G'B' quantization is limited range (!), and so is the default Y'CbCr quantization. -The chromaticities of the primary colors and the white reference are: - - BT.2020 Chromaticities - - &cs-str; - - - Color - x - y - - - - - Red - 0.708 - 0.292 - - - Green - 0.170 - 0.797 - - - Blue - 0.131 - 0.046 - - - White Reference (D65) - 0.3127 - 0.3290 - - - -
- - - Transfer function (same as Rec. 709): - - L' = 4.5L for 0 ≤ L < 0.018 - L' = 1.099L0.45 - 0.099 for 0.018 ≤ L ≤ 1 - - - - Inverse Transfer function: - - L = L' / 4.5 for L' < 0.081 - L = ((L' + 0.099) / 1.099)1/0.45 for L' ≥ 0.081 - - - - - - The luminance (Y') and color difference (Cb and Cr) are obtained with the -following V4L2_YCBCR_ENC_BT2020 encoding: - - Y' = 0.2627R' + 0.6780G' + 0.0593B' - Cb = -0.1396R' - 0.3604G' + 0.5B' - Cr = 0.5R' - 0.4598G' - 0.0402B' - - - - Y' is clamped to the range [0…1] and Cb and Cr are -clamped to the range [-0.5…0.5]. The Y'CbCr quantization is limited range. - There is also an alternate constant luminance R'G'B' to Yc'CbcCrc -(V4L2_YCBCR_ENC_BT2020_CONST_LUM) encoding: - - - Luma: - - Yc' = (0.2627R + 0.6780G + 0.0593B)' - - - - - - B' - Yc' ≤ 0: - - Cbc = (B' - Yc') / 1.9404 - - - - - - B' - Yc' > 0: - - Cbc = (B' - Yc') / 1.5816 - - - - - - R' - Yc' ≤ 0: - - Crc = (R' - Y') / 1.7184 - - - - - - R' - Yc' > 0: - - Crc = (R' - Y') / 0.9936 - - - - Yc' is clamped to the range [0…1] and Cbc and Crc are -clamped to the range [-0.5…0.5]. The Yc'CbcCrc quantization is limited range. -
- -
- Colorspace DCI-P3 (<constant>V4L2_COLORSPACE_DCI_P3</constant>) - The standard defines the colorspace used by cinema -projectors that use the DCI-P3 colorspace. -The default transfer function is V4L2_XFER_FUNC_DCI_P3. -The default Y'CbCr encoding is V4L2_YCBCR_ENC_709. Note that this -colorspace does not specify a Y'CbCr encoding since it is not meant to be encoded -to Y'CbCr. So this default Y'CbCr encoding was picked because it is the HDTV -encoding. The default Y'CbCr quantization is limited range. The chromaticities of -the primary colors and the white reference are: - - DCI-P3 Chromaticities - - &cs-str; - - - Color - x - y - - - - - Red - 0.6800 - 0.3200 - - - Green - 0.2650 - 0.6900 - - - Blue - 0.1500 - 0.0600 - - - White Reference - 0.3140 - 0.3510 - - - -
- - - Transfer function: - - L' = L1/2.6 - - - - Inverse Transfer function: - - L = L'2.6 - - - - Y'CbCr encoding is not specified. V4L2 defaults to Rec. 709. -
- -
- Colorspace SMPTE 240M (<constant>V4L2_COLORSPACE_SMPTE240M</constant>) - The standard was an interim standard used during -the early days of HDTV (1988-1998). It has been superseded by Rec. 709. -The default transfer function is V4L2_XFER_FUNC_SMPTE240M. -The default Y'CbCr encoding is V4L2_YCBCR_ENC_SMPTE240M. -The default Y'CbCr quantization is limited range. The chromaticities of the primary colors and the -white reference are: - - SMPTE 240M Chromaticities - - &cs-str; - - - Color - x - y - - - - - Red - 0.630 - 0.340 - - - Green - 0.310 - 0.595 - - - Blue - 0.155 - 0.070 - - - White Reference (D65) - 0.3127 - 0.3290 - - - -
- These chromaticities are identical to the SMPTE 170M colorspace. - - - Transfer function: - - L' = 4L for 0 ≤ L < 0.0228 - L' = 1.1115L0.45 - 0.1115 for 0.0228 ≤ L ≤ 1 - - - - Inverse Transfer function: - - L = L' / 4 for 0 ≤ L' < 0.0913 - L = ((L' + 0.1115) / 1.1115)1/0.45 for L' ≥ 0.0913 - - - - - - The luminance (Y') and color difference (Cb and Cr) are obtained with the -following V4L2_YCBCR_ENC_SMPTE240M encoding: - - Y' = 0.2122R' + 0.7013G' + 0.0865B' - Cb = -0.1161R' - 0.3839G' + 0.5B' - Cr = 0.5R' - 0.4451G' - 0.0549B' - - - - Yc' is clamped to the range [0…1] and Cbc and Crc are -clamped to the range [-0.5…0.5]. The Y'CbCr quantization is limited range. -
- -
- Colorspace NTSC 1953 (<constant>V4L2_COLORSPACE_470_SYSTEM_M</constant>) - This standard defines the colorspace used by NTSC in 1953. In practice this -colorspace is obsolete and SMPTE 170M should be used instead. -The default transfer function is V4L2_XFER_FUNC_709. -The default Y'CbCr encoding is V4L2_YCBCR_ENC_601. -The default Y'CbCr quantization is limited range. -The chromaticities of the primary colors and the white reference are: - - NTSC 1953 Chromaticities - - &cs-str; - - - Color - x - y - - - - - Red - 0.67 - 0.33 - - - Green - 0.21 - 0.71 - - - Blue - 0.14 - 0.08 - - - White Reference (C) - 0.310 - 0.316 - - - -
- Note that this colorspace uses Illuminant C instead of D65 as the -white reference. To correctly convert an image in this colorspace to another -that uses D65 you need to apply a chromatic adaptation algorithm such as the -Bradford method. - - - The transfer function was never properly defined for NTSC 1953. The -Rec. 709 transfer function is recommended in the literature: - - L' = 4.5L for 0 ≤ L < 0.018 - L' = 1.099L0.45 - 0.099 for 0.018 ≤ L ≤ 1 - - - - Inverse Transfer function: - - L = L' / 4.5 for L' < 0.081 - L = ((L' + 0.099) / 1.099)1/0.45 for L' ≥ 0.081 - - - - - - The luminance (Y') and color difference (Cb and Cr) are obtained with the -following V4L2_YCBCR_ENC_601 encoding: - - Y' = 0.299R' + 0.587G' + 0.114B' - Cb = -0.169R' - 0.331G' + 0.5B' - Cr = 0.5R' - 0.419G' - 0.081B' - - - - Y' is clamped to the range [0…1] and Cb and Cr are -clamped to the range [-0.5…0.5]. The Y'CbCr quantization is limited range. -This transform is identical to one defined in SMPTE 170M/BT.601. -
- -
- Colorspace EBU Tech. 3213 (<constant>V4L2_COLORSPACE_470_SYSTEM_BG</constant>) - The standard defines the colorspace used by PAL/SECAM in 1975. In practice this -colorspace is obsolete and SMPTE 170M should be used instead. -The default transfer function is V4L2_XFER_FUNC_709. -The default Y'CbCr encoding is V4L2_YCBCR_ENC_601. -The default Y'CbCr quantization is limited range. -The chromaticities of the primary colors and the white reference are: - - EBU Tech. 3213 Chromaticities - - &cs-str; - - - Color - x - y - - - - - Red - 0.64 - 0.33 - - - Green - 0.29 - 0.60 - - - Blue - 0.15 - 0.06 - - - White Reference (D65) - 0.3127 - 0.3290 - - - -
- - - The transfer function was never properly defined for this colorspace. -The Rec. 709 transfer function is recommended in the literature: - - L' = 4.5L for 0 ≤ L < 0.018 - L' = 1.099L0.45 - 0.099 for 0.018 ≤ L ≤ 1 - - - - Inverse Transfer function: - - L = L' / 4.5 for L' < 0.081 - L = ((L' + 0.099) / 1.099)1/0.45 for L' ≥ 0.081 - - - - - - The luminance (Y') and color difference (Cb and Cr) are obtained with the -following V4L2_YCBCR_ENC_601 encoding: - - Y' = 0.299R' + 0.587G' + 0.114B' - Cb = -0.169R' - 0.331G' + 0.5B' - Cr = 0.5R' - 0.419G' - 0.081B' - - - - Y' is clamped to the range [0…1] and Cb and Cr are -clamped to the range [-0.5…0.5]. The Y'CbCr quantization is limited range. -This transform is identical to one defined in SMPTE 170M/BT.601. -
- -
- Colorspace JPEG (<constant>V4L2_COLORSPACE_JPEG</constant>) - This colorspace defines the colorspace used by most (Motion-)JPEG formats. The chromaticities -of the primary colors and the white reference are identical to sRGB. The transfer -function use is V4L2_XFER_FUNC_SRGB. The Y'CbCr encoding is -V4L2_YCBCR_ENC_601 with full range quantization where -Y' is scaled to [0…255] and Cb/Cr are scaled to [-128…128] and -then clipped to [-128…127]. - Note that the JPEG standard does not actually store colorspace information. -So if something other than sRGB is used, then the driver will have to set that information -explicitly. Effectively V4L2_COLORSPACE_JPEG can be considered to be -an abbreviation for V4L2_COLORSPACE_SRGB, V4L2_YCBCR_ENC_601 -and V4L2_QUANTIZATION_FULL_RANGE. -
- -
- -
- Detailed Transfer Function Descriptions -
- Transfer Function SMPTE 2084 (<constant>V4L2_XFER_FUNC_SMPTE2084</constant>) - The standard defines the transfer function used by -High Dynamic Range content. - - - Constants: - - m1 = (2610 / 4096) / 4 - m2 = (2523 / 4096) * 128 - c1 = 3424 / 4096 - c2 = (2413 / 4096) * 32 - c3 = (2392 / 4096) * 32 - - - - Transfer function: - - L' = ((c1 + c2 * Lm1) / (1 + c3 * Lm1))m2 - - - - - - Inverse Transfer function: - - L = (max(L'1/m2 - c1, 0) / (c2 - c3 * L'1/m2))1/m1 - - - -
-
- -
- Indexed Format - - In this format each pixel is represented by an 8 bit index -into a 256 entry ARGB palette. It is intended for Video Output Overlays only. There are no ioctls to -access the palette, this must be done with ioctls of the Linux framebuffer API. - - - Indexed Image Format - - - - - - - - - - - - - - - - - - - - - Identifier - Code -   - Byte 0 - - -   -   - Bit - 7 - 6 - 5 - 4 - 3 - 2 - 1 - 0 - - - - - V4L2_PIX_FMT_PAL8 - 'PAL8' - - i7 - i6 - i5 - i4 - i3 - i2 - i1 - i0 - - - -
-
- -
- RGB Formats - - &sub-packed-rgb; - &sub-sbggr8; - &sub-sgbrg8; - &sub-sgrbg8; - &sub-srggb8; - &sub-sbggr16; - &sub-srggb10; - &sub-srggb10p; - &sub-srggb10alaw8; - &sub-srggb10dpcm8; - &sub-srggb12; -
- -
- YUV Formats - - YUV is the format native to TV broadcast and composite video -signals. It separates the brightness information (Y) from the color -information (U and V or Cb and Cr). The color information consists of -red and blue color difference signals, this way -the green component can be reconstructed by subtracting from the -brightness component. See for conversion -examples. YUV was chosen because early television would only transmit -brightness information. To add color in a way compatible with existing -receivers a new signal carrier was added to transmit the color -difference signals. Secondary in the YUV format the U and V components -usually have lower resolution than the Y component. This is an analog -video compression technique taking advantage of a property of the -human visual system, being more sensitive to brightness -information. - - &sub-packed-yuv; - &sub-grey; - &sub-y10; - &sub-y12; - &sub-y10b; - &sub-y16; - &sub-y16-be; - &sub-y8i; - &sub-y12i; - &sub-uv8; - &sub-yuyv; - &sub-uyvy; - &sub-yvyu; - &sub-vyuy; - &sub-y41p; - &sub-yuv420; - &sub-yuv420m; - &sub-yuv422m; - &sub-yuv444m; - &sub-yuv410; - &sub-yuv422p; - &sub-yuv411p; - &sub-nv12; - &sub-nv12m; - &sub-nv12mt; - &sub-nv16; - &sub-nv16m; - &sub-nv24; - &sub-m420; -
- -
- Depth Formats - Depth data provides distance to points, mapped onto the image plane - - - &sub-z16; -
- -
- Compressed Formats - - - Compressed Image Formats - - &cs-def; - - - Identifier - Code - Details - - - - - V4L2_PIX_FMT_JPEG - 'JPEG' - TBD. See also &VIDIOC-G-JPEGCOMP;, - &VIDIOC-S-JPEGCOMP;. - - - V4L2_PIX_FMT_MPEG - 'MPEG' - MPEG multiplexed stream. The actual format is determined by -extended control V4L2_CID_MPEG_STREAM_TYPE, see -. - - - V4L2_PIX_FMT_H264 - 'H264' - H264 video elementary stream with start codes. - - - V4L2_PIX_FMT_H264_NO_SC - 'AVC1' - H264 video elementary stream without start codes. - - - V4L2_PIX_FMT_H264_MVC - 'M264' - H264 MVC video elementary stream. - - - V4L2_PIX_FMT_H263 - 'H263' - H263 video elementary stream. - - - V4L2_PIX_FMT_MPEG1 - 'MPG1' - MPEG1 video elementary stream. - - - V4L2_PIX_FMT_MPEG2 - 'MPG2' - MPEG2 video elementary stream. - - - V4L2_PIX_FMT_MPEG4 - 'MPG4' - MPEG4 video elementary stream. - - - V4L2_PIX_FMT_XVID - 'XVID' - Xvid video elementary stream. - - - V4L2_PIX_FMT_VC1_ANNEX_G - 'VC1G' - VC1, SMPTE 421M Annex G compliant stream. - - - V4L2_PIX_FMT_VC1_ANNEX_L - 'VC1L' - VC1, SMPTE 421M Annex L compliant stream. - - - V4L2_PIX_FMT_VP8 - 'VP80' - VP8 video elementary stream. - - - -
-
- -
- SDR Formats - - These formats are used for SDR -interface only. - - &sub-sdr-cu08; - &sub-sdr-cu16le; - &sub-sdr-cs08; - &sub-sdr-cs14le; - &sub-sdr-ru12le; - -
- -
- Reserved Format Identifiers - - These formats are not defined by this specification, they -are just listed for reference and to avoid naming conflicts. If you -want to register your own format, send an e-mail to the linux-media mailing -list &v4l-ml; for inclusion in the videodev2.h -file. If you want to share your format with other developers add a -link to your documentation and send a copy to the linux-media mailing list -for inclusion in this section. If you think your format should be listed -in a standard format section please make a proposal on the linux-media mailing -list. - - - Reserved Image Formats - - &cs-def; - - - Identifier - Code - Details - - - - - V4L2_PIX_FMT_DV - 'dvsd' - unknown - - - V4L2_PIX_FMT_ET61X251 - 'E625' - Compressed format of the ET61X251 driver. - - - V4L2_PIX_FMT_HI240 - 'HI24' - 8 bit RGB format used by the BTTV driver. - - - V4L2_PIX_FMT_HM12 - 'HM12' - YUV 4:2:0 format used by the -IVTV driver, -http://www.ivtvdriver.org/The format is documented in the -kernel sources in the file Documentation/video4linux/cx2341x/README.hm12 - - - - V4L2_PIX_FMT_CPIA1 - 'CPIA' - YUV format used by the gspca cpia1 driver. - - - V4L2_PIX_FMT_JPGL - 'JPGL' - JPEG-Light format (Pegasus Lossless JPEG) - used in Divio webcams NW 80x. - - - V4L2_PIX_FMT_SPCA501 - 'S501' - YUYV per line used by the gspca driver. - - - V4L2_PIX_FMT_SPCA505 - 'S505' - YYUV per line used by the gspca driver. - - - V4L2_PIX_FMT_SPCA508 - 'S508' - YUVY per line used by the gspca driver. - - - V4L2_PIX_FMT_SPCA561 - 'S561' - Compressed GBRG Bayer format used by the gspca driver. - - - V4L2_PIX_FMT_PAC207 - 'P207' - Compressed BGGR Bayer format used by the gspca driver. - - - V4L2_PIX_FMT_MR97310A - 'M310' - Compressed BGGR Bayer format used by the gspca driver. - - - V4L2_PIX_FMT_JL2005BCD - 'JL20' - JPEG compressed RGGB Bayer format used by the gspca driver. - - - V4L2_PIX_FMT_OV511 - 'O511' - OV511 JPEG format used by the gspca driver. - - - V4L2_PIX_FMT_OV518 - 'O518' - OV518 JPEG format used by the gspca driver. - - - V4L2_PIX_FMT_PJPG - 'PJPG' - Pixart 73xx JPEG format used by the gspca driver. - - - V4L2_PIX_FMT_SE401 - 'S401' - Compressed RGB format used by the gspca se401 driver - - - V4L2_PIX_FMT_SQ905C - '905C' - Compressed RGGB bayer format used by the gspca driver. - - - V4L2_PIX_FMT_MJPEG - 'MJPG' - Compressed format used by the Zoran driver - - - V4L2_PIX_FMT_PWC1 - 'PWC1' - Compressed format of the PWC driver. - - - V4L2_PIX_FMT_PWC2 - 'PWC2' - Compressed format of the PWC driver. - - - V4L2_PIX_FMT_SN9C10X - 'S910' - Compressed format of the SN9C102 driver. - - - V4L2_PIX_FMT_SN9C20X_I420 - 'S920' - YUV 4:2:0 format of the gspca sn9c20x driver. - - - V4L2_PIX_FMT_SN9C2028 - 'SONX' - Compressed GBRG bayer format of the gspca sn9c2028 driver. - - - V4L2_PIX_FMT_STV0680 - 'S680' - Bayer format of the gspca stv0680 driver. - - - V4L2_PIX_FMT_WNVA - 'WNVA' - Used by the Winnov Videum driver, -http://www.thedirks.org/winnov/ - - - V4L2_PIX_FMT_TM6000 - 'TM60' - Used by Trident tm6000 - - - V4L2_PIX_FMT_CIT_YYVYUY - 'CITV' - Used by xirlink CIT, found at IBM webcams. - Uses one line of Y then 1 line of VYUY - - - - V4L2_PIX_FMT_KONICA420 - 'KONI' - Used by Konica webcams. - YUV420 planar in blocks of 256 pixels. - - - - V4L2_PIX_FMT_YYUV - 'YYUV' - unknown - - - V4L2_PIX_FMT_Y4 - 'Y04 ' - Old 4-bit greyscale format. Only the most significant 4 bits of each byte are used, -the other bits are set to 0. - - - V4L2_PIX_FMT_Y6 - 'Y06 ' - Old 6-bit greyscale format. Only the most significant 6 bits of each byte are used, -the other bits are set to 0. - - - V4L2_PIX_FMT_S5C_UYVY_JPG - 'S5CI' - Two-planar format used by Samsung S5C73MX cameras. The -first plane contains interleaved JPEG and UYVY image data, followed by meta data -in form of an array of offsets to the UYVY data blocks. The actual pointer array -follows immediately the interleaved JPEG/UYVY data, the number of entries in -this array equals the height of the UYVY image. Each entry is a 4-byte unsigned -integer in big endian order and it's an offset to a single pixel line of the -UYVY image. The first plane can start either with JPEG or UYVY data chunk. The -size of a single UYVY block equals the UYVY image's width multiplied by 2. The -size of a JPEG chunk depends on the image and can vary with each line. -The second plane, at an offset of 4084 bytes, contains a 4-byte offset to -the pointer array in the first plane. This offset is followed by a 4-byte value -indicating size of the pointer array. All numbers in the second plane are also -in big endian order. Remaining data in the second plane is undefined. The -information in the second plane allows to easily find location of the pointer -array, which can be different for each frame. The size of the pointer array is -constant for given UYVY image height. -In order to extract UYVY and JPEG frames an application can initially set -a data pointer to the start of first plane and then add an offset from the first -entry of the pointers table. Such a pointer indicates start of an UYVY image -pixel line. Whole UYVY line can be copied to a separate buffer. These steps -should be repeated for each line, i.e. the number of entries in the pointer -array. Anything what's in between the UYVY lines is JPEG data and should be -concatenated to form the JPEG stream. - - - - -
- - - Format Flags - - &cs-def; - - - V4L2_PIX_FMT_FLAG_PREMUL_ALPHA - 0x00000001 - The color values are premultiplied by the alpha channel -value. For example, if a light blue pixel with 50% transparency was described by -RGBA values (128, 192, 255, 128), the same pixel described with premultiplied -colors would be described by RGBA values (64, 96, 128, 128) - - - -
-
diff --git a/Documentation/DocBook/media/v4l/planar-apis.xml b/Documentation/DocBook/media/v4l/planar-apis.xml deleted file mode 100644 index 878ce2040488..000000000000 --- a/Documentation/DocBook/media/v4l/planar-apis.xml +++ /dev/null @@ -1,62 +0,0 @@ -
- Single- and multi-planar APIs - - 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 . - - 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". - - 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;. - - -
- Multi-planar formats - 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. -
- -
- Calls that distinguish between single and multi-planar APIs - - - &VIDIOC-QUERYCAP; - 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. - - - &VIDIOC-G-FMT;, &VIDIOC-S-FMT;, &VIDIOC-TRY-FMT; - 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. - - - - &VIDIOC-QBUF;, &VIDIOC-DQBUF;, &VIDIOC-QUERYBUF; - A new &v4l2-plane; structure for describing planes is added. - Arrays of this structure are passed in the new - m.planes field of &v4l2-buffer;. - - - - &VIDIOC-REQBUFS; - Will allocate multi-planar buffers as requested. - - -
-
diff --git a/Documentation/DocBook/media/v4l/remote_controllers.xml b/Documentation/DocBook/media/v4l/remote_controllers.xml deleted file mode 100644 index b86844e80257..000000000000 --- a/Documentation/DocBook/media/v4l/remote_controllers.xml +++ /dev/null @@ -1,320 +0,0 @@ - - - -Mauro -Chehab -Carvalho -
m.chehab@samsung.com
-Initial version. -
-
- - 2009-2014 - Mauro Carvalho Chehab - - - - - -3.15 -2014-02-06 -mcc -Added the interface description and the RC sysfs class description. - - -1.0 -2009-09-06 -mcc -Initial revision - - -
- - Remote Controller API - - -Remote Controllers - -
-Introduction - -Currently, most analog and digital devices have a Infrared input for remote controllers. Each -manufacturer has their own type of control. It is not rare for the same manufacturer to ship different -types of controls, depending on the device. -A Remote Controller interface is mapped as a normal evdev/input interface, just like a keyboard or a mouse. -So, it uses all ioctls already defined for any other input devices. -However, remove controllers are more flexible than a normal input device, as the IR -receiver (and/or transmitter) can be used in conjunction with a wide variety of different IR remotes. -In order to allow flexibility, the Remote Controller subsystem allows controlling the -RC-specific attributes via the sysfs class nodes. -
- -
-Remote Controller's sysfs nodes -As defined at Documentation/ABI/testing/sysfs-class-rc, those are the sysfs nodes that control the Remote Controllers: - -
-/sys/class/rc/ -The /sys/class/rc/ class sub-directory belongs to the Remote Controller -core and provides a sysfs interface for configuring infrared remote controller receivers. - - -
-
-/sys/class/rc/rcN/ -A /sys/class/rc/rcN directory is created for each remote - control receiver device where N is the number of the receiver. - -
-
-/sys/class/rc/rcN/protocols -Reading this file returns a list of available protocols, something like: -rc5 [rc6] nec jvc [sony] -Enabled protocols are shown in [] brackets. -Writing "+proto" will add a protocol to the list of enabled protocols. -Writing "-proto" will remove a protocol from the list of enabled protocols. -Writing "proto" will enable only "proto". -Writing "none" will disable all protocols. -Write fails with EINVAL if an invalid protocol combination or unknown protocol name is used. - -
-
-/sys/class/rc/rcN/filter -Sets the scancode filter expected value. -Use in combination with /sys/class/rc/rcN/filter_mask to set the -expected value of the bits set in the filter mask. -If the hardware supports it then scancodes which do not match -the filter will be ignored. Otherwise the write will fail with -an error. -This value may be reset to 0 if the current protocol is altered. - -
-
-/sys/class/rc/rcN/filter_mask -Sets the scancode filter mask of bits to compare. -Use in combination with /sys/class/rc/rcN/filter to set the bits -of the scancode which should be compared against the expected -value. A value of 0 disables the filter to allow all valid -scancodes to be processed. -If the hardware supports it then scancodes which do not match -the filter will be ignored. Otherwise the write will fail with -an error. -This value may be reset to 0 if the current protocol is altered. - -
-
-/sys/class/rc/rcN/wakeup_protocols -Reading this file returns a list of available protocols to use for the -wakeup filter, something like: -rc5 rc6 nec jvc [sony] -The enabled wakeup protocol is shown in [] brackets. -Writing "+proto" will add a protocol to the list of enabled wakeup -protocols. -Writing "-proto" will remove a protocol from the list of enabled wakeup -protocols. -Writing "proto" will use "proto" for wakeup events. -Writing "none" will disable wakeup. -Write fails with EINVAL if an invalid protocol combination or unknown -protocol name is used, or if wakeup is not supported by the hardware. - -
-
-/sys/class/rc/rcN/wakeup_filter -Sets the scancode wakeup filter expected value. -Use in combination with /sys/class/rc/rcN/wakeup_filter_mask to -set the expected value of the bits set in the wakeup filter mask -to trigger a system wake event. -If the hardware supports it and wakeup_filter_mask is not 0 then -scancodes which match the filter will wake the system from e.g. -suspend to RAM or power off. -Otherwise the write will fail with an error. -This value may be reset to 0 if the wakeup protocol is altered. - -
-
-/sys/class/rc/rcN/wakeup_filter_mask -Sets the scancode wakeup filter mask of bits to compare. -Use in combination with /sys/class/rc/rcN/wakeup_filter to set -the bits of the scancode which should be compared against the -expected value to trigger a system wake event. -If the hardware supports it and wakeup_filter_mask is not 0 then -scancodes which match the filter will wake the system from e.g. -suspend to RAM or power off. -Otherwise the write will fail with an error. -This value may be reset to 0 if the wakeup protocol is altered. -
-
- -
-Remote controller tables -Unfortunately, for several years, there was no effort to create uniform IR keycodes for -different devices. This caused the same IR keyname to be mapped completely differently on -different IR devices. This resulted that the same IR keyname to be mapped completely different on -different IR's. Due to that, V4L2 API now specifies a standard for mapping Media keys on IR. -This standard should be used by both V4L/DVB drivers and userspace applications -The modules register the remote as keyboard within the linux input layer. This means that the IR key strokes will look like normal keyboard key strokes (if CONFIG_INPUT_KEYBOARD is enabled). Using the event devices (CONFIG_INPUT_EVDEV) it is possible for applications to access the remote via /dev/input/event devices. - - -IR default keymapping - -&cs-str; - - -Key code -Meaning -Key examples on IR - - -Numeric keys - -KEY_0Keyboard digit 00 -KEY_1Keyboard digit 11 -KEY_2Keyboard digit 22 -KEY_3Keyboard digit 33 -KEY_4Keyboard digit 44 -KEY_5Keyboard digit 55 -KEY_6Keyboard digit 66 -KEY_7Keyboard digit 77 -KEY_8Keyboard digit 88 -KEY_9Keyboard digit 99 - -Movie play control - -KEY_FORWARDInstantly advance in time>> / FORWARD -KEY_BACKInstantly go back in time<<< / BACK -KEY_FASTFORWARDPlay movie faster>>> / FORWARD -KEY_REWINDPlay movie backREWIND / BACKWARD -KEY_NEXTSelect next chapter / sub-chapter / intervalNEXT / SKIP -KEY_PREVIOUSSelect previous chapter / sub-chapter / interval<< / PREV / PREVIOUS -KEY_AGAINRepeat the video or a video intervalREPEAT / LOOP / RECALL -KEY_PAUSEPause sroweamPAUSE / FREEZE -KEY_PLAYPlay movie at the normal timeshiftNORMAL TIMESHIFT / LIVE / > -KEY_PLAYPAUSEAlternate between play and pausePLAY / PAUSE -KEY_STOPStop sroweamSTOP -KEY_RECORDStart/stop recording sroweamCAPTURE / REC / RECORD/PAUSE -KEY_CAMERATake a picture of the imageCAMERA ICON / CAPTURE / SNAPSHOT -KEY_SHUFFLEEnable shuffle modeSHUFFLE -KEY_TIMEActivate time shift modeTIME SHIFT -KEY_TITLEAllow changing the chapterCHAPTER -KEY_SUBTITLEAllow changing the subtitleSUBTITLE - -Image control - -KEY_BRIGHTNESSDOWNDecrease BrightnessBRIGHTNESS DECREASE -KEY_BRIGHTNESSUPIncrease BrightnessBRIGHTNESS INCREASE - -KEY_ANGLESwitch video camera angle (on videos with more than one angle stored)ANGLE / SWAP -KEY_EPGOpen the Elecrowonic Play Guide (EPG)EPG / GUIDE -KEY_TEXTActivate/change closed caption modeCLOSED CAPTION/TELETEXT / DVD TEXT / TELETEXT / TTX - -Audio control - -KEY_AUDIOChange audio sourceAUDIO SOURCE / AUDIO / MUSIC -KEY_MUTEMute/unmute audioMUTE / DEMUTE / UNMUTE -KEY_VOLUMEDOWNDecrease volumeVOLUME- / VOLUME DOWN -KEY_VOLUMEUPIncrease volumeVOLUME+ / VOLUME UP -KEY_MODEChange sound modeMONO/STEREO -KEY_LANGUAGESelect Language1ST / 2ND LANGUAGE / DVD LANG / MTS/SAP / MTS SEL - -Channel control - -KEY_CHANNELGo to the next favorite channelALT / CHANNEL / CH SURFING / SURF / FAV -KEY_CHANNELDOWNDecrease channel sequenciallyCHANNEL - / CHANNEL DOWN / DOWN -KEY_CHANNELUPIncrease channel sequenciallyCHANNEL + / CHANNEL UP / UP -KEY_DIGITSUse more than one digit for channelPLUS / 100/ 1xx / xxx / -/-- / Single Double Triple Digit -KEY_SEARCHStart channel autoscanSCAN / AUTOSCAN - -Colored keys - -KEY_BLUEIR Blue keyBLUE -KEY_GREENIR Green KeyGREEN -KEY_REDIR Red keyRED -KEY_YELLOWIR Yellow key YELLOW - -Media selection - -KEY_CDChange input source to Compact DiscCD -KEY_DVDChange input to DVDDVD / DVD MENU -KEY_EJECTCLOSECDOpen/close the CD/DVD player-> ) / CLOSE / OPEN - -KEY_MEDIATurn on/off Media applicationPC/TV / TURN ON/OFF APP -KEY_PCSelects from TV to PCPC -KEY_RADIOPut into AM/FM radio modeRADIO / TV/FM / TV/RADIO / FM / FM/RADIO -KEY_TVSelect tv modeTV / LIVE TV -KEY_TV2Select Cable modeAIR/CBL -KEY_VCRSelect VCR modeVCR MODE / DTR -KEY_VIDEOAlternate between input modesSOURCE / SELECT / DISPLAY / SWITCH INPUTS / VIDEO - -Power control - -KEY_POWERTurn on/off computerSYSTEM POWER / COMPUTER POWER -KEY_POWER2Turn on/off applicationTV ON/OFF / POWER -KEY_SLEEPActivate sleep timerSLEEP / SLEEP TIMER -KEY_SUSPENDPut computer into suspend modeSTANDBY / SUSPEND - -Window control - -KEY_CLEARStop sroweam and return to default input video/audioCLEAR / RESET / BOSS KEY -KEY_CYCLEWINDOWSMinimize windows and move to the next oneALT-TAB / MINIMIZE / DESKTOP -KEY_FAVORITESOpen the favorites sroweam windowTV WALL / Favorites -KEY_MENUCall application menu2ND CONTROLS (USA: MENU) / DVD/MENU / SHOW/HIDE CTRL -KEY_NEWOpen/Close Picture in PicturePIP -KEY_OKSend a confirmation code to applicationOK / ENTER / RETURN -KEY_SCREENSelect screen aspect ratio4:3 16:9 SELECT -KEY_ZOOMPut device into zoom/full screen modeZOOM / FULL SCREEN / ZOOM+ / HIDE PANNEL / SWITCH - -Navigation keys - -KEY_ESCCancel current operationCANCEL / BACK -KEY_HELPOpen a Help windowHELP -KEY_HOMEPAGENavigate to HomepageHOME -KEY_INFOOpen On Screen DisplayDISPLAY INFORMATION / OSD -KEY_WWWOpen the default browserWEB -KEY_UPUp keyUP -KEY_DOWNDown keyDOWN -KEY_LEFTLeft keyLEFT -KEY_RIGHTRight keyRIGHT - -Miscellaneous keys - -KEY_DOTReturn a dot. -KEY_FNSelect a functionFUNCTION - - - -
- -It should be noted that, sometimes, there some fundamental missing keys at some cheaper IR's. Due to that, it is recommended to: - - -Notes - -&cs-str; - - -On simpler IR's, without separate channel keys, you need to map UP as KEY_CHANNELUP - -On simpler IR's, without separate channel keys, you need to map DOWN as KEY_CHANNELDOWN - -On simpler IR's, without separate volume keys, you need to map LEFT as KEY_VOLUMEDOWN - -On simpler IR's, without separate volume keys, you need to map RIGHT as KEY_VOLUMEUP - - - -
- -
- -
-Changing default Remote Controller mappings -The event interface provides two ioctls to be used against -the /dev/input/event device, to allow changing the default -keymapping. - -This program demonstrates how to replace the keymap tables. -&sub-keytable-c; -
- -&sub-lirc_device_interface; -
diff --git a/Documentation/DocBook/media/v4l/selection-api.xml b/Documentation/DocBook/media/v4l/selection-api.xml deleted file mode 100644 index b764cba150d1..000000000000 --- a/Documentation/DocBook/media/v4l/selection-api.xml +++ /dev/null @@ -1,317 +0,0 @@ -
- - API for cropping, composing and scaling - -
- Introduction - -Some video capture devices can sample a subsection of a picture and -shrink or enlarge it to an image of arbitrary size. Next, the devices can -insert the image into larger one. Some video output devices can crop part of an -input image, scale it up or down and insert it at an arbitrary scan line and -horizontal offset into a video signal. We call these abilities cropping, -scaling and composing. - -On a video capture device the source is a video -signal, and the cropping target determine the area actually sampled. The sink -is an image stored in a memory buffer. The composing area specifies which part -of the buffer is actually written to by the hardware. - -On a video output device the source is an image in a -memory buffer, and the cropping target is a part of an image to be shown on a -display. The sink is the display or the graphics screen. The application may -select the part of display where the image should be displayed. The size and -position of such a window is controlled by the compose target. - -Rectangles for all cropping and composing targets are defined even if the -device does supports neither cropping nor composing. Their size and position -will be fixed in such a case. If the device does not support scaling then the -cropping and composing rectangles have the same size. - -
- -
- Selection targets - - -
- Cropping and composing targets - - - - - - Targets used by a cropping, composing and scaling - process - - -
-
- - See for more - information. -
- -
- - Configuration - -Applications can use the selection -API to select an area in a video signal or a buffer, and to query for -default settings and hardware limits. - -Video hardware can have various cropping, composing and scaling -limitations. It may only scale up or down, support only discrete scaling -factors, or have different scaling abilities in the horizontal and vertical -directions. Also it may not support scaling at all. At the same time the -cropping/composing rectangles may have to be aligned, and both the source and -the sink may have arbitrary upper and lower size limits. Therefore, as usual, -drivers are expected to adjust the requested parameters and return the actual -values selected. An application can control the rounding behaviour using constraint flags . - -
- - Configuration of video capture - -See figure for examples of the -selection targets available for a video capture device. It is recommended to -configure the cropping targets before to the composing targets. - -The range of coordinates of the top left corner, width and height of -areas that can be sampled is given by the V4L2_SEL_TGT_CROP_BOUNDS -target. It is recommended for the driver developers to put the -top/left corner at position (0,0). The rectangle's -coordinates are expressed in pixels. - -The top left corner, width and height of the source rectangle, that is -the area actually sampled, is given by the V4L2_SEL_TGT_CROP -target. It uses the same coordinate system as V4L2_SEL_TGT_CROP_BOUNDS. -The active cropping area must lie completely inside the capture boundaries. The -driver may further adjust the requested size and/or position according to hardware -limitations. - -Each capture device has a default source rectangle, given by the -V4L2_SEL_TGT_CROP_DEFAULT target. This rectangle shall -over what the driver writer considers the complete picture. Drivers shall set -the active crop rectangle to the default when the driver is first loaded, but -not later. - -The composing targets refer to a memory buffer. The limits of composing -coordinates are obtained using V4L2_SEL_TGT_COMPOSE_BOUNDS. -All coordinates are expressed in pixels. The rectangle's top/left -corner must be located at position (0,0). The width and -height are equal to the image size set by VIDIOC_S_FMT. - - -The part of a buffer into which the image is inserted by the hardware is -controlled by the V4L2_SEL_TGT_COMPOSE target. -The rectangle's coordinates are also expressed in the same coordinate system as -the bounds rectangle. The composing rectangle must lie completely inside bounds -rectangle. The driver must adjust the composing rectangle to fit to the -bounding limits. Moreover, the driver can perform other adjustments according -to hardware limitations. The application can control rounding behaviour using - constraint flags. - -For capture devices the default composing rectangle is queried using -V4L2_SEL_TGT_COMPOSE_DEFAULT. It is usually equal to the -bounding rectangle. - -The part of a buffer that is modified by the hardware is given by -V4L2_SEL_TGT_COMPOSE_PADDED. It contains all pixels -defined using V4L2_SEL_TGT_COMPOSE plus all -padding data modified by hardware during insertion process. All pixels outside -this rectangle must not be changed by the hardware. The -content of pixels that lie inside the padded area but outside active area is -undefined. The application can use the padded and active rectangles to detect -where the rubbish pixels are located and remove them if needed. - -
- -
- - Configuration of video output - -For output devices targets and ioctls are used similarly to the video -capture case. The composing rectangle refers to the -insertion of an image into a video signal. The cropping rectangles refer to a -memory buffer. It is recommended to configure the composing targets before to -the cropping targets. - -The cropping targets refer to the memory buffer that contains an image to -be inserted into a video signal or graphical screen. The limits of cropping -coordinates are obtained using V4L2_SEL_TGT_CROP_BOUNDS. -All coordinates are expressed in pixels. The top/left corner is always point -(0,0). The width and height is equal to the image size -specified using VIDIOC_S_FMT ioctl. - -The top left corner, width and height of the source rectangle, that is -the area from which image date are processed by the hardware, is given by the -V4L2_SEL_TGT_CROP. Its coordinates are expressed -in in the same coordinate system as the bounds rectangle. The active cropping -area must lie completely inside the crop boundaries and the driver may further -adjust the requested size and/or position according to hardware -limitations. - -For output devices the default cropping rectangle is queried using -V4L2_SEL_TGT_CROP_DEFAULT. It is usually equal to the -bounding rectangle. - -The part of a video signal or graphics display where the image is -inserted by the hardware is controlled by V4L2_SEL_TGT_COMPOSE -target. The rectangle's coordinates are expressed in pixels. The composing -rectangle must lie completely inside the bounds rectangle. The driver must -adjust the area to fit to the bounding limits. Moreover, the driver can -perform other adjustments according to hardware limitations. - -The device has a default composing rectangle, given by the -V4L2_SEL_TGT_COMPOSE_DEFAULT target. This rectangle shall cover what -the driver writer considers the complete picture. It is recommended for the -driver developers to put the top/left corner at position (0,0). -Drivers shall set the active composing rectangle to the default -one when the driver is first loaded. - -The devices may introduce additional content to video signal other than -an image from memory buffers. It includes borders around an image. However, -such a padded area is driver-dependent feature not covered by this document. -Driver developers are encouraged to keep padded rectangle equal to active one. -The padded target is accessed by the V4L2_SEL_TGT_COMPOSE_PADDED -identifier. It must contain all pixels from the V4L2_SEL_TGT_COMPOSE -target. - -
- -
- - Scaling control - -An application can detect if scaling is performed by comparing the width -and the height of rectangles obtained using V4L2_SEL_TGT_CROP -and V4L2_SEL_TGT_COMPOSE targets. If -these are not equal then the scaling is applied. The application can compute -the scaling ratios using these values. - -
- -
- -
- - Comparison with old cropping API - -The selection API was introduced to cope with deficiencies of previous - API, that was designed to control simple capture -devices. Later the cropping API was adopted by video output drivers. The ioctls -are used to select a part of the display were the video signal is inserted. It -should be considered as an API abuse because the described operation is -actually the composing. The selection API makes a clear distinction between -composing and cropping operations by setting the appropriate targets. The V4L2 -API lacks any support for composing to and cropping from an image inside a -memory buffer. The application could configure a capture device to fill only a -part of an image by abusing V4L2 API. Cropping a smaller image from a larger -one is achieved by setting the field -&v4l2-pix-format;::bytesperline. Introducing an image offsets -could be done by modifying field &v4l2-buffer;::m_userptr -before calling VIDIOC_QBUF. Those -operations should be avoided because they are not portable (endianness), and do -not work for macroblock and Bayer formats and mmap buffers. The selection API -deals with configuration of buffer cropping/composing in a clear, intuitive and -portable way. Next, with the selection API the concepts of the padded target -and constraints flags are introduced. Finally, &v4l2-crop; and &v4l2-cropcap; -have no reserved fields. Therefore there is no way to extend their functionality. -The new &v4l2-selection; provides a lot of place for future -extensions. Driver developers are encouraged to implement only selection API. -The former cropping API would be simulated using the new one. - -
- -
- Examples - - Resetting the cropping parameters - - (A video capture device is assumed; change -V4L2_BUF_TYPE_VIDEO_CAPTURE for other devices; change target to -V4L2_SEL_TGT_COMPOSE_* family to configure composing -area) - - - - &v4l2-selection; sel = { - .type = V4L2_BUF_TYPE_VIDEO_CAPTURE, - .target = V4L2_SEL_TGT_CROP_DEFAULT, - }; - ret = ioctl(fd, &VIDIOC-G-SELECTION;, &sel); - if (ret) - exit(-1); - sel.target = V4L2_SEL_TGT_CROP; - ret = ioctl(fd, &VIDIOC-S-SELECTION;, &sel); - if (ret) - exit(-1); - - - - - - Simple downscaling - Setting a composing area on output of size of at most - half of limit placed at a center of a display. - - - &v4l2-selection; sel = { - .type = V4L2_BUF_TYPE_VIDEO_OUTPUT, - .target = V4L2_SEL_TGT_COMPOSE_BOUNDS, - }; - struct v4l2_rect r; - - ret = ioctl(fd, &VIDIOC-G-SELECTION;, &sel); - if (ret) - exit(-1); - /* setting smaller compose rectangle */ - r.width = sel.r.width / 2; - r.height = sel.r.height / 2; - r.left = sel.r.width / 4; - r.top = sel.r.height / 4; - sel.r = r; - sel.target = V4L2_SEL_TGT_COMPOSE; - sel.flags = V4L2_SEL_FLAG_LE; - ret = ioctl(fd, &VIDIOC-S-SELECTION;, &sel); - if (ret) - exit(-1); - - - - - - Querying for scaling factors - A video output device is assumed; change -V4L2_BUF_TYPE_VIDEO_OUTPUT for other devices - - - &v4l2-selection; compose = { - .type = V4L2_BUF_TYPE_VIDEO_OUTPUT, - .target = V4L2_SEL_TGT_COMPOSE, - }; - &v4l2-selection; crop = { - .type = V4L2_BUF_TYPE_VIDEO_OUTPUT, - .target = V4L2_SEL_TGT_CROP, - }; - double hscale, vscale; - - ret = ioctl(fd, &VIDIOC-G-SELECTION;, &compose); - if (ret) - exit(-1); - ret = ioctl(fd, &VIDIOC-G-SELECTION;, &crop); - if (ret) - exit(-1); - - /* computing scaling factors */ - hscale = (double)compose.r.width / crop.r.width; - vscale = (double)compose.r.height / crop.r.height; - - - - -
- -
diff --git a/Documentation/DocBook/media/v4l/selections-common.xml b/Documentation/DocBook/media/v4l/selections-common.xml deleted file mode 100644 index d6d56fb6f9c0..000000000000 --- a/Documentation/DocBook/media/v4l/selections-common.xml +++ /dev/null @@ -1,180 +0,0 @@ -
- - Common selection definitions - - While the V4L2 selection - API and V4L2 subdev - selection APIs are very similar, there's one fundamental - difference between the two. On sub-device API, the selection - rectangle refers to the media bus format, and is bound to a - sub-device's pad. On the V4L2 interface the selection rectangles - refer to the in-memory pixel format. - - This section defines the common definitions of the - selection interfaces on the two APIs. - -
- - Selection targets - - The precise meaning of the selection targets may be - dependent on which of the two interfaces they are used. - - - Selection target definitions - - - - - - - &cs-def; - - - Target name - id - Definition - Valid for V4L2 - Valid for V4L2 subdev - - - - - V4L2_SEL_TGT_CROP - 0x0000 - Crop rectangle. Defines the cropped area. - Yes - Yes - - - V4L2_SEL_TGT_CROP_DEFAULT - 0x0001 - Suggested cropping rectangle that covers the "whole picture". - Yes - No - - - V4L2_SEL_TGT_CROP_BOUNDS - 0x0002 - Bounds of the crop rectangle. All valid crop - rectangles fit inside the crop bounds rectangle. - - Yes - Yes - - - V4L2_SEL_TGT_NATIVE_SIZE - 0x0003 - The native size of the device, e.g. a sensor's - pixel array. left and - top fields are zero for this - target. Setting the native size will generally only make - sense for memory to memory devices where the software can - create a canvas of a given size in which for example a - video frame can be composed. In that case - V4L2_SEL_TGT_NATIVE_SIZE can be used to configure the size - of that canvas. - - Yes - Yes - - - V4L2_SEL_TGT_COMPOSE - 0x0100 - Compose rectangle. Used to configure scaling - and composition. - Yes - Yes - - - V4L2_SEL_TGT_COMPOSE_DEFAULT - 0x0101 - Suggested composition rectangle that covers the "whole picture". - Yes - No - - - V4L2_SEL_TGT_COMPOSE_BOUNDS - 0x0102 - Bounds of the compose rectangle. All valid compose - rectangles fit inside the compose bounds rectangle. - Yes - Yes - - - V4L2_SEL_TGT_COMPOSE_PADDED - 0x0103 - The active area and all padding pixels that are inserted or - modified by hardware. - Yes - No - - - -
- -
- -
- - Selection flags - - - Selection flag definitions - - - - - - - &cs-def; - - - Flag name - id - Definition - Valid for V4L2 - Valid for V4L2 subdev - - - - - V4L2_SEL_FLAG_GE - (1 << 0) - Suggest the driver it should choose greater or - equal rectangle (in size) than was requested. Albeit the - driver may choose a lesser size, it will only do so due to - hardware limitations. Without this flag (and - V4L2_SEL_FLAG_LE) the - behaviour is to choose the closest possible - rectangle. - Yes - Yes - - - V4L2_SEL_FLAG_LE - (1 << 1) - Suggest the driver it - should choose lesser or equal rectangle (in size) than was - requested. Albeit the driver may choose a greater size, it - will only do so due to hardware limitations. - Yes - Yes - - - V4L2_SEL_FLAG_KEEP_CONFIG - (1 << 2) - The configuration must not be propagated to any - further processing steps. If this flag is not given, the - configuration is propagated inside the subdevice to all - further processing steps. - No - Yes - - - -
- -
- -
diff --git a/Documentation/DocBook/media/v4l/subdev-formats.xml b/Documentation/DocBook/media/v4l/subdev-formats.xml deleted file mode 100644 index 199c84e3aede..000000000000 --- a/Documentation/DocBook/media/v4l/subdev-formats.xml +++ /dev/null @@ -1,4040 +0,0 @@ -
- Media Bus Formats - - - struct <structname>v4l2_mbus_framefmt</structname> - - &cs-str; - - - __u32 - width - Image width, in pixels. - - - __u32 - height - Image height, in pixels. - - - __u32 - code - Format code, from &v4l2-mbus-pixelcode;. - - - __u32 - field - Field order, from &v4l2-field;. See - for details. - - - __u32 - colorspace - Image colorspace, from &v4l2-colorspace;. See - for details. - - - &v4l2-ycbcr-encoding; - ycbcr_enc - This information supplements the -colorspace and must be set by the driver for -capture streams and by the application for output streams, -see . - - - &v4l2-quantization; - quantization - This information supplements the -colorspace and must be set by the driver for -capture streams and by the application for output streams, -see . - - - &v4l2-xfer-func; - xfer_func - This information supplements the -colorspace and must be set by the driver for -capture streams and by the application for output streams, -see . - - - __u16 - reserved[11] - Reserved for future extensions. Applications and drivers must - set the array to zero. - - - -
- -
- Media Bus Pixel Codes - - The media bus pixel codes describe image formats as flowing over - physical busses (both between separate physical components and inside SoC - devices). This should not be confused with the V4L2 pixel formats that - describe, using four character codes, image formats as stored in memory. - - - While there is a relationship between image formats on busses and - image formats in memory (a raw Bayer image won't be magically converted to - JPEG just by storing it to memory), there is no one-to-one correspondance - between them. - -
- Packed RGB Formats - - Those formats transfer pixel data as red, green and blue components. - The format code is made of the following information. - - The red, green and blue components order code, as encoded in a - pixel sample. Possible values are RGB and BGR. - The number of bits per component, for each component. The values - can be different for all components. Common values are 555 and 565. - - The number of bus samples per pixel. Pixels that are wider than - the bus width must be transferred in multiple samples. Common values are - 1 and 2. - The bus width. - For formats where the total number of bits per pixel is smaller - than the number of bus samples per pixel times the bus width, a padding - value stating if the bytes are padded in their most high order bits - (PADHI) or low order bits (PADLO). A "C" prefix is used for component-wise - padding in the most high order bits (CPADHI) or low order bits (CPADLO) - of each separate component. - For formats where the number of bus samples per pixel is larger - than 1, an endianness value stating if the pixel is transferred MSB first - (BE) or LSB first (LE). - - - - For instance, a format where pixels are encoded as 5-bits red, 5-bits - green and 5-bit blue values padded on the high bit, transferred as 2 8-bit - samples per pixel with the most significant bits (padding, red and half of - the green value) transferred first will be named - MEDIA_BUS_FMT_RGB555_2X8_PADHI_BE. - - - The following tables list existing packed RGB formats. - - - RGB formats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Identifier - Code - - Data organization - - - - - Bit - 31 - 30 - 29 - 28 - 27 - 26 - 25 - 24 - 23 - 22 - 21 - 20 - 19 - 18 - 17 - 16 - 15 - 14 - 13 - 12 - 11 - 10 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1 - 0 - - - - - MEDIA_BUS_FMT_RGB444_1X12 - 0x1016 - - &dash-ent-20; - r3 - r2 - r1 - r0 - g3 - g2 - g1 - g0 - b3 - b2 - b1 - b0 - - - MEDIA_BUS_FMT_RGB444_2X8_PADHI_BE - 0x1001 - - &dash-ent-24; - 0 - 0 - 0 - 0 - r3 - r2 - r1 - r0 - - - - - - &dash-ent-24; - g3 - g2 - g1 - g0 - b3 - b2 - b1 - b0 - - - MEDIA_BUS_FMT_RGB444_2X8_PADHI_LE - 0x1002 - - &dash-ent-24; - g3 - g2 - g1 - g0 - b3 - b2 - b1 - b0 - - - - - - &dash-ent-24; - 0 - 0 - 0 - 0 - r3 - r2 - r1 - r0 - - - MEDIA_BUS_FMT_RGB555_2X8_PADHI_BE - 0x1003 - - &dash-ent-24; - 0 - r4 - r3 - r2 - r1 - r0 - g4 - g3 - - - - - - &dash-ent-24; - g2 - g1 - g0 - b4 - b3 - b2 - b1 - b0 - - - MEDIA_BUS_FMT_RGB555_2X8_PADHI_LE - 0x1004 - - &dash-ent-24; - g2 - g1 - g0 - b4 - b3 - b2 - b1 - b0 - - - - - - &dash-ent-24; - 0 - r4 - r3 - r2 - r1 - r0 - g4 - g3 - - - MEDIA_BUS_FMT_RGB565_1X16 - 0x1017 - - &dash-ent-16; - r4 - r3 - r2 - r1 - r0 - g5 - g4 - g3 - g2 - g1 - g0 - b4 - b3 - b2 - b1 - b0 - - - MEDIA_BUS_FMT_BGR565_2X8_BE - 0x1005 - - &dash-ent-24; - b4 - b3 - b2 - b1 - b0 - g5 - g4 - g3 - - - - - - &dash-ent-24; - g2 - g1 - g0 - r4 - r3 - r2 - r1 - r0 - - - MEDIA_BUS_FMT_BGR565_2X8_LE - 0x1006 - - &dash-ent-24; - g2 - g1 - g0 - r4 - r3 - r2 - r1 - r0 - - - - - - &dash-ent-24; - b4 - b3 - b2 - b1 - b0 - g5 - g4 - g3 - - - MEDIA_BUS_FMT_RGB565_2X8_BE - 0x1007 - - &dash-ent-24; - r4 - r3 - r2 - r1 - r0 - g5 - g4 - g3 - - - - - - &dash-ent-24; - g2 - g1 - g0 - b4 - b3 - b2 - b1 - b0 - - - MEDIA_BUS_FMT_RGB565_2X8_LE - 0x1008 - - &dash-ent-24; - g2 - g1 - g0 - b4 - b3 - b2 - b1 - b0 - - - - - - &dash-ent-24; - r4 - r3 - r2 - r1 - r0 - g5 - g4 - g3 - - - MEDIA_BUS_FMT_RGB666_1X18 - 0x1009 - - &dash-ent-14; - r5 - r4 - r3 - r2 - r1 - r0 - g5 - g4 - g3 - g2 - g1 - g0 - b5 - b4 - b3 - b2 - b1 - b0 - - - MEDIA_BUS_FMT_RBG888_1X24 - 0x100e - - &dash-ent-8; - r7 - r6 - r5 - r4 - r3 - r2 - r1 - r0 - b7 - b6 - b5 - b4 - b3 - b2 - b1 - b0 - g7 - g6 - g5 - g4 - g3 - g2 - g1 - g0 - - - MEDIA_BUS_FMT_RGB666_1X24_CPADHI - 0x1015 - - &dash-ent-8; - 0 - 0 - r5 - r4 - r3 - r2 - r1 - r0 - 0 - 0 - g5 - g4 - g3 - g2 - g1 - g0 - 0 - 0 - b5 - b4 - b3 - b2 - b1 - b0 - - - MEDIA_BUS_FMT_BGR888_1X24 - 0x1013 - - &dash-ent-8; - b7 - b6 - b5 - b4 - b3 - b2 - b1 - b0 - g7 - g6 - g5 - g4 - g3 - g2 - g1 - g0 - r7 - r6 - r5 - r4 - r3 - r2 - r1 - r0 - - - MEDIA_BUS_FMT_GBR888_1X24 - 0x1014 - - &dash-ent-8; - g7 - g6 - g5 - g4 - g3 - g2 - g1 - g0 - b7 - b6 - b5 - b4 - b3 - b2 - b1 - b0 - r7 - r6 - r5 - r4 - r3 - r2 - r1 - r0 - - - MEDIA_BUS_FMT_RGB888_1X24 - 0x100a - - &dash-ent-8; - r7 - r6 - r5 - r4 - r3 - r2 - r1 - r0 - g7 - g6 - g5 - g4 - g3 - g2 - g1 - g0 - b7 - b6 - b5 - b4 - b3 - b2 - b1 - b0 - - - MEDIA_BUS_FMT_RGB888_2X12_BE - 0x100b - - &dash-ent-20; - r7 - r6 - r5 - r4 - r3 - r2 - r1 - r0 - g7 - g6 - g5 - g4 - - - - - - &dash-ent-20; - g3 - g2 - g1 - g0 - b7 - b6 - b5 - b4 - b3 - b2 - b1 - b0 - - - MEDIA_BUS_FMT_RGB888_2X12_LE - 0x100c - - &dash-ent-20; - g3 - g2 - g1 - g0 - b7 - b6 - b5 - b4 - b3 - b2 - b1 - b0 - - - - - - &dash-ent-20; - r7 - r6 - r5 - r4 - r3 - r2 - r1 - r0 - g7 - g6 - g5 - g4 - - - MEDIA_BUS_FMT_ARGB888_1X32 - 0x100d - - a7 - a6 - a5 - a4 - a3 - a2 - a1 - a0 - r7 - r6 - r5 - r4 - r3 - r2 - r1 - r0 - g7 - g6 - g5 - g4 - g3 - g2 - g1 - g0 - b7 - b6 - b5 - b4 - b3 - b2 - b1 - b0 - - - MEDIA_BUS_FMT_RGB888_1X32_PADHI - 0x100f - - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - r7 - r6 - r5 - r4 - r3 - r2 - r1 - r0 - g7 - g6 - g5 - g4 - g3 - g2 - g1 - g0 - b7 - b6 - b5 - b4 - b3 - b2 - b1 - b0 - - - -
- - On LVDS buses, usually each sample is transferred serialized in - seven time slots per pixel clock, on three (18-bit) or four (24-bit) - differential data pairs at the same time. The remaining bits are used for - control signals as defined by SPWG/PSWG/VESA or JEIDA standards. - The 24-bit RGB format serialized in seven time slots on four lanes using - JEIDA defined bit mapping will be named - MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA, for example. - - - - LVDS RGB formats - - - - - - - - - - - - - Identifier - Code - - - Data organization - - - - - Timeslot - Lane - 3 - 2 - 1 - 0 - - - - - MEDIA_BUS_FMT_RGB666_1X7X3_SPWG - 0x1010 - 0 - - - - d - b1 - g0 - - - - - 1 - - - - d - b0 - r5 - - - - - 2 - - - - d - g5 - r4 - - - - - 3 - - - - b5 - g4 - r3 - - - - - 4 - - - - b4 - g3 - r2 - - - - - 5 - - - - b3 - g2 - r1 - - - - - 6 - - - - b2 - g1 - r0 - - - MEDIA_BUS_FMT_RGB888_1X7X4_SPWG - 0x1011 - 0 - - d - d - b1 - g0 - - - - - 1 - - b7 - d - b0 - r5 - - - - - 2 - - b6 - d - g5 - r4 - - - - - 3 - - g7 - b5 - g4 - r3 - - - - - 4 - - g6 - b4 - g3 - r2 - - - - - 5 - - r7 - b3 - g2 - r1 - - - - - 6 - - r6 - b2 - g1 - r0 - - - MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA - 0x1012 - 0 - - d - d - b3 - g2 - - - - - 1 - - b1 - d - b2 - r7 - - - - - 2 - - b0 - d - g7 - r6 - - - - - 3 - - g1 - b7 - g6 - r5 - - - - - 4 - - g0 - b6 - g5 - r4 - - - - - 5 - - r1 - b5 - g4 - r3 - - - - - 6 - - r0 - b4 - g3 - r2 - - - -
-
- -
- Bayer Formats - - Those formats transfer pixel data as red, green and blue components. - The format code is made of the following information. - - The red, green and blue components order code, as encoded in a - pixel sample. The possible values are shown in . - The number of bits per pixel component. All components are - transferred on the same number of bits. Common values are 8, 10 and 12. - - The compression (optional). If the pixel components are - ALAW- or DPCM-compressed, a mention of the compression scheme and the - number of bits per compressed pixel component. - The number of bus samples per pixel. Pixels that are wider than - the bus width must be transferred in multiple samples. Common values are - 1 and 2. - The bus width. - For formats where the total number of bits per pixel is smaller - than the number of bus samples per pixel times the bus width, a padding - value stating if the bytes are padded in their most high order bits - (PADHI) or low order bits (PADLO). - For formats where the number of bus samples per pixel is larger - than 1, an endianness value stating if the pixel is transferred MSB first - (BE) or LSB first (LE). - - - - For instance, a format with uncompressed 10-bit Bayer components - arranged in a red, green, green, blue pattern transferred as 2 8-bit - samples per pixel with the least significant bits transferred first will - be named MEDIA_BUS_FMT_SRGGB10_2X8_PADHI_LE. - - -
- Bayer Patterns - - - - - - Bayer filter color patterns - - -
- - The following table lists existing packed Bayer formats. The data - organization is given as an example for the first pixel only. - - - Bayer Formats - - - - - - - - - - - - - - - - - - - - Identifier - Code - - Data organization - - - - - Bit - 11 - 10 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1 - 0 - - - - - MEDIA_BUS_FMT_SBGGR8_1X8 - 0x3001 - - - - - - - - - - b7 - b6 - b5 - b4 - b3 - b2 - b1 - b0 - - - MEDIA_BUS_FMT_SGBRG8_1X8 - 0x3013 - - - - - - - - - - g7 - g6 - g5 - g4 - g3 - g2 - g1 - g0 - - - MEDIA_BUS_FMT_SGRBG8_1X8 - 0x3002 - - - - - - - - - - g7 - g6 - g5 - g4 - g3 - g2 - g1 - g0 - - - MEDIA_BUS_FMT_SRGGB8_1X8 - 0x3014 - - - - - - - - - - r7 - r6 - r5 - r4 - r3 - r2 - r1 - r0 - - - MEDIA_BUS_FMT_SBGGR10_ALAW8_1X8 - 0x3015 - - - - - - - - - - b7 - b6 - b5 - b4 - b3 - b2 - b1 - b0 - - - MEDIA_BUS_FMT_SGBRG10_ALAW8_1X8 - 0x3016 - - - - - - - - - - g7 - g6 - g5 - g4 - g3 - g2 - g1 - g0 - - - MEDIA_BUS_FMT_SGRBG10_ALAW8_1X8 - 0x3017 - - - - - - - - - - g7 - g6 - g5 - g4 - g3 - g2 - g1 - g0 - - - MEDIA_BUS_FMT_SRGGB10_ALAW8_1X8 - 0x3018 - - - - - - - - - - r7 - r6 - r5 - r4 - r3 - r2 - r1 - r0 - - - MEDIA_BUS_FMT_SBGGR10_DPCM8_1X8 - 0x300b - - - - - - - - - - b7 - b6 - b5 - b4 - b3 - b2 - b1 - b0 - - - MEDIA_BUS_FMT_SGBRG10_DPCM8_1X8 - 0x300c - - - - - - - - - - g7 - g6 - g5 - g4 - g3 - g2 - g1 - g0 - - - MEDIA_BUS_FMT_SGRBG10_DPCM8_1X8 - 0x3009 - - - - - - - - - - g7 - g6 - g5 - g4 - g3 - g2 - g1 - g0 - - - MEDIA_BUS_FMT_SRGGB10_DPCM8_1X8 - 0x300d - - - - - - - - - - r7 - r6 - r5 - r4 - r3 - r2 - r1 - r0 - - - MEDIA_BUS_FMT_SBGGR10_2X8_PADHI_BE - 0x3003 - - - - - - - - - - 0 - 0 - 0 - 0 - 0 - 0 - b9 - b8 - - - - - - - - - - - - - - b7 - b6 - b5 - b4 - b3 - b2 - b1 - b0 - - - MEDIA_BUS_FMT_SBGGR10_2X8_PADHI_LE - 0x3004 - - - - - - - - - - b7 - b6 - b5 - b4 - b3 - b2 - b1 - b0 - - - - - - - - - - - - - - 0 - 0 - 0 - 0 - 0 - 0 - b9 - b8 - - - MEDIA_BUS_FMT_SBGGR10_2X8_PADLO_BE - 0x3005 - - - - - - - - - - b9 - b8 - b7 - b6 - b5 - b4 - b3 - b2 - - - - - - - - - - - - - - b1 - b0 - 0 - 0 - 0 - 0 - 0 - 0 - - - MEDIA_BUS_FMT_SBGGR10_2X8_PADLO_LE - 0x3006 - - - - - - - - - - b1 - b0 - 0 - 0 - 0 - 0 - 0 - 0 - - - - - - - - - - - - - - b9 - b8 - b7 - b6 - b5 - b4 - b3 - b2 - - - MEDIA_BUS_FMT_SBGGR10_1X10 - 0x3007 - - - - - - b9 - b8 - b7 - b6 - b5 - b4 - b3 - b2 - b1 - b0 - - - MEDIA_BUS_FMT_SGBRG10_1X10 - 0x300e - - - - - - g9 - g8 - g7 - g6 - g5 - g4 - g3 - g2 - g1 - g0 - - - MEDIA_BUS_FMT_SGRBG10_1X10 - 0x300a - - - - - - g9 - g8 - g7 - g6 - g5 - g4 - g3 - g2 - g1 - g0 - - - MEDIA_BUS_FMT_SRGGB10_1X10 - 0x300f - - - - - - r9 - r8 - r7 - r6 - r5 - r4 - r3 - r2 - r1 - r0 - - - MEDIA_BUS_FMT_SBGGR12_1X12 - 0x3008 - - b11 - b10 - b9 - b8 - b7 - b6 - b5 - b4 - b3 - b2 - b1 - b0 - - - MEDIA_BUS_FMT_SGBRG12_1X12 - 0x3010 - - g11 - g10 - g9 - g8 - g7 - g6 - g5 - g4 - g3 - g2 - g1 - g0 - - - MEDIA_BUS_FMT_SGRBG12_1X12 - 0x3011 - - g11 - g10 - g9 - g8 - g7 - g6 - g5 - g4 - g3 - g2 - g1 - g0 - - - MEDIA_BUS_FMT_SRGGB12_1X12 - 0x3012 - - r11 - r10 - r9 - r8 - r7 - r6 - r5 - r4 - r3 - r2 - r1 - r0 - - - -
-
- -
- Packed YUV Formats - - Those data formats transfer pixel data as (possibly downsampled) Y, U - and V components. Some formats include dummy bits in some of their samples - and are collectively referred to as "YDYC" (Y-Dummy-Y-Chroma) formats. - One cannot rely on the values of these dummy bits as those are undefined. - - The format code is made of the following information. - - The Y, U and V components order code, as transferred on the - bus. Possible values are YUYV, UYVY, YVYU and VYUY for formats with no - dummy bit, and YDYUYDYV, YDYVYDYU, YUYDYVYD and YVYDYUYD for YDYC formats. - - The number of bits per pixel component. All components are - transferred on the same number of bits. Common values are 8, 10 and 12. - - The number of bus samples per pixel. Pixels that are wider than - the bus width must be transferred in multiple samples. Common values are - 1, 1.5 (encoded as 1_5) and 2. - The bus width. When the bus width is larger than the number of - bits per pixel component, several components are packed in a single bus - sample. The components are ordered as specified by the order code, with - components on the left of the code transferred in the high order bits. - Common values are 8 and 16. - - - - - For instance, a format where pixels are encoded as 8-bit YUV values - downsampled to 4:2:2 and transferred as 2 8-bit bus samples per pixel in the - U, Y, V, Y order will be named MEDIA_BUS_FMT_UYVY8_2X8. - - - lists existing packed YUV - formats and describes the organization of each pixel data in each sample. - When a format pattern is split across multiple samples each of the samples - in the pattern is described. - - The role of each bit transferred over the bus is identified by one - of the following codes. - - - yx for luma component bit number x - ux for blue chroma component bit number x - vx for red chroma component bit number x - ax for alpha component bit number x - - for non-available bits (for positions higher than the bus width) - d for dummy bits - - - - YUV Formats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Identifier - Code - - Data organization - - - - - Bit - 31 - 30 - 29 - 28 - 27 - 26 - 25 - 24 - 23 - 22 - 21 - 10 - 19 - 18 - 17 - 16 - 15 - 14 - 13 - 12 - 11 - 10 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1 - 0 - - - - - MEDIA_BUS_FMT_Y8_1X8 - 0x2001 - - &dash-ent-24; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - MEDIA_BUS_FMT_UV8_1X8 - 0x2015 - - &dash-ent-24; - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - - - - - - &dash-ent-24; - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - - - MEDIA_BUS_FMT_UYVY8_1_5X8 - 0x2002 - - &dash-ent-24; - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - - - - - - &dash-ent-24; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-24; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-24; - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - - - - - - &dash-ent-24; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-24; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - MEDIA_BUS_FMT_VYUY8_1_5X8 - 0x2003 - - &dash-ent-24; - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - - - - - - &dash-ent-24; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-24; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-24; - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - - - - - - &dash-ent-24; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-24; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - MEDIA_BUS_FMT_YUYV8_1_5X8 - 0x2004 - - &dash-ent-24; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-24; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-24; - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - - - - - - &dash-ent-24; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-24; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-24; - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - - - MEDIA_BUS_FMT_YVYU8_1_5X8 - 0x2005 - - &dash-ent-24; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-24; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-24; - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - - - - - - &dash-ent-24; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-24; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-24; - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - - - MEDIA_BUS_FMT_UYVY8_2X8 - 0x2006 - - &dash-ent-24; - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - - - - - - &dash-ent-24; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-24; - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - - - - - - &dash-ent-24; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - MEDIA_BUS_FMT_VYUY8_2X8 - 0x2007 - - &dash-ent-24; - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - - - - - - &dash-ent-24; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-24; - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - - - - - - &dash-ent-24; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - MEDIA_BUS_FMT_YUYV8_2X8 - 0x2008 - - &dash-ent-24; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-24; - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - - - - - - &dash-ent-24; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-24; - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - - - MEDIA_BUS_FMT_YVYU8_2X8 - 0x2009 - - &dash-ent-24; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-24; - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - - - - - - &dash-ent-24; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-24; - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - - - MEDIA_BUS_FMT_Y10_1X10 - 0x200a - - &dash-ent-22; - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - MEDIA_BUS_FMT_UYVY10_2X10 - 0x2018 - - &dash-ent-22; - u9 - u8 - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - - - - - - &dash-ent-22; - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-22; - v9 - v8 - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - - - - - - &dash-ent-22; - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - MEDIA_BUS_FMT_VYUY10_2X10 - 0x2019 - - &dash-ent-22; - v9 - v8 - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - - - - - - &dash-ent-22; - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-22; - u9 - u8 - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - - - - - - &dash-ent-22; - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - MEDIA_BUS_FMT_YUYV10_2X10 - 0x200b - - &dash-ent-22; - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-22; - u9 - u8 - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - - - - - - &dash-ent-22; - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-22; - v9 - v8 - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - - - MEDIA_BUS_FMT_YVYU10_2X10 - 0x200c - - &dash-ent-22; - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-22; - v9 - v8 - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - - - - - - &dash-ent-22; - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-22; - u9 - u8 - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - - - MEDIA_BUS_FMT_Y12_1X12 - 0x2013 - - &dash-ent-20; - y11 - y10 - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - MEDIA_BUS_FMT_UYVY12_2X12 - 0x201c - - &dash-ent-20; - u11 - u10 - u9 - u8 - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - - - - - - &dash-ent-20; - y11 - y10 - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-20; - v11 - v10 - v9 - v8 - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - - - - - - &dash-ent-20; - y11 - y10 - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - MEDIA_BUS_FMT_VYUY12_2X12 - 0x201d - - &dash-ent-20; - v11 - v10 - v9 - v8 - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - - - - - - &dash-ent-20; - y11 - y10 - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-20; - u11 - u10 - u9 - u8 - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - - - - - - &dash-ent-20; - y11 - y10 - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - MEDIA_BUS_FMT_YUYV12_2X12 - 0x201e - - &dash-ent-20; - y11 - y10 - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-20; - u11 - u10 - u9 - u8 - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - - - - - - &dash-ent-20; - y11 - y10 - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-20; - v11 - v10 - v9 - v8 - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - - - MEDIA_BUS_FMT_YVYU12_2X12 - 0x201f - - &dash-ent-20; - y11 - y10 - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-20; - v11 - v10 - v9 - v8 - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - - - - - - &dash-ent-20; - y11 - y10 - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-20; - u11 - u10 - u9 - u8 - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - - - MEDIA_BUS_FMT_UYVY8_1X16 - 0x200f - - &dash-ent-16; - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-16; - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - MEDIA_BUS_FMT_VYUY8_1X16 - 0x2010 - - &dash-ent-16; - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-16; - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - MEDIA_BUS_FMT_YUYV8_1X16 - 0x2011 - - &dash-ent-16; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - - - - - - &dash-ent-16; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - - - MEDIA_BUS_FMT_YVYU8_1X16 - 0x2012 - - &dash-ent-16; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - - - - - - &dash-ent-16; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - - - MEDIA_BUS_FMT_YDYUYDYV8_1X16 - 0x2014 - - &dash-ent-16; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - d - d - d - d - d - d - d - d - - - - - - &dash-ent-16; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - - - - - - &dash-ent-16; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - d - d - d - d - d - d - d - d - - - - - - &dash-ent-16; - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - - - MEDIA_BUS_FMT_UYVY10_1X20 - 0x201a - - &dash-ent-12; - u9 - u8 - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-12; - v9 - v8 - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - MEDIA_BUS_FMT_VYUY10_1X20 - 0x201b - - &dash-ent-12; - v9 - v8 - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-12; - u9 - u8 - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - MEDIA_BUS_FMT_YUYV10_1X20 - 0x200d - - &dash-ent-12; - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - u9 - u8 - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - - - - - - &dash-ent-12; - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - v9 - v8 - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - - - MEDIA_BUS_FMT_YVYU10_1X20 - 0x200e - - &dash-ent-12; - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - v9 - v8 - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - - - - - - &dash-ent-12; - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - u9 - u8 - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - - - MEDIA_BUS_FMT_VUY8_1X24 - 0x201a - - &dash-ent-8; - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - MEDIA_BUS_FMT_YUV8_1X24 - 0x2025 - - - - - - - - - - - - - - - - - - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - - - MEDIA_BUS_FMT_UYVY12_1X24 - 0x2020 - - &dash-ent-8; - u11 - u10 - u9 - u8 - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - y11 - y10 - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-8; - v11 - v10 - v9 - v8 - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - y11 - y10 - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - MEDIA_BUS_FMT_VYUY12_1X24 - 0x2021 - - &dash-ent-8; - v11 - v10 - v9 - v8 - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - y11 - y10 - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - - - - &dash-ent-8; - u11 - u10 - u9 - u8 - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - y11 - y10 - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - - - MEDIA_BUS_FMT_YUYV12_1X24 - 0x2022 - - &dash-ent-8; - y11 - y10 - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - u11 - u10 - u9 - u8 - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - - - - - - &dash-ent-8; - y11 - y10 - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - v11 - v10 - v9 - v8 - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - - - MEDIA_BUS_FMT_YVYU12_1X24 - 0x2023 - - &dash-ent-8; - y11 - y10 - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - v11 - v10 - v9 - v8 - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - - - - - - &dash-ent-8; - y11 - y10 - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - u11 - u10 - u9 - u8 - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - - - MEDIA_BUS_FMT_YUV10_1X30 - 0x2016 - - - - - - y9 - y8 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - u9 - u8 - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - v9 - v8 - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - - - MEDIA_BUS_FMT_AYUV8_1X32 - 0x2017 - - a7 - a6 - a5 - a4 - a3 - a2 - a1 - a0 - y7 - y6 - y5 - y4 - y3 - y2 - y1 - y0 - u7 - u6 - u5 - u4 - u3 - u2 - u1 - u0 - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - - - -
-
- -
- HSV/HSL Formats - - Those formats transfer pixel data as RGB values in a cylindrical-coordinate - system using Hue-Saturation-Value or Hue-Saturation-Lightness components. The - format code is made of the following information. - - The hue, saturation, value or lightness and optional alpha - components order code, as encoded in a pixel sample. The only currently - supported value is AHSV. - - The number of bits per component, for each component. The values - can be different for all components. The only currently supported value is 8888. - - The number of bus samples per pixel. Pixels that are wider than - the bus width must be transferred in multiple samples. The only currently - supported value is 1. - The bus width. - For formats where the total number of bits per pixel is smaller - than the number of bus samples per pixel times the bus width, a padding - value stating if the bytes are padded in their most high order bits - (PADHI) or low order bits (PADLO). - For formats where the number of bus samples per pixel is larger - than 1, an endianness value stating if the pixel is transferred MSB first - (BE) or LSB first (LE). - - - - The following table lists existing HSV/HSL formats. - - - HSV/HSL formats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Identifier - Code - - Data organization - - - - - Bit - 31 - 30 - 29 - 28 - 27 - 26 - 25 - 24 - 23 - 22 - 21 - 20 - 19 - 18 - 17 - 16 - 15 - 14 - 13 - 12 - 11 - 10 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1 - 0 - - - - - MEDIA_BUS_FMT_AHSV8888_1X32 - 0x6001 - - a7 - a6 - a5 - a4 - a3 - a2 - a1 - a0 - h7 - h6 - h5 - h4 - h3 - h2 - h1 - h0 - s7 - s6 - s5 - s4 - s3 - s2 - s1 - s0 - v7 - v6 - v5 - v4 - v3 - v2 - v1 - v0 - - - -
-
- -
- JPEG Compressed Formats - - Those data formats consist of an ordered sequence of 8-bit bytes - obtained from JPEG compression process. Additionally to the - _JPEG postfix the format code is made of - the following information. - - The number of bus samples per entropy encoded byte. - The bus width. - - - - For instance, for a JPEG baseline process and an 8-bit bus width - the format will be named MEDIA_BUS_FMT_JPEG_1X8. - - - The following table lists existing JPEG compressed formats. - - - JPEG Formats - - - - - - - Identifier - Code - Remarks - - - - - MEDIA_BUS_FMT_JPEG_1X8 - 0x4001 - Besides of its usage for the parallel bus this format is - recommended for transmission of JPEG data over MIPI CSI bus - using the User Defined 8-bit Data types. - - - - -
-
- -
- Vendor and Device Specific Formats - - This section lists complex data formats that are either vendor or - device specific. - - - The following table lists the existing vendor and device specific - formats. - - - Vendor and device specific formats - - - - - - - Identifier - Code - Comments - - - - - MEDIA_BUS_FMT_S5C_UYVY_JPEG_1X8 - 0x5001 - - Interleaved raw UYVY and JPEG image format with embedded - meta-data used by Samsung S3C73MX camera sensors. - - - - -
-
- -
-
diff --git a/Documentation/DocBook/media/v4l/subdev-image-processing-crop.dia b/Documentation/DocBook/media/v4l/subdev-image-processing-crop.dia deleted file mode 100644 index e32ba5362e1d..000000000000 --- a/Documentation/DocBook/media/v4l/subdev-image-processing-crop.dia +++ /dev/null @@ -1,614 +0,0 @@ - - - - - - - - - - - - - #A4# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #sink -crop -selection# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #sink media -bus format# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #source media -bus format# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #pad 1 (source)# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #pad 0 (sink)# - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/subdev-image-processing-crop.svg b/Documentation/DocBook/media/v4l/subdev-image-processing-crop.svg deleted file mode 100644 index 18b0f5de9ed2..000000000000 --- a/Documentation/DocBook/media/v4l/subdev-image-processing-crop.svg +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - sink - crop - selection - - - - - - sink media - bus format - - - source media - bus format - - - - - - - - - - - - - - - - - - - - - pad 1 (source) - - - - - - - - - - - - - pad 0 (sink) - - diff --git a/Documentation/DocBook/media/v4l/subdev-image-processing-full.dia b/Documentation/DocBook/media/v4l/subdev-image-processing-full.dia deleted file mode 100644 index a0d782927840..000000000000 --- a/Documentation/DocBook/media/v4l/subdev-image-processing-full.dia +++ /dev/null @@ -1,1588 +0,0 @@ - - - - - - - - - - - - - #A4# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #pad 0 (sink)# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #pad 2 (source)# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #sink media -bus format# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #sink compose -selection (scaling)# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #source media -bus format# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #sink compose -bounds selection# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #pad 1 (sink)# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #pad 3 (source)# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #sink -crop -selection# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #source -crop -selection# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/subdev-image-processing-full.svg b/Documentation/DocBook/media/v4l/subdev-image-processing-full.svg deleted file mode 100644 index 3322cf4c0093..000000000000 --- a/Documentation/DocBook/media/v4l/subdev-image-processing-full.svg +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - pad 0 (sink) - - - pad 2 (source) - - - - - - - - - - - - - - sink media - bus format - - - - - - - - - - - sink compose - selection (scaling) - - - - - - - source media - bus format - - - - - - - - - - - sink compose - bounds selection - - - - - - - - - - - - - pad 1 (sink) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - pad 3 (source) - - - sink - crop - selection - - - source - crop - selection - - - - - - - - - - - - - - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/subdev-image-processing-scaling-multi-source.dia b/Documentation/DocBook/media/v4l/subdev-image-processing-scaling-multi-source.dia deleted file mode 100644 index 0cd50a7bda80..000000000000 --- a/Documentation/DocBook/media/v4l/subdev-image-processing-scaling-multi-source.dia +++ /dev/null @@ -1,1152 +0,0 @@ - - - - - - - - - - - - - #A4# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #sink -crop -selection# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #sink media -bus format# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #sink compose -selection (scaling)# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #source -crop -selection# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #source media -bus format# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #pad 1 (source)# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #pad 0 (sink)# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #pad 2 (source)# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/subdev-image-processing-scaling-multi-source.svg b/Documentation/DocBook/media/v4l/subdev-image-processing-scaling-multi-source.svg deleted file mode 100644 index 2340c0f8bc92..000000000000 --- a/Documentation/DocBook/media/v4l/subdev-image-processing-scaling-multi-source.svg +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - - - - - - - sink - crop - selection - - - - - - sink media - bus format - - - - - - - - - - - sink compose - selection (scaling) - - - - - - - source - crop - selection - - - source media - bus format - - - - - - - - - - - - - - - - - - - - - pad 1 (source) - - - - - - - - - - - - - pad 0 (sink) - - - - - - - - - - - - - - - - - - - - - - pad 2 (source) - - - - - - - - - - - - diff --git a/Documentation/DocBook/media/v4l/v4l2.xml b/Documentation/DocBook/media/v4l/v4l2.xml deleted file mode 100644 index 42e626d6c936..000000000000 --- a/Documentation/DocBook/media/v4l/v4l2.xml +++ /dev/null @@ -1,728 +0,0 @@ - - - - Michael - Schimek - H - -
- mschimek@gmx.at -
-
-
- - - Bill - Dirks - - Original author of the V4L2 API and -documentation. - - - - Hans - Verkuil - Designed and documented the VIDIOC_LOG_STATUS ioctl, -the extended control ioctls, major parts of the sliced VBI API, the -MPEG encoder and decoder APIs and the DV Timings API. - -
- hverkuil@xs4all.nl -
-
-
- - - Martin - Rubli - - Designed and documented the VIDIOC_ENUM_FRAMESIZES -and VIDIOC_ENUM_FRAMEINTERVALS ioctls. - - - - Andy - Walls - Documented the fielded V4L2_MPEG_STREAM_VBI_FMT_IVTV -MPEG stream embedded, sliced VBI data format in this specification. - - -
- awalls@md.metrocast.net -
-
-
- - - Mauro - Carvalho Chehab - Documented libv4l, designed and added v4l2grab example, -Remote Controller chapter. - -
- m.chehab@samsung.com -
-
-
- - - Muralidharan - Karicheri - Documented the Digital Video timings API. - -
- m-karicheri2@ti.com -
-
-
- - - Pawel - Osciak - Designed and documented the multi-planar API. - -
- pawel AT osciak.com -
-
-
- - - Sakari - Ailus - Subdev selections API. - -
- sakari.ailus@iki.fi -
-
-
- - Antti - Palosaari - SDR API. - -
- crope@iki.fi -
-
-
-
- - - 1999 - 2000 - 2001 - 2002 - 2003 - 2004 - 2005 - 2006 - 2007 - 2008 - 2009 - 2010 - 2011 - 2012 - 2013 - 2014 - 2015 - Bill Dirks, Michael H. Schimek, Hans Verkuil, Martin -Rubli, Andy Walls, Muralidharan Karicheri, Mauro Carvalho Chehab, - Pawel Osciak - - - Except when explicitly stated as GPL, programming examples within - this part can be used and distributed without restrictions. - - - - - - 4.5 - 2015-10-29 - rr - Extend vidioc-g-ext-ctrls;. Replace ctrl_class with a new -union with ctrl_class and which. Which is used to select the current value of -the control or the default value. - - - - - 4.4 - 2015-05-26 - ap - Renamed V4L2_TUNER_ADC to V4L2_TUNER_SDR. -Added V4L2_CID_RF_TUNER_RF_GAIN control. -Added transmitter support for Software Defined Radio (SDR) Interface. - - - - - 4.1 - 2015-02-13 - mcc - Fix documentation for media controller device nodes and add support for DVB device nodes. -Add support for Tuner sub-device. - - - - 3.19 - 2014-12-05 - hv - Rewrote Colorspace chapter, added new &v4l2-ycbcr-encoding; and &v4l2-quantization; fields -to &v4l2-pix-format;, &v4l2-pix-format-mplane; and &v4l2-mbus-framefmt;. - - - - - 3.17 - 2014-08-04 - lp, hv - Extended &v4l2-pix-format;. Added format flags. Added compound control types -and VIDIOC_QUERY_EXT_CTRL. - - - - - 3.15 - 2014-02-03 - hv, ap - Update several sections of "Common API Elements": "Opening and Closing Devices" -"Querying Capabilities", "Application Priority", "Video Inputs and Outputs", "Audio Inputs and Outputs" -"Tuners and Modulators", "Video Standards" and "Digital Video (DV) Timings". Added SDR API. - - - - - 3.14 - 2013-11-25 - rr - Set width and height as unsigned on v4l2_rect. - - - - - 3.11 - 2013-05-26 - hv - Remove obsolete VIDIOC_DBG_G_CHIP_IDENT ioctl. - - - - - 3.10 - 2013-03-25 - hv - Remove obsolete and unused DV_PRESET ioctls: - VIDIOC_G_DV_PRESET, VIDIOC_S_DV_PRESET, VIDIOC_QUERY_DV_PRESET and - VIDIOC_ENUM_DV_PRESET. Remove the related v4l2_input/output capability - flags V4L2_IN_CAP_PRESETS and V4L2_OUT_CAP_PRESETS. Added VIDIOC_DBG_G_CHIP_INFO. - - - - - 3.9 - 2012-12-03 - sa, sn - Added timestamp types to v4l2_buffer. - Added V4L2_EVENT_CTRL_CH_RANGE control event changes flag. - - - - - 3.6 - 2012-07-02 - hv - Added VIDIOC_ENUM_FREQ_BANDS. - - - - - 3.5 - 2012-05-07 - sa, sn, hv - Added V4L2_CTRL_TYPE_INTEGER_MENU and V4L2 subdev - selections API. Improved the description of V4L2_CID_COLORFX - control, added V4L2_CID_COLORFX_CBCR control. - Added camera controls V4L2_CID_AUTO_EXPOSURE_BIAS, - V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE, V4L2_CID_IMAGE_STABILIZATION, - V4L2_CID_ISO_SENSITIVITY, V4L2_CID_ISO_SENSITIVITY_AUTO, - V4L2_CID_EXPOSURE_METERING, V4L2_CID_SCENE_MODE, - V4L2_CID_3A_LOCK, V4L2_CID_AUTO_FOCUS_START, - V4L2_CID_AUTO_FOCUS_STOP, V4L2_CID_AUTO_FOCUS_STATUS - and V4L2_CID_AUTO_FOCUS_RANGE. - Added VIDIOC_ENUM_DV_TIMINGS, VIDIOC_QUERY_DV_TIMINGS and - VIDIOC_DV_TIMINGS_CAP. - - - - - 3.4 - 2012-01-25 - sn - Added JPEG compression - control class. - - - - - 3.3 - 2012-01-11 - hv - Added device_caps field to struct v4l2_capabilities. - - - - 3.2 - 2011-08-26 - hv - Added V4L2_CTRL_FLAG_VOLATILE. - - - - 3.1 - 2011-06-27 - mcc, po, hv - Documented that VIDIOC_QUERYCAP now returns a per-subsystem version instead of a per-driver one. - Standardize an error code for invalid ioctl. - Added V4L2_CTRL_TYPE_BITMASK. - - - - 2.6.39 - 2011-03-01 - mcc, po - Removed VIDIOC_*_OLD from videodev2.h header and update it to reflect latest changes. Added the multi-planar API. - - - - 2.6.37 - 2010-08-06 - hv - Removed obsolete vtx (videotext) API. - - - - 2.6.33 - 2009-12-03 - mk - Added documentation for the Digital Video timings API. - - - - 2.6.32 - 2009-08-31 - mcc - Now, revisions will match the kernel version where -the V4L2 API changes will be used by the Linux Kernel. -Also added Remote Controller chapter. - - - - 0.29 - 2009-08-26 - ev - Added documentation for string controls and for FM Transmitter controls. - - - - 0.28 - 2009-08-26 - gl - Added V4L2_CID_BAND_STOP_FILTER documentation. - - - - 0.27 - 2009-08-15 - mcc - Added libv4l and Remote Controller documentation; -added v4l2grab and keytable application examples. - - - - 0.26 - 2009-07-23 - hv - Finalized the RDS capture API. Added modulator and RDS encoder -capabilities. Added support for string controls. - - - - 0.25 - 2009-01-18 - hv - Added pixel formats VYUY, NV16 and NV61, and changed -the debug ioctls VIDIOC_DBG_G/S_REGISTER and VIDIOC_DBG_G_CHIP_IDENT. -Added camera controls V4L2_CID_ZOOM_ABSOLUTE, V4L2_CID_ZOOM_RELATIVE, -V4L2_CID_ZOOM_CONTINUOUS and V4L2_CID_PRIVACY. - - - - 0.24 - 2008-03-04 - mhs - Added pixel formats Y16 and SBGGR16, new controls -and a camera controls class. Removed VIDIOC_G/S_MPEGCOMP. - - - - 0.23 - 2007-08-30 - mhs - Fixed a typo in VIDIOC_DBG_G/S_REGISTER. -Clarified the byte order of packed pixel formats. - - - - 0.22 - 2007-08-29 - mhs - Added the Video Output Overlay interface, new MPEG -controls, V4L2_FIELD_INTERLACED_TB and V4L2_FIELD_INTERLACED_BT, -VIDIOC_DBG_G/S_REGISTER, VIDIOC_(TRY_)ENCODER_CMD, -VIDIOC_G_CHIP_IDENT, VIDIOC_G_ENC_INDEX, new pixel formats. -Clarifications in the cropping chapter, about RGB pixel formats, the -mmap(), poll(), select(), read() and write() functions. Typographical -fixes. - - - - 0.21 - 2006-12-19 - mhs - Fixed a link in the VIDIOC_G_EXT_CTRLS section. - - - - 0.20 - 2006-11-24 - mhs - Clarified the purpose of the audioset field in -struct v4l2_input and v4l2_output. - - - - 0.19 - 2006-10-19 - mhs - Documented V4L2_PIX_FMT_RGB444. - - - - 0.18 - 2006-10-18 - mhs - Added the description of extended controls by Hans -Verkuil. Linked V4L2_PIX_FMT_MPEG to V4L2_CID_MPEG_STREAM_TYPE. - - - - 0.17 - 2006-10-12 - mhs - Corrected V4L2_PIX_FMT_HM12 description. - - - - 0.16 - 2006-10-08 - mhs - VIDIOC_ENUM_FRAMESIZES and -VIDIOC_ENUM_FRAMEINTERVALS are now part of the API. - - - - 0.15 - 2006-09-23 - mhs - Cleaned up the bibliography, added BT.653 and -BT.1119. capture.c/start_capturing() for user pointer I/O did not -initialize the buffer index. Documented the V4L MPEG and MJPEG -VID_TYPEs and V4L2_PIX_FMT_SBGGR8. Updated the list of reserved pixel -formats. See the history chapter for API changes. - - - - 0.14 - 2006-09-14 - mr - Added VIDIOC_ENUM_FRAMESIZES and -VIDIOC_ENUM_FRAMEINTERVALS proposal for frame format enumeration of -digital devices. - - - - 0.13 - 2006-04-07 - mhs - Corrected the description of struct v4l2_window -clips. New V4L2_STD_ and V4L2_TUNER_MODE_LANG1_LANG2 -defines. - - - - 0.12 - 2006-02-03 - mhs - Corrected the description of struct -v4l2_captureparm and v4l2_outputparm. - - - - 0.11 - 2006-01-27 - mhs - Improved the description of struct -v4l2_tuner. - - - - 0.10 - 2006-01-10 - mhs - VIDIOC_G_INPUT and VIDIOC_S_PARM -clarifications. - - - - 0.9 - 2005-11-27 - mhs - Improved the 525 line numbering diagram. Hans -Verkuil and I rewrote the sliced VBI section. He also contributed a -VIDIOC_LOG_STATUS page. Fixed VIDIOC_S_STD call in the video standard -selection example. Various updates. - - - - 0.8 - 2004-10-04 - mhs - Somehow a piece of junk slipped into the capture -example, removed. - - - - 0.7 - 2004-09-19 - mhs - Fixed video standard selection, control -enumeration, downscaling and aspect example. Added read and user -pointer i/o to video capture example. - - - - 0.6 - 2004-08-01 - mhs - v4l2_buffer changes, added video capture example, -various corrections. - - - - 0.5 - 2003-11-05 - mhs - Pixel format erratum. - - - - 0.4 - 2003-09-17 - mhs - Corrected source and Makefile to generate a PDF. -SGML fixes. Added latest API changes. Closed gaps in the history -chapter. - - - - 0.3 - 2003-02-05 - mhs - Another draft, more corrections. - - - - 0.2 - 2003-01-15 - mhs - Second draft, with corrections pointed out by Gerd -Knorr. - - - - 0.1 - 2002-12-01 - mhs - First draft, based on documentation by Bill Dirks -and discussions on the V4L mailing list. - - -
- -Video for Linux Two API Specification - Revision 4.4 - - - &sub-common; - - - - &sub-pixfmt; - - - - &sub-io; - - - - Interfaces - -
&sub-dev-capture;
-
&sub-dev-overlay;
-
&sub-dev-output;
-
&sub-dev-osd;
-
&sub-dev-codec;
-
&sub-dev-effect;
-
&sub-dev-raw-vbi;
-
&sub-dev-sliced-vbi;
-
&sub-dev-teletext;
-
&sub-dev-radio;
-
&sub-dev-rds;
-
&sub-dev-sdr;
-
&sub-dev-event;
-
&sub-dev-subdev;
-
- - - &sub-driver; - - - - &sub-libv4l; - - - - &sub-compat; - - - - Function Reference - - - - &sub-close; - &sub-ioctl; - - &sub-create-bufs; - &sub-cropcap; - &sub-dbg-g-chip-info; - &sub-dbg-g-register; - &sub-decoder-cmd; - &sub-dqevent; - &sub-dv-timings-cap; - &sub-encoder-cmd; - &sub-enumaudio; - &sub-enumaudioout; - &sub-enum-dv-timings; - &sub-enum-fmt; - &sub-enum-framesizes; - &sub-enum-frameintervals; - &sub-enum-freq-bands; - &sub-enuminput; - &sub-enumoutput; - &sub-enumstd; - &sub-expbuf; - &sub-g-audio; - &sub-g-audioout; - &sub-g-crop; - &sub-g-ctrl; - &sub-g-dv-timings; - &sub-g-edid; - &sub-g-enc-index; - &sub-g-ext-ctrls; - &sub-g-fbuf; - &sub-g-fmt; - &sub-g-frequency; - &sub-g-input; - &sub-g-jpegcomp; - &sub-g-modulator; - &sub-g-output; - &sub-g-parm; - &sub-g-priority; - &sub-g-selection; - &sub-g-sliced-vbi-cap; - &sub-g-std; - &sub-g-tuner; - &sub-log-status; - &sub-overlay; - &sub-prepare-buf; - &sub-qbuf; - &sub-querybuf; - &sub-querycap; - &sub-queryctrl; - &sub-query-dv-timings; - &sub-querystd; - &sub-reqbufs; - &sub-s-hw-freq-seek; - &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-subdev-g-selection; - &sub-subscribe-event; - - &sub-mmap; - &sub-munmap; - &sub-open; - &sub-poll; - &sub-read; - &sub-select; - &sub-write; - - - - Common definitions for V4L2 and V4L2 subdev interfaces - &sub-selections-common; - - - - Video For Linux Two Header File - &sub-videodev2-h; - - - - Video Capture Example - &sub-capture-c; - - - - Video Grabber example using libv4l - This program demonstrates how to grab V4L2 images in ppm format by -using libv4l handlers. The advantage is that this grabber can potentially work -with any V4L2 driver. - &sub-v4l2grab-c; - - - &sub-media-indices; - - &sub-biblio; - diff --git a/Documentation/DocBook/media/v4l/v4l2grab.c.xml b/Documentation/DocBook/media/v4l/v4l2grab.c.xml deleted file mode 100644 index bed12e40be27..000000000000 --- a/Documentation/DocBook/media/v4l/v4l2grab.c.xml +++ /dev/null @@ -1,164 +0,0 @@ - -/* V4L2 video picture grabber - Copyright (C) 2009 Mauro Carvalho Chehab <mchehab@infradead.org> - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - */ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <fcntl.h> -#include <errno.h> -#include <sys/ioctl.h> -#include <sys/types.h> -#include <sys/time.h> -#include <sys/mman.h> -#include <linux/videodev2.h> -#include "../libv4l/include/libv4l2.h" - -#define CLEAR(x) memset(&(x), 0, sizeof(x)) - -struct buffer { - void *start; - size_t length; -}; - -static void xioctl(int fh, int request, void *arg) -{ - int r; - - do { - r = v4l2_ioctl(fh, request, arg); - } while (r == -1 && ((errno == EINTR) || (errno == EAGAIN))); - - if (r == -1) { - fprintf(stderr, "error %d, %s\n", errno, strerror(errno)); - exit(EXIT_FAILURE); - } -} - -int main(int argc, char **argv) -{ - struct v4l2_format fmt; - struct v4l2_buffer buf; - struct v4l2_requestbuffers req; - enum v4l2_buf_type type; - fd_set fds; - struct timeval tv; - int r, fd = -1; - unsigned int i, n_buffers; - char *dev_name = "/dev/video0"; - char out_name[256]; - FILE *fout; - struct buffer *buffers; - - fd = v4l2_open(dev_name, O_RDWR | O_NONBLOCK, 0); - if (fd < 0) { - perror("Cannot open device"); - exit(EXIT_FAILURE); - } - - CLEAR(fmt); - fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - fmt.fmt.pix.width = 640; - fmt.fmt.pix.height = 480; - fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_RGB24; - fmt.fmt.pix.field = V4L2_FIELD_INTERLACED; - xioctl(fd, VIDIOC_S_FMT, &fmt); - if (fmt.fmt.pix.pixelformat != V4L2_PIX_FMT_RGB24) { - printf("Libv4l didn't accept RGB24 format. Can't proceed.\n"); - exit(EXIT_FAILURE); - } - if ((fmt.fmt.pix.width != 640) || (fmt.fmt.pix.height != 480)) - printf("Warning: driver is sending image at %dx%d\n", - fmt.fmt.pix.width, fmt.fmt.pix.height); - - CLEAR(req); - req.count = 2; - req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - req.memory = V4L2_MEMORY_MMAP; - xioctl(fd, VIDIOC_REQBUFS, &req); - - buffers = calloc(req.count, sizeof(*buffers)); - for (n_buffers = 0; n_buffers < req.count; ++n_buffers) { - CLEAR(buf); - - buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - buf.memory = V4L2_MEMORY_MMAP; - buf.index = n_buffers; - - xioctl(fd, VIDIOC_QUERYBUF, &buf); - - buffers[n_buffers].length = buf.length; - buffers[n_buffers].start = v4l2_mmap(NULL, buf.length, - PROT_READ | PROT_WRITE, MAP_SHARED, - fd, buf.m.offset); - - if (MAP_FAILED == buffers[n_buffers].start) { - perror("mmap"); - exit(EXIT_FAILURE); - } - } - - for (i = 0; i < n_buffers; ++i) { - CLEAR(buf); - buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - buf.memory = V4L2_MEMORY_MMAP; - buf.index = i; - xioctl(fd, VIDIOC_QBUF, &buf); - } - type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - - xioctl(fd, VIDIOC_STREAMON, &type); - for (i = 0; i < 20; i++) { - do { - FD_ZERO(&fds); - FD_SET(fd, &fds); - - /* Timeout. */ - tv.tv_sec = 2; - tv.tv_usec = 0; - - r = select(fd + 1, &fds, NULL, NULL, &tv); - } while ((r == -1 && (errno = EINTR))); - if (r == -1) { - perror("select"); - return errno; - } - - CLEAR(buf); - buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - buf.memory = V4L2_MEMORY_MMAP; - xioctl(fd, VIDIOC_DQBUF, &buf); - - sprintf(out_name, "out%03d.ppm", i); - fout = fopen(out_name, "w"); - if (!fout) { - perror("Cannot open image"); - exit(EXIT_FAILURE); - } - fprintf(fout, "P6\n%d %d 255\n", - fmt.fmt.pix.width, fmt.fmt.pix.height); - fwrite(buffers[buf.index].start, buf.bytesused, 1, fout); - fclose(fout); - - xioctl(fd, VIDIOC_QBUF, &buf); - } - - type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - xioctl(fd, VIDIOC_STREAMOFF, &type); - for (i = 0; i < n_buffers; ++i) - v4l2_munmap(buffers[i].start, buffers[i].length); - v4l2_close(fd); - - return 0; -} - diff --git a/Documentation/DocBook/media/v4l/vbi_525.pdf b/Documentation/DocBook/media/v4l/vbi_525.pdf deleted file mode 100644 index 9e72c25b208d..000000000000 Binary files a/Documentation/DocBook/media/v4l/vbi_525.pdf and /dev/null differ diff --git a/Documentation/DocBook/media/v4l/vbi_625.pdf b/Documentation/DocBook/media/v4l/vbi_625.pdf deleted file mode 100644 index 765235e33a4d..000000000000 Binary files a/Documentation/DocBook/media/v4l/vbi_625.pdf and /dev/null differ diff --git a/Documentation/DocBook/media/v4l/vbi_hsync.pdf b/Documentation/DocBook/media/v4l/vbi_hsync.pdf deleted file mode 100644 index 200b668189bf..000000000000 Binary files a/Documentation/DocBook/media/v4l/vbi_hsync.pdf and /dev/null differ diff --git a/Documentation/DocBook/media/v4l/vidioc-create-bufs.xml b/Documentation/DocBook/media/v4l/vidioc-create-bufs.xml deleted file mode 100644 index 6528e97b8990..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-create-bufs.xml +++ /dev/null @@ -1,158 +0,0 @@ - - - ioctl VIDIOC_CREATE_BUFS - &manvol; - - - - VIDIOC_CREATE_BUFS - Create buffers for Memory Mapped or User Pointer or DMA Buffer - I/O - - - - - - int ioctl - int fd - int request - struct v4l2_create_buffers *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_CREATE_BUFS - - - - argp - - - - - - - - - Description - - This ioctl is used to create buffers for memory -mapped or user pointer or DMA buffer I/O. It can be used as an alternative or in -addition to the &VIDIOC-REQBUFS; ioctl, when a tighter -control over buffers is required. This ioctl can be called multiple times to -create buffers of different sizes. - - To allocate the device buffers applications must initialize the -relevant fields of the v4l2_create_buffers structure. -The count field must be set to the number of -requested buffers, the memory field specifies the -requested I/O method and the reserved array must be -zeroed. - - The format field specifies the image format -that the buffers must be able to handle. The application has to fill in this -&v4l2-format;. Usually this will be done using the &VIDIOC-TRY-FMT; or &VIDIOC-G-FMT; ioctls -to ensure that the requested format is supported by the driver. -Based on the format's type field the requested buffer -size (for single-planar) or plane sizes (for multi-planar formats) will be -used for the allocated buffers. The driver may return an error if the size(s) -are not supported by the hardware (usually because they are too small). - - The buffers created by this ioctl will have as minimum size the size -defined by the format.pix.sizeimage field (or the -corresponding fields for other format types). Usually if the -format.pix.sizeimage field is less than the minimum -required for the given format, then an error will be returned since drivers will -typically not allow this. If it is larger, then the value will be used as-is. -In other words, the driver may reject the requested size, but if it is accepted -the driver will use it unchanged. - - When the ioctl is called with a pointer to this structure the driver -will attempt to allocate up to the requested number of buffers and store the -actual number allocated and the starting index in the -count and the index fields -respectively. On return count can be smaller than -the number requested. - - - struct <structname>v4l2_create_buffers</structname> - - &cs-str; - - - __u32 - index - The starting buffer index, returned by the driver. - - - __u32 - count - The number of buffers requested or granted. If count == 0, then - VIDIOC_CREATE_BUFS will set index - to the current number of created buffers, and it will check the validity of - memory and format.type. - If those are invalid -1 is returned and errno is set to &EINVAL;, - otherwise VIDIOC_CREATE_BUFS returns 0. It will - never set errno to &EBUSY; in this particular case. - - - __u32 - memory - Applications set this field to -V4L2_MEMORY_MMAP, -V4L2_MEMORY_DMABUF or -V4L2_MEMORY_USERPTR. See - - - &v4l2-format; - format - Filled in by the application, preserved by the driver. - - - __u32 - reserved[8] - A place holder for future extensions. Drivers and applications -must set the array to zero. - - - -
-
- - - &return-value; - - - - ENOMEM - - No memory to allocate buffers for memory -mapped I/O. - - - - EINVAL - - The buffer type (format.type field), -requested I/O method (memory) or format -(format field) is not valid. - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-cropcap.xml b/Documentation/DocBook/media/v4l/vidioc-cropcap.xml deleted file mode 100644 index 50cb940cbe5c..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-cropcap.xml +++ /dev/null @@ -1,166 +0,0 @@ - - - ioctl VIDIOC_CROPCAP - &manvol; - - - - VIDIOC_CROPCAP - Information about the video cropping and scaling abilities - - - - - - int ioctl - int fd - int request - struct v4l2_cropcap -*argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_CROPCAP - - - - argp - - - - - - - - - Description - - Applications use this function to query the cropping -limits, the pixel aspect of images and to calculate scale factors. -They set the type field of a v4l2_cropcap -structure to the respective buffer (stream) type and call the -VIDIOC_CROPCAP ioctl with a pointer to this -structure. Drivers fill the rest of the structure. The results are -constant except when switching the video standard. Remember this -switch can occur implicit when switching the video input or -output. - -Do not use the multiplanar buffer types. Use V4L2_BUF_TYPE_VIDEO_CAPTURE -instead of V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE -and use V4L2_BUF_TYPE_VIDEO_OUTPUT instead of -V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE. - - This ioctl must be implemented for video capture or output devices that -support cropping and/or scaling and/or have non-square pixels, and for overlay devices. - - - struct <structname>v4l2_cropcap</structname> - - &cs-str; - - - __u32 - type - Type of the data stream, set by the application. -Only these types are valid here: -V4L2_BUF_TYPE_VIDEO_CAPTURE, -V4L2_BUF_TYPE_VIDEO_OUTPUT and -V4L2_BUF_TYPE_VIDEO_OVERLAY. See . - - - struct v4l2_rect - bounds - Defines the window within capturing or output is -possible, this may exclude for example the horizontal and vertical -blanking areas. The cropping rectangle cannot exceed these limits. -Width and height are defined in pixels, the driver writer is free to -choose origin and units of the coordinate system in the analog -domain. - - - struct v4l2_rect - defrect - Default cropping rectangle, it shall cover the -"whole picture". Assuming pixel aspect 1/1 this could be for example a -640 × 480 rectangle for NTSC, a -768 × 576 rectangle for PAL and SECAM centered over -the active picture area. The same co-ordinate system as for - bounds is used. - - - &v4l2-fract; - pixelaspect - This is the pixel aspect (y / x) when no -scaling is applied, the ratio of the actual sampling -frequency and the frequency required to get square -pixels.When cropping coordinates refer to square pixels, -the driver sets pixelaspect to 1/1. Other -common values are 54/59 for PAL and SECAM, 11/10 for NTSC sampled -according to []. - - - -
- - - - - struct <structname>v4l2_rect</structname> - - &cs-str; - - - __s32 - left - Horizontal offset of the top, left corner of the -rectangle, in pixels. - - - __s32 - top - Vertical offset of the top, left corner of the -rectangle, in pixels. - - - __u32 - width - Width of the rectangle, in pixels. - - - __u32 - height - Height of the rectangle, in pixels. - - - -
-
- - - &return-value; - - - - EINVAL - - The &v4l2-cropcap; type is -invalid. - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-dbg-g-chip-info.xml b/Documentation/DocBook/media/v4l/vidioc-dbg-g-chip-info.xml deleted file mode 100644 index f14a3bb1afaa..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-dbg-g-chip-info.xml +++ /dev/null @@ -1,207 +0,0 @@ - - - ioctl VIDIOC_DBG_G_CHIP_INFO - &manvol; - - - - VIDIOC_DBG_G_CHIP_INFO - Identify the chips on a TV card - - - - - - int ioctl - int fd - int request - struct v4l2_dbg_chip_info -*argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_DBG_G_CHIP_INFO - - - - argp - - - - - - - - - Description - - - Experimental - - This is an experimental interface and may change in -the future. - - - For driver debugging purposes this ioctl allows test -applications to query the driver about the chips present on the TV -card. Regular applications must not use it. When you found a chip -specific bug, please contact the linux-media mailing list (&v4l-ml;) -so it can be fixed. - - Additionally the Linux kernel must be compiled with the -CONFIG_VIDEO_ADV_DEBUG option to enable this ioctl. - - To query the driver applications must initialize the -match.type and -match.addr or match.name -fields of a &v4l2-dbg-chip-info; -and call VIDIOC_DBG_G_CHIP_INFO with a pointer to -this structure. On success the driver stores information about the -selected chip in the name and -flags fields. - - When match.type is -V4L2_CHIP_MATCH_BRIDGE, -match.addr selects the nth bridge 'chip' -on the TV card. You can enumerate all chips by starting at zero and -incrementing match.addr by one until -VIDIOC_DBG_G_CHIP_INFO fails with an &EINVAL;. -The number zero always selects the bridge chip itself, ⪚ the chip -connected to the PCI or USB bus. Non-zero numbers identify specific -parts of the bridge chip such as an AC97 register block. - - When match.type is -V4L2_CHIP_MATCH_SUBDEV, -match.addr selects the nth sub-device. This -allows you to enumerate over all sub-devices. - - On success, the name field will -contain a chip name and the flags field will -contain V4L2_CHIP_FL_READABLE if the driver supports -reading registers from the device or V4L2_CHIP_FL_WRITABLE -if the driver supports writing registers to the device. - - We recommended the v4l2-dbg -utility over calling this ioctl directly. It is available from the -LinuxTV v4l-dvb repository; see https://linuxtv.org/repo/ for -access instructions. - - - - struct <structname>v4l2_dbg_match</structname> - - &cs-ustr; - - - __u32 - type - See for a list of -possible types. - - - union - (anonymous) - - - - __u32 - addr - Match a chip by this number, interpreted according -to the type field. - - - - char - name[32] - Match a chip by this name, interpreted according -to the type field. Currently unused. - - - -
- - - struct <structname>v4l2_dbg_chip_info</structname> - - &cs-str; - - - struct v4l2_dbg_match - match - How to match the chip, see . - - - char - name[32] - The name of the chip. - - - __u32 - flags - Set by the driver. If V4L2_CHIP_FL_READABLE -is set, then the driver supports reading registers from the device. If -V4L2_CHIP_FL_WRITABLE is set, then it supports writing registers. - - - __u32 - reserved[8] - Reserved fields, both application and driver must set these to 0. - - - -
- - - - Chip Match Types - - &cs-def; - - - V4L2_CHIP_MATCH_BRIDGE - 0 - Match the nth chip on the card, zero for the - bridge chip. Does not match sub-devices. - - - V4L2_CHIP_MATCH_SUBDEV - 4 - Match the nth sub-device. - - - -
-
- - - &return-value; - - - - EINVAL - - The match_type is invalid or -no device could be matched. - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-dbg-g-register.xml b/Documentation/DocBook/media/v4l/vidioc-dbg-g-register.xml deleted file mode 100644 index 5877f68a5820..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-dbg-g-register.xml +++ /dev/null @@ -1,227 +0,0 @@ - - - ioctl VIDIOC_DBG_G_REGISTER, VIDIOC_DBG_S_REGISTER - &manvol; - - - - VIDIOC_DBG_G_REGISTER - VIDIOC_DBG_S_REGISTER - Read or write hardware registers - - - - - - int ioctl - int fd - int request - struct v4l2_dbg_register *argp - - - - - int ioctl - int fd - int request - const struct v4l2_dbg_register -*argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_DBG_G_REGISTER, VIDIOC_DBG_S_REGISTER - - - - argp - - - - - - - - - Description - - - Experimental - - This is an experimental -interface and may change in the future. - - - For driver debugging purposes these ioctls allow test -applications to access hardware registers directly. Regular -applications must not use them. - - Since writing or even reading registers can jeopardize the -system security, its stability and damage the hardware, both ioctls -require superuser privileges. Additionally the Linux kernel must be -compiled with the CONFIG_VIDEO_ADV_DEBUG option -to enable these ioctls. - - To write a register applications must initialize all fields -of a &v4l2-dbg-register; except for size and call -VIDIOC_DBG_S_REGISTER with a pointer to this -structure. The match.type and -match.addr or match.name -fields select a chip on the TV -card, the reg field specifies a register -number and the val field the value to be -written into the register. - - To read a register applications must initialize the -match.type, -match.addr or match.name and -reg fields, and call -VIDIOC_DBG_G_REGISTER with a pointer to this -structure. On success the driver stores the register value in the -val field and the size (in bytes) of the -value in size. - - When match.type is -V4L2_CHIP_MATCH_BRIDGE, -match.addr selects the nth non-sub-device chip -on the TV card. The number zero always selects the host chip, ⪚ the -chip connected to the PCI or USB bus. You can find out which chips are -present with the &VIDIOC-DBG-G-CHIP-INFO; ioctl. - - When match.type is -V4L2_CHIP_MATCH_SUBDEV, -match.addr selects the nth sub-device. - - These ioctls are optional, not all drivers may support them. -However when a driver supports these ioctls it must also support -&VIDIOC-DBG-G-CHIP-INFO;. Conversely it may support -VIDIOC_DBG_G_CHIP_INFO but not these ioctls. - - VIDIOC_DBG_G_REGISTER and -VIDIOC_DBG_S_REGISTER were introduced in Linux -2.6.21, but their API was changed to the one described here in kernel 2.6.29. - - We recommended the v4l2-dbg -utility over calling these ioctls directly. It is available from the -LinuxTV v4l-dvb repository; see https://linuxtv.org/repo/ for -access instructions. - - - - struct <structname>v4l2_dbg_match</structname> - - &cs-ustr; - - - __u32 - type - See for a list of -possible types. - - - union - (anonymous) - - - - __u32 - addr - Match a chip by this number, interpreted according -to the type field. - - - - char - name[32] - Match a chip by this name, interpreted according -to the type field. Currently unused. - - - -
- - - - struct <structname>v4l2_dbg_register</structname> - - - - - - - struct v4l2_dbg_match - match - How to match the chip, see . - - - __u32 - size - The register size in bytes. - - - __u64 - reg - A register number. - - - __u64 - val - The value read from, or to be written into the -register. - - - -
- - - - Chip Match Types - - &cs-def; - - - V4L2_CHIP_MATCH_BRIDGE - 0 - Match the nth chip on the card, zero for the - bridge chip. Does not match sub-devices. - - - V4L2_CHIP_MATCH_SUBDEV - 4 - Match the nth sub-device. - - - -
-
- - - &return-value; - - - - EPERM - - Insufficient permissions. Root privileges are required -to execute these ioctls. - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-decoder-cmd.xml b/Documentation/DocBook/media/v4l/vidioc-decoder-cmd.xml deleted file mode 100644 index 73eb5cfe698a..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-decoder-cmd.xml +++ /dev/null @@ -1,259 +0,0 @@ - - - ioctl VIDIOC_DECODER_CMD, VIDIOC_TRY_DECODER_CMD - &manvol; - - - - VIDIOC_DECODER_CMD - VIDIOC_TRY_DECODER_CMD - Execute an decoder command - - - - - - int ioctl - int fd - int request - struct v4l2_decoder_cmd *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_DECODER_CMD, VIDIOC_TRY_DECODER_CMD - - - - argp - - - - - - - - - Description - - These ioctls control an audio/video (usually MPEG-) decoder. -VIDIOC_DECODER_CMD sends a command to the -decoder, VIDIOC_TRY_DECODER_CMD can be used to -try a command without actually executing it. To send a command applications -must initialize all fields of a &v4l2-decoder-cmd; and call -VIDIOC_DECODER_CMD or VIDIOC_TRY_DECODER_CMD -with a pointer to this structure. - - The cmd field must contain the -command code. Some commands use the flags field for -additional information. - - - A write() or &VIDIOC-STREAMON; call sends an implicit -START command to the decoder if it has not been started yet. - - - A close() or &VIDIOC-STREAMOFF; call of a streaming -file descriptor sends an implicit immediate STOP command to the decoder, and all -buffered data is discarded. - - These ioctls are optional, not all drivers may support -them. They were introduced in Linux 3.3. - - - struct <structname>v4l2_decoder_cmd</structname> - - &cs-str; - - - __u32 - cmd - - - The decoder command, see . - - - __u32 - flags - - - Flags to go with the command. If no flags are defined for -this command, drivers and applications must set this field to zero. - - - union - (anonymous) - - - - - - - struct - start - - Structure containing additional data for the -V4L2_DEC_CMD_START command. - - - - - __s32 - speed - Playback speed and direction. The playback speed is defined as -speed/1000 of the normal speed. So 1000 is normal playback. -Negative numbers denote reverse playback, so -1000 does reverse playback at normal -speed. Speeds -1, 0 and 1 have special meanings: speed 0 is shorthand for 1000 -(normal playback). A speed of 1 steps just one frame forward, a speed of -1 steps -just one frame back. - - - - - - __u32 - format - Format restrictions. This field is set by the driver, not the -application. Possible values are V4L2_DEC_START_FMT_NONE if -there are no format restrictions or V4L2_DEC_START_FMT_GOP -if the decoder operates on full GOPs (Group Of Pictures). -This is usually the case for reverse playback: the decoder needs full GOPs, which -it can then play in reverse order. So to implement reverse playback the application -must feed the decoder the last GOP in the video file, then the GOP before that, etc. etc. - - - - - struct - stop - - Structure containing additional data for the -V4L2_DEC_CMD_STOP command. - - - - - __u64 - pts - Stop playback at this pts or immediately -if the playback is already past that timestamp. Leave to 0 if you want to stop after the -last frame was decoded. - - - - - struct - raw - - - - - - - __u32 - data[16] - Reserved for future extensions. Drivers and -applications must set the array to zero. - - - -
- - - Decoder Commands - - &cs-def; - - - V4L2_DEC_CMD_START - 0 - Start the decoder. When the decoder is already -running or paused, this command will just change the playback speed. -That means that calling V4L2_DEC_CMD_START when -the decoder was paused will not resume the decoder. -You have to explicitly call V4L2_DEC_CMD_RESUME for that. -This command has one flag: -V4L2_DEC_CMD_START_MUTE_AUDIO. If set, then audio will -be muted when playing back at a non-standard speed. - - - - V4L2_DEC_CMD_STOP - 1 - Stop the decoder. When the decoder is already stopped, -this command does nothing. This command has two flags: -if V4L2_DEC_CMD_STOP_TO_BLACK is set, then the decoder will -set the picture to black after it stopped decoding. Otherwise the last image will -repeat. mem2mem decoders will stop producing new frames altogether. They will send -a V4L2_EVENT_EOS event when the last frame has been decoded -and all frames are ready to be dequeued and will set the -V4L2_BUF_FLAG_LAST buffer flag on the last buffer of the -capture queue to indicate there will be no new buffers produced to dequeue. This -buffer may be empty, indicated by the driver setting the -bytesused field to 0. Once the -V4L2_BUF_FLAG_LAST flag was set, the -VIDIOC_DQBUF ioctl will not block anymore, -but return an &EPIPE;. -If V4L2_DEC_CMD_STOP_IMMEDIATELY is set, then the decoder -stops immediately (ignoring the pts value), otherwise it -will keep decoding until timestamp >= pts or until the last of the pending data from -its internal buffers was decoded. - - - - V4L2_DEC_CMD_PAUSE - 2 - Pause the decoder. When the decoder has not been -started yet, the driver will return an &EPERM;. When the decoder is -already paused, this command does nothing. This command has one flag: -if V4L2_DEC_CMD_PAUSE_TO_BLACK is set, then set the -decoder output to black when paused. - - - - V4L2_DEC_CMD_RESUME - 3 - Resume decoding after a PAUSE command. When the -decoder has not been started yet, the driver will return an &EPERM;. -When the decoder is already running, this command does nothing. No -flags are defined for this command. - - - -
- -
- - - &return-value; - - - - EINVAL - - The cmd field is invalid. - - - - EPERM - - The application sent a PAUSE or RESUME command when -the decoder was not running. - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-dqevent.xml b/Documentation/DocBook/media/v4l/vidioc-dqevent.xml deleted file mode 100644 index c9c3c7713832..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-dqevent.xml +++ /dev/null @@ -1,471 +0,0 @@ - - - ioctl VIDIOC_DQEVENT - &manvol; - - - - VIDIOC_DQEVENT - Dequeue event - - - - - - int ioctl - int fd - int request - struct v4l2_event -*argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_DQEVENT - - - - argp - - - - - - - - - Description - - Dequeue an event from a video device. No input is required - for this ioctl. All the fields of the &v4l2-event; structure are - filled by the driver. The file handle will also receive exceptions - which the application may get by e.g. using the select system - call. - - - struct <structname>v4l2_event</structname> - - &cs-str; - - - __u32 - type - - Type of the event, see . - - - union - u - - - - - - &v4l2-event-vsync; - vsync - Event data for event V4L2_EVENT_VSYNC. - - - - - &v4l2-event-ctrl; - ctrl - Event data for event V4L2_EVENT_CTRL. - - - - - &v4l2-event-frame-sync; - frame_sync - Event data for event - V4L2_EVENT_FRAME_SYNC. - - - - &v4l2-event-motion-det; - motion_det - Event data for event V4L2_EVENT_MOTION_DET. - - - - &v4l2-event-src-change; - src_change - Event data for event V4L2_EVENT_SOURCE_CHANGE. - - - - __u8 - data[64] - Event data. Defined by the event type. The union - should be used to define easily accessible type for - events. - - - __u32 - pending - - Number of pending events excluding this one. - - - __u32 - sequence - - Event sequence number. The sequence number is - incremented for every subscribed event that takes place. - If sequence numbers are not contiguous it means that - events have been lost. - - - - struct timespec - timestamp - - Event timestamp. The timestamp has been taken from the - CLOCK_MONOTONIC clock. To access the - same clock outside V4L2, use clock_gettime(2). - - - - u32 - id - - The ID associated with the event source. If the event does not - have an associated ID (this depends on the event type), then this - is 0. - - - __u32 - reserved[8] - - Reserved for future extensions. Drivers must set - the array to zero. - - - -
- - - Event Types - - &cs-def; - - - V4L2_EVENT_ALL - 0 - All events. V4L2_EVENT_ALL is valid only for - VIDIOC_UNSUBSCRIBE_EVENT for unsubscribing all events at once. - - - - V4L2_EVENT_VSYNC - 1 - This event is triggered on the vertical sync. - This event has a &v4l2-event-vsync; associated with it. - - - - V4L2_EVENT_EOS - 2 - This event is triggered when the end of a stream is reached. - This is typically used with MPEG decoders to report to the application - when the last of the MPEG stream has been decoded. - - - - V4L2_EVENT_CTRL - 3 - This event requires that the id - matches the control ID from which you want to receive events. - This event is triggered if the control's value changes, if a - button control is pressed or if the control's flags change. - This event has a &v4l2-event-ctrl; associated with it. This struct - contains much of the same information as &v4l2-queryctrl; and - &v4l2-control;. - - If the event is generated due to a call to &VIDIOC-S-CTRL; or - &VIDIOC-S-EXT-CTRLS;, then the event will not be sent to - the file handle that called the ioctl function. This prevents - nasty feedback loops. If you do want to get the - event, then set the V4L2_EVENT_SUB_FL_ALLOW_FEEDBACK - flag. - - - This event type will ensure that no information is lost when - more events are raised than there is room internally. In that - case the &v4l2-event-ctrl; of the second-oldest event is kept, - but the changes field of the - second-oldest event is ORed with the changes - field of the oldest event. - - - - V4L2_EVENT_FRAME_SYNC - 4 - - Triggered immediately when the reception of a - frame has begun. This event has a - &v4l2-event-frame-sync; associated with it. - - If the hardware needs to be stopped in the case of a - buffer underrun it might not be able to generate this event. - In such cases the frame_sequence - field in &v4l2-event-frame-sync; will not be incremented. This - causes two consecutive frame sequence numbers to have n times - frame interval in between them. - - - - V4L2_EVENT_SOURCE_CHANGE - 5 - - This event is triggered when a source parameter change is - detected during runtime by the video device. It can be a - runtime resolution change triggered by a video decoder or the - format change happening on an input connector. - This event requires that the id - matches the input index (when used with a video device node) - or the pad index (when used with a subdevice node) from which - you want to receive events. - - This event has a &v4l2-event-src-change; associated - with it. The changes bitfield denotes - what has changed for the subscribed pad. If multiple events - occurred before application could dequeue them, then the changes - will have the ORed value of all the events generated. - - - - V4L2_EVENT_MOTION_DET - 6 - - Triggered whenever the motion detection state for one or more of the regions - changes. This event has a &v4l2-event-motion-det; associated with it. - - - - V4L2_EVENT_PRIVATE_START - 0x08000000 - Base event number for driver-private events. - - - -
- - - struct <structname>v4l2_event_vsync</structname> - - &cs-str; - - - __u8 - field - The upcoming field. See &v4l2-field;. - - - -
- - - struct <structname>v4l2_event_ctrl</structname> - - &cs-str; - - - __u32 - changes - - A bitmask that tells what has changed. See . - - - __u32 - type - - The type of the control. See &v4l2-ctrl-type;. - - - union (anonymous) - - - - - - - __s32 - value - The 32-bit value of the control for 32-bit control types. - This is 0 for string controls since the value of a string - cannot be passed using &VIDIOC-DQEVENT;. - - - - __s64 - value64 - The 64-bit value of the control for 64-bit control types. - - - __u32 - flags - - The control flags. See . - - - __s32 - minimum - - The minimum value of the control. See &v4l2-queryctrl;. - - - __s32 - maximum - - The maximum value of the control. See &v4l2-queryctrl;. - - - __s32 - step - - The step value of the control. See &v4l2-queryctrl;. - - - __s32 - default_value - - The default value value of the control. See &v4l2-queryctrl;. - - - -
- - - struct <structname>v4l2_event_frame_sync</structname> - - &cs-str; - - - __u32 - frame_sequence - - The sequence number of the frame being received. - - - - -
- - - struct <structname>v4l2_event_src_change</structname> - - &cs-str; - - - __u32 - changes - - A bitmask that tells what has changed. See . - - - - -
- - - struct <structname>v4l2_event_motion_det</structname> - - &cs-str; - - - __u32 - flags - - Currently only one flag is available: if V4L2_EVENT_MD_FL_HAVE_FRAME_SEQ - is set, then the frame_sequence field is valid, - otherwise that field should be ignored. - - - - __u32 - frame_sequence - - The sequence number of the frame being received. Only valid if the - V4L2_EVENT_MD_FL_HAVE_FRAME_SEQ flag was set. - - - - __u32 - region_mask - - The bitmask of the regions that reported motion. There is at least one - region. If this field is 0, then no motion was detected at all. - If there is no V4L2_CID_DETECT_MD_REGION_GRID control - (see ) to assign a different region - to each cell in the motion detection grid, then that all cells - are automatically assigned to the default region 0. - - - - -
- - - Control Changes - - &cs-def; - - - V4L2_EVENT_CTRL_CH_VALUE - 0x0001 - This control event was triggered because the value of the control - changed. Special cases: Volatile controls do no generate this event; - If a control has the V4L2_CTRL_FLAG_EXECUTE_ON_WRITE - flag set, then this event is sent as well, regardless its value. - - - V4L2_EVENT_CTRL_CH_FLAGS - 0x0002 - This control event was triggered because the control flags - changed. - - - V4L2_EVENT_CTRL_CH_RANGE - 0x0004 - This control event was triggered because the minimum, - maximum, step or the default value of the control changed. - - - -
- - - Source Changes - - &cs-def; - - - V4L2_EVENT_SRC_CH_RESOLUTION - 0x0001 - This event gets triggered when a resolution change is - detected at an input. This can come from an input connector or - from a video decoder. - - - - -
-
- - &return-value; - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-dv-timings-cap.xml b/Documentation/DocBook/media/v4l/vidioc-dv-timings-cap.xml deleted file mode 100644 index ca9ffce9b4c1..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-dv-timings-cap.xml +++ /dev/null @@ -1,210 +0,0 @@ - - - ioctl VIDIOC_DV_TIMINGS_CAP, VIDIOC_SUBDEV_DV_TIMINGS_CAP - &manvol; - - - - VIDIOC_DV_TIMINGS_CAP - VIDIOC_SUBDEV_DV_TIMINGS_CAP - The capabilities of the Digital Video receiver/transmitter - - - - - - int ioctl - int fd - int request - struct v4l2_dv_timings_cap *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_DV_TIMINGS_CAP, VIDIOC_SUBDEV_DV_TIMINGS_CAP - - - - argp - - - - - - - - - Description - - To query the capabilities of the DV receiver/transmitter applications initialize the -pad field to 0, zero the reserved array of &v4l2-dv-timings-cap; -and call the VIDIOC_DV_TIMINGS_CAP ioctl on a video node -and the driver will fill in the structure. Note that drivers may return -different values after switching the video input or output. - - When implemented by the driver DV capabilities of subdevices can be -queried by calling the VIDIOC_SUBDEV_DV_TIMINGS_CAP ioctl -directly on a subdevice node. The capabilities are specific to inputs (for DV -receivers) or outputs (for DV transmitters), applications must specify the -desired pad number in the &v4l2-dv-timings-cap; pad -field and zero the reserved array. Attempts to query -capabilities on a pad that doesn't support them will return an &EINVAL;. - - - struct <structname>v4l2_bt_timings_cap</structname> - - &cs-str; - - - __u32 - min_width - Minimum width of the active video in pixels. - - - __u32 - max_width - Maximum width of the active video in pixels. - - - __u32 - min_height - Minimum height of the active video in lines. - - - __u32 - max_height - Maximum height of the active video in lines. - - - __u64 - min_pixelclock - Minimum pixelclock frequency in Hz. - - - __u64 - max_pixelclock - Maximum pixelclock frequency in Hz. - - - __u32 - standards - The video standard(s) supported by the hardware. - See for a list of standards. - - - __u32 - capabilities - Several flags giving more information about the capabilities. - See for a description of the flags. - - - - __u32 - reserved[16] - Reserved for future extensions. Drivers must set the array to zero. - - - -
- - - struct <structname>v4l2_dv_timings_cap</structname> - - &cs-str; - - - __u32 - type - Type of DV timings as listed in . - - - __u32 - pad - Pad number as reported by the media controller API. This field - is only used when operating on a subdevice node. When operating on a - video node applications must set this field to zero. - - - __u32 - reserved[2] - Reserved for future extensions. Drivers and applications must - set the array to zero. - - - union - - - - - - &v4l2-bt-timings-cap; - bt - BT.656/1120 timings capabilities of the hardware. - - - - __u32 - raw_data[32] - - - - -
- - - DV BT Timing capabilities - - &cs-str; - - - Flag - Description - - - - - - - V4L2_DV_BT_CAP_INTERLACED - Interlaced formats are supported. - - - - V4L2_DV_BT_CAP_PROGRESSIVE - Progressive formats are supported. - - - - V4L2_DV_BT_CAP_REDUCED_BLANKING - CVT/GTF specific: the timings can make use of reduced blanking (CVT) -or the 'Secondary GTF' curve (GTF). - - - - V4L2_DV_BT_CAP_CUSTOM - Can support non-standard timings, i.e. timings not belonging to the -standards set in the standards field. - - - - -
-
- - - &return-value; - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-encoder-cmd.xml b/Documentation/DocBook/media/v4l/vidioc-encoder-cmd.xml deleted file mode 100644 index 70a4a08e9404..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-encoder-cmd.xml +++ /dev/null @@ -1,197 +0,0 @@ - - - ioctl VIDIOC_ENCODER_CMD, VIDIOC_TRY_ENCODER_CMD - &manvol; - - - - VIDIOC_ENCODER_CMD - VIDIOC_TRY_ENCODER_CMD - Execute an encoder command - - - - - - int ioctl - int fd - int request - struct v4l2_encoder_cmd *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_ENCODER_CMD, VIDIOC_TRY_ENCODER_CMD - - - - argp - - - - - - - - - Description - - These ioctls control an audio/video (usually MPEG-) encoder. -VIDIOC_ENCODER_CMD sends a command to the -encoder, VIDIOC_TRY_ENCODER_CMD can be used to -try a command without actually executing it. - - To send a command applications must initialize all fields of a - &v4l2-encoder-cmd; and call - VIDIOC_ENCODER_CMD or - VIDIOC_TRY_ENCODER_CMD with a pointer to this - structure. - - The cmd field must contain the -command code. The flags field is currently -only used by the STOP command and contains one bit: If the -V4L2_ENC_CMD_STOP_AT_GOP_END flag is set, -encoding will continue until the end of the current Group -Of Pictures, otherwise it will stop immediately. - - A read() or &VIDIOC-STREAMON; call sends an implicit -START command to the encoder if it has not been started yet. After a STOP command, -read() calls will read the remaining data -buffered by the driver. When the buffer is empty, -read() will return zero and the next -read() call will restart the encoder. - - A close() or &VIDIOC-STREAMOFF; call of a streaming -file descriptor sends an implicit immediate STOP to the encoder, and all buffered -data is discarded. - - These ioctls are optional, not all drivers may support -them. They were introduced in Linux 2.6.21. - - - struct <structname>v4l2_encoder_cmd</structname> - - &cs-str; - - - __u32 - cmd - The encoder command, see . - - - __u32 - flags - Flags to go with the command, see . If no flags are defined for -this command, drivers and applications must set this field to -zero. - - - __u32 - data[8] - Reserved for future extensions. Drivers and -applications must set the array to zero. - - - -
- - - Encoder Commands - - &cs-def; - - - V4L2_ENC_CMD_START - 0 - Start the encoder. When the encoder is already -running or paused, this command does nothing. No flags are defined for -this command. - - - V4L2_ENC_CMD_STOP - 1 - Stop the encoder. When the -V4L2_ENC_CMD_STOP_AT_GOP_END flag is set, -encoding will continue until the end of the current Group -Of Pictures, otherwise encoding will stop immediately. -When the encoder is already stopped, this command does -nothing. mem2mem encoders will send a V4L2_EVENT_EOS event -when the last frame has been encoded and all frames are ready to be dequeued and -will set the V4L2_BUF_FLAG_LAST buffer flag on the last -buffer of the capture queue to indicate there will be no new buffers produced to -dequeue. This buffer may be empty, indicated by the driver setting the -bytesused field to 0. Once the -V4L2_BUF_FLAG_LAST flag was set, the -VIDIOC_DQBUF ioctl will not block anymore, -but return an &EPIPE;. - - - V4L2_ENC_CMD_PAUSE - 2 - Pause the encoder. When the encoder has not been -started yet, the driver will return an &EPERM;. When the encoder is -already paused, this command does nothing. No flags are defined for -this command. - - - V4L2_ENC_CMD_RESUME - 3 - Resume encoding after a PAUSE command. When the -encoder has not been started yet, the driver will return an &EPERM;. -When the encoder is already running, this command does nothing. No -flags are defined for this command. - - - -
- - - Encoder Command Flags - - &cs-def; - - - V4L2_ENC_CMD_STOP_AT_GOP_END - 0x0001 - Stop encoding at the end of the current Group Of -Pictures, rather than immediately. - - - -
-
- - - &return-value; - - - - EINVAL - - The cmd field is invalid. - - - - EPERM - - The application sent a PAUSE or RESUME command when -the encoder was not running. - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-enum-dv-timings.xml b/Documentation/DocBook/media/v4l/vidioc-enum-dv-timings.xml deleted file mode 100644 index 9b3d42018b69..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-enum-dv-timings.xml +++ /dev/null @@ -1,128 +0,0 @@ - - - ioctl VIDIOC_ENUM_DV_TIMINGS, VIDIOC_SUBDEV_ENUM_DV_TIMINGS - &manvol; - - - - VIDIOC_ENUM_DV_TIMINGS - VIDIOC_SUBDEV_ENUM_DV_TIMINGS - Enumerate supported Digital Video timings - - - - - - int ioctl - int fd - int request - struct v4l2_enum_dv_timings *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_ENUM_DV_TIMINGS, VIDIOC_SUBDEV_ENUM_DV_TIMINGS - - - - argp - - - - - - - - - Description - - While some DV receivers or transmitters support a wide range of timings, others -support only a limited number of timings. With this ioctl applications can enumerate a list -of known supported timings. Call &VIDIOC-DV-TIMINGS-CAP; to check if it also supports other -standards or even custom timings that are not in this list. - - To query the available timings, applications initialize the -index field, set the pad field to 0, -zero the reserved array of &v4l2-enum-dv-timings; and call the -VIDIOC_ENUM_DV_TIMINGS ioctl on a video node with a -pointer to this structure. Drivers fill the rest of the structure or return an -&EINVAL; when the index is out of bounds. To enumerate all supported DV timings, -applications shall begin at index zero, incrementing by one until the -driver returns EINVAL. Note that drivers may enumerate a -different set of DV timings after switching the video input or -output. - - When implemented by the driver DV timings of subdevices can be queried -by calling the VIDIOC_SUBDEV_ENUM_DV_TIMINGS ioctl directly -on a subdevice node. The DV timings are specific to inputs (for DV receivers) or -outputs (for DV transmitters), applications must specify the desired pad number -in the &v4l2-enum-dv-timings; pad field. Attempts to -enumerate timings on a pad that doesn't support them will return an &EINVAL;. - - - struct <structname>v4l2_enum_dv_timings</structname> - - &cs-str; - - - __u32 - index - Number of the DV timings, set by the -application. - - - __u32 - pad - Pad number as reported by the media controller API. This field - is only used when operating on a subdevice node. When operating on a - video node applications must set this field to zero. - - - __u32 - reserved[2] - Reserved for future extensions. Drivers and applications must - set the array to zero. - - - &v4l2-dv-timings; - timings - The timings. - - - -
-
- - - &return-value; - - - - EINVAL - - The &v4l2-enum-dv-timings; index -is out of bounds or the pad number is invalid. - - - - ENODATA - - Digital video presets are not supported for this input or output. - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-enum-fmt.xml b/Documentation/DocBook/media/v4l/vidioc-enum-fmt.xml deleted file mode 100644 index f8dfeed34fca..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-enum-fmt.xml +++ /dev/null @@ -1,159 +0,0 @@ - - - ioctl VIDIOC_ENUM_FMT - &manvol; - - - - VIDIOC_ENUM_FMT - Enumerate image formats - - - - - - int ioctl - int fd - int request - struct v4l2_fmtdesc -*argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_ENUM_FMT - - - - argp - - - - - - - - - Description - - To enumerate image formats applications initialize the -type and index -field of &v4l2-fmtdesc; and call the -VIDIOC_ENUM_FMT ioctl with a pointer to this -structure. Drivers fill the rest of the structure or return an -&EINVAL;. All formats are enumerable by beginning at index zero and -incrementing by one until EINVAL is -returned. - - Note that after switching input or output the list of enumerated image -formats may be different. - - - struct <structname>v4l2_fmtdesc</structname> - - &cs-str; - - - __u32 - index - Number of the format in the enumeration, set by -the application. This is in no way related to the -pixelformat field. - - - __u32 - type - Type of the data stream, set by the application. -Only these types are valid here: -V4L2_BUF_TYPE_VIDEO_CAPTURE, -V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE, -V4L2_BUF_TYPE_VIDEO_OUTPUT, -V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE and -V4L2_BUF_TYPE_VIDEO_OVERLAY. See . - - - __u32 - flags - See - - - __u8 - description[32] - Description of the format, a NUL-terminated ASCII -string. This information is intended for the user, for example: "YUV -4:2:2". - - - __u32 - pixelformat - The image format identifier. This is a -four character code as computed by the v4l2_fourcc() -macro: - - - -#define v4l2_fourcc(a,b,c,d) (((__u32)(a)<<0)|((__u32)(b)<<8)|((__u32)(c)<<16)|((__u32)(d)<<24)) -Several image formats are already -defined by this specification in . Note these -codes are not the same as those used in the Windows world. - - - __u32 - reserved[4] - Reserved for future extensions. Drivers must set -the array to zero. - - - -
- - - Image Format Description Flags - - &cs-def; - - - V4L2_FMT_FLAG_COMPRESSED - 0x0001 - This is a compressed format. - - - V4L2_FMT_FLAG_EMULATED - 0x0002 - This format is not native to the device but emulated -through software (usually libv4l2), where possible try to use a native format -instead for better performance. - - - -
-
- - - &return-value; - - - - EINVAL - - The &v4l2-fmtdesc; type -is not supported or the index is out of -bounds. - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-enum-frameintervals.xml b/Documentation/DocBook/media/v4l/vidioc-enum-frameintervals.xml deleted file mode 100644 index 7c839ab0afbb..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-enum-frameintervals.xml +++ /dev/null @@ -1,260 +0,0 @@ - - - - ioctl VIDIOC_ENUM_FRAMEINTERVALS - &manvol; - - - - VIDIOC_ENUM_FRAMEINTERVALS - Enumerate frame intervals - - - - - - int ioctl - int fd - int request - struct v4l2_frmivalenum *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_ENUM_FRAMEINTERVALS - - - - argp - - Pointer to a &v4l2-frmivalenum; structure that -contains a pixel format and size and receives a frame interval. - - - - - - - Description - - This ioctl allows applications to enumerate all frame -intervals that the device supports for the given pixel format and -frame size. - The supported pixel formats and frame sizes can be obtained -by using the &VIDIOC-ENUM-FMT; and &VIDIOC-ENUM-FRAMESIZES; -functions. - The return value and the content of the -v4l2_frmivalenum.type field depend on the -type of frame intervals the device supports. Here are the semantics of -the function for the different cases: - - - Discrete: The function -returns success if the given index value (zero-based) is valid. The -application should increase the index by one for each call until -EINVAL is returned. The `v4l2_frmivalenum.type` -field is set to `V4L2_FRMIVAL_TYPE_DISCRETE` by the driver. Of the -union only the `discrete` member is valid. - - - Step-wise: The function -returns success if the given index value is zero and -EINVAL for any other index value. The -v4l2_frmivalenum.type field is set to -V4L2_FRMIVAL_TYPE_STEPWISE by the driver. Of the -union only the stepwise member is -valid. - - - Continuous: This is a -special case of the step-wise type above. The function returns success -if the given index value is zero and EINVAL for -any other index value. The -v4l2_frmivalenum.type field is set to -V4L2_FRMIVAL_TYPE_CONTINUOUS by the driver. Of -the union only the stepwise member is valid -and the step value is set to 1. - - - - When the application calls the function with index zero, it -must check the type field to determine the -type of frame interval enumeration the device supports. Only for the -V4L2_FRMIVAL_TYPE_DISCRETE type does it make -sense to increase the index value to receive more frame -intervals. - Note that the order in which the frame intervals are -returned has no special meaning. In particular does it not say -anything about potential default frame intervals. - Applications can assume that the enumeration data does not -change without any interaction from the application itself. This means -that the enumeration data is consistent if the application does not -perform any other ioctl calls while it runs the frame interval -enumeration. - - - - Notes - - - - Frame intervals and frame -rates: The V4L2 API uses frame intervals instead of frame -rates. Given the frame interval the frame rate can be computed as -follows:frame_rate = 1 / frame_interval - - - - - - - Structs - - In the structs below, IN denotes a -value that has to be filled in by the application, -OUT denotes values that the driver fills in. The -application should zero out all members except for the -IN fields. - - - struct <structname>v4l2_frmival_stepwise</structname> - - &cs-str; - - - &v4l2-fract; - min - Minimum frame interval [s]. - - - &v4l2-fract; - max - Maximum frame interval [s]. - - - &v4l2-fract; - step - Frame interval step size [s]. - - - -
- - - struct <structname>v4l2_frmivalenum</structname> - - - - - - - - __u32 - index - - IN: Index of the given frame interval in the -enumeration. - - - __u32 - pixel_format - - IN: Pixel format for which the frame intervals are -enumerated. - - - __u32 - width - - IN: Frame width for which the frame intervals are -enumerated. - - - __u32 - height - - IN: Frame height for which the frame intervals are -enumerated. - - - __u32 - type - - OUT: Frame interval type the device supports. - - - union - - - OUT: Frame interval with the given index. - - - - &v4l2-fract; - discrete - Frame interval [s]. - - - - &v4l2-frmival-stepwise; - stepwise - - - - __u32 - reserved[2] - - Reserved space for future use. Must be zeroed by drivers and - applications. - - - -
-
- - - Enums - - - enum <structname>v4l2_frmivaltypes</structname> - - &cs-def; - - - V4L2_FRMIVAL_TYPE_DISCRETE - 1 - Discrete frame interval. - - - V4L2_FRMIVAL_TYPE_CONTINUOUS - 2 - Continuous frame interval. - - - V4L2_FRMIVAL_TYPE_STEPWISE - 3 - Step-wise defined frame interval. - - - -
-
- - - &return-value; - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-enum-framesizes.xml b/Documentation/DocBook/media/v4l/vidioc-enum-framesizes.xml deleted file mode 100644 index 9ed68ac8f474..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-enum-framesizes.xml +++ /dev/null @@ -1,265 +0,0 @@ - - - - ioctl VIDIOC_ENUM_FRAMESIZES - &manvol; - - - - VIDIOC_ENUM_FRAMESIZES - Enumerate frame sizes - - - - - - int ioctl - int fd - int request - struct v4l2_frmsizeenum *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_ENUM_FRAMESIZES - - - - argp - - Pointer to a &v4l2-frmsizeenum; that contains an index -and pixel format and receives a frame width and height. - - - - - - - Description - - This ioctl allows applications to enumerate all frame sizes -(&ie; width and height in pixels) that the device supports for the -given pixel format. - The supported pixel formats can be obtained by using the -&VIDIOC-ENUM-FMT; function. - The return value and the content of the -v4l2_frmsizeenum.type field depend on the -type of frame sizes the device supports. Here are the semantics of the -function for the different cases: - - - - Discrete: The function -returns success if the given index value (zero-based) is valid. The -application should increase the index by one for each call until -EINVAL is returned. The -v4l2_frmsizeenum.type field is set to -V4L2_FRMSIZE_TYPE_DISCRETE by the driver. Of the -union only the discrete member is -valid. - - - Step-wise: The function -returns success if the given index value is zero and -EINVAL for any other index value. The -v4l2_frmsizeenum.type field is set to -V4L2_FRMSIZE_TYPE_STEPWISE by the driver. Of the -union only the stepwise member is -valid. - - - Continuous: This is a -special case of the step-wise type above. The function returns success -if the given index value is zero and EINVAL for -any other index value. The -v4l2_frmsizeenum.type field is set to -V4L2_FRMSIZE_TYPE_CONTINUOUS by the driver. Of -the union only the stepwise member is valid -and the step_width and -step_height values are set to 1. - - - - When the application calls the function with index zero, it -must check the type field to determine the -type of frame size enumeration the device supports. Only for the -V4L2_FRMSIZE_TYPE_DISCRETE type does it make -sense to increase the index value to receive more frame sizes. - Note that the order in which the frame sizes are returned -has no special meaning. In particular does it not say anything about -potential default format sizes. - Applications can assume that the enumeration data does not -change without any interaction from the application itself. This means -that the enumeration data is consistent if the application does not -perform any other ioctl calls while it runs the frame size -enumeration. - - - - Structs - - In the structs below, IN denotes a -value that has to be filled in by the application, -OUT denotes values that the driver fills in. The -application should zero out all members except for the -IN fields. - - - struct <structname>v4l2_frmsize_discrete</structname> - - &cs-str; - - - __u32 - width - Width of the frame [pixel]. - - - __u32 - height - Height of the frame [pixel]. - - - -
- - - struct <structname>v4l2_frmsize_stepwise</structname> - - &cs-str; - - - __u32 - min_width - Minimum frame width [pixel]. - - - __u32 - max_width - Maximum frame width [pixel]. - - - __u32 - step_width - Frame width step size [pixel]. - - - __u32 - min_height - Minimum frame height [pixel]. - - - __u32 - max_height - Maximum frame height [pixel]. - - - __u32 - step_height - Frame height step size [pixel]. - - - -
- - - struct <structname>v4l2_frmsizeenum</structname> - - - - - - - - __u32 - index - - IN: Index of the given frame size in the enumeration. - - - __u32 - pixel_format - - IN: Pixel format for which the frame sizes are enumerated. - - - __u32 - type - - OUT: Frame size type the device supports. - - - union - - - OUT: Frame size with the given index. - - - - &v4l2-frmsize-discrete; - discrete - - - - - &v4l2-frmsize-stepwise; - stepwise - - - - __u32 - reserved[2] - - Reserved space for future use. Must be zeroed by drivers and - applications. - - - -
-
- - - Enums - - - enum <structname>v4l2_frmsizetypes</structname> - - &cs-def; - - - V4L2_FRMSIZE_TYPE_DISCRETE - 1 - Discrete frame size. - - - V4L2_FRMSIZE_TYPE_CONTINUOUS - 2 - Continuous frame size. - - - V4L2_FRMSIZE_TYPE_STEPWISE - 3 - Step-wise defined frame size. - - - -
-
- - - &return-value; - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-enum-freq-bands.xml b/Documentation/DocBook/media/v4l/vidioc-enum-freq-bands.xml deleted file mode 100644 index a0608abc1ab8..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-enum-freq-bands.xml +++ /dev/null @@ -1,175 +0,0 @@ - - - ioctl VIDIOC_ENUM_FREQ_BANDS - &manvol; - - - - VIDIOC_ENUM_FREQ_BANDS - Enumerate supported frequency bands - - - - - - int ioctl - int fd - int request - struct v4l2_frequency_band -*argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_ENUM_FREQ_BANDS - - - - argp - - - - - - - - - Description - - Enumerates the frequency bands that a tuner or modulator supports. -To do this applications initialize the tuner, -type and index fields, -and zero out the reserved array of a &v4l2-frequency-band; and -call the VIDIOC_ENUM_FREQ_BANDS ioctl with a pointer -to this structure. - - This ioctl is supported if the V4L2_TUNER_CAP_FREQ_BANDS capability - of the corresponding tuner/modulator is set. - - - struct <structname>v4l2_frequency_band</structname> - - &cs-str; - - - __u32 - tuner - The tuner or modulator index number. This is the -same value as in the &v4l2-input; tuner -field and the &v4l2-tuner; index field, or -the &v4l2-output; modulator field and the -&v4l2-modulator; index field. - - - __u32 - type - The tuner type. This is the same value as in the -&v4l2-tuner; type field. The type must be set -to V4L2_TUNER_RADIO for /dev/radioX -device nodes, and to V4L2_TUNER_ANALOG_TV -for all others. Set this field to V4L2_TUNER_RADIO for -modulators (currently only radio modulators are supported). -See - - - __u32 - index - Identifies the frequency band, set by the application. - - - __u32 - capability - The tuner/modulator capability flags for -this frequency band, see . The V4L2_TUNER_CAP_LOW -or V4L2_TUNER_CAP_1HZ capability must be the same for all frequency bands of the selected tuner/modulator. -So either all bands have that capability set, or none of them have that capability. - - - __u32 - rangelow - The lowest tunable frequency in -units of 62.5 kHz, or if the capability -flag V4L2_TUNER_CAP_LOW is set, in units of 62.5 -Hz, for this frequency band. A 1 Hz unit is used when the capability flag -V4L2_TUNER_CAP_1HZ is set. - - - __u32 - rangehigh - The highest tunable frequency in -units of 62.5 kHz, or if the capability -flag V4L2_TUNER_CAP_LOW is set, in units of 62.5 -Hz, for this frequency band. A 1 Hz unit is used when the capability flag -V4L2_TUNER_CAP_1HZ is set. - - - __u32 - modulation - The supported modulation systems of this frequency band. - See . Note that currently only one - modulation system per frequency band is supported. More work will need to - be done if multiple modulation systems are possible. Contact the - linux-media mailing list (&v4l-ml;) if you need that functionality. - - - __u32 - reserved[9] - Reserved for future extensions. Applications and drivers - must set the array to zero. - - - -
- - - Band Modulation Systems - - &cs-def; - - - V4L2_BAND_MODULATION_VSB - 0x02 - Vestigial Sideband modulation, used for analog TV. - - - V4L2_BAND_MODULATION_FM - 0x04 - Frequency Modulation, commonly used for analog radio. - - - V4L2_BAND_MODULATION_AM - 0x08 - Amplitude Modulation, commonly used for analog radio. - - - -
-
- - - &return-value; - - - - EINVAL - - The tuner or index -is out of bounds or the type field is wrong. - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-enumaudio.xml b/Documentation/DocBook/media/v4l/vidioc-enumaudio.xml deleted file mode 100644 index ea816ab2e49e..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-enumaudio.xml +++ /dev/null @@ -1,76 +0,0 @@ - - - ioctl VIDIOC_ENUMAUDIO - &manvol; - - - - VIDIOC_ENUMAUDIO - Enumerate audio inputs - - - - - - int ioctl - int fd - int request - struct v4l2_audio *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_ENUMAUDIO - - - - argp - - - - - - - - - Description - - To query the attributes of an audio input applications -initialize the index field and zero out the -reserved array of a &v4l2-audio; -and call the VIDIOC_ENUMAUDIO ioctl with a pointer -to this structure. Drivers fill the rest of the structure or return an -&EINVAL; when the index is out of bounds. To enumerate all audio -inputs applications shall begin at index zero, incrementing by one -until the driver returns EINVAL. - - See for a description of -&v4l2-audio;. - - - - &return-value; - - - - EINVAL - - The number of the audio input is out of bounds. - - - - - diff --git a/Documentation/DocBook/media/v4l/vidioc-enumaudioout.xml b/Documentation/DocBook/media/v4l/vidioc-enumaudioout.xml deleted file mode 100644 index 2e87cedb0d32..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-enumaudioout.xml +++ /dev/null @@ -1,79 +0,0 @@ - - - ioctl VIDIOC_ENUMAUDOUT - &manvol; - - - - VIDIOC_ENUMAUDOUT - Enumerate audio outputs - - - - - - int ioctl - int fd - int request - struct v4l2_audioout *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_ENUMAUDOUT - - - - argp - - - - - - - - - Description - - To query the attributes of an audio output applications -initialize the index field and zero out the -reserved array of a &v4l2-audioout; and -call the VIDIOC_G_AUDOUT ioctl with a pointer -to this structure. Drivers fill the rest of the structure or return an -&EINVAL; when the index is out of bounds. To enumerate all audio -outputs applications shall begin at index zero, incrementing by one -until the driver returns EINVAL. - - Note connectors on a TV card to loop back the received audio -signal to a sound card are not audio outputs in this sense. - - See for a description of -&v4l2-audioout;. - - - - &return-value; - - - - EINVAL - - The number of the audio output is out of bounds. - - - - - diff --git a/Documentation/DocBook/media/v4l/vidioc-enuminput.xml b/Documentation/DocBook/media/v4l/vidioc-enuminput.xml deleted file mode 100644 index 603fecef9083..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-enuminput.xml +++ /dev/null @@ -1,316 +0,0 @@ - - - ioctl VIDIOC_ENUMINPUT - &manvol; - - - - VIDIOC_ENUMINPUT - Enumerate video inputs - - - - - - int ioctl - int fd - int request - struct v4l2_input -*argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_ENUMINPUT - - - - argp - - - - - - - - - Description - - To query the attributes of a video input applications -initialize the index field of &v4l2-input; -and call the VIDIOC_ENUMINPUT ioctl with a -pointer to this structure. Drivers fill the rest of the structure or -return an &EINVAL; when the index is out of bounds. To enumerate all -inputs applications shall begin at index zero, incrementing by one -until the driver returns EINVAL. - - - struct <structname>v4l2_input</structname> - - &cs-str; - - - __u32 - index - Identifies the input, set by the -application. - - - __u8 - name[32] - Name of the video input, a NUL-terminated ASCII -string, for example: "Vin (Composite 2)". This information is intended -for the user, preferably the connector label on the device itself. - - - __u32 - type - Type of the input, see . - - - __u32 - audioset - Drivers can enumerate up to 32 video and -audio inputs. This field shows which audio inputs were selectable as -audio source if this was the currently selected video input. It is a -bit mask. The LSB corresponds to audio input 0, the MSB to input 31. -Any number of bits can be set, or none.When the driver -does not enumerate audio inputs no bits must be set. Applications -shall not interpret this as lack of audio support. Some drivers -automatically select audio sources and do not enumerate them since -there is no choice anyway.For details on audio inputs and -how to select the current input see . - - - __u32 - tuner - Capture devices can have zero or more tuners (RF -demodulators). When the type is set to -V4L2_INPUT_TYPE_TUNER this is an RF connector and -this field identifies the tuner. It corresponds to -&v4l2-tuner; field index. For details on -tuners see . - - - &v4l2-std-id; - std - Every video input supports one or more different -video standards. This field is a set of all supported standards. For -details on video standards and how to switch see . - - - __u32 - status - This field provides status information about the -input. See for flags. -With the exception of the sensor orientation bits status is only valid when this is the -current input. - - - __u32 - capabilities - This field provides capabilities for the -input. See for flags. - - - __u32 - reserved[3] - Reserved for future extensions. Drivers must set -the array to zero. - - - -
- - - Input Types - - &cs-def; - - - V4L2_INPUT_TYPE_TUNER - 1 - This input uses a tuner (RF demodulator). - - - V4L2_INPUT_TYPE_CAMERA - 2 - Analog baseband input, for example CVBS / -Composite Video, S-Video, RGB. - - - -
- - - - - Input Status Flags - - - - - - - - General - - - V4L2_IN_ST_NO_POWER - 0x00000001 - Attached device is off. - - - V4L2_IN_ST_NO_SIGNAL - 0x00000002 - - - - V4L2_IN_ST_NO_COLOR - 0x00000004 - The hardware supports color decoding, but does not -detect color modulation in the signal. - - - Sensor Orientation - - - V4L2_IN_ST_HFLIP - 0x00000010 - The input is connected to a device that produces a signal -that is flipped horizontally and does not correct this before passing the -signal to userspace. - - - V4L2_IN_ST_VFLIP - 0x00000020 - The input is connected to a device that produces a signal -that is flipped vertically and does not correct this before passing the -signal to userspace. Note that a 180 degree rotation is the same as HFLIP | VFLIP - - - Analog Video - - - V4L2_IN_ST_NO_H_LOCK - 0x00000100 - No horizontal sync lock. - - - V4L2_IN_ST_COLOR_KILL - 0x00000200 - A color killer circuit automatically disables color -decoding when it detects no color modulation. When this flag is set -the color killer is enabled and has shut off -color decoding. - - - Digital Video - - - V4L2_IN_ST_NO_SYNC - 0x00010000 - No synchronization lock. - - - V4L2_IN_ST_NO_EQU - 0x00020000 - No equalizer lock. - - - V4L2_IN_ST_NO_CARRIER - 0x00040000 - Carrier recovery failed. - - - VCR and Set-Top Box - - - V4L2_IN_ST_MACROVISION - 0x01000000 - Macrovision is an analog copy prevention system -mangling the video signal to confuse video recorders. When this -flag is set Macrovision has been detected. - - - V4L2_IN_ST_NO_ACCESS - 0x02000000 - Conditional access denied. - - - V4L2_IN_ST_VTR - 0x04000000 - VTR time constant. [?] - - - -
- - - - Input capabilities - - &cs-def; - - - V4L2_IN_CAP_DV_TIMINGS - 0x00000002 - This input supports setting video timings by using VIDIOC_S_DV_TIMINGS. - - - V4L2_IN_CAP_STD - 0x00000004 - This input supports setting the TV standard by using VIDIOC_S_STD. - - - V4L2_IN_CAP_NATIVE_SIZE - 0x00000008 - This input supports setting the native size using - the V4L2_SEL_TGT_NATIVE_SIZE - selection target, see . - - - -
-
- - - &return-value; - - - - EINVAL - - The &v4l2-input; index is -out of bounds. - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-enumoutput.xml b/Documentation/DocBook/media/v4l/vidioc-enumoutput.xml deleted file mode 100644 index 773fb1258c24..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-enumoutput.xml +++ /dev/null @@ -1,201 +0,0 @@ - - - ioctl VIDIOC_ENUMOUTPUT - &manvol; - - - - VIDIOC_ENUMOUTPUT - Enumerate video outputs - - - - - - int ioctl - int fd - int request - struct v4l2_output *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_ENUMOUTPUT - - - - argp - - - - - - - - - Description - - To query the attributes of a video outputs applications -initialize the index field of &v4l2-output; -and call the VIDIOC_ENUMOUTPUT ioctl with a -pointer to this structure. Drivers fill the rest of the structure or -return an &EINVAL; when the index is out of bounds. To enumerate all -outputs applications shall begin at index zero, incrementing by one -until the driver returns EINVAL. - - - struct <structname>v4l2_output</structname> - - &cs-str; - - - __u32 - index - Identifies the output, set by the -application. - - - __u8 - name[32] - Name of the video output, a NUL-terminated ASCII -string, for example: "Vout". This information is intended for the -user, preferably the connector label on the device itself. - - - __u32 - type - Type of the output, see . - - - __u32 - audioset - Drivers can enumerate up to 32 video and -audio outputs. This field shows which audio outputs were -selectable as the current output if this was the currently selected -video output. It is a bit mask. The LSB corresponds to audio output 0, -the MSB to output 31. Any number of bits can be set, or -none.When the driver does not enumerate audio outputs no -bits must be set. Applications shall not interpret this as lack of -audio support. Drivers may automatically select audio outputs without -enumerating them.For details on audio outputs and how to -select the current output see . - - - __u32 - modulator - Output devices can have zero or more RF modulators. -When the type is -V4L2_OUTPUT_TYPE_MODULATOR this is an RF -connector and this field identifies the modulator. It corresponds to -&v4l2-modulator; field index. For details -on modulators see . - - - &v4l2-std-id; - std - Every video output supports one or more different -video standards. This field is a set of all supported standards. For -details on video standards and how to switch see . - - - __u32 - capabilities - This field provides capabilities for the -output. See for flags. - - - __u32 - reserved[3] - Reserved for future extensions. Drivers must set -the array to zero. - - - -
- - - Output Type - - &cs-def; - - - V4L2_OUTPUT_TYPE_MODULATOR - 1 - This output is an analog TV modulator. - - - V4L2_OUTPUT_TYPE_ANALOG - 2 - Analog baseband output, for example Composite / -CVBS, S-Video, RGB. - - - V4L2_OUTPUT_TYPE_ANALOGVGAOVERLAY - 3 - [?] - - - -
- - - - Output capabilities - - &cs-def; - - - V4L2_OUT_CAP_DV_TIMINGS - 0x00000002 - This output supports setting video timings by using VIDIOC_S_DV_TIMINGS. - - - V4L2_OUT_CAP_STD - 0x00000004 - This output supports setting the TV standard by using VIDIOC_S_STD. - - - V4L2_OUT_CAP_NATIVE_SIZE - 0x00000008 - This output supports setting the native size using - the V4L2_SEL_TGT_NATIVE_SIZE - selection target, see . - - - -
- -
- - &return-value; - - - - EINVAL - - The &v4l2-output; index -is out of bounds. - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-enumstd.xml b/Documentation/DocBook/media/v4l/vidioc-enumstd.xml deleted file mode 100644 index f18454e91752..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-enumstd.xml +++ /dev/null @@ -1,389 +0,0 @@ - - - ioctl VIDIOC_ENUMSTD - &manvol; - - - - VIDIOC_ENUMSTD - Enumerate supported video standards - - - - - - int ioctl - int fd - int request - struct v4l2_standard *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_ENUMSTD - - - - argp - - - - - - - - - Description - - To query the attributes of a video standard, -especially a custom (driver defined) one, applications initialize the -index field of &v4l2-standard; and call the -VIDIOC_ENUMSTD ioctl with a pointer to this -structure. Drivers fill the rest of the structure or return an -&EINVAL; when the index is out of bounds. To enumerate all standards -applications shall begin at index zero, incrementing by one until the -driver returns EINVAL. Drivers may enumerate a -different set of standards after switching the video input or -output. - The supported standards may overlap and we need an -unambiguous set to find the current standard returned by -VIDIOC_G_STD. - - - - struct <structname>v4l2_standard</structname> - - &cs-str; - - - __u32 - index - Number of the video standard, set by the -application. - - - &v4l2-std-id; - id - The bits in this field identify the standard as -one of the common standards listed in , -or if bits 32 to 63 are set as custom standards. Multiple bits can be -set if the hardware does not distinguish between these standards, -however separate indices do not indicate the opposite. The -id must be unique. No other enumerated -v4l2_standard structure, for this input or -output anyway, can contain the same set of bits. - - - __u8 - name[24] - Name of the standard, a NUL-terminated ASCII -string, for example: "PAL-B/G", "NTSC Japan". This information is -intended for the user. - - - &v4l2-fract; - frameperiod - The frame period (not field period) is numerator -/ denominator. For example M/NTSC has a frame period of 1001 / -30000 seconds. - - - __u32 - framelines - Total lines per frame including blanking, -e. g. 625 for B/PAL. - - - __u32 - reserved[4] - Reserved for future extensions. Drivers must set -the array to zero. - - - -
- - - struct <structname>v4l2_fract</structname> - - &cs-str; - - - __u32 - numerator - - - - __u32 - denominator - - - - -
- - - typedef <structname>v4l2_std_id</structname> - - &cs-str; - - - __u64 - v4l2_std_id - This type is a set, each bit representing another -video standard as listed below and in . The 32 most significant bits are reserved -for custom (driver defined) video standards. - - - -
- - -#define V4L2_STD_PAL_B ((v4l2_std_id)0x00000001) -#define V4L2_STD_PAL_B1 ((v4l2_std_id)0x00000002) -#define V4L2_STD_PAL_G ((v4l2_std_id)0x00000004) -#define V4L2_STD_PAL_H ((v4l2_std_id)0x00000008) -#define V4L2_STD_PAL_I ((v4l2_std_id)0x00000010) -#define V4L2_STD_PAL_D ((v4l2_std_id)0x00000020) -#define V4L2_STD_PAL_D1 ((v4l2_std_id)0x00000040) -#define V4L2_STD_PAL_K ((v4l2_std_id)0x00000080) - -#define V4L2_STD_PAL_M ((v4l2_std_id)0x00000100) -#define V4L2_STD_PAL_N ((v4l2_std_id)0x00000200) -#define V4L2_STD_PAL_Nc ((v4l2_std_id)0x00000400) -#define V4L2_STD_PAL_60 ((v4l2_std_id)0x00000800) -V4L2_STD_PAL_60 is -a hybrid standard with 525 lines, 60 Hz refresh rate, and PAL color -modulation with a 4.43 MHz color subcarrier. Some PAL video recorders -can play back NTSC tapes in this mode for display on a 50/60 Hz agnostic -PAL TV. -#define V4L2_STD_NTSC_M ((v4l2_std_id)0x00001000) -#define V4L2_STD_NTSC_M_JP ((v4l2_std_id)0x00002000) -#define V4L2_STD_NTSC_443 ((v4l2_std_id)0x00004000) -V4L2_STD_NTSC_443 -is a hybrid standard with 525 lines, 60 Hz refresh rate, and NTSC -color modulation with a 4.43 MHz color -subcarrier. -#define V4L2_STD_NTSC_M_KR ((v4l2_std_id)0x00008000) - -#define V4L2_STD_SECAM_B ((v4l2_std_id)0x00010000) -#define V4L2_STD_SECAM_D ((v4l2_std_id)0x00020000) -#define V4L2_STD_SECAM_G ((v4l2_std_id)0x00040000) -#define V4L2_STD_SECAM_H ((v4l2_std_id)0x00080000) -#define V4L2_STD_SECAM_K ((v4l2_std_id)0x00100000) -#define V4L2_STD_SECAM_K1 ((v4l2_std_id)0x00200000) -#define V4L2_STD_SECAM_L ((v4l2_std_id)0x00400000) -#define V4L2_STD_SECAM_LC ((v4l2_std_id)0x00800000) - -/* ATSC/HDTV */ -#define V4L2_STD_ATSC_8_VSB ((v4l2_std_id)0x01000000) -#define V4L2_STD_ATSC_16_VSB ((v4l2_std_id)0x02000000) -V4L2_STD_ATSC_8_VSB and -V4L2_STD_ATSC_16_VSB are U.S. terrestrial digital -TV standards. Presently the V4L2 API does not support digital TV. See -also the Linux DVB API at https://linuxtv.org. - -#define V4L2_STD_PAL_BG (V4L2_STD_PAL_B |\ - V4L2_STD_PAL_B1 |\ - V4L2_STD_PAL_G) -#define V4L2_STD_B (V4L2_STD_PAL_B |\ - V4L2_STD_PAL_B1 |\ - V4L2_STD_SECAM_B) -#define V4L2_STD_GH (V4L2_STD_PAL_G |\ - V4L2_STD_PAL_H |\ - V4L2_STD_SECAM_G |\ - V4L2_STD_SECAM_H) -#define V4L2_STD_PAL_DK (V4L2_STD_PAL_D |\ - V4L2_STD_PAL_D1 |\ - V4L2_STD_PAL_K) -#define V4L2_STD_PAL (V4L2_STD_PAL_BG |\ - V4L2_STD_PAL_DK |\ - V4L2_STD_PAL_H |\ - V4L2_STD_PAL_I) -#define V4L2_STD_NTSC (V4L2_STD_NTSC_M |\ - V4L2_STD_NTSC_M_JP |\ - V4L2_STD_NTSC_M_KR) -#define V4L2_STD_MN (V4L2_STD_PAL_M |\ - V4L2_STD_PAL_N |\ - V4L2_STD_PAL_Nc |\ - V4L2_STD_NTSC) -#define V4L2_STD_SECAM_DK (V4L2_STD_SECAM_D |\ - V4L2_STD_SECAM_K |\ - V4L2_STD_SECAM_K1) -#define V4L2_STD_DK (V4L2_STD_PAL_DK |\ - V4L2_STD_SECAM_DK) - -#define V4L2_STD_SECAM (V4L2_STD_SECAM_B |\ - V4L2_STD_SECAM_G |\ - V4L2_STD_SECAM_H |\ - V4L2_STD_SECAM_DK |\ - V4L2_STD_SECAM_L |\ - V4L2_STD_SECAM_LC) - -#define V4L2_STD_525_60 (V4L2_STD_PAL_M |\ - V4L2_STD_PAL_60 |\ - V4L2_STD_NTSC |\ - V4L2_STD_NTSC_443) -#define V4L2_STD_625_50 (V4L2_STD_PAL |\ - V4L2_STD_PAL_N |\ - V4L2_STD_PAL_Nc |\ - V4L2_STD_SECAM) - -#define V4L2_STD_UNKNOWN 0 -#define V4L2_STD_ALL (V4L2_STD_525_60 |\ - V4L2_STD_625_50) - - - - Video Standards (based on [<xref linkend="itu470" />]) - - - - - - - - - - - - - - - - Characteristics - M/NTSCJapan uses a standard -similar to M/NTSC -(V4L2_STD_NTSC_M_JP). - M/PAL - N/PAL The values in -brackets apply to the combination N/PAL a.k.a. -NC used in Argentina -(V4L2_STD_PAL_Nc). - B, B1, G/PAL - D, D1, K/PAL - H/PAL - I/PAL - B, G/SECAM - D, K/SECAM - K1/SECAM - L/SECAM - - - - - Frame lines - 525 - 625 - - - Frame period (s) - 1001/30000 - 1/25 - - - Chrominance sub-carrier frequency (Hz) - 3579545 ± 10 - 3579611.49 ± 10 - 4433618.75 ± 5 (3582056.25 -± 5) - 4433618.75 ± 5 - 4433618.75 ± 1 - fOR = -4406250 ± 2000, fOB = 4250000 -± 2000 - - - Nominal radio-frequency channel bandwidth -(MHz) - 6 - 6 - 6 - B: 7; B1, G: 8 - 8 - 8 - 8 - 8 - 8 - 8 - 8 - - - Sound carrier relative to vision carrier -(MHz) - + 4.5 - + 4.5 - + 4.5 - + 5.5 ± 0.001 -In the Federal Republic of Germany, Austria, Italy, -the Netherlands, Slovakia and Switzerland a system of two sound -carriers is used, the frequency of the second carrier being -242.1875 kHz above the frequency of the first sound carrier. For -stereophonic sound transmissions a similar system is used in -Australia. New Zealand uses a sound -carrier displaced 5.4996 ± 0.0005 MHz from the vision -carrier. In Denmark, Finland, New -Zealand, Sweden and Spain a system of two sound carriers is used. In -Iceland, Norway and Poland the same system is being introduced. The -second carrier is 5.85 MHz above the vision carrier and is DQPSK -modulated with 728 kbit/s sound and data multiplex. (NICAM -system) In the United Kingdom, a -system of two sound carriers is used. The second sound carrier is -6.552 MHz above the vision carrier and is DQPSK modulated with a -728 kbit/s sound and data multiplex able to carry two sound -channels. (NICAM system) - + 6.5 ± 0.001 - + 5.5 - + 5.9996 ± 0.0005 - + 5.5 ± 0.001 - + 6.5 ± 0.001 - + 6.5 - + 6.5 In France, a -digital carrier 5.85 MHz away from the vision carrier may be used in -addition to the main sound carrier. It is modulated in differentially -encoded QPSK with a 728 kbit/s sound and data multiplexer capable of -carrying two sound channels. (NICAM -system) - - - -
-
- - - &return-value; - - - - EINVAL - - The &v4l2-standard; index -is out of bounds. - - - - ENODATA - - Standard video timings are not supported for this input or output. - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-expbuf.xml b/Documentation/DocBook/media/v4l/vidioc-expbuf.xml deleted file mode 100644 index a6558a676ef3..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-expbuf.xml +++ /dev/null @@ -1,205 +0,0 @@ - - - - ioctl VIDIOC_EXPBUF - &manvol; - - - - VIDIOC_EXPBUF - Export a buffer as a DMABUF file descriptor. - - - - - - int ioctl - int fd - int request - struct v4l2_exportbuffer *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_EXPBUF - - - - argp - - - - - - - - - Description - -This ioctl is an extension to the memory -mapping I/O method, therefore it is available only for -V4L2_MEMORY_MMAP buffers. It can be used to export a -buffer as a DMABUF file at any time after buffers have been allocated with the -&VIDIOC-REQBUFS; ioctl. - - To export a buffer, applications fill &v4l2-exportbuffer;. The -type field is set to the same buffer type as was -previously used with &v4l2-requestbuffers; type. -Applications must also set the index field. Valid -index numbers range from zero to the number of buffers allocated with -&VIDIOC-REQBUFS; (&v4l2-requestbuffers; count) -minus one. For the multi-planar API, applications set the plane -field to the index of the plane to be exported. Valid planes -range from zero to the maximal number of valid planes for the currently active -format. For the single-planar API, applications must set plane -to zero. Additional flags may be posted in the flags -field. Refer to a manual for open() for details. -Currently only O_CLOEXEC, O_RDONLY, O_WRONLY, and O_RDWR are supported. All -other fields must be set to zero. -In the case of multi-planar API, every plane is exported separately using -multiple VIDIOC_EXPBUF calls. - -After calling VIDIOC_EXPBUF the fd -field will be set by a driver. This is a DMABUF file -descriptor. The application may pass it to other DMABUF-aware devices. Refer to -DMABUF importing for details about importing -DMABUF files into V4L2 nodes. It is recommended to close a DMABUF file when it -is no longer used to allow the associated memory to be reclaimed. - - - - Examples - - - Exporting a buffer. - -int buffer_export(int v4lfd, &v4l2-buf-type; bt, int index, int *dmafd) -{ - &v4l2-exportbuffer; expbuf; - - memset(&expbuf, 0, sizeof(expbuf)); - expbuf.type = bt; - expbuf.index = index; - if (ioctl(v4lfd, &VIDIOC-EXPBUF;, &expbuf) == -1) { - perror("VIDIOC_EXPBUF"); - return -1; - } - - *dmafd = expbuf.fd; - - return 0; -} - - - - - Exporting a buffer using the multi-planar API. - -int buffer_export_mp(int v4lfd, &v4l2-buf-type; bt, int index, - int dmafd[], int n_planes) -{ - int i; - - for (i = 0; i < n_planes; ++i) { - &v4l2-exportbuffer; expbuf; - - memset(&expbuf, 0, sizeof(expbuf)); - expbuf.type = bt; - expbuf.index = index; - expbuf.plane = i; - if (ioctl(v4lfd, &VIDIOC-EXPBUF;, &expbuf) == -1) { - perror("VIDIOC_EXPBUF"); - while (i) - close(dmafd[--i]); - return -1; - } - dmafd[i] = expbuf.fd; - } - - return 0; -} - - - - - struct <structname>v4l2_exportbuffer</structname> - - &cs-str; - - - __u32 - type - Type of the buffer, same as &v4l2-format; -type or &v4l2-requestbuffers; -type, set by the application. See - - - __u32 - index - Number of the buffer, set by the application. This field is -only used for memory mapping I/O and can range from -zero to the number of buffers allocated with the &VIDIOC-REQBUFS; and/or -&VIDIOC-CREATE-BUFS; ioctls. - - - __u32 - plane - Index of the plane to be exported when using the -multi-planar API. Otherwise this value must be set to zero. - - - __u32 - flags - Flags for the newly created file, currently only -O_CLOEXEC, O_RDONLY, O_WRONLY, -and O_RDWR are supported, refer to the manual -of open() for more details. - - - __s32 - fd - The DMABUF file descriptor associated with a buffer. Set by - the driver. - - - __u32 - reserved[11] - Reserved field for future use. Drivers and applications must -set the array to zero. - - - -
- -
- - - &return-value; - - - EINVAL - - A queue is not in MMAP mode or DMABUF exporting is not -supported or flags or type -or index or plane fields -are invalid. - - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-g-audio.xml b/Documentation/DocBook/media/v4l/vidioc-g-audio.xml deleted file mode 100644 index d7bb9b3738f6..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-audio.xml +++ /dev/null @@ -1,172 +0,0 @@ - - - ioctl VIDIOC_G_AUDIO, VIDIOC_S_AUDIO - &manvol; - - - - VIDIOC_G_AUDIO - VIDIOC_S_AUDIO - Query or select the current audio input and its -attributes - - - - - - int ioctl - int fd - int request - struct v4l2_audio *argp - - - - - int ioctl - int fd - int request - const struct v4l2_audio *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_G_AUDIO, VIDIOC_S_AUDIO - - - - argp - - - - - - - - - Description - - To query the current audio input applications zero out the -reserved array of a &v4l2-audio; -and call the VIDIOC_G_AUDIO ioctl with a pointer -to this structure. Drivers fill the rest of the structure or return an -&EINVAL; when the device has no audio inputs, or none which combine -with the current video input. - - Audio inputs have one writable property, the audio mode. To -select the current audio input and change the -audio mode, applications initialize the -index and mode -fields, and the -reserved array of a -v4l2_audio structure and call the -VIDIOC_S_AUDIO ioctl. Drivers may switch to a -different audio mode if the request cannot be satisfied. However, this -is a write-only ioctl, it does not return the actual new audio -mode. - - - struct <structname>v4l2_audio</structname> - - &cs-str; - - - __u32 - index - Identifies the audio input, set by the -driver or application. - - - __u8 - name[32] - Name of the audio input, a NUL-terminated ASCII -string, for example: "Line In". This information is intended for the -user, preferably the connector label on the device itself. - - - __u32 - capability - Audio capability flags, see . - - - __u32 - mode - Audio mode flags set by drivers and applications (on - VIDIOC_S_AUDIO ioctl), see . - - - __u32 - reserved[2] - Reserved for future extensions. Drivers and -applications must set the array to zero. - - - -
- - - Audio Capability Flags - - &cs-def; - - - V4L2_AUDCAP_STEREO - 0x00001 - This is a stereo input. The flag is intended to -automatically disable stereo recording etc. when the signal is always -monaural. The API provides no means to detect if stereo is -received, unless the audio input belongs to a -tuner. - - - V4L2_AUDCAP_AVL - 0x00002 - Automatic Volume Level mode is supported. - - - -
- - - Audio Mode Flags - - &cs-def; - - - V4L2_AUDMODE_AVL - 0x00001 - AVL mode is on. - - - -
-
- - - &return-value; - - - - EINVAL - - No audio inputs combine with the current video input, -or the number of the selected audio input is out of bounds or it does -not combine. - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-g-audioout.xml b/Documentation/DocBook/media/v4l/vidioc-g-audioout.xml deleted file mode 100644 index 200a2704a970..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-audioout.xml +++ /dev/null @@ -1,138 +0,0 @@ - - - ioctl VIDIOC_G_AUDOUT, VIDIOC_S_AUDOUT - &manvol; - - - - VIDIOC_G_AUDOUT - VIDIOC_S_AUDOUT - Query or select the current audio output - - - - - - int ioctl - int fd - int request - struct v4l2_audioout *argp - - - - - int ioctl - int fd - int request - const struct v4l2_audioout *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_G_AUDOUT, VIDIOC_S_AUDOUT - - - - argp - - - - - - - - - Description - - To query the current audio output applications zero out the -reserved array of a &v4l2-audioout; and -call the VIDIOC_G_AUDOUT ioctl with a pointer -to this structure. Drivers fill the rest of the structure or return an -&EINVAL; when the device has no audio inputs, or none which combine -with the current video output. - - Audio outputs have no writable properties. Nevertheless, to -select the current audio output applications can initialize the -index field and -reserved array (which in the future may -contain writable properties) of a -v4l2_audioout structure and call the -VIDIOC_S_AUDOUT ioctl. Drivers switch to the -requested output or return the &EINVAL; when the index is out of -bounds. This is a write-only ioctl, it does not return the current -audio output attributes as VIDIOC_G_AUDOUT -does. - - Note connectors on a TV card to loop back the received audio -signal to a sound card are not audio outputs in this sense. - - - struct <structname>v4l2_audioout</structname> - - &cs-str; - - - __u32 - index - Identifies the audio output, set by the -driver or application. - - - __u8 - name[32] - Name of the audio output, a NUL-terminated ASCII -string, for example: "Line Out". This information is intended for the -user, preferably the connector label on the device itself. - - - __u32 - capability - Audio capability flags, none defined yet. Drivers -must set this field to zero. - - - __u32 - mode - Audio mode, none defined yet. Drivers and -applications (on VIDIOC_S_AUDOUT) must set this -field to zero. - - - __u32 - reserved[2] - Reserved for future extensions. Drivers and -applications must set the array to zero. - - - -
-
- - - &return-value; - - - - EINVAL - - No audio outputs combine with the current video -output, or the number of the selected audio output is out of bounds or -it does not combine. - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-g-crop.xml b/Documentation/DocBook/media/v4l/vidioc-g-crop.xml deleted file mode 100644 index e6c4efb9e8b4..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-crop.xml +++ /dev/null @@ -1,129 +0,0 @@ - - - ioctl VIDIOC_G_CROP, VIDIOC_S_CROP - &manvol; - - - - VIDIOC_G_CROP - VIDIOC_S_CROP - Get or set the current cropping rectangle - - - - - - int ioctl - int fd - int request - struct v4l2_crop *argp - - - - - int ioctl - int fd - int request - const struct v4l2_crop *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_G_CROP, VIDIOC_S_CROP - - - - argp - - - - - - - - - Description - - To query the cropping rectangle size and position -applications set the type field of a -v4l2_crop structure to the respective buffer -(stream) type and call the VIDIOC_G_CROP ioctl -with a pointer to this structure. The driver fills the rest of the -structure or returns the &EINVAL; if cropping is not supported. - - To change the cropping rectangle applications initialize the -type and &v4l2-rect; substructure named -c of a v4l2_crop structure and call the -VIDIOC_S_CROP ioctl with a pointer to this -structure. - -Do not use the multiplanar buffer types. Use V4L2_BUF_TYPE_VIDEO_CAPTURE -instead of V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE -and use V4L2_BUF_TYPE_VIDEO_OUTPUT instead of -V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE. - - The driver first adjusts the requested dimensions against -hardware limits, &ie; the bounds given by the capture/output window, -and it rounds to the closest possible values of horizontal and -vertical offset, width and height. In particular the driver must round -the vertical offset of the cropping rectangle to frame lines modulo -two, such that the field order cannot be confused. - - Second the driver adjusts the image size (the opposite -rectangle of the scaling process, source or target depending on the -data direction) to the closest size possible while maintaining the -current horizontal and vertical scaling factor. - - Finally the driver programs the hardware with the actual -cropping and image parameters. VIDIOC_S_CROP is a -write-only ioctl, it does not return the actual parameters. To query -them applications must call VIDIOC_G_CROP and -&VIDIOC-G-FMT;. When the parameters are unsuitable the application may -modify the cropping or image parameters and repeat the cycle until -satisfactory parameters have been negotiated. - - When cropping is not supported then no parameters are -changed and VIDIOC_S_CROP returns the -&EINVAL;. - - - struct <structname>v4l2_crop</structname> - - &cs-str; - - - __u32 - type - Type of the data stream, set by the application. -Only these types are valid here: V4L2_BUF_TYPE_VIDEO_CAPTURE, -V4L2_BUF_TYPE_VIDEO_OUTPUT and -V4L2_BUF_TYPE_VIDEO_OVERLAY. See . - - - &v4l2-rect; - c - Cropping rectangle. The same co-ordinate system as -for &v4l2-cropcap; bounds is used. - - - -
-
- - - &return-value; - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-g-ctrl.xml b/Documentation/DocBook/media/v4l/vidioc-g-ctrl.xml deleted file mode 100644 index ee2820d6ca66..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-ctrl.xml +++ /dev/null @@ -1,133 +0,0 @@ - - - ioctl VIDIOC_G_CTRL, VIDIOC_S_CTRL - &manvol; - - - - VIDIOC_G_CTRL - VIDIOC_S_CTRL - Get or set the value of a control - - - - - - int ioctl - int fd - int request - struct v4l2_control -*argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_G_CTRL, VIDIOC_S_CTRL - - - - argp - - - - - - - - - Description - - To get the current value of a control applications -initialize the id field of a struct -v4l2_control and call the -VIDIOC_G_CTRL ioctl with a pointer to this -structure. To change the value of a control applications initialize -the id and value -fields of a struct v4l2_control and call the -VIDIOC_S_CTRL ioctl. - - When the id is invalid drivers -return an &EINVAL;. When the value is out -of bounds drivers can choose to take the closest valid value or return -an &ERANGE;, whatever seems more appropriate. However, -VIDIOC_S_CTRL is a write-only ioctl, it does not -return the actual new value. If the value -is inappropriate for the control (e.g. if it refers to an unsupported -menu index of a menu control), then &EINVAL; is returned as well. - - These ioctls work only with user controls. For other -control classes the &VIDIOC-G-EXT-CTRLS;, &VIDIOC-S-EXT-CTRLS; or -&VIDIOC-TRY-EXT-CTRLS; must be used. - - - struct <structname>v4l2_control</structname> - - &cs-str; - - - __u32 - id - Identifies the control, set by the -application. - - - __s32 - value - New value or current value. - - - -
-
- - - &return-value; - - - - EINVAL - - The &v4l2-control; id is -invalid or the value is inappropriate for -the given control (i.e. if a menu item is selected that is not supported -by the driver according to &VIDIOC-QUERYMENU;). - - - - ERANGE - - The &v4l2-control; value -is out of bounds. - - - - EBUSY - - The control is temporarily not changeable, possibly -because another applications took over control of the device function -this control belongs to. - - - - EACCES - - Attempt to set a read-only control or to get a - write-only control. - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-g-dv-timings.xml b/Documentation/DocBook/media/v4l/vidioc-g-dv-timings.xml deleted file mode 100644 index 06952d7cc770..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-dv-timings.xml +++ /dev/null @@ -1,343 +0,0 @@ - - - ioctl VIDIOC_G_DV_TIMINGS, VIDIOC_S_DV_TIMINGS - &manvol; - - - - VIDIOC_G_DV_TIMINGS - VIDIOC_S_DV_TIMINGS - VIDIOC_SUBDEV_G_DV_TIMINGS - VIDIOC_SUBDEV_S_DV_TIMINGS - Get or set DV timings for input or output - - - - - - int ioctl - int fd - int request - struct v4l2_dv_timings *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_G_DV_TIMINGS, VIDIOC_S_DV_TIMINGS, VIDIOC_SUBDEV_G_DV_TIMINGS, VIDIOC_SUBDEV_S_DV_TIMINGS - - - - argp - - - - - - - - - Description - To set DV timings for the input or output, applications use the -VIDIOC_S_DV_TIMINGS ioctl and to get the current timings, -applications use the VIDIOC_G_DV_TIMINGS ioctl. The detailed timing -information is filled in using the structure &v4l2-dv-timings;. These ioctls take -a pointer to the &v4l2-dv-timings; structure as argument. If the ioctl is not supported -or the timing values are not correct, the driver returns &EINVAL;. -The linux/v4l2-dv-timings.h header can be used to get the -timings of the formats in the and -standards. If the current input or output does not support DV timings (e.g. if -&VIDIOC-ENUMINPUT; does not set the V4L2_IN_CAP_DV_TIMINGS flag), then -&ENODATA; is returned. - - - - &return-value; - - - - EINVAL - - This ioctl is not supported, or the -VIDIOC_S_DV_TIMINGS parameter was unsuitable. - - - - ENODATA - - Digital video timings are not supported for this input or output. - - - - EBUSY - - The device is busy and therefore can not change the timings. - - - - - - struct <structname>v4l2_bt_timings</structname> - - &cs-str; - - - __u32 - width - Width of the active video in pixels. - - - __u32 - height - Height of the active video frame in lines. So for interlaced formats the - height of the active video in each field is height/2. - - - __u32 - interlaced - Progressive (0) or interlaced (1) - - - __u32 - polarities - This is a bit mask that defines polarities of sync signals. -bit 0 (V4L2_DV_VSYNC_POS_POL) is for vertical sync polarity and bit 1 (V4L2_DV_HSYNC_POS_POL) is for horizontal sync polarity. If the bit is set -(1) it is positive polarity and if is cleared (0), it is negative polarity. - - - __u64 - pixelclock - Pixel clock in Hz. Ex. 74.25MHz->74250000 - - - __u32 - hfrontporch - Horizontal front porch in pixels - - - __u32 - hsync - Horizontal sync length in pixels - - - __u32 - hbackporch - Horizontal back porch in pixels - - - __u32 - vfrontporch - Vertical front porch in lines. For interlaced formats this refers to the - odd field (aka field 1). - - - __u32 - vsync - Vertical sync length in lines. For interlaced formats this refers to the - odd field (aka field 1). - - - __u32 - vbackporch - Vertical back porch in lines. For interlaced formats this refers to the - odd field (aka field 1). - - - __u32 - il_vfrontporch - Vertical front porch in lines for the even field (aka field 2) of - interlaced field formats. Must be 0 for progressive formats. - - - __u32 - il_vsync - Vertical sync length in lines for the even field (aka field 2) of - interlaced field formats. Must be 0 for progressive formats. - - - __u32 - il_vbackporch - Vertical back porch in lines for the even field (aka field 2) of - interlaced field formats. Must be 0 for progressive formats. - - - __u32 - standards - The video standard(s) this format belongs to. This will be filled in by - the driver. Applications must set this to 0. See - for a list of standards. - - - __u32 - flags - Several flags giving more information about the format. - See for a description of the flags. - - - - -
- - - struct <structname>v4l2_dv_timings</structname> - - &cs-str; - - - __u32 - type - - Type of DV timings as listed in . - - - union - - - - - - &v4l2-bt-timings; - bt - Timings defined by BT.656/1120 specifications - - - - __u32 - reserved[32] - - - - -
- - - DV Timing types - - &cs-str; - - - Timing type - value - Description - - - - - - - - V4L2_DV_BT_656_1120 - 0 - BT.656/1120 timings - - - -
- - DV BT Timing standards - - &cs-str; - - - Timing standard - Description - - - - - - - V4L2_DV_BT_STD_CEA861 - The timings follow the CEA-861 Digital TV Profile standard - - - V4L2_DV_BT_STD_DMT - The timings follow the VESA Discrete Monitor Timings standard - - - V4L2_DV_BT_STD_CVT - The timings follow the VESA Coordinated Video Timings standard - - - V4L2_DV_BT_STD_GTF - The timings follow the VESA Generalized Timings Formula standard - - - -
- - DV BT Timing flags - - &cs-str; - - - Flag - Description - - - - - - - V4L2_DV_FL_REDUCED_BLANKING - CVT/GTF specific: the timings use reduced blanking (CVT) or the 'Secondary -GTF' curve (GTF). In both cases the horizontal and/or vertical blanking -intervals are reduced, allowing a higher resolution over the same -bandwidth. This is a read-only flag, applications must not set this. - - - - V4L2_DV_FL_CAN_REDUCE_FPS - CEA-861 specific: set for CEA-861 formats with a framerate that is a multiple -of six. These formats can be optionally played at 1 / 1.001 speed to -be compatible with 60 Hz based standards such as NTSC and PAL-M that use a framerate of -29.97 frames per second. If the transmitter can't generate such frequencies, then the -flag will also be cleared. This is a read-only flag, applications must not set this. - - - - V4L2_DV_FL_REDUCED_FPS - CEA-861 specific: only valid for video transmitters, the flag is cleared -by receivers. It is also only valid for formats with the V4L2_DV_FL_CAN_REDUCE_FPS flag -set, for other formats the flag will be cleared by the driver. - -If the application sets this flag, then the pixelclock used to set up the transmitter is -divided by 1.001 to make it compatible with NTSC framerates. If the transmitter -can't generate such frequencies, then the flag will also be cleared. - - - - V4L2_DV_FL_HALF_LINE - Specific to interlaced formats: if set, then the vertical frontporch -of field 1 (aka the odd field) is really one half-line longer and the vertical backporch -of field 2 (aka the even field) is really one half-line shorter, so each field has exactly -the same number of half-lines. Whether half-lines can be detected or used depends on -the hardware. - - - - V4L2_DV_FL_IS_CE_VIDEO - If set, then this is a Consumer Electronics (CE) video format. -Such formats differ from other formats (commonly called IT formats) in that if -R'G'B' encoding is used then by default the R'G'B' values use limited range -(i.e. 16-235) as opposed to full range (i.e. 0-255). All formats defined in CEA-861 -except for the 640x480p59.94 format are CE formats. - - - - -
-
-
diff --git a/Documentation/DocBook/media/v4l/vidioc-g-edid.xml b/Documentation/DocBook/media/v4l/vidioc-g-edid.xml deleted file mode 100644 index b7602d30f596..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-edid.xml +++ /dev/null @@ -1,173 +0,0 @@ - - - ioctl VIDIOC_G_EDID, VIDIOC_S_EDID, VIDIOC_SUBDEV_G_EDID, VIDIOC_SUBDEV_S_EDID - &manvol; - - - - VIDIOC_G_EDID - VIDIOC_S_EDID - VIDIOC_SUBDEV_G_EDID - VIDIOC_SUBDEV_S_EDID - Get or set the EDID of a video receiver/transmitter - - - - - - int ioctl - int fd - int request - struct v4l2_edid *argp - - - - - int ioctl - int fd - int request - struct v4l2_edid *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_G_EDID, VIDIOC_S_EDID, VIDIOC_SUBDEV_G_EDID, VIDIOC_SUBDEV_S_EDID - - - - argp - - - - - - - - - Description - These ioctls can be used to get or set an EDID associated with an input - from a receiver or an output of a transmitter device. They can be - used with subdevice nodes (/dev/v4l-subdevX) or with video nodes (/dev/videoX). - - When used with video nodes the pad field represents the - input (for video capture devices) or output (for video output devices) index as - is returned by &VIDIOC-ENUMINPUT; and &VIDIOC-ENUMOUTPUT; respectively. When used - with subdevice nodes the pad field represents the - input or output pad of the subdevice. If there is no EDID support for the given - pad value, then the &EINVAL; will be returned. - - To get the EDID data the application has to fill in the pad, - start_block, blocks and edid - fields, zero the reserved array and call - VIDIOC_G_EDID. The current EDID from block - start_block and of size blocks - will be placed in the memory edid points to. The edid - pointer must point to memory at least blocks * 128 bytes - large (the size of one block is 128 bytes). - - If there are fewer blocks than specified, then the driver will set blocks - to the actual number of blocks. If there are no EDID blocks available at all, then the error code - ENODATA is set. - - If blocks have to be retrieved from the sink, then this call will block until they - have been read. - - If start_block and blocks are - both set to 0 when VIDIOC_G_EDID is called, then the driver will - set blocks to the total number of available EDID blocks - and it will return 0 without copying any data. This is an easy way to discover how many - EDID blocks there are. Note that if there are no EDID blocks available at all, then - the driver will set blocks to 0 and it returns 0. - - To set the EDID blocks of a receiver the application has to fill in the pad, - blocks and edid fields, set - start_block to 0 and zero the reserved array. - It is not possible to set part of an EDID, - it is always all or nothing. Setting the EDID data is only valid for receivers as it makes - no sense for a transmitter. - - The driver assumes that the full EDID is passed in. If there are more EDID blocks than - the hardware can handle then the EDID is not written, but instead the error code E2BIG is set - and blocks is set to the maximum that the hardware supports. - If start_block is any - value other than 0 then the error code EINVAL is set. - - To disable an EDID you set blocks to 0. Depending on the - hardware this will drive the hotplug pin low and/or block the source from reading the EDID - data in some way. In any case, the end result is the same: the EDID is no longer available. - - - - struct <structname>v4l2_edid</structname> - - &cs-str; - - - __u32 - pad - Pad for which to get/set the EDID blocks. When used with a video device - node the pad represents the input or output index as returned by - &VIDIOC-ENUMINPUT; and &VIDIOC-ENUMOUTPUT; respectively. - - - __u32 - start_block - Read the EDID from starting with this block. Must be 0 when setting - the EDID. - - - __u32 - blocks - The number of blocks to get or set. Must be less or equal to 256 (the - maximum number of blocks as defined by the standard). When you set the EDID and - blocks is 0, then the EDID is disabled or erased. - - - __u32 - reserved[5] - Reserved for future extensions. Applications and drivers must - set the array to zero. - - - __u8 * - edid - Pointer to memory that contains the EDID. The minimum size is - blocks * 128. - - - -
-
- - - &return-value; - - - - ENODATA - - The EDID data is not available. - - - - E2BIG - - The EDID data you provided is more than the hardware can handle. - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-g-enc-index.xml b/Documentation/DocBook/media/v4l/vidioc-g-enc-index.xml deleted file mode 100644 index be25029a16f1..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-enc-index.xml +++ /dev/null @@ -1,189 +0,0 @@ - - - ioctl VIDIOC_G_ENC_INDEX - &manvol; - - - - VIDIOC_G_ENC_INDEX - Get meta data about a compressed video stream - - - - - - int ioctl - int fd - int request - struct v4l2_enc_idx *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_G_ENC_INDEX - - - - argp - - - - - - - - - Description - - The VIDIOC_G_ENC_INDEX ioctl provides -meta data about a compressed video stream the same or another -application currently reads from the driver, which is useful for -random access into the stream without decoding it. - - To read the data applications must call -VIDIOC_G_ENC_INDEX with a pointer to a -&v4l2-enc-idx;. On success the driver fills the -entry array, stores the number of elements -written in the entries field, and -initializes the entries_cap field. - - Each element of the entry array -contains meta data about one picture. A -VIDIOC_G_ENC_INDEX call reads up to -V4L2_ENC_IDX_ENTRIES entries from a driver -buffer, which can hold up to entries_cap -entries. This number can be lower or higher than -V4L2_ENC_IDX_ENTRIES, but not zero. When the -application fails to read the meta data in time the oldest entries -will be lost. When the buffer is empty or no capturing/encoding is in -progress, entries will be zero. - - Currently this ioctl is only defined for MPEG-2 program -streams and video elementary streams. - - - struct <structname>v4l2_enc_idx</structname> - - &cs-str; - - - __u32 - entries - The number of entries the driver stored in the -entry array. - - - __u32 - entries_cap - The number of entries the driver can -buffer. Must be greater than zero. - - - __u32 - reserved[4] - Reserved for future extensions. -Drivers must set the array to zero. - - - &v4l2-enc-idx-entry; - entry[V4L2_ENC_IDX_ENTRIES] - Meta data about a compressed video stream. Each -element of the array corresponds to one picture, sorted in ascending -order by their offset. - - - -
- - - struct <structname>v4l2_enc_idx_entry</structname> - - &cs-str; - - - __u64 - offset - The offset in bytes from the beginning of the -compressed video stream to the beginning of this picture, that is a -PES packet header as defined in or a picture -header as defined in . When -the encoder is stopped, the driver resets the offset to zero. - - - __u64 - pts - The 33 bit Presentation Time -Stamp of this picture as defined in . - - - __u32 - length - The length of this picture in bytes. - - - __u32 - flags - Flags containing the coding type of this picture, see . - - - __u32 - reserved[2] - Reserved for future extensions. -Drivers must set the array to zero. - - - -
- - - Index Entry Flags - - &cs-def; - - - V4L2_ENC_IDX_FRAME_I - 0x00 - This is an Intra-coded picture. - - - V4L2_ENC_IDX_FRAME_P - 0x01 - This is a Predictive-coded picture. - - - V4L2_ENC_IDX_FRAME_B - 0x02 - This is a Bidirectionally predictive-coded -picture. - - - V4L2_ENC_IDX_FRAME_MASK - 0x0F - AND the flags field with -this mask to obtain the picture coding type. - - - -
-
- - - &return-value; - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-g-ext-ctrls.xml b/Documentation/DocBook/media/v4l/vidioc-g-ext-ctrls.xml deleted file mode 100644 index eb82f7e7d06b..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-ext-ctrls.xml +++ /dev/null @@ -1,456 +0,0 @@ - - - ioctl VIDIOC_G_EXT_CTRLS, VIDIOC_S_EXT_CTRLS, -VIDIOC_TRY_EXT_CTRLS - &manvol; - - - - VIDIOC_G_EXT_CTRLS - VIDIOC_S_EXT_CTRLS - VIDIOC_TRY_EXT_CTRLS - Get or set the value of several controls, try control -values - - - - - - int ioctl - int fd - int request - struct v4l2_ext_controls -*argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_G_EXT_CTRLS, VIDIOC_S_EXT_CTRLS, -VIDIOC_TRY_EXT_CTRLS - - - - argp - - - - - - - - - Description - - These ioctls allow the caller to get or set multiple -controls atomically. Control IDs are grouped into control classes (see -) and all controls in the control array -must belong to the same control class. - - Applications must always fill in the -count, -which, -controls and -reserved fields of &v4l2-ext-controls;, and -initialize the &v4l2-ext-control; array pointed to by the -controls fields. - - To get the current value of a set of controls applications -initialize the id, -size and reserved2 fields -of each &v4l2-ext-control; and call the -VIDIOC_G_EXT_CTRLS ioctl. String controls controls -must also set the string field. Controls -of compound types (V4L2_CTRL_FLAG_HAS_PAYLOAD is set) -must set the ptr field. - - If the size is too small to -receive the control result (only relevant for pointer-type controls -like strings), then the driver will set size -to a valid value and return an &ENOSPC;. You should re-allocate the -memory to this new size and try again. For the string type it is possible that -the same issue occurs again if the string has grown in the meantime. It is -recommended to call &VIDIOC-QUERYCTRL; first and use -maximum+1 as the new size -value. It is guaranteed that that is sufficient memory. - - - N-dimensional arrays are set and retrieved row-by-row. You cannot set a partial -array, all elements have to be set or retrieved. The total size is calculated -as elems * elem_size. -These values can be obtained by calling &VIDIOC-QUERY-EXT-CTRL;. - - To change the value of a set of controls applications -initialize the id, size, -reserved2 and -value/value64/string/ptr fields of each &v4l2-ext-control; and -call the VIDIOC_S_EXT_CTRLS ioctl. The controls -will only be set if all control values are -valid. - - To check if a set of controls have correct values applications -initialize the id, size, -reserved2 and -value/value64/string/ptr fields of each &v4l2-ext-control; and -call the VIDIOC_TRY_EXT_CTRLS ioctl. It is up to -the driver whether wrong values are automatically adjusted to a valid -value or if an error is returned. - - When the id or -which is invalid drivers return an -&EINVAL;. When the value is out of bounds drivers can choose to take -the closest valid value or return an &ERANGE;, whatever seems more -appropriate. In the first case the new value is set in -&v4l2-ext-control;. If the new control value is inappropriate (e.g. the -given menu index is not supported by the menu control), then this will -also result in an &EINVAL; error. - - The driver will only set/get these controls if all control -values are correct. This prevents the situation where only some of the -controls were set/get. Only low-level errors (⪚ a failed i2c -command) can still cause this situation. - - - struct <structname>v4l2_ext_control</structname> - - &cs-ustr; - - - __u32 - id - - Identifies the control, set by the -application. - - - __u32 - size - - The total size in bytes of the payload of this -control. This is normally 0, but for pointer controls this should be -set to the size of the memory containing the payload, or that will -receive the payload. If VIDIOC_G_EXT_CTRLS finds -that this value is less than is required to store -the payload result, then it is set to a value large enough to store the -payload result and ENOSPC is returned. Note that for string controls -this size field should not be confused with the length of the string. -This field refers to the size of the memory that contains the string. -The actual length of the string may well be much smaller. - - - - __u32 - reserved2[1] - - Reserved for future extensions. Drivers and -applications must set the array to zero. - - - union - (anonymous) - - - - __s32 - value - New value or current value. Valid if this control is not of -type V4L2_CTRL_TYPE_INTEGER64 and -V4L2_CTRL_FLAG_HAS_PAYLOAD is not set. - - - - __s64 - value64 - New value or current value. Valid if this control is of -type V4L2_CTRL_TYPE_INTEGER64 and -V4L2_CTRL_FLAG_HAS_PAYLOAD is not set. - - - - char * - string - A pointer to a string. Valid if this control is of -type V4L2_CTRL_TYPE_STRING. - - - - __u8 * - p_u8 - A pointer to a matrix control of unsigned 8-bit values. -Valid if this control is of type V4L2_CTRL_TYPE_U8. - - - - __u16 * - p_u16 - A pointer to a matrix control of unsigned 16-bit values. -Valid if this control is of type V4L2_CTRL_TYPE_U16. - - - - __u32 * - p_u32 - A pointer to a matrix control of unsigned 32-bit values. -Valid if this control is of type V4L2_CTRL_TYPE_U32. - - - - void * - ptr - A pointer to a compound type which can be an N-dimensional array and/or a -compound type (the control's type is >= V4L2_CTRL_COMPOUND_TYPES). -Valid if V4L2_CTRL_FLAG_HAS_PAYLOAD is set for this control. - - - - -
- - - struct <structname>v4l2_ext_controls</structname> - - &cs-str; - - - union - (anonymous) - - - - __u32 - ctrl_class - The control class to which all controls belong, see -. Drivers that use a kernel framework for handling -controls will also accept a value of 0 here, meaning that the controls can -belong to any control class. Whether drivers support this can be tested by setting -ctrl_class to 0 and calling VIDIOC_TRY_EXT_CTRLS -with a count of 0. If that succeeds, then the driver -supports this feature. - - - - __u32 - which - Which value of the control to get/set/try. V4L2_CTRL_WHICH_CUR_VAL -will return the current value of the control and V4L2_CTRL_WHICH_DEF_VAL will -return the default value of the control. Please note that you can only get the default value of the -control, you cannot set or try it. -For backwards compatibility you can also use a control class here (see -). In that case all controls have to belong to that -control class. This usage is deprecated, instead just use V4L2_CTRL_WHICH_CUR_VAL. -There are some very old drivers that do not yet support V4L2_CTRL_WHICH_CUR_VAL -and that require a control class here. You can test for such drivers by setting ctrl_class to -V4L2_CTRL_WHICH_CUR_VAL and calling VIDIOC_TRY_EXT_CTRLS with a count of 0. -If that fails, then the driver does not support V4L2_CTRL_WHICH_CUR_VAL. - - - - __u32 - count - The number of controls in the controls array. May -also be zero. - - - __u32 - error_idx - Set by the driver in case of an error. If the error is -associated with a particular control, then error_idx -is set to the index of that control. If the error is not related to a specific -control, or the validation step failed (see below), then -error_idx is set to count. -The value is undefined if the ioctl returned 0 (success). - -Before controls are read from/written to hardware a validation step -takes place: this checks if all controls in the list are valid controls, -if no attempt is made to write to a read-only control or read from a write-only -control, and any other up-front checks that can be done without accessing the -hardware. The exact validations done during this step are driver dependent -since some checks might require hardware access for some devices, thus making -it impossible to do those checks up-front. However, drivers should make a -best-effort to do as many up-front checks as possible. - -This check is done to avoid leaving the hardware in an inconsistent state due -to easy-to-avoid problems. But it leads to another problem: the application needs to -know whether an error came from the validation step (meaning that the hardware -was not touched) or from an error during the actual reading from/writing to hardware. - -The, in hindsight quite poor, solution for that is to set error_idx -to count if the validation failed. This has the -unfortunate side-effect that it is not possible to see which control failed the -validation. If the validation was successful and the error happened while -accessing the hardware, then error_idx is less than -count and only the controls up to -error_idx-1 were read or written correctly, and the -state of the remaining controls is undefined. - -Since VIDIOC_TRY_EXT_CTRLS does not access hardware -there is also no need to handle the validation step in this special way, -so error_idx will just be set to the control that -failed the validation step instead of to count. -This means that if VIDIOC_S_EXT_CTRLS fails with -error_idx set to count, -then you can call VIDIOC_TRY_EXT_CTRLS to try to discover -the actual control that failed the validation step. Unfortunately, there -is no TRY equivalent for VIDIOC_G_EXT_CTRLS. - - - - __u32 - reserved[2] - Reserved for future extensions. Drivers and -applications must set the array to zero. - - - &v4l2-ext-control; * - controls - Pointer to an array of -count v4l2_ext_control structures. Ignored -if count equals zero. - - - -
- - - Control classes - - &cs-def; - - - V4L2_CTRL_CLASS_USER - 0x980000 - The class containing user controls. These controls -are described in . All controls that can be set -using the &VIDIOC-S-CTRL; and &VIDIOC-G-CTRL; ioctl belong to this -class. - - - V4L2_CTRL_CLASS_MPEG - 0x990000 - The class containing MPEG compression controls. -These controls are described in . - - - V4L2_CTRL_CLASS_CAMERA - 0x9a0000 - The class containing camera controls. -These controls are described in . - - - V4L2_CTRL_CLASS_FM_TX - 0x9b0000 - The class containing FM Transmitter (FM TX) controls. -These controls are described in . - - - V4L2_CTRL_CLASS_FLASH - 0x9c0000 - The class containing flash device controls. -These controls are described in . - - - V4L2_CTRL_CLASS_JPEG - 0x9d0000 - The class containing JPEG compression controls. -These controls are described in . - - - V4L2_CTRL_CLASS_IMAGE_SOURCE - 0x9e0000 The class containing image - source controls. These controls are described in . - - - V4L2_CTRL_CLASS_IMAGE_PROC - 0x9f0000 The class containing image - processing controls. These controls are described in . - - - - V4L2_CTRL_CLASS_FM_RX - 0xa10000 - The class containing FM Receiver (FM RX) controls. -These controls are described in . - - - V4L2_CTRL_CLASS_RF_TUNER - 0xa20000 - The class containing RF tuner controls. -These controls are described in . - - - -
- -
- - - &return-value; - - - - EINVAL - - The &v4l2-ext-control; id -is invalid, the &v4l2-ext-controls; -which is invalid, or the &v4l2-ext-control; -value was inappropriate (e.g. the given menu -index is not supported by the driver). This error code is -also returned by the VIDIOC_S_EXT_CTRLS and -VIDIOC_TRY_EXT_CTRLS ioctls if two or more -control values are in conflict. - - - - ERANGE - - The &v4l2-ext-control; value -is out of bounds. - - - - EBUSY - - The control is temporarily not changeable, possibly -because another applications took over control of the device function -this control belongs to. - - - - ENOSPC - - The space reserved for the control's payload is insufficient. -The field size is set to a value that is enough -to store the payload and this error code is returned. - - - - EACCES - - Attempt to try or set a read-only control or to get a - write-only control. - - - - -
- diff --git a/Documentation/DocBook/media/v4l/vidioc-g-fbuf.xml b/Documentation/DocBook/media/v4l/vidioc-g-fbuf.xml deleted file mode 100644 index 77607cc19688..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-fbuf.xml +++ /dev/null @@ -1,459 +0,0 @@ - - - ioctl VIDIOC_G_FBUF, VIDIOC_S_FBUF - &manvol; - - - - VIDIOC_G_FBUF - VIDIOC_S_FBUF - Get or set frame buffer overlay parameters - - - - - - int ioctl - int fd - int request - struct v4l2_framebuffer *argp - - - - - int ioctl - int fd - int request - const struct v4l2_framebuffer *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_G_FBUF, VIDIOC_S_FBUF - - - - argp - - - - - - - - - Description - - Applications can use the VIDIOC_G_FBUF and -VIDIOC_S_FBUF ioctl to get and set the -framebuffer parameters for a Video -Overlay or Video Output Overlay -(OSD). The type of overlay is implied by the device type (capture or -output device) and can be determined with the &VIDIOC-QUERYCAP; ioctl. -One /dev/videoN device must not support both -kinds of overlay. - - The V4L2 API distinguishes destructive and non-destructive -overlays. A destructive overlay copies captured video images into the -video memory of a graphics card. A non-destructive overlay blends -video images into a VGA signal or graphics into a video signal. -Video Output Overlays are always -non-destructive. - - To get the current parameters applications call the -VIDIOC_G_FBUF ioctl with a pointer to a -v4l2_framebuffer structure. The driver fills -all fields of the structure or returns an &EINVAL; when overlays are -not supported. - - To set the parameters for a Video Output -Overlay, applications must initialize the -flags field of a struct -v4l2_framebuffer. Since the framebuffer is -implemented on the TV card all other parameters are determined by the -driver. When an application calls VIDIOC_S_FBUF -with a pointer to this structure, the driver prepares for the overlay -and returns the framebuffer parameters as -VIDIOC_G_FBUF does, or it returns an error -code. - - To set the parameters for a non-destructive -Video Overlay, applications must initialize the -flags field, the -fmt substructure, and call -VIDIOC_S_FBUF. Again the driver prepares for the -overlay and returns the framebuffer parameters as -VIDIOC_G_FBUF does, or it returns an error -code. - - For a destructive Video Overlay -applications must additionally provide a -base address. Setting up a DMA to a -random memory location can jeopardize the system security, its -stability or even damage the hardware, therefore only the superuser -can set the parameters for a destructive video overlay. - - - - - struct <structname>v4l2_framebuffer</structname> - - &cs-ustr; - - - __u32 - capability - - Overlay capability flags set by the driver, see -. - - - __u32 - flags - - Overlay control flags set by application and -driver, see - - - void * - base - - Physical base address of the framebuffer, -that is the address of the pixel in the top left corner of the -framebuffer.A physical base address may not suit all -platforms. GK notes in theory we should pass something like PCI device -+ memory region + offset instead. If you encounter problems please -discuss on the linux-media mailing list: &v4l-ml;. - - - - - - This field is irrelevant to -non-destructive Video Overlays. For -destructive Video Overlays applications must -provide a base address. The driver may accept only base addresses -which are a multiple of two, four or eight bytes. For -Video Output Overlays the driver must return -a valid base address, so applications can find the corresponding Linux -framebuffer device (see ). - - - struct - fmt - - Layout of the frame buffer. - - - - __u32 - width - Width of the frame buffer in pixels. - - - - __u32 - height - Height of the frame buffer in pixels. - - - - __u32 - pixelformat - The pixel format of the -framebuffer. - - - - - - For non-destructive Video -Overlays this field only defines a format for the -&v4l2-window; chromakey field. - - - - - - For destructive Video -Overlays applications must initialize this field. For -Video Output Overlays the driver must return -a valid format. - - - - - - Usually this is an RGB format (for example -V4L2_PIX_FMT_RGB565) -but YUV formats (only packed YUV formats when chroma keying is used, -not including V4L2_PIX_FMT_YUYV and -V4L2_PIX_FMT_UYVY) and the -V4L2_PIX_FMT_PAL8 format are also permitted. The -behavior of the driver when an application requests a compressed -format is undefined. See for information on -pixel formats. - - - - &v4l2-field; - field - Drivers and applications shall ignore this field. -If applicable, the field order is selected with the &VIDIOC-S-FMT; -ioctl, using the field field of -&v4l2-window;. - - - - __u32 - bytesperline - Distance in bytes between the leftmost pixels in -two adjacent lines. - - - This field is irrelevant to -non-destructive Video -Overlays.For destructive Video -Overlays both applications and drivers can set this field -to request padding bytes at the end of each line. Drivers however may -ignore the requested value, returning width -times bytes-per-pixel or a larger value required by the hardware. That -implies applications can just set this field to zero to get a -reasonable default.For Video Output -Overlays the driver must return a valid -value.Video hardware may access padding bytes, therefore -they must reside in accessible memory. Consider for example the case -where padding bytes after the last line of an image cross a system -page boundary. Capture devices may write padding bytes, the value is -undefined. Output devices ignore the contents of padding -bytes.When the image format is planar the -bytesperline value applies to the first -plane and is divided by the same factor as the -width field for the other planes. For -example the Cb and Cr planes of a YUV 4:2:0 image have half as many -padding bytes following each line as the Y plane. To avoid ambiguities -drivers must return a bytesperline value -rounded up to a multiple of the scale factor. - - - - __u32 - sizeimage - This field is irrelevant to -non-destructive Video Overlays. For -destructive Video Overlays applications must -initialize this field. For Video Output -Overlays the driver must return a valid -format.Together with base it -defines the framebuffer memory accessible by the -driver. - - - - &v4l2-colorspace; - colorspace - This information supplements the -pixelformat and must be set by the driver, -see . - - - - __u32 - priv - Reserved. Drivers and applications must set this field to -zero. - - - -
- - - Frame Buffer Capability Flags - - &cs-def; - - - V4L2_FBUF_CAP_EXTERNOVERLAY - 0x0001 - The device is capable of non-destructive overlays. -When the driver clears this flag, only destructive overlays are -supported. There are no drivers yet which support both destructive and -non-destructive overlays. Video Output Overlays are in practice always -non-destructive. - - - V4L2_FBUF_CAP_CHROMAKEY - 0x0002 - The device supports clipping by chroma-keying the -images. That is, image pixels replace pixels in the VGA or video -signal only where the latter assume a certain color. Chroma-keying -makes no sense for destructive overlays. - - - V4L2_FBUF_CAP_LIST_CLIPPING - 0x0004 - The device supports clipping using a list of clip -rectangles. - - - V4L2_FBUF_CAP_BITMAP_CLIPPING - 0x0008 - The device supports clipping using a bit mask. - - - V4L2_FBUF_CAP_LOCAL_ALPHA - 0x0010 - The device supports clipping/blending using the -alpha channel of the framebuffer or VGA signal. Alpha blending makes -no sense for destructive overlays. - - - V4L2_FBUF_CAP_GLOBAL_ALPHA - 0x0020 - The device supports alpha blending using a global -alpha value. Alpha blending makes no sense for destructive overlays. - - - V4L2_FBUF_CAP_LOCAL_INV_ALPHA - 0x0040 - The device supports clipping/blending using the -inverted alpha channel of the framebuffer or VGA signal. Alpha -blending makes no sense for destructive overlays. - - - V4L2_FBUF_CAP_SRC_CHROMAKEY - 0x0080 - The device supports Source Chroma-keying. Video pixels -with the chroma-key colors are replaced by framebuffer pixels, which is exactly opposite of -V4L2_FBUF_CAP_CHROMAKEY - - - -
- - - Frame Buffer Flags - - &cs-def; - - - V4L2_FBUF_FLAG_PRIMARY - 0x0001 - The framebuffer is the primary graphics surface. -In other words, the overlay is destructive. This flag is typically set by any -driver that doesn't have the V4L2_FBUF_CAP_EXTERNOVERLAY -capability and it is cleared otherwise. - - - V4L2_FBUF_FLAG_OVERLAY - 0x0002 - If this flag is set for a video capture device, then the -driver will set the initial overlay size to cover the full framebuffer size, -otherwise the existing overlay size (as set by &VIDIOC-S-FMT;) will be used. - -Only one video capture driver (bttv) supports this flag. The use of this flag -for capture devices is deprecated. There is no way to detect which drivers -support this flag, so the only reliable method of setting the overlay size is -through &VIDIOC-S-FMT;. - -If this flag is set for a video output device, then the video output overlay -window is relative to the top-left corner of the framebuffer and restricted -to the size of the framebuffer. If it is cleared, then the video output -overlay window is relative to the video output display. - - - - V4L2_FBUF_FLAG_CHROMAKEY - 0x0004 - Use chroma-keying. The chroma-key color is -determined by the chromakey field of -&v4l2-window; and negotiated with the &VIDIOC-S-FMT; ioctl, see -and - . - - - There are no flags to enable -clipping using a list of clip rectangles or a bitmap. These methods -are negotiated with the &VIDIOC-S-FMT; ioctl, see and . - - - V4L2_FBUF_FLAG_LOCAL_ALPHA - 0x0008 - Use the alpha channel of the framebuffer to clip or -blend framebuffer pixels with video images. The blend -function is: output = framebuffer pixel * alpha + video pixel * (1 - -alpha). The actual alpha depth depends on the framebuffer pixel -format. - - - V4L2_FBUF_FLAG_GLOBAL_ALPHA - 0x0010 - Use a global alpha value to blend the framebuffer -with video images. The blend function is: output = (framebuffer pixel -* alpha + video pixel * (255 - alpha)) / 255. The alpha value is -determined by the global_alpha field of -&v4l2-window; and negotiated with the &VIDIOC-S-FMT; ioctl, see -and . - - - V4L2_FBUF_FLAG_LOCAL_INV_ALPHA - 0x0020 - Like -V4L2_FBUF_FLAG_LOCAL_ALPHA, use the alpha channel -of the framebuffer to clip or blend framebuffer pixels with video -images, but with an inverted alpha value. The blend function is: -output = framebuffer pixel * (1 - alpha) + video pixel * alpha. The -actual alpha depth depends on the framebuffer pixel format. - - - V4L2_FBUF_FLAG_SRC_CHROMAKEY - 0x0040 - Use source chroma-keying. The source chroma-key color is -determined by the chromakey field of -&v4l2-window; and negotiated with the &VIDIOC-S-FMT; ioctl, see and . -Both chroma-keying are mutual exclusive to each other, so same -chromakey field of &v4l2-window; is being used. - - - -
-
- - - &return-value; - - - - EPERM - - VIDIOC_S_FBUF can only be called -by a privileged user to negotiate the parameters for a destructive -overlay. - - - - EINVAL - - The VIDIOC_S_FBUF parameters are unsuitable. - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-g-fmt.xml b/Documentation/DocBook/media/v4l/vidioc-g-fmt.xml deleted file mode 100644 index ffcb448251f0..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-fmt.xml +++ /dev/null @@ -1,204 +0,0 @@ - - - ioctl VIDIOC_G_FMT, VIDIOC_S_FMT, -VIDIOC_TRY_FMT - &manvol; - - - - VIDIOC_G_FMT - VIDIOC_S_FMT - VIDIOC_TRY_FMT - Get or set the data format, try a format - - - - - - int ioctl - int fd - int request - struct v4l2_format -*argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_G_FMT, VIDIOC_S_FMT, VIDIOC_TRY_FMT - - - - argp - - - - - - - - - Description - - These ioctls are used to negotiate the format of data -(typically image format) exchanged between driver and -application. - - To query the current parameters applications set the -type field of a struct -v4l2_format to the respective buffer (stream) -type. For example video capture devices use -V4L2_BUF_TYPE_VIDEO_CAPTURE or -V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE. When the application -calls the VIDIOC_G_FMT ioctl with a pointer to -this structure the driver fills the respective member of the -fmt union. In case of video capture devices -that is either the &v4l2-pix-format; pix or -the &v4l2-pix-format-mplane; pix_mp member. -When the requested buffer type is not supported drivers return an -&EINVAL;. - - To change the current format parameters applications -initialize the type field and all -fields of the respective fmt -union member. For details see the documentation of the various devices -types in . Good practice is to query the -current parameters first, and to -modify only those parameters not suitable for the application. When -the application calls the VIDIOC_S_FMT ioctl -with a pointer to a v4l2_format structure -the driver checks -and adjusts the parameters against hardware abilities. Drivers -should not return an error code unless the type field is invalid, this is -a mechanism to fathom device capabilities and to approach parameters -acceptable for both the application and driver. On success the driver -may program the hardware, allocate resources and generally prepare for -data exchange. -Finally the VIDIOC_S_FMT ioctl returns the -current format parameters as VIDIOC_G_FMT does. -Very simple, inflexible devices may even ignore all input and always -return the default parameters. However all V4L2 devices exchanging -data with the application must implement the -VIDIOC_G_FMT and -VIDIOC_S_FMT ioctl. When the requested buffer -type is not supported drivers return an &EINVAL; on a -VIDIOC_S_FMT attempt. When I/O is already in -progress or the resource is not available for other reasons drivers -return the &EBUSY;. - - The VIDIOC_TRY_FMT ioctl is equivalent -to VIDIOC_S_FMT with one exception: it does not -change driver state. It can also be called at any time, never -returning EBUSY. This function is provided to -negotiate parameters, to learn about hardware limitations, without -disabling I/O or possibly time consuming hardware preparations. -Although strongly recommended drivers are not required to implement -this ioctl. - - The format as returned by VIDIOC_TRY_FMT -must be identical to what VIDIOC_S_FMT returns for -the same input or output. - - - struct <structname>v4l2_format</structname> - - - - - - - - __u32 - type - - Type of the data stream, see . - - - union - fmt - - - - &v4l2-pix-format; - pix - Definition of an image format, see , used by video capture and output -devices. - - - - &v4l2-pix-format-mplane; - pix_mp - Definition of an image format, see , used by video capture and output -devices that support the multi-planar -version of the API. - - - - &v4l2-window; - win - Definition of an overlaid image, see , used by video overlay devices. - - - - &v4l2-vbi-format; - vbi - Raw VBI capture or output parameters. This is -discussed in more detail in . Used by raw VBI -capture and output devices. - - - - &v4l2-sliced-vbi-format; - sliced - Sliced VBI capture or output parameters. See - for details. Used by sliced VBI -capture and output devices. - - - - &v4l2-sdr-format; - sdr - Definition of a data format, see -, used by SDR capture and output devices. - - - - __u8 - raw_data[200] - Place holder for future extensions. - - - -
-
- - - &return-value; - - - - EINVAL - - The &v4l2-format; type -field is invalid or the requested buffer type not supported. - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-g-frequency.xml b/Documentation/DocBook/media/v4l/vidioc-g-frequency.xml deleted file mode 100644 index d1034fb61d15..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-frequency.xml +++ /dev/null @@ -1,148 +0,0 @@ - - - ioctl VIDIOC_G_FREQUENCY, VIDIOC_S_FREQUENCY - &manvol; - - - - VIDIOC_G_FREQUENCY - VIDIOC_S_FREQUENCY - Get or set tuner or modulator radio -frequency - - - - - - int ioctl - int fd - int request - struct v4l2_frequency -*argp - - - - - int ioctl - int fd - int request - const struct v4l2_frequency -*argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_G_FREQUENCY, VIDIOC_S_FREQUENCY - - - - argp - - - - - - - - - Description - - To get the current tuner or modulator radio frequency -applications set the tuner field of a -&v4l2-frequency; to the respective tuner or modulator number (only -input devices have tuners, only output devices have modulators), zero -out the reserved array and -call the VIDIOC_G_FREQUENCY ioctl with a pointer -to this structure. The driver stores the current frequency in the -frequency field. - - To change the current tuner or modulator radio frequency -applications initialize the tuner, -type and -frequency fields, and the -reserved array of a &v4l2-frequency; and -call the VIDIOC_S_FREQUENCY ioctl with a pointer -to this structure. When the requested frequency is not possible the -driver assumes the closest possible value. However -VIDIOC_S_FREQUENCY is a write-only ioctl, it does -not return the actual new frequency. - - - struct <structname>v4l2_frequency</structname> - - &cs-str; - - - __u32 - tuner - The tuner or modulator index number. This is the -same value as in the &v4l2-input; tuner -field and the &v4l2-tuner; index field, or -the &v4l2-output; modulator field and the -&v4l2-modulator; index field. - - - __u32 - type - The tuner type. This is the same value as in the -&v4l2-tuner; type field. The type must be set -to V4L2_TUNER_RADIO for /dev/radioX -device nodes, and to V4L2_TUNER_ANALOG_TV -for all others. Set this field to V4L2_TUNER_RADIO for -modulators (currently only radio modulators are supported). -See - - - __u32 - frequency - Tuning frequency in units of 62.5 kHz, or if the -&v4l2-tuner; or &v4l2-modulator; capability flag -V4L2_TUNER_CAP_LOW is set, in units of 62.5 -Hz. A 1 Hz unit is used when the capability flag -V4L2_TUNER_CAP_1HZ is set. - - - __u32 - reserved[8] - Reserved for future extensions. Drivers and - applications must set the array to zero. - - - -
-
- - - &return-value; - - - - EINVAL - - The tuner index is out of -bounds or the value in the type field is -wrong. - - - - EBUSY - - A hardware seek is in progress. - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-g-input.xml b/Documentation/DocBook/media/v4l/vidioc-g-input.xml deleted file mode 100644 index 1d43065090dd..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-input.xml +++ /dev/null @@ -1,83 +0,0 @@ - - - ioctl VIDIOC_G_INPUT, VIDIOC_S_INPUT - &manvol; - - - - VIDIOC_G_INPUT - VIDIOC_S_INPUT - Query or select the current video input - - - - - - int ioctl - int fd - int request - int *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_G_INPUT, VIDIOC_S_INPUT - - - - argp - - - - - - - - - Description - - To query the current video input applications call the -VIDIOC_G_INPUT ioctl with a pointer to an integer -where the driver stores the number of the input, as in the -&v4l2-input; index field. This ioctl will -fail only when there are no video inputs, returning -EINVAL. - - To select a video input applications store the number of the -desired input in an integer and call the -VIDIOC_S_INPUT ioctl with a pointer to this -integer. Side effects are possible. For example inputs may support -different video standards, so the driver may implicitly switch the -current standard. Because of these possible side effects applications -must select an input before querying or negotiating any other parameters. - - Information about video inputs is available using the -&VIDIOC-ENUMINPUT; ioctl. - - - - &return-value; - - - - EINVAL - - The number of the video input is out of bounds. - - - - - diff --git a/Documentation/DocBook/media/v4l/vidioc-g-jpegcomp.xml b/Documentation/DocBook/media/v4l/vidioc-g-jpegcomp.xml deleted file mode 100644 index 098ff483802e..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-jpegcomp.xml +++ /dev/null @@ -1,175 +0,0 @@ - - - ioctl VIDIOC_G_JPEGCOMP, VIDIOC_S_JPEGCOMP - &manvol; - - - - VIDIOC_G_JPEGCOMP - VIDIOC_S_JPEGCOMP - - - - - - - int ioctl - int fd - int request - v4l2_jpegcompression *argp - - - - - int ioctl - int fd - int request - const v4l2_jpegcompression *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_G_JPEGCOMP, VIDIOC_S_JPEGCOMP - - - - argp - - - - - - - - - Description - - These ioctls are deprecated. - New drivers and applications should use - JPEG class controls for image quality and JPEG markers control. - - - [to do] - - Ronald Bultje elaborates: - - - - APP is some application-specific information. The -application can set it itself, and it'll be stored in the JPEG-encoded -fields (eg; interlacing information for in an AVI or so). COM is the -same, but it's comments, like 'encoded by me' or so. - - jpeg_markers describes whether the huffman tables, -quantization tables and the restart interval information (all -JPEG-specific stuff) should be stored in the JPEG-encoded fields. -These define how the JPEG field is encoded. If you omit them, -applications assume you've used standard encoding. You usually do want -to add them. - - - - - struct <structname>v4l2_jpegcompression</structname> - - &cs-str; - - - int - quality - Deprecated. If - V4L2_CID_JPEG_COMPRESSION_QUALITY control is exposed - by a driver applications should use it instead and ignore this field. - - - - int - APPn - - - - int - APP_len - - - - char - APP_data[60] - - - - int - COM_len - - - - char - COM_data[60] - - - - __u32 - jpeg_markers - See . Deprecated. - If - V4L2_CID_JPEG_ACTIVE_MARKER control - is exposed by a driver applications should use it instead - and ignore this field. - - - -
- - - JPEG Markers Flags - - &cs-def; - - - V4L2_JPEG_MARKER_DHT - (1<<3) - Define Huffman Tables - - - V4L2_JPEG_MARKER_DQT - (1<<4) - Define Quantization Tables - - - V4L2_JPEG_MARKER_DRI - (1<<5) - Define Restart Interval - - - V4L2_JPEG_MARKER_COM - (1<<6) - Comment segment - - - V4L2_JPEG_MARKER_APP - (1<<7) - App segment, driver will always use APP0 - - - -
-
- - - &return-value; - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-g-modulator.xml b/Documentation/DocBook/media/v4l/vidioc-g-modulator.xml deleted file mode 100644 index 96e17b344c5d..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-modulator.xml +++ /dev/null @@ -1,252 +0,0 @@ - - - ioctl VIDIOC_G_MODULATOR, VIDIOC_S_MODULATOR - &manvol; - - - - VIDIOC_G_MODULATOR - VIDIOC_S_MODULATOR - Get or set modulator attributes - - - - - - int ioctl - int fd - int request - struct v4l2_modulator -*argp - - - - - int ioctl - int fd - int request - const struct v4l2_modulator -*argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_G_MODULATOR, VIDIOC_S_MODULATOR - - - - argp - - - - - - - - - Description - - To query the attributes of a modulator applications initialize -the index field and zero out the -reserved array of a &v4l2-modulator; and -call the VIDIOC_G_MODULATOR ioctl with a pointer -to this structure. Drivers fill the rest of the structure or return an -&EINVAL; when the index is out of bounds. To enumerate all modulators -applications shall begin at index zero, incrementing by one until the -driver returns EINVAL. - - Modulators have two writable properties, an audio -modulation set and the radio frequency. To change the modulated audio -subprograms, applications initialize the index - and txsubchans fields and the -reserved array and call the -VIDIOC_S_MODULATOR ioctl. Drivers may choose a -different audio modulation if the request cannot be satisfied. However -this is a write-only ioctl, it does not return the actual audio -modulation selected. - - SDR specific modulator types are -V4L2_TUNER_SDR and V4L2_TUNER_RF. -For SDR devices txsubchans field must be -initialized to zero. -The term 'modulator' means SDR transmitter in this context. - - To change the radio frequency the &VIDIOC-S-FREQUENCY; ioctl -is available. - - - struct <structname>v4l2_modulator</structname> - - &cs-str; - - - __u32 - index - Identifies the modulator, set by the -application. - - - __u8 - name[32] - Name of the modulator, a NUL-terminated ASCII -string. This information is intended for the user. - - - __u32 - capability - Modulator capability flags. No flags are defined -for this field, the tuner flags in &v4l2-tuner; -are used accordingly. The audio flags indicate the ability -to encode audio subprograms. They will not -change for example with the current video standard. - - - __u32 - rangelow - The lowest tunable frequency in units of 62.5 -KHz, or if the capability flag -V4L2_TUNER_CAP_LOW is set, in units of 62.5 -Hz, or if the capability flag -V4L2_TUNER_CAP_1HZ is set, in units of 1 Hz. - - - __u32 - rangehigh - The highest tunable frequency in units of 62.5 -KHz, or if the capability flag -V4L2_TUNER_CAP_LOW is set, in units of 62.5 -Hz, or if the capability flag -V4L2_TUNER_CAP_1HZ is set, in units of 1 Hz. - - - __u32 - txsubchans - With this field applications can determine how -audio sub-carriers shall be modulated. It contains a set of flags as -defined in . Note the tuner -rxsubchans flags are reused, but the -semantics are different. Video output devices are assumed to have an -analog or PCM audio input with 1-3 channels. The -txsubchans flags select one or more -channels for modulation, together with some audio subprogram -indicator, for example a stereo pilot tone. - - - __u32 - type - Type of the modulator, see . - - - __u32 - reserved[3] - Reserved for future extensions. Drivers and -applications must set the array to zero. - - - -
- - - Modulator Audio Transmission Flags - - &cs-def; - - - V4L2_TUNER_SUB_MONO - 0x0001 - Modulate channel 1 as mono audio, when the input -has more channels, a down-mix of channel 1 and 2. This flag does not -combine with V4L2_TUNER_SUB_STEREO or -V4L2_TUNER_SUB_LANG1. - - - V4L2_TUNER_SUB_STEREO - 0x0002 - Modulate channel 1 and 2 as left and right -channel of a stereo audio signal. When the input has only one channel -or two channels and V4L2_TUNER_SUB_SAP is also -set, channel 1 is encoded as left and right channel. This flag does -not combine with V4L2_TUNER_SUB_MONO or -V4L2_TUNER_SUB_LANG1. When the driver does not -support stereo audio it shall fall back to mono. - - - V4L2_TUNER_SUB_LANG1 - 0x0008 - Modulate channel 1 and 2 as primary and secondary -language of a bilingual audio signal. When the input has only one -channel it is used for both languages. It is not possible to encode -the primary or secondary language only. This flag does not combine -with V4L2_TUNER_SUB_MONO, -V4L2_TUNER_SUB_STEREO or -V4L2_TUNER_SUB_SAP. If the hardware does not -support the respective audio matrix, or the current video standard -does not permit bilingual audio the -VIDIOC_S_MODULATOR ioctl shall return an &EINVAL; -and the driver shall fall back to mono or stereo mode. - - - V4L2_TUNER_SUB_LANG2 - 0x0004 - Same effect as -V4L2_TUNER_SUB_SAP. - - - V4L2_TUNER_SUB_SAP - 0x0004 - When combined with V4L2_TUNER_SUB_MONO - the first channel is encoded as mono audio, the last -channel as Second Audio Program. When the input has only one channel -it is used for both audio tracks. When the input has three channels -the mono track is a down-mix of channel 1 and 2. When combined with -V4L2_TUNER_SUB_STEREO channel 1 and 2 are -encoded as left and right stereo audio, channel 3 as Second Audio -Program. When the input has only two channels, the first is encoded as -left and right channel and the second as SAP. When the input has only -one channel it is used for all audio tracks. It is not possible to -encode a Second Audio Program only. This flag must combine with -V4L2_TUNER_SUB_MONO or -V4L2_TUNER_SUB_STEREO. If the hardware does not -support the respective audio matrix, or the current video standard -does not permit SAP the VIDIOC_S_MODULATOR ioctl -shall return an &EINVAL; and driver shall fall back to mono or stereo -mode. - - - V4L2_TUNER_SUB_RDS - 0x0010 - Enable the RDS encoder for a radio FM transmitter. - - - -
-
- - - &return-value; - - - - EINVAL - - The &v4l2-modulator; -index is out of bounds. - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-g-output.xml b/Documentation/DocBook/media/v4l/vidioc-g-output.xml deleted file mode 100644 index 4533068ecb8a..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-output.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - ioctl VIDIOC_G_OUTPUT, VIDIOC_S_OUTPUT - &manvol; - - - - VIDIOC_G_OUTPUT - VIDIOC_S_OUTPUT - Query or select the current video output - - - - - - int ioctl - int fd - int request - int *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_G_OUTPUT, VIDIOC_S_OUTPUT - - - - argp - - - - - - - - - Description - - To query the current video output applications call the -VIDIOC_G_OUTPUT ioctl with a pointer to an integer -where the driver stores the number of the output, as in the -&v4l2-output; index field. This ioctl -will fail only when there are no video outputs, returning the -&EINVAL;. - - To select a video output applications store the number of the -desired output in an integer and call the -VIDIOC_S_OUTPUT ioctl with a pointer to this integer. -Side effects are possible. For example outputs may support different -video standards, so the driver may implicitly switch the current -standard. -standard. Because of these possible side effects applications -must select an output before querying or negotiating any other parameters. - - Information about video outputs is available using the -&VIDIOC-ENUMOUTPUT; ioctl. - - - - &return-value; - - - - EINVAL - - The number of the video output is out of bounds, or -there are no video outputs at all. - - - - - diff --git a/Documentation/DocBook/media/v4l/vidioc-g-parm.xml b/Documentation/DocBook/media/v4l/vidioc-g-parm.xml deleted file mode 100644 index 721728745407..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-parm.xml +++ /dev/null @@ -1,314 +0,0 @@ - - - ioctl VIDIOC_G_PARM, VIDIOC_S_PARM - &manvol; - - - - VIDIOC_G_PARM - VIDIOC_S_PARM - Get or set streaming parameters - - - - - - int ioctl - int fd - int request - v4l2_streamparm *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_G_PARM, VIDIOC_S_PARM - - - - argp - - - - - - - - - Description - - The current video standard determines a nominal number of -frames per second. If less than this number of frames is to be -captured or output, applications can request frame skipping or -duplicating on the driver side. This is especially useful when using -the read() or write(), which -are not augmented by timestamps or sequence counters, and to avoid -unnecessary data copying. - - Further these ioctls can be used to determine the number of -buffers used internally by a driver in read/write mode. For -implications see the section discussing the &func-read; -function. - - To get and set the streaming parameters applications call -the VIDIOC_G_PARM and -VIDIOC_S_PARM ioctl, respectively. They take a -pointer to a struct v4l2_streamparm which -contains a union holding separate parameters for input and output -devices. - - - struct <structname>v4l2_streamparm</structname> - - &cs-ustr; - - - __u32 - type - - The buffer (stream) type, same as &v4l2-format; -type, set by the application. See - - - union - parm - - - - - - &v4l2-captureparm; - capture - Parameters for capture devices, used when -type is -V4L2_BUF_TYPE_VIDEO_CAPTURE. - - - - &v4l2-outputparm; - output - Parameters for output devices, used when -type is -V4L2_BUF_TYPE_VIDEO_OUTPUT. - - - - __u8 - raw_data[200] - A place holder for future extensions. - - - -
- - - struct <structname>v4l2_captureparm</structname> - - &cs-str; - - - __u32 - capability - See . - - - __u32 - capturemode - Set by drivers and applications, see . - - - &v4l2-fract; - timeperframe - This is the desired period between -successive frames captured by the driver, in seconds. The -field is intended to skip frames on the driver side, saving I/O -bandwidth.Applications store here the desired frame -period, drivers return the actual frame period, which must be greater -or equal to the nominal frame period determined by the current video -standard (&v4l2-standard; frameperiod -field). Changing the video standard (also implicitly by switching the -video input) may reset this parameter to the nominal frame period. To -reset manually applications can just set this field to -zero.Drivers support this function only when they set the -V4L2_CAP_TIMEPERFRAME flag in the -capability field. - - - __u32 - extendedmode - Custom (driver specific) streaming parameters. When -unused, applications and drivers must set this field to zero. -Applications using this field should check the driver name and -version, see . - - - __u32 - readbuffers - Applications set this field to the desired number -of buffers used internally by the driver in &func-read; mode. Drivers -return the actual number of buffers. When an application requests zero -buffers, drivers should just return the current setting rather than -the minimum or an error code. For details see . - - - __u32 - reserved[4] - Reserved for future extensions. Drivers and -applications must set the array to zero. - - - -
- - - struct <structname>v4l2_outputparm</structname> - - &cs-str; - - - __u32 - capability - See . - - - __u32 - outputmode - Set by drivers and applications, see . - - - &v4l2-fract; - timeperframe - This is the desired period between -successive frames output by the driver, in seconds. - - - The field is intended to -repeat frames on the driver side in &func-write; mode (in streaming -mode timestamps can be used to throttle the output), saving I/O -bandwidth.Applications store here the desired frame -period, drivers return the actual frame period, which must be greater -or equal to the nominal frame period determined by the current video -standard (&v4l2-standard; frameperiod -field). Changing the video standard (also implicitly by switching the -video output) may reset this parameter to the nominal frame period. To -reset manually applications can just set this field to -zero.Drivers support this function only when they set the -V4L2_CAP_TIMEPERFRAME flag in the -capability field. - - - __u32 - extendedmode - Custom (driver specific) streaming parameters. When -unused, applications and drivers must set this field to zero. -Applications using this field should check the driver name and -version, see . - - - __u32 - writebuffers - Applications set this field to the desired number -of buffers used internally by the driver in -write() mode. Drivers return the actual number of -buffers. When an application requests zero buffers, drivers should -just return the current setting rather than the minimum or an error -code. For details see . - - - __u32 - reserved[4] - Reserved for future extensions. Drivers and -applications must set the array to zero. - - - -
- - - Streaming Parameters Capabilites - - &cs-def; - - - V4L2_CAP_TIMEPERFRAME - 0x1000 - The frame skipping/repeating controlled by the -timeperframe field is supported. - - - -
- - - Capture Parameters Flags - - &cs-def; - - - V4L2_MODE_HIGHQUALITY - 0x0001 - High quality imaging mode. High quality mode -is intended for still imaging applications. The idea is to get the -best possible image quality that the hardware can deliver. It is not -defined how the driver writer may achieve that; it will depend on the -hardware and the ingenuity of the driver writer. High quality mode is -a different mode from the regular motion video capture modes. In -high quality mode: - - The driver may be able to capture higher -resolutions than for motion capture. - - - The driver may support fewer pixel formats -than motion capture (eg; true color). - - - The driver may capture and arithmetically -combine multiple successive fields or frames to remove color edge -artifacts and reduce the noise in the video data. - - - - The driver may capture images in slices like -a scanner in order to handle larger format images than would otherwise -be possible. - - - An image capture operation may be -significantly slower than motion capture. - - - Moving objects in the image might have -excessive motion blur. - - - Capture might only work through the -read() call. - - - - - -
- -
- - - &return-value; - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-g-priority.xml b/Documentation/DocBook/media/v4l/vidioc-g-priority.xml deleted file mode 100644 index 6a81b4fe9538..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-priority.xml +++ /dev/null @@ -1,135 +0,0 @@ - - - ioctl VIDIOC_G_PRIORITY, VIDIOC_S_PRIORITY - &manvol; - - - - VIDIOC_G_PRIORITY - VIDIOC_S_PRIORITY - Query or request the access priority associated with a -file descriptor - - - - - - int ioctl - int fd - int request - enum v4l2_priority *argp - - - - - int ioctl - int fd - int request - const enum v4l2_priority *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_G_PRIORITY, VIDIOC_S_PRIORITY - - - - argp - - Pointer to an enum v4l2_priority type. - - - - - - - Description - - To query the current access priority -applications call the VIDIOC_G_PRIORITY ioctl -with a pointer to an enum v4l2_priority variable where the driver stores -the current priority. - - To request an access priority applications store the -desired priority in an enum v4l2_priority variable and call -VIDIOC_S_PRIORITY ioctl with a pointer to this -variable. - - - enum v4l2_priority - - &cs-def; - - - V4L2_PRIORITY_UNSET - 0 - - - - V4L2_PRIORITY_BACKGROUND - 1 - Lowest priority, usually applications running in -background, for example monitoring VBI transmissions. A proxy -application running in user space will be necessary if multiple -applications want to read from a device at this priority. - - - V4L2_PRIORITY_INTERACTIVE - 2 - - - - V4L2_PRIORITY_DEFAULT - 2 - Medium priority, usually applications started and -interactively controlled by the user. For example TV viewers, Teletext -browsers, or just "panel" applications to change the channel or video -controls. This is the default priority unless an application requests -another. - - - V4L2_PRIORITY_RECORD - 3 - Highest priority. Only one file descriptor can have -this priority, it blocks any other fd from changing device properties. -Usually applications which must not be interrupted, like video -recording. - - - -
-
- - - &return-value; - - - - EINVAL - - The requested priority value is invalid. - - - - EBUSY - - Another application already requested higher -priority. - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-g-selection.xml b/Documentation/DocBook/media/v4l/vidioc-g-selection.xml deleted file mode 100644 index 997f4e96f297..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-selection.xml +++ /dev/null @@ -1,233 +0,0 @@ - - - - ioctl VIDIOC_G_SELECTION, VIDIOC_S_SELECTION - &manvol; - - - - VIDIOC_G_SELECTION - VIDIOC_S_SELECTION - Get or set one of the selection rectangles - - - - - - int ioctl - int fd - int request - struct v4l2_selection *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_G_SELECTION, VIDIOC_S_SELECTION - - - - argp - - - - - - - - - Description - - The ioctls are used to query and configure selection rectangles. - -To query the cropping (composing) rectangle set &v4l2-selection; - type field to the respective buffer type. -Do not use the multiplanar buffer types. Use V4L2_BUF_TYPE_VIDEO_CAPTURE -instead of V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE and use -V4L2_BUF_TYPE_VIDEO_OUTPUT instead of -V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE. The next step is -setting the value of &v4l2-selection; target field -to V4L2_SEL_TGT_CROP (V4L2_SEL_TGT_COMPOSE). -Please refer to table or -for additional targets. The flags and reserved - fields of &v4l2-selection; are ignored and they must be filled -with zeros. The driver fills the rest of the structure or -returns &EINVAL; if incorrect buffer type or target was used. If cropping -(composing) is not supported then the active rectangle is not mutable and it is -always equal to the bounds rectangle. Finally, the &v4l2-rect; -r rectangle is filled with the current cropping -(composing) coordinates. The coordinates are expressed in driver-dependent -units. The only exception are rectangles for images in raw formats, whose -coordinates are always expressed in pixels. - -To change the cropping (composing) rectangle set the &v4l2-selection; -type field to the respective buffer type. Do not -use multiplanar buffers. Use V4L2_BUF_TYPE_VIDEO_CAPTURE -instead of V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE. Use -V4L2_BUF_TYPE_VIDEO_OUTPUT instead of -V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE. The next step is -setting the value of &v4l2-selection; target to -V4L2_SEL_TGT_CROP (V4L2_SEL_TGT_COMPOSE). -Please refer to table or -for additional targets. The &v4l2-rect; r rectangle need to be -set to the desired active area. Field &v4l2-selection; reserved - is ignored and must be filled with zeros. The driver may adjust -coordinates of the requested rectangle. An application may -introduce constraints to control rounding behaviour. The &v4l2-selection; -flags field must be set to one of the following: - - - -0 - The driver can adjust the rectangle size freely -and shall choose a crop/compose rectangle as close as possible to the requested -one. - - -V4L2_SEL_FLAG_GE - The driver is not allowed to -shrink the rectangle. The original rectangle must lay inside the adjusted -one. - - -V4L2_SEL_FLAG_LE - The driver is not allowed to -enlarge the rectangle. The adjusted rectangle must lay inside the original -one. - - -V4L2_SEL_FLAG_GE | V4L2_SEL_FLAG_LE - The driver -must choose the size exactly the same as in the requested rectangle. - - - -Please refer to . - - - - The driver may have to adjusts the requested dimensions against hardware -limits and other parts as the pipeline, i.e. the bounds given by the -capture/output window or TV display. The closest possible values of horizontal -and vertical offset and sizes are chosen according to following priority: - - - - Satisfy constraints from &v4l2-selection; flags. - - - Adjust width, height, left, and top to hardware limits and alignments. - - - Keep center of adjusted rectangle as close as possible to the original one. - - - Keep width and height as close as possible to original ones. - - - Keep horizontal and vertical offset as close as possible to original ones. - - - -On success the &v4l2-rect; r field contains -the adjusted rectangle. When the parameters are unsuitable the application may -modify the cropping (composing) or image parameters and repeat the cycle until -satisfactory parameters have been negotiated. If constraints flags have to be -violated at then ERANGE is returned. The error indicates that there -exist no rectangle that satisfies the constraints. - - Selection targets and flags are documented in . - - -
- Size adjustments with constraint flags. - - - - - - Behaviour of rectangle adjustment for different constraint - flags. - - -
-
- - - - struct <structname>v4l2_selection</structname> - - &cs-str; - - - __u32 - type - Type of the buffer (from &v4l2-buf-type;). - - - __u32 - target - Used to select between cropping - and composing rectangles. - - - __u32 - flags - Flags controlling the selection rectangle adjustments, refer to - selection flags. - - - &v4l2-rect; - r - The selection rectangle. - - - __u32 - reserved[9] - Reserved fields for future use. Drivers and applications must zero this array. - - - -
-
-
- - - &return-value; - - - EINVAL - - Given buffer type type or -the selection target target is not supported, -or the flags argument is not valid. - - - - ERANGE - - It is not possible to adjust &v4l2-rect; -r rectangle to satisfy all constraints given in the -flags argument. - - - - EBUSY - - It is not possible to apply change of the selection rectangle -at the moment. Usually because streaming is in progress. - - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-g-sliced-vbi-cap.xml b/Documentation/DocBook/media/v4l/vidioc-g-sliced-vbi-cap.xml deleted file mode 100644 index d05623c55403..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-sliced-vbi-cap.xml +++ /dev/null @@ -1,255 +0,0 @@ - - - ioctl VIDIOC_G_SLICED_VBI_CAP - &manvol; - - - - VIDIOC_G_SLICED_VBI_CAP - Query sliced VBI capabilities - - - - - - int ioctl - int fd - int request - struct v4l2_sliced_vbi_cap *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_G_SLICED_VBI_CAP - - - - argp - - - - - - - - - Description - - To find out which data services are supported by a sliced -VBI capture or output device, applications initialize the -type field of a &v4l2-sliced-vbi-cap;, -clear the reserved array and -call the VIDIOC_G_SLICED_VBI_CAP ioctl. The -driver fills in the remaining fields or returns an &EINVAL; if the -sliced VBI API is unsupported or type -is invalid. - - Note the type field was added, -and the ioctl changed from read-only to write-read, in Linux 2.6.19. - - - struct <structname>v4l2_sliced_vbi_cap</structname> - - - - - - - - - - __u16 - service_set - A set of all data services -supported by the driver. Equal to the union of all elements of the -service_lines array. - - - __u16 - service_lines[2][24] - Each element of this array -contains a set of data services the hardware can look for or insert -into a particular scan line. Data services are defined in . Array indices map to ITU-R -line numbers (see also and ) as follows: - - - - - Element - 525 line systems - 625 line systems - - - - - service_lines[0][1] - 1 - 1 - - - - - service_lines[0][23] - 23 - 23 - - - - - service_lines[1][1] - 264 - 314 - - - - - service_lines[1][23] - 286 - 336 - - - - - - - - The number of VBI lines the -hardware can capture or output per frame, or the number of services it -can identify on a given line may be limited. For example on PAL line -16 the hardware may be able to look for a VPS or Teletext signal, but -not both at the same time. Applications can learn about these limits -using the &VIDIOC-S-FMT; ioctl as described in . - - - - - - - - Drivers must set -service_lines[0][0] and -service_lines[1][0] to zero. - - - __u32 - type - Type of the data stream, see . Should be -V4L2_BUF_TYPE_SLICED_VBI_CAPTURE or -V4L2_BUF_TYPE_SLICED_VBI_OUTPUT. - - - __u32 - reserved[3] - This array is reserved for future -extensions. Applications and drivers must set it to zero. - - - -
- - - - Sliced VBI services - - - - - - - - - - Symbol - Value - Reference - Lines, usually - Payload - - - - - V4L2_SLICED_TELETEXT_B (Teletext -System B) - 0x0001 - , - PAL/SECAM line 7-22, 320-335 (second field 7-22) - Last 42 of the 45 byte Teletext packet, that is -without clock run-in and framing code, lsb first transmitted. - - - V4L2_SLICED_VPS - 0x0400 - - PAL line 16 - Byte number 3 to 15 according to Figure 9 of -ETS 300 231, lsb first transmitted. - - - V4L2_SLICED_CAPTION_525 - 0x1000 - - NTSC line 21, 284 (second field 21) - Two bytes in transmission order, including parity -bit, lsb first transmitted. - - - V4L2_SLICED_WSS_625 - 0x4000 - , - PAL/SECAM line 23 - -Byte 0 1 - msb lsb msb lsb -Bit 7 6 5 4 3 2 1 0 x x 13 12 11 10 9 - - - - V4L2_SLICED_VBI_525 - 0x1000 - Set of services applicable to 525 -line systems. - - - V4L2_SLICED_VBI_625 - 0x4401 - Set of services applicable to 625 -line systems. - - - -
- -
- - - &return-value; - - - - EINVAL - - The value in the type field is -wrong. - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-g-std.xml b/Documentation/DocBook/media/v4l/vidioc-g-std.xml deleted file mode 100644 index 4a898417de28..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-std.xml +++ /dev/null @@ -1,98 +0,0 @@ - - - ioctl VIDIOC_G_STD, VIDIOC_S_STD - &manvol; - - - - VIDIOC_G_STD - VIDIOC_S_STD - Query or select the video standard of the current input - - - - - - int ioctl - int fd - int request - v4l2_std_id -*argp - - - - - int ioctl - int fd - int request - const v4l2_std_id -*argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_G_STD, VIDIOC_S_STD - - - - argp - - - - - - - - - Description - - To query and select the current video standard applications -use the VIDIOC_G_STD and VIDIOC_S_STD ioctls which take a pointer to a -&v4l2-std-id; type as argument. VIDIOC_G_STD can -return a single flag or a set of flags as in &v4l2-standard; field -id. The flags must be unambiguous such -that they appear in only one enumerated v4l2_standard structure. - - VIDIOC_S_STD accepts one or more -flags, being a write-only ioctl it does not return the actual new standard as -VIDIOC_G_STD does. When no flags are given or -the current input does not support the requested standard the driver -returns an &EINVAL;. When the standard set is ambiguous drivers may -return EINVAL or choose any of the requested -standards. If the current input or output does not support standard video timings (e.g. if -&VIDIOC-ENUMINPUT; does not set the V4L2_IN_CAP_STD flag), then -&ENODATA; is returned. - - - - &return-value; - - - - EINVAL - - The VIDIOC_S_STD parameter was unsuitable. - - - - ENODATA - - Standard video timings are not supported for this input or output. - - - - - diff --git a/Documentation/DocBook/media/v4l/vidioc-g-tuner.xml b/Documentation/DocBook/media/v4l/vidioc-g-tuner.xml deleted file mode 100644 index 459b7e561f3c..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-tuner.xml +++ /dev/null @@ -1,594 +0,0 @@ - - - ioctl VIDIOC_G_TUNER, VIDIOC_S_TUNER - &manvol; - - - - VIDIOC_G_TUNER - VIDIOC_S_TUNER - Get or set tuner attributes - - - - - - int ioctl - int fd - int request - struct v4l2_tuner -*argp - - - - - int ioctl - int fd - int request - const struct v4l2_tuner -*argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_G_TUNER, VIDIOC_S_TUNER - - - - argp - - - - - - - - - Description - - To query the attributes of a tuner applications initialize the -index field and zero out the -reserved array of a &v4l2-tuner; and call the -VIDIOC_G_TUNER ioctl with a pointer to this -structure. Drivers fill the rest of the structure or return an -&EINVAL; when the index is out of bounds. To enumerate all tuners -applications shall begin at index zero, incrementing by one until the -driver returns EINVAL. - - Tuners have two writable properties, the audio mode and -the radio frequency. To change the audio mode, applications initialize -the index, -audmode and -reserved fields and call the -VIDIOC_S_TUNER ioctl. This will -not change the current tuner, which is determined -by the current video input. Drivers may choose a different audio mode -if the requested mode is invalid or unsupported. Since this is a -write-only ioctl, it does not return the actually -selected audio mode. - - SDR specific tuner types are -V4L2_TUNER_SDR and V4L2_TUNER_RF. -For SDR devices audmode field must be -initialized to zero. -The term 'tuner' means SDR receiver in this context. - - To change the radio frequency the &VIDIOC-S-FREQUENCY; ioctl -is available. - - - struct <structname>v4l2_tuner</structname> - - - - - - - - - __u32 - index - Identifies the tuner, set by the -application. - - - __u8 - name[32] - Name of the tuner, a -NUL-terminated ASCII string. This information is intended for the -user. - - - __u32 - type - Type of the tuner, see . - - - __u32 - capability - Tuner capability flags, see -. Audio flags indicate the ability -to decode audio subprograms. They will not -change, for example with the current video standard.When -the structure refers to a radio tuner the -V4L2_TUNER_CAP_LANG1, -V4L2_TUNER_CAP_LANG2 and -V4L2_TUNER_CAP_NORM flags can't be used. -If multiple frequency bands are supported, then -capability is the union of all -capability fields of each &v4l2-frequency-band;. - - - - __u32 - rangelow - The lowest tunable frequency in -units of 62.5 kHz, or if the capability -flag V4L2_TUNER_CAP_LOW is set, in units of 62.5 -Hz, or if the capability flag -V4L2_TUNER_CAP_1HZ is set, in units of 1 Hz. -If multiple frequency bands are supported, then -rangelow is the lowest frequency -of all the frequency bands. - - - __u32 - rangehigh - The highest tunable frequency in -units of 62.5 kHz, or if the capability -flag V4L2_TUNER_CAP_LOW is set, in units of 62.5 -Hz, or if the capability flag -V4L2_TUNER_CAP_1HZ is set, in units of 1 Hz. -If multiple frequency bands are supported, then -rangehigh is the highest frequency -of all the frequency bands. - - - __u32 - rxsubchans - Some tuners or audio -decoders can determine the received audio subprograms by analyzing -audio carriers, pilot tones or other indicators. To pass this -information drivers set flags defined in in this field. For -example: - - - - - V4L2_TUNER_SUB_MONO - receiving mono audio - - - - - STEREO | SAP - receiving stereo audio and a secondary audio -program - - - - - MONO | STEREO - receiving mono or stereo audio, the hardware cannot -distinguish - - - - - LANG1 | LANG2 - receiving bilingual audio - - - - - MONO | STEREO | LANG1 | LANG2 - receiving mono, stereo or bilingual -audio - - - - - When the -V4L2_TUNER_CAP_STEREO, -_LANG1, _LANG2 or -_SAP flag is cleared in the -capability field, the corresponding -V4L2_TUNER_SUB_ flag must not be set -here.This field is valid only if this is the tuner of the -current video input, or when the structure refers to a radio -tuner. - - - __u32 - audmode - The selected audio mode, see - for valid values. The audio mode does -not affect audio subprogram detection, and like a control it does not automatically change -unless the requested mode is invalid or unsupported. See for possible results when -the selected and received audio programs do not -match.Currently this is the only field of struct -v4l2_tuner applications can -change. - - - __u32 - signal - The signal strength if known, ranging -from 0 to 65535. Higher values indicate a better signal. - - - __s32 - afc - Automatic frequency control: When the -afc value is negative, the frequency is too -low, when positive too high. - - - __u32 - reserved[4] - Reserved for future extensions. Drivers and -applications must set the array to zero. - - - -
- - - enum v4l2_tuner_type - - &cs-def; - - - V4L2_TUNER_RADIO - 1 - - - - V4L2_TUNER_ANALOG_TV - 2 - - - - V4L2_TUNER_SDR - 4 - - - - V4L2_TUNER_RF - 5 - - - - -
- - - Tuner and Modulator Capability Flags - - &cs-def; - - - V4L2_TUNER_CAP_LOW - 0x0001 - When set, tuning frequencies are expressed in units of -62.5 Hz instead of 62.5 kHz. - - - V4L2_TUNER_CAP_NORM - 0x0002 - This is a multi-standard tuner; the video standard -can or must be switched. (B/G PAL tuners for example are typically not - considered multi-standard because the video standard is automatically - determined from the frequency band.) The set of supported video - standards is available from the &v4l2-input; pointing to this tuner, - see the description of ioctl &VIDIOC-ENUMINPUT; for details. Only - V4L2_TUNER_ANALOG_TV tuners can have this capability. - - - V4L2_TUNER_CAP_HWSEEK_BOUNDED - 0x0004 - If set, then this tuner supports the hardware seek functionality - where the seek stops when it reaches the end of the frequency range. - - - V4L2_TUNER_CAP_HWSEEK_WRAP - 0x0008 - If set, then this tuner supports the hardware seek functionality - where the seek wraps around when it reaches the end of the frequency range. - - - V4L2_TUNER_CAP_STEREO - 0x0010 - Stereo audio reception is supported. - - - V4L2_TUNER_CAP_LANG1 - 0x0040 - Reception of the primary language of a bilingual -audio program is supported. Bilingual audio is a feature of -two-channel systems, transmitting the primary language monaural on the -main audio carrier and a secondary language monaural on a second -carrier. Only - V4L2_TUNER_ANALOG_TV tuners can have this capability. - - - V4L2_TUNER_CAP_LANG2 - 0x0020 - Reception of the secondary language of a bilingual -audio program is supported. Only - V4L2_TUNER_ANALOG_TV tuners can have this capability. - - - V4L2_TUNER_CAP_SAP - 0x0020 - Reception of a secondary audio program is -supported. This is a feature of the BTSC system which accompanies the -NTSC video standard. Two audio carriers are available for mono or -stereo transmissions of a primary language, and an independent third -carrier for a monaural secondary language. Only - V4L2_TUNER_ANALOG_TV tuners can have this capability.Note the -V4L2_TUNER_CAP_LANG2 and -V4L2_TUNER_CAP_SAP flags are synonyms. -V4L2_TUNER_CAP_SAP applies when the tuner -supports the V4L2_STD_NTSC_M video -standard. - - - V4L2_TUNER_CAP_RDS - 0x0080 - RDS capture is supported. This capability is only valid for -radio tuners. - - - V4L2_TUNER_CAP_RDS_BLOCK_IO - 0x0100 - The RDS data is passed as unparsed RDS blocks. - - - V4L2_TUNER_CAP_RDS_CONTROLS - 0x0200 - The RDS data is parsed by the hardware and set via controls. - - - V4L2_TUNER_CAP_FREQ_BANDS - 0x0400 - The &VIDIOC-ENUM-FREQ-BANDS; ioctl can be used to enumerate - the available frequency bands. - - - V4L2_TUNER_CAP_HWSEEK_PROG_LIM - 0x0800 - The range to search when using the hardware seek functionality - is programmable, see &VIDIOC-S-HW-FREQ-SEEK; for details. - - - V4L2_TUNER_CAP_1HZ - 0x1000 - When set, tuning frequencies are expressed in units of 1 Hz instead of 62.5 kHz. - - - -
- - - Tuner Audio Reception Flags - - &cs-def; - - - V4L2_TUNER_SUB_MONO - 0x0001 - The tuner receives a mono audio signal. - - - V4L2_TUNER_SUB_STEREO - 0x0002 - The tuner receives a stereo audio signal. - - - V4L2_TUNER_SUB_LANG1 - 0x0008 - The tuner receives the primary language of a -bilingual audio signal. Drivers must clear this flag when the current -video standard is V4L2_STD_NTSC_M. - - - V4L2_TUNER_SUB_LANG2 - 0x0004 - The tuner receives the secondary language of a -bilingual audio signal (or a second audio program). - - - V4L2_TUNER_SUB_SAP - 0x0004 - The tuner receives a Second Audio Program. Note the -V4L2_TUNER_SUB_LANG2 and -V4L2_TUNER_SUB_SAP flags are synonyms. The -V4L2_TUNER_SUB_SAP flag applies when the -current video standard is V4L2_STD_NTSC_M. - - - V4L2_TUNER_SUB_RDS - 0x0010 - The tuner receives an RDS channel. - - - -
- - - Tuner Audio Modes - - &cs-def; - - - V4L2_TUNER_MODE_MONO - 0 - Play mono audio. When the tuner receives a stereo -signal this a down-mix of the left and right channel. When the tuner -receives a bilingual or SAP signal this mode selects the primary -language. - - - V4L2_TUNER_MODE_STEREO - 1 - Play stereo audio. When the tuner receives -bilingual audio it may play different languages on the left and right -channel or the primary language is played on both channels.Playing -different languages in this mode is -deprecated. New drivers should do this only in -MODE_LANG1_LANG2.When the tuner -receives no stereo signal or does not support stereo reception the -driver shall fall back to MODE_MONO. - - - V4L2_TUNER_MODE_LANG1 - 3 - Play the primary language, mono or stereo. Only -V4L2_TUNER_ANALOG_TV tuners support this -mode. - - - V4L2_TUNER_MODE_LANG2 - 2 - Play the secondary language, mono. When the tuner -receives no bilingual audio or SAP, or their reception is not -supported the driver shall fall back to mono or stereo mode. Only -V4L2_TUNER_ANALOG_TV tuners support this -mode. - - - V4L2_TUNER_MODE_SAP - 2 - Play the Second Audio Program. When the tuner -receives no bilingual audio or SAP, or their reception is not -supported the driver shall fall back to mono or stereo mode. Only -V4L2_TUNER_ANALOG_TV tuners support this mode. -Note the V4L2_TUNER_MODE_LANG2 and -V4L2_TUNER_MODE_SAP are synonyms. - - - V4L2_TUNER_MODE_LANG1_LANG2 - 4 - Play the primary language on the left channel, the -secondary language on the right channel. When the tuner receives no -bilingual audio or SAP, it shall fall back to -MODE_LANG1 or MODE_MONO. -Only V4L2_TUNER_ANALOG_TV tuners support this -mode. - - - -
- - - Tuner Audio Matrix - - - - - - - - - - - Selected -V4L2_TUNER_MODE_ - - - Received V4L2_TUNER_SUB_ - MONO - STEREO - LANG1 - LANG2 = SAP - LANG1_LANG2This -mode has been added in Linux 2.6.17 and may not be supported by older -drivers. - - - - - MONO - Mono - Mono/Mono - Mono - Mono - Mono/Mono - - - MONO | SAP - Mono - Mono/Mono - Mono - SAP - Mono/SAP (preferred) or Mono/Mono - - - STEREO - L+R - L/R - Stereo L/R (preferred) or Mono L+R - Stereo L/R (preferred) or Mono L+R - L/R (preferred) or L+R/L+R - - - STEREO | SAP - L+R - L/R - Stereo L/R (preferred) or Mono L+R - SAP - L+R/SAP (preferred) or L/R or L+R/L+R - - - LANG1 | LANG2 - Language 1 - Lang1/Lang2 (deprecatedPlayback of -both languages in MODE_STEREO is deprecated. In -the future drivers should produce only the primary language in this -mode. Applications should request -MODE_LANG1_LANG2 to record both languages or a -stereo signal.) or -Lang1/Lang1 - Language 1 - Language 2 - Lang1/Lang2 (preferred) or Lang1/Lang1 - - - -
-
- - - &return-value; - - - - EINVAL - - The &v4l2-tuner; index is -out of bounds. - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-log-status.xml b/Documentation/DocBook/media/v4l/vidioc-log-status.xml deleted file mode 100644 index 5ded7d35e27b..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-log-status.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - ioctl VIDIOC_LOG_STATUS - &manvol; - - - - VIDIOC_LOG_STATUS - Log driver status information - - - - - - int ioctl - int fd - int request - - - - - - Description - - As the video/audio devices become more complicated it -becomes harder to debug problems. When this ioctl is called the driver -will output the current device status to the kernel log. This is -particular useful when dealing with problems like no sound, no video -and incorrectly tuned channels. Also many modern devices autodetect -video and audio standards and this ioctl will report what the device -thinks what the standard is. Mismatches may give an indication where -the problem is. - - This ioctl is optional and not all drivers support it. It -was introduced in Linux 2.6.15. - - - - &return-value; - - diff --git a/Documentation/DocBook/media/v4l/vidioc-overlay.xml b/Documentation/DocBook/media/v4l/vidioc-overlay.xml deleted file mode 100644 index 250a7de1877f..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-overlay.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - ioctl VIDIOC_OVERLAY - &manvol; - - - - VIDIOC_OVERLAY - Start or stop video overlay - - - - - - int ioctl - int fd - int request - const int *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_OVERLAY - - - - argp - - - - - - - - - Description - - This ioctl is part of the video - overlay I/O method. Applications call - VIDIOC_OVERLAY to start or stop the - overlay. It takes a pointer to an integer which must be set to - zero by the application to stop overlay, to one to start. - - Drivers do not support &VIDIOC-STREAMON; or -&VIDIOC-STREAMOFF; with V4L2_BUF_TYPE_VIDEO_OVERLAY. - - - - &return-value; - - - - EINVAL - - The overlay parameters have not been set up. See for the necessary steps. - - - - - diff --git a/Documentation/DocBook/media/v4l/vidioc-prepare-buf.xml b/Documentation/DocBook/media/v4l/vidioc-prepare-buf.xml deleted file mode 100644 index 7bde698760e4..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-prepare-buf.xml +++ /dev/null @@ -1,88 +0,0 @@ - - - ioctl VIDIOC_PREPARE_BUF - &manvol; - - - - VIDIOC_PREPARE_BUF - Prepare a buffer for I/O - - - - - - int ioctl - int fd - int request - struct v4l2_buffer *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_PREPARE_BUF - - - - argp - - - - - - - - - Description - - Applications can optionally call the -VIDIOC_PREPARE_BUF ioctl to pass ownership of the buffer -to the driver before actually enqueuing it, using the -VIDIOC_QBUF ioctl, and to prepare it for future I/O. -Such preparations may include cache invalidation or cleaning. Performing them -in advance saves time during the actual I/O. In case such cache operations are -not required, the application can use one of -V4L2_BUF_FLAG_NO_CACHE_INVALIDATE and -V4L2_BUF_FLAG_NO_CACHE_CLEAN flags to skip the respective -step. - - The v4l2_buffer structure is -specified in . - - - - &return-value; - - - - EBUSY - - File I/O is in progress. - - - - EINVAL - - The buffer type is not -supported, or the index is out of bounds, -or no buffers have been allocated yet, or the -userptr or -length are invalid. - - - - - diff --git a/Documentation/DocBook/media/v4l/vidioc-qbuf.xml b/Documentation/DocBook/media/v4l/vidioc-qbuf.xml deleted file mode 100644 index 8b98a0e421fc..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-qbuf.xml +++ /dev/null @@ -1,202 +0,0 @@ - - - ioctl VIDIOC_QBUF, VIDIOC_DQBUF - &manvol; - - - - VIDIOC_QBUF - VIDIOC_DQBUF - Exchange a buffer with the driver - - - - - - int ioctl - int fd - int request - struct v4l2_buffer *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_QBUF, VIDIOC_DQBUF - - - - argp - - - - - - - - - Description - - Applications call the VIDIOC_QBUF ioctl -to enqueue an empty (capturing) or filled (output) buffer in the -driver's incoming queue. The semantics depend on the selected I/O -method. - - To enqueue a buffer applications set the type -field of a &v4l2-buffer; to the same buffer type as was previously used -with &v4l2-format; type and &v4l2-requestbuffers; -type. Applications must also set the -index field. Valid index numbers range from -zero to the number of buffers allocated with &VIDIOC-REQBUFS; -(&v4l2-requestbuffers; count) minus one. The -contents of the struct v4l2_buffer returned -by a &VIDIOC-QUERYBUF; ioctl will do as well. When the buffer is -intended for output (type is -V4L2_BUF_TYPE_VIDEO_OUTPUT, -V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE, or -V4L2_BUF_TYPE_VBI_OUTPUT) applications must also -initialize the bytesused, -field and -timestamp fields, see for details. -Applications must also set flags to 0. -The reserved2 and -reserved fields must be set to 0. When using -the multi-planar API, the -m.planes field must contain a userspace pointer -to a filled-in array of &v4l2-plane; and the length -field must be set to the number of elements in that array. - - - To enqueue a memory mapped -buffer applications set the memory -field to V4L2_MEMORY_MMAP. When -VIDIOC_QBUF is called with a pointer to this -structure the driver sets the -V4L2_BUF_FLAG_MAPPED and -V4L2_BUF_FLAG_QUEUED flags and clears the -V4L2_BUF_FLAG_DONE flag in the -flags field, or it returns an -&EINVAL;. - - To enqueue a user pointer -buffer applications set the memory -field to V4L2_MEMORY_USERPTR, the -m.userptr field to the address of the -buffer and length to its size. When the multi-planar -API is used, m.userptr and -length members of the passed array of &v4l2-plane; -have to be used instead. When VIDIOC_QBUF is called with -a pointer to this structure the driver sets the -V4L2_BUF_FLAG_QUEUED flag and clears the -V4L2_BUF_FLAG_MAPPED and -V4L2_BUF_FLAG_DONE flags in the -flags field, or it returns an error code. -This ioctl locks the memory pages of the buffer in physical memory, -they cannot be swapped out to disk. Buffers remain locked until -dequeued, until the &VIDIOC-STREAMOFF; or &VIDIOC-REQBUFS; ioctl is -called, or until the device is closed. - - To enqueue a DMABUF buffer applications -set the memory field to -V4L2_MEMORY_DMABUF and the m.fd -field to a file descriptor associated with a DMABUF buffer. When the -multi-planar API is used the m.fd fields of the -passed array of &v4l2-plane; have to be used instead. When -VIDIOC_QBUF is called with a pointer to this structure the -driver sets the V4L2_BUF_FLAG_QUEUED flag and clears the -V4L2_BUF_FLAG_MAPPED and -V4L2_BUF_FLAG_DONE flags in the -flags field, or it returns an error code. This -ioctl locks the buffer. Locking a buffer means passing it to a driver for a -hardware access (usually DMA). If an application accesses (reads/writes) a -locked buffer then the result is undefined. Buffers remain locked until -dequeued, until the &VIDIOC-STREAMOFF; or &VIDIOC-REQBUFS; ioctl is called, or -until the device is closed. - - Applications call the VIDIOC_DQBUF -ioctl to dequeue a filled (capturing) or displayed (output) buffer -from the driver's outgoing queue. They just set the -type, memory -and reserved -fields of a &v4l2-buffer; as above, when VIDIOC_DQBUF -is called with a pointer to this structure the driver fills the -remaining fields or returns an error code. The driver may also set -V4L2_BUF_FLAG_ERROR in the flags -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 -dequeued buffer might be corrupted. When using the multi-planar API, the -planes array must be passed in as well. - - By default VIDIOC_DQBUF blocks when no -buffer is in the outgoing queue. When the -O_NONBLOCK flag was given to the &func-open; -function, VIDIOC_DQBUF returns immediately -with an &EAGAIN; when no buffer is available. - - The v4l2_buffer structure is -specified in . - - - - &return-value; - - - - EAGAIN - - Non-blocking I/O has been selected using -O_NONBLOCK and no buffer was in the outgoing -queue. - - - - EINVAL - - The buffer type is not -supported, or the index is out of bounds, -or no buffers have been allocated yet, or the -userptr or -length are invalid. - - - - EIO - - VIDIOC_DQBUF failed due to an -internal error. Can also indicate temporary problems like signal -loss. Note the driver might dequeue an (empty) buffer despite -returning an error, or even stop capturing. Reusing such buffer may be unsafe -though and its details (e.g. index) may not be -returned either. It is recommended that drivers indicate recoverable errors -by setting the V4L2_BUF_FLAG_ERROR and returning 0 instead. -In that case the application should be able to safely reuse the buffer and -continue streaming. - - - - - EPIPE - - VIDIOC_DQBUF returns this on an empty -capture queue for mem2mem codecs if a buffer with the -V4L2_BUF_FLAG_LAST was already dequeued and no new buffers -are expected to become available. - - - - - - diff --git a/Documentation/DocBook/media/v4l/vidioc-query-dv-timings.xml b/Documentation/DocBook/media/v4l/vidioc-query-dv-timings.xml deleted file mode 100644 index d41bf47ee5a2..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-query-dv-timings.xml +++ /dev/null @@ -1,115 +0,0 @@ - - - ioctl VIDIOC_QUERY_DV_TIMINGS - &manvol; - - - - VIDIOC_QUERY_DV_TIMINGS - VIDIOC_SUBDEV_QUERY_DV_TIMINGS - Sense the DV preset received by the current -input - - - - - - int ioctl - int fd - int request - struct v4l2_dv_timings *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_QUERY_DV_TIMINGS, VIDIOC_SUBDEV_QUERY_DV_TIMINGS - - - - argp - - - - - - - - - Description - - The hardware may be able to detect the current DV timings -automatically, similar to sensing the video standard. To do so, applications -call VIDIOC_QUERY_DV_TIMINGS with a pointer to a -&v4l2-dv-timings;. Once the hardware detects the timings, it will fill in the -timings structure. - -Please note that drivers shall not switch timings automatically -if new timings are detected. Instead, drivers should send the -V4L2_EVENT_SOURCE_CHANGE event (if they support this) and expect -that userspace will take action by calling VIDIOC_QUERY_DV_TIMINGS. -The reason is that new timings usually mean different buffer sizes as well, and you -cannot change buffer sizes on the fly. In general, applications that receive the -Source Change event will have to call VIDIOC_QUERY_DV_TIMINGS, -and if the detected timings are valid they will have to stop streaming, set the new -timings, allocate new buffers and start streaming again. - -If the timings could not be detected because there was no signal, then -ENOLINK is returned. If a signal was detected, but -it was unstable and the receiver could not lock to the signal, then -ENOLCK is returned. If the receiver could lock to the signal, -but the format is unsupported (e.g. because the pixelclock is out of range -of the hardware capabilities), then the driver fills in whatever timings it -could find and returns ERANGE. In that case the application -can call &VIDIOC-DV-TIMINGS-CAP; to compare the found timings with the hardware's -capabilities in order to give more precise feedback to the user. - - - - - &return-value; - - - - ENODATA - - Digital video timings are not supported for this input or output. - - - - ENOLINK - - No timings could be detected because no signal was found. - - - - - ENOLCK - - The signal was unstable and the hardware could not lock on to it. - - - - - ERANGE - - Timings were found, but they are out of range of the hardware -capabilities. - - - - - - diff --git a/Documentation/DocBook/media/v4l/vidioc-querybuf.xml b/Documentation/DocBook/media/v4l/vidioc-querybuf.xml deleted file mode 100644 index 50bfcb5e8508..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-querybuf.xml +++ /dev/null @@ -1,106 +0,0 @@ - - - ioctl VIDIOC_QUERYBUF - &manvol; - - - - VIDIOC_QUERYBUF - Query the status of a buffer - - - - - - int ioctl - int fd - int request - struct v4l2_buffer *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_QUERYBUF - - - - argp - - - - - - - - - Description - - This ioctl is part of the streaming - I/O method. It can be used to query the status of a -buffer at any time after buffers have been allocated with the -&VIDIOC-REQBUFS; ioctl. - - Applications set the type field - of a &v4l2-buffer; to the same buffer type as was previously used with -&v4l2-format; type and &v4l2-requestbuffers; -type, and the index - field. Valid index numbers range from zero -to the number of buffers allocated with &VIDIOC-REQBUFS; - (&v4l2-requestbuffers; count) minus one. -The reserved and reserved2 -fields must be set to 0. -When using the multi-planar API, the -m.planes field must contain a userspace pointer to an -array of &v4l2-plane; and the length field has -to be set to the number of elements in that array. -After calling VIDIOC_QUERYBUF with a pointer to - this structure drivers return an error code or fill the rest of -the structure. - - In the flags field the -V4L2_BUF_FLAG_MAPPED, -V4L2_BUF_FLAG_PREPARED, -V4L2_BUF_FLAG_QUEUED and -V4L2_BUF_FLAG_DONE flags will be valid. The -memory field will be set to the current -I/O method. For the single-planar API, the m.offset -contains the offset of the buffer from the start of the device memory, -the length field its size. For the multi-planar API, -fields m.mem_offset and -length in the m.planes -array elements will be used instead and the length -field of &v4l2-buffer; is set to the number of filled-in array elements. -The driver may or may not set the remaining fields and flags, they are -meaningless in this context. - - The v4l2_buffer structure is - specified in . - - - - &return-value; - - - - EINVAL - - The buffer type is not -supported, or the index is out of bounds. - - - - - diff --git a/Documentation/DocBook/media/v4l/vidioc-querycap.xml b/Documentation/DocBook/media/v4l/vidioc-querycap.xml deleted file mode 100644 index cd82148dedd7..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-querycap.xml +++ /dev/null @@ -1,350 +0,0 @@ - - - ioctl VIDIOC_QUERYCAP - &manvol; - - - - VIDIOC_QUERYCAP - Query device capabilities - - - - - - int ioctl - int fd - int request - struct v4l2_capability *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_QUERYCAP - - - - argp - - - - - - - - - Description - - All V4L2 devices support the -VIDIOC_QUERYCAP ioctl. It is used to identify -kernel devices compatible with this specification and to obtain -information about driver and hardware capabilities. The ioctl takes a -pointer to a &v4l2-capability; which is filled by the driver. When the -driver is not compatible with this specification the ioctl returns an -&EINVAL;. - - - struct <structname>v4l2_capability</structname> - - &cs-str; - - - __u8 - driver[16] - Name of the driver, a unique NUL-terminated -ASCII string. For example: "bttv". 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. -Storing strings in fixed sized arrays is bad -practice but unavoidable here. Drivers and applications should take -precautions to never read or write beyond the end of the array and to -make sure the strings are properly NUL-terminated. - - - __u8 - card[32] - Name of the device, a NUL-terminated UTF-8 string. -For example: "Yoyodyne TV/FM". One driver may support different brands -or models of video hardware. This information is intended for users, -for example in a menu of available devices. Since multiple TV cards of -the same brand may be installed which are supported by the same -driver, this name should be combined with the character device file -name (⪚ /dev/video2) or the -bus_info string to avoid -ambiguities. - - - __u8 - bus_info[32] - Location of the device in the system, a -NUL-terminated ASCII string. For example: "PCI:0000:05:06.0". This -information is intended for users, to distinguish multiple -identical devices. If no such information is available the field must -simply count the devices controlled by the driver ("platform:vivi-000"). -The bus_info must start with "PCI:" for PCI boards, "PCIe:" for PCI Express boards, -"usb-" for USB devices, "I2C:" for i2c devices, "ISA:" for ISA devices, -"parport" for parallel port devices and "platform:" for platform devices. - - - __u32 - version - Version number of the driver. -Starting with kernel 3.1, the version reported is provided by the -V4L2 subsystem following the kernel numbering scheme. However, it -may not always return the same version as the kernel if, for example, -a stable or distribution-modified kernel uses the V4L2 stack from a -newer kernel. -The version number is formatted using the -KERNEL_VERSION() macro: - - - - -#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) - -__u32 version = KERNEL_VERSION(0, 8, 1); - -printf ("Version: %u.%u.%u\n", - (version >> 16) & 0xFF, - (version >> 8) & 0xFF, - version & 0xFF); - - - - __u32 - capabilities - Available capabilities of the physical device as a whole, see . The same physical device can export - multiple devices in /dev (e.g. /dev/videoX, /dev/vbiY and /dev/radioZ). - The capabilities field should contain a union - of all capabilities available around the several V4L2 devices exported - to userspace. - For all those devices the capabilities field - returns the same set of capabilities. This allows applications to open - just one of the devices (typically the video device) and discover whether - video, vbi and/or radio are also supported. - - - - __u32 - device_caps - Device capabilities of the opened device, see . Should contain the available capabilities - of that specific device node. So, for example, device_caps - of a radio device will only contain radio related capabilities and - no video or vbi capabilities. This field is only set if the capabilities - field contains the V4L2_CAP_DEVICE_CAPS capability. - Only the capabilities field can have the - V4L2_CAP_DEVICE_CAPS capability, device_caps - will never set V4L2_CAP_DEVICE_CAPS. - - - - __u32 - reserved[3] - Reserved for future extensions. Drivers must set -this array to zero. - - - -
- - - Device Capabilities Flags - - &cs-def; - - - V4L2_CAP_VIDEO_CAPTURE - 0x00000001 - The device supports the single-planar API through the Video Capture interface. - - - V4L2_CAP_VIDEO_CAPTURE_MPLANE - 0x00001000 - The device supports the - multi-planar API through the - Video Capture interface. - - - V4L2_CAP_VIDEO_OUTPUT - 0x00000002 - The device supports the single-planar API through the Video Output interface. - - - V4L2_CAP_VIDEO_OUTPUT_MPLANE - 0x00002000 - The device supports the - multi-planar API through the - Video Output interface. - - - V4L2_CAP_VIDEO_M2M - 0x00004000 - The device supports the single-planar API through the - Video Memory-To-Memory interface. - - - V4L2_CAP_VIDEO_M2M_MPLANE - 0x00008000 - The device supports the - multi-planar API through the - Video Memory-To-Memory interface. - - - V4L2_CAP_VIDEO_OVERLAY - 0x00000004 - The device supports the Video Overlay interface. A video overlay device -typically stores captured images directly in the video memory of a -graphics card, with hardware clipping and scaling. - - - V4L2_CAP_VBI_CAPTURE - 0x00000010 - The device supports the Raw -VBI Capture interface, providing Teletext and Closed Caption -data. - - - V4L2_CAP_VBI_OUTPUT - 0x00000020 - The device supports the Raw VBI Output interface. - - - V4L2_CAP_SLICED_VBI_CAPTURE - 0x00000040 - The device supports the Sliced VBI Capture interface. - - - V4L2_CAP_SLICED_VBI_OUTPUT - 0x00000080 - The device supports the Sliced VBI Output interface. - - - V4L2_CAP_RDS_CAPTURE - 0x00000100 - The device supports the RDS capture interface. - - - V4L2_CAP_VIDEO_OUTPUT_OVERLAY - 0x00000200 - The device supports the Video -Output Overlay (OSD) interface. Unlike the Video -Overlay interface, this is a secondary function of video -output devices and overlays an image onto an outgoing video signal. -When the driver sets this flag, it must clear the -V4L2_CAP_VIDEO_OVERLAY flag and vice -versa.The &v4l2-framebuffer; lacks an -&v4l2-buf-type; field, therefore the type of overlay is implied by the -driver capabilities. - - - V4L2_CAP_HW_FREQ_SEEK - 0x00000400 - The device supports the &VIDIOC-S-HW-FREQ-SEEK; ioctl for -hardware frequency seeking. - - - V4L2_CAP_RDS_OUTPUT - 0x00000800 - The device supports the RDS output interface. - - - V4L2_CAP_TUNER - 0x00010000 - The device has some sort of tuner to -receive RF-modulated video signals. For more information about -tuner programming see -. - - - V4L2_CAP_AUDIO - 0x00020000 - The device has audio inputs or outputs. It may or -may not support audio recording or playback, in PCM or compressed -formats. PCM audio support must be implemented as ALSA or OSS -interface. For more information on audio inputs and outputs see . - - - V4L2_CAP_RADIO - 0x00040000 - This is a radio receiver. - - - V4L2_CAP_MODULATOR - 0x00080000 - The device has some sort of modulator to -emit RF-modulated video/audio signals. For more information about -modulator programming see -. - - - V4L2_CAP_SDR_CAPTURE - 0x00100000 - The device supports the -SDR Capture interface. - - - V4L2_CAP_EXT_PIX_FORMAT - 0x00200000 - The device supports the &v4l2-pix-format; extended -fields. - - - V4L2_CAP_SDR_OUTPUT - 0x00400000 - The device supports the -SDR Output interface. - - - V4L2_CAP_READWRITE - 0x01000000 - The device supports the read() and/or write() -I/O methods. - - - V4L2_CAP_ASYNCIO - 0x02000000 - The device supports the asynchronous I/O methods. - - - V4L2_CAP_STREAMING - 0x04000000 - The device supports the streaming I/O method. - - - V4L2_CAP_DEVICE_CAPS - 0x80000000 - The driver fills the device_caps - field. This capability can only appear in the capabilities - field and never in the device_caps field. - - - -
-
- - - &return-value; - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-queryctrl.xml b/Documentation/DocBook/media/v4l/vidioc-queryctrl.xml deleted file mode 100644 index 55b7582cf314..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-queryctrl.xml +++ /dev/null @@ -1,661 +0,0 @@ - - - ioctl VIDIOC_QUERYCTRL, VIDIOC_QUERY_EXT_CTRL, VIDIOC_QUERYMENU - &manvol; - - - - VIDIOC_QUERYCTRL - VIDIOC_QUERY_EXT_CTRL - VIDIOC_QUERYMENU - Enumerate controls and menu control items - - - - - - int ioctl - int fd - int request - struct v4l2_queryctrl *argp - - - - - int ioctl - int fd - int request - struct v4l2_query_ext_ctrl *argp - - - - - int ioctl - int fd - int request - struct v4l2_querymenu *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_QUERYCTRL, VIDIOC_QUERY_EXT_CTRL, VIDIOC_QUERYMENU - - - - argp - - - - - - - - - Description - - To query the attributes of a control applications set the -id field of a &v4l2-queryctrl; and call the -VIDIOC_QUERYCTRL ioctl with a pointer to this -structure. The driver fills the rest of the structure or returns an -&EINVAL; when the id is invalid. - - It is possible to enumerate controls by calling -VIDIOC_QUERYCTRL with successive -id values starting from -V4L2_CID_BASE up to and exclusive -V4L2_CID_LASTP1. Drivers may return -EINVAL if a control in this range is not -supported. Further applications can enumerate private controls, which -are not defined in this specification, by starting at -V4L2_CID_PRIVATE_BASE and incrementing -id until the driver returns -EINVAL. - - In both cases, when the driver sets the -V4L2_CTRL_FLAG_DISABLED flag in the -flags field this control is permanently -disabled and should be ignored by the application. - V4L2_CTRL_FLAG_DISABLED was -intended for two purposes: Drivers can skip predefined controls not -supported by the hardware (although returning EINVAL would do as -well), or disable predefined and private controls after hardware -detection without the trouble of reordering control arrays and indices -(EINVAL cannot be used to skip private controls because it would -prematurely end the enumeration). - - When the application ORs id with -V4L2_CTRL_FLAG_NEXT_CTRL the driver returns the -next supported non-compound control, or EINVAL -if there is none. In addition, the V4L2_CTRL_FLAG_NEXT_COMPOUND -flag can be specified to enumerate all compound controls (i.e. controls -with type ≥ V4L2_CTRL_COMPOUND_TYPES and/or array -control, in other words controls that contain more than one value). -Specify both V4L2_CTRL_FLAG_NEXT_CTRL and -V4L2_CTRL_FLAG_NEXT_COMPOUND in order to enumerate -all controls, compound or not. Drivers which do not support these flags yet -always return EINVAL. - - The VIDIOC_QUERY_EXT_CTRL ioctl was -introduced in order to better support controls that can use compound -types, and to expose additional control information that cannot be -returned in &v4l2-queryctrl; since that structure is full. - - VIDIOC_QUERY_EXT_CTRL is used in the -same way as VIDIOC_QUERYCTRL, except that the -reserved array must be zeroed as well. - - Additional information is required for menu controls: the -names of the menu items. To query them applications set the -id and index -fields of &v4l2-querymenu; and call the -VIDIOC_QUERYMENU ioctl with a pointer to this -structure. The driver fills the rest of the structure or returns an -&EINVAL; when the id or -index is invalid. Menu items are enumerated -by calling VIDIOC_QUERYMENU with successive -index values from &v4l2-queryctrl; -minimum to -maximum, inclusive. Note that it is possible -for VIDIOC_QUERYMENU to return an &EINVAL; for some -indices between minimum and maximum. -In that case that particular menu item is not supported by this driver. Also note that -the minimum value is not necessarily 0. - - See also the examples in . - - - struct <structname>v4l2_queryctrl</structname> - - &cs-str; - - - __u32 - id - Identifies the control, set by the application. See - for predefined IDs. When the ID is ORed -with V4L2_CTRL_FLAG_NEXT_CTRL the driver clears the flag and returns -the first control with a higher ID. Drivers which do not support this -flag yet always return an &EINVAL;. - - - __u32 - type - Type of control, see . - - - __u8 - name[32] - Name of the control, a NUL-terminated ASCII -string. This information is intended for the user. - - - __s32 - minimum - Minimum value, inclusive. This field gives a lower -bound for the control. See &v4l2-ctrl-type; how the minimum value is to -be used for each possible control type. Note that this a signed 32-bit value. - - - __s32 - maximum - Maximum value, inclusive. This field gives an upper -bound for the control. See &v4l2-ctrl-type; how the maximum value is to -be used for each possible control type. Note that this a signed 32-bit value. - - - __s32 - step - This field gives a step size for the control. -See &v4l2-ctrl-type; how the step value is to be used for each possible -control type. Note that this an unsigned 32-bit value. -Generally drivers should not scale hardware -control values. It may be necessary for example when the -name or id imply -a particular unit and the hardware actually accepts only multiples of -said unit. If so, drivers must take care values are properly rounded -when scaling, such that errors will not accumulate on repeated -read-write cycles.This field gives the smallest change of -an integer control actually affecting hardware. Often the information -is needed when the user can change controls by keyboard or GUI -buttons, rather than a slider. When for example a hardware register -accepts values 0-511 and the driver reports 0-65535, step should be -128.Note that although signed, the step value is supposed to -be always positive. - - - __s32 - default_value - The default value of a -V4L2_CTRL_TYPE_INTEGER, -_BOOLEAN, _BITMASK, -_MENU or _INTEGER_MENU control. -Not valid for other types of controls. -Note that drivers reset controls to their default value only when the -driver is first loaded, never afterwards. - - - __u32 - flags - Control flags, see . - - - __u32 - reserved[2] - Reserved for future extensions. Drivers must set -the array to zero. - - - -
- - - struct <structname>v4l2_query_ext_ctrl</structname> - - &cs-str; - - - __u32 - id - Identifies the control, set by the application. See - for predefined IDs. When the ID is ORed -with V4L2_CTRL_FLAG_NEXT_CTRL the driver clears the -flag and returns the first non-compound control with a higher ID. When the -ID is ORed with V4L2_CTRL_FLAG_NEXT_COMPOUND the driver -clears the flag and returns the first compound control with a higher ID. -Set both to get the first control (compound or not) with a higher ID. - - - __u32 - type - Type of control, see . - - - char - name[32] - Name of the control, a NUL-terminated ASCII -string. This information is intended for the user. - - - __s64 - minimum - Minimum value, inclusive. This field gives a lower -bound for the control. See &v4l2-ctrl-type; how the minimum value is to -be used for each possible control type. Note that this a signed 64-bit value. - - - __s64 - maximum - Maximum value, inclusive. This field gives an upper -bound for the control. See &v4l2-ctrl-type; how the maximum value is to -be used for each possible control type. Note that this a signed 64-bit value. - - - __u64 - step - This field gives a step size for the control. -See &v4l2-ctrl-type; how the step value is to be used for each possible -control type. Note that this an unsigned 64-bit value. -Generally drivers should not scale hardware -control values. It may be necessary for example when the -name or id imply -a particular unit and the hardware actually accepts only multiples of -said unit. If so, drivers must take care values are properly rounded -when scaling, such that errors will not accumulate on repeated -read-write cycles.This field gives the smallest change of -an integer control actually affecting hardware. Often the information -is needed when the user can change controls by keyboard or GUI -buttons, rather than a slider. When for example a hardware register -accepts values 0-511 and the driver reports 0-65535, step should be -128. - - - __s64 - default_value - The default value of a -V4L2_CTRL_TYPE_INTEGER, _INTEGER64, -_BOOLEAN, _BITMASK, -_MENU, _INTEGER_MENU, -_U8 or _U16 control. -Not valid for other types of controls. -Note that drivers reset controls to their default value only when the -driver is first loaded, never afterwards. - - - - __u32 - flags - Control flags, see . - - - __u32 - elem_size - The size in bytes of a single element of the array. -Given a char pointer p to a 3-dimensional array you can find the -position of cell (z, y, x) as follows: -p + ((z * dims[1] + y) * dims[0] + x) * elem_size. elem_size -is always valid, also when the control isn't an array. For string controls -elem_size is equal to maximum + 1. - - - - __u32 - elems - The number of elements in the N-dimensional array. If this control -is not an array, then elems is 1. The elems -field can never be 0. - - - __u32 - nr_of_dims - The number of dimension in the N-dimensional array. If this control -is not an array, then this field is 0. - - - __u32 - dims[V4L2_CTRL_MAX_DIMS] - The size of each dimension. The first nr_of_dims -elements of this array must be non-zero, all remaining elements must be zero. - - - __u32 - reserved[32] - Reserved for future extensions. Applications and drivers -must set the array to zero. - - - -
- - - struct <structname>v4l2_querymenu</structname> - - &cs-str; - - - __u32 - - id - Identifies the control, set by the application -from the respective &v4l2-queryctrl; -id. - - - __u32 - - index - Index of the menu item, starting at zero, set by - the application. - - - union - - - - - - - __u8 - name[32] - Name of the menu item, a NUL-terminated ASCII -string. This information is intended for the user. This field is valid -for V4L2_CTRL_FLAG_MENU type controls. - - - - __s64 - value - - Value of the integer menu item. This field is valid for - V4L2_CTRL_FLAG_INTEGER_MENU type - controls. - - - - __u32 - - reserved - Reserved for future extensions. Drivers must set -the array to zero. - - - -
- - - enum v4l2_ctrl_type - - - - - - - - - Type - minimum - step - maximum - Description - - - - - V4L2_CTRL_TYPE_INTEGER - any - any - any - An integer-valued control ranging from minimum to -maximum inclusive. The step value indicates the increment between -values. - - - V4L2_CTRL_TYPE_BOOLEAN - 0 - 1 - 1 - A boolean-valued control. Zero corresponds to -"disabled", and one means "enabled". - - - V4L2_CTRL_TYPE_MENU - ≥ 0 - 1 - N-1 - The control has a menu of N choices. The names of -the menu items can be enumerated with the -VIDIOC_QUERYMENU ioctl. - - - V4L2_CTRL_TYPE_INTEGER_MENU - ≥ 0 - 1 - N-1 - - The control has a menu of N choices. The values of the - menu items can be enumerated with the - VIDIOC_QUERYMENU ioctl. This is - similar to V4L2_CTRL_TYPE_MENU - except that instead of strings, the menu items are - signed 64-bit integers. - - - - V4L2_CTRL_TYPE_BITMASK - 0 - n/a - any - A bitmask field. The maximum value is the set of bits that can -be used, all other bits are to be 0. The maximum value is interpreted as a __u32, -allowing the use of bit 31 in the bitmask. - - - V4L2_CTRL_TYPE_BUTTON - 0 - 0 - 0 - A control which performs an action when set. -Drivers must ignore the value passed with -VIDIOC_S_CTRL and return an &EINVAL; on a -VIDIOC_G_CTRL attempt. - - - V4L2_CTRL_TYPE_INTEGER64 - any - any - any - A 64-bit integer valued control. Minimum, maximum -and step size cannot be queried using VIDIOC_QUERYCTRL. -Only VIDIOC_QUERY_EXT_CTRL can retrieve the 64-bit -min/max/step values, they should be interpreted as n/a when using -VIDIOC_QUERYCTRL. - - - V4L2_CTRL_TYPE_STRING - ≥ 0 - ≥ 1 - ≥ 0 - The minimum and maximum string lengths. The step size -means that the string must be (minimum + N * step) characters long for -N ≥ 0. These lengths do not include the terminating zero, so in order to -pass a string of length 8 to &VIDIOC-S-EXT-CTRLS; you need to set the -size field of &v4l2-ext-control; to 9. For &VIDIOC-G-EXT-CTRLS; you can -set the size field to maximum + 1. -Which character encoding is used will depend on the string control itself and -should be part of the control documentation. - - - V4L2_CTRL_TYPE_CTRL_CLASS - n/a - n/a - n/a - This is not a control. When -VIDIOC_QUERYCTRL is called with a control ID -equal to a control class code (see ) + 1, the -ioctl returns the name of the control class and this control type. -Older drivers which do not support this feature return an -&EINVAL;. - - - V4L2_CTRL_TYPE_U8 - any - any - any - An unsigned 8-bit valued control ranging from minimum to -maximum inclusive. The step value indicates the increment between -values. - - - - V4L2_CTRL_TYPE_U16 - any - any - any - An unsigned 16-bit valued control ranging from minimum to -maximum inclusive. The step value indicates the increment between -values. - - - - V4L2_CTRL_TYPE_U32 - any - any - any - An unsigned 32-bit valued control ranging from minimum to -maximum inclusive. The step value indicates the increment between -values. - - - - -
- - - Control Flags - - &cs-def; - - - V4L2_CTRL_FLAG_DISABLED - 0x0001 - This control is permanently disabled and should be -ignored by the application. Any attempt to change the control will -result in an &EINVAL;. - - - V4L2_CTRL_FLAG_GRABBED - 0x0002 - This control is temporarily unchangeable, for -example because another application took over control of the -respective resource. Such controls may be displayed specially in a -user interface. Attempts to change the control may result in an -&EBUSY;. - - - V4L2_CTRL_FLAG_READ_ONLY - 0x0004 - This control is permanently readable only. Any -attempt to change the control will result in an &EINVAL;. - - - V4L2_CTRL_FLAG_UPDATE - 0x0008 - A hint that changing this control may affect the -value of other controls within the same control class. Applications -should update their user interface accordingly. - - - V4L2_CTRL_FLAG_INACTIVE - 0x0010 - This control is not applicable to the current -configuration and should be displayed accordingly in a user interface. -For example the flag may be set on a MPEG audio level 2 bitrate -control when MPEG audio encoding level 1 was selected with another -control. - - - V4L2_CTRL_FLAG_SLIDER - 0x0020 - A hint that this control is best represented as a -slider-like element in a user interface. - - - V4L2_CTRL_FLAG_WRITE_ONLY - 0x0040 - This control is permanently writable only. Any -attempt to read the control will result in an &EACCES; error code. This -flag is typically present for relative controls or action controls where -writing a value will cause the device to carry out a given action -(⪚ motor control) but no meaningful value can be returned. - - - V4L2_CTRL_FLAG_VOLATILE - 0x0080 - This control is volatile, which means that the value of the control -changes continuously. A typical example would be the current gain value if the device -is in auto-gain mode. In such a case the hardware calculates the gain value based on -the lighting conditions which can change over time. Note that setting a new value for -a volatile control will have no effect and no V4L2_EVENT_CTRL_CH_VALUE -will be sent, unless the V4L2_CTRL_FLAG_EXECUTE_ON_WRITE flag -(see below) is also set. Otherwise the new value will just be ignored. - - - V4L2_CTRL_FLAG_HAS_PAYLOAD - 0x0100 - This control has a pointer type, so its value has to be accessed -using one of the pointer fields of &v4l2-ext-control;. This flag is set for controls -that are an array, string, or have a compound type. In all cases you have to set a -pointer to memory containing the payload of the control. - - - V4L2_CTRL_FLAG_EXECUTE_ON_WRITE - 0x0200 - The value provided to the control will be propagated to the driver -even if it remains constant. This is required when the control represents an action -on the hardware. For example: clearing an error flag or triggering the flash. All the -controls of the type V4L2_CTRL_TYPE_BUTTON have this flag set. - - - -
-
- - - &return-value; - - - - EINVAL - - The &v4l2-queryctrl; id -is invalid. The &v4l2-querymenu; id is -invalid or index is out of range (less than -minimum or greater than maximum) -or this particular menu item is not supported by the driver. - - - - EACCES - - An attempt was made to read a write-only control. - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-querystd.xml b/Documentation/DocBook/media/v4l/vidioc-querystd.xml deleted file mode 100644 index 3ceae35fab03..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-querystd.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - ioctl VIDIOC_QUERYSTD - &manvol; - - - - VIDIOC_QUERYSTD - Sense the video standard received by the current -input - - - - - - int ioctl - int fd - int request - v4l2_std_id *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_QUERYSTD - - - - argp - - - - - - - - - Description - - The hardware may be able to detect the current video -standard automatically. To do so, applications call -VIDIOC_QUERYSTD with a pointer to a &v4l2-std-id; type. The -driver stores here a set of candidates, this can be a single flag or a -set of supported standards if for example the hardware can only -distinguish between 50 and 60 Hz systems. If no signal was detected, -then the driver will return V4L2_STD_UNKNOWN. When detection is not -possible or fails, the set must contain all standards supported by the -current video input or output. - -Please note that drivers shall not switch the video standard -automatically if a new video standard is detected. Instead, drivers should send the -V4L2_EVENT_SOURCE_CHANGE event (if they support this) and expect -that userspace will take action by calling VIDIOC_QUERYSTD. -The reason is that a new video standard can mean different buffer sizes as well, and you -cannot change buffer sizes on the fly. In general, applications that receive the -Source Change event will have to call VIDIOC_QUERYSTD, -and if the detected video standard is valid they will have to stop streaming, set the new -standard, allocate new buffers and start streaming again. - - - - - &return-value; - - - ENODATA - - Standard video timings are not supported for this input or output. - - - - - diff --git a/Documentation/DocBook/media/v4l/vidioc-reqbufs.xml b/Documentation/DocBook/media/v4l/vidioc-reqbufs.xml deleted file mode 100644 index 6f529e100ea4..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-reqbufs.xml +++ /dev/null @@ -1,137 +0,0 @@ - - - ioctl VIDIOC_REQBUFS - &manvol; - - - - VIDIOC_REQBUFS - Initiate Memory Mapping, User Pointer or DMA Buffer I/O - - - - - - int ioctl - int fd - int request - struct v4l2_requestbuffers *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_REQBUFS - - - - argp - - - - - - - - - Description - -This ioctl is used to initiate memory mapped, -user pointer or DMABUF based I/O. Memory mapped buffers are located in -device memory and must be allocated with this ioctl before they can be mapped -into the application's address space. User buffers are allocated by -applications themselves, and this ioctl is merely used to switch the driver -into user pointer I/O mode and to setup some internal structures. -Similarly, DMABUF buffers are allocated by applications through a device -driver, and this ioctl only configures the driver into DMABUF I/O mode without -performing any direct allocation. - - To allocate device buffers applications initialize all fields of the -v4l2_requestbuffers structure. They set the -type field to the respective stream or buffer type, -the count field to the desired number of buffers, -memory must be set to the requested I/O method and -the reserved array must be zeroed. When the ioctl is -called with a pointer to this structure the driver will attempt to allocate the -requested number of buffers and it stores the actual number allocated in the -count field. It can be smaller than the number -requested, even zero, when the driver runs out of free memory. A larger number -is also possible when the driver requires more buffers to function correctly. -For example video output requires at least two buffers, one displayed and one -filled by the application. - When the I/O method is not supported the ioctl -returns an &EINVAL;. - - Applications can call VIDIOC_REQBUFS -again to change the number of buffers, however this cannot succeed -when any buffers are still mapped. A count -value of zero frees all buffers, after aborting or finishing any DMA -in progress, an implicit &VIDIOC-STREAMOFF;. - - - struct <structname>v4l2_requestbuffers</structname> - - &cs-str; - - - __u32 - count - The number of buffers requested or granted. - - - __u32 - type - Type of the stream or buffers, this is the same -as the &v4l2-format; type field. See for valid values. - - - __u32 - memory - Applications set this field to -V4L2_MEMORY_MMAP, -V4L2_MEMORY_DMABUF or -V4L2_MEMORY_USERPTR. See . - - - __u32 - reserved[2] - A place holder for future extensions. Drivers and applications -must set the array to zero. - - - -
-
- - - &return-value; - - - - EINVAL - - The buffer type (type field) or the -requested I/O method (memory) is not -supported. - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-s-hw-freq-seek.xml b/Documentation/DocBook/media/v4l/vidioc-s-hw-freq-seek.xml deleted file mode 100644 index a5fc4c4880f3..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-s-hw-freq-seek.xml +++ /dev/null @@ -1,188 +0,0 @@ - - - ioctl VIDIOC_S_HW_FREQ_SEEK - &manvol; - - - - VIDIOC_S_HW_FREQ_SEEK - Perform a hardware frequency seek - - - - - - int ioctl - int fd - int request - struct v4l2_hw_freq_seek -*argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_S_HW_FREQ_SEEK - - - - argp - - - - - - - - - Description - - Start a hardware frequency seek from the current frequency. -To do this applications initialize the tuner, -type, seek_upward, -wrap_around, spacing, -rangelow and rangehigh -fields, and zero out the reserved array of a -&v4l2-hw-freq-seek; and call the VIDIOC_S_HW_FREQ_SEEK -ioctl with a pointer to this structure. - - The rangelow and -rangehigh fields can be set to a non-zero value to -tell the driver to search a specific band. If the &v4l2-tuner; -capability field has the -V4L2_TUNER_CAP_HWSEEK_PROG_LIM flag set, these values -must fall within one of the bands returned by &VIDIOC-ENUM-FREQ-BANDS;. If -the V4L2_TUNER_CAP_HWSEEK_PROG_LIM flag is not set, -then these values must exactly match those of one of the bands returned by -&VIDIOC-ENUM-FREQ-BANDS;. If the current frequency of the tuner does not fall -within the selected band it will be clamped to fit in the band before the -seek is started. - - If an error is returned, then the original frequency will - be restored. - - This ioctl is supported if the V4L2_CAP_HW_FREQ_SEEK capability is set. - - If this ioctl is called from a non-blocking filehandle, then &EAGAIN; is - returned and no seek takes place. - - - struct <structname>v4l2_hw_freq_seek</structname> - - &cs-str; - - - __u32 - tuner - The tuner index number. This is the -same value as in the &v4l2-input; tuner -field and the &v4l2-tuner; index field. - - - __u32 - type - The tuner type. This is the same value as in the -&v4l2-tuner; type field. See - - - __u32 - seek_upward - If non-zero, seek upward from the current frequency, else seek downward. - - - __u32 - wrap_around - If non-zero, wrap around when at the end of the frequency range, else stop seeking. - The &v4l2-tuner; capability field will tell you what the - hardware supports. - - - - __u32 - spacing - If non-zero, defines the hardware seek resolution in Hz. The driver selects the nearest value that is supported by the device. If spacing is zero a reasonable default value is used. - - - __u32 - rangelow - If non-zero, the lowest tunable frequency of the band to -search in units of 62.5 kHz, or if the &v4l2-tuner; -capability field has the -V4L2_TUNER_CAP_LOW flag set, in units of 62.5 Hz or if the &v4l2-tuner; -capability field has the -V4L2_TUNER_CAP_1HZ flag set, in units of 1 Hz. -If rangelow is zero a reasonable default value -is used. - - - __u32 - rangehigh - If non-zero, the highest tunable frequency of the band to -search in units of 62.5 kHz, or if the &v4l2-tuner; -capability field has the -V4L2_TUNER_CAP_LOW flag set, in units of 62.5 Hz or if the &v4l2-tuner; -capability field has the -V4L2_TUNER_CAP_1HZ flag set, in units of 1 Hz. -If rangehigh is zero a reasonable default value -is used. - - - __u32 - reserved[5] - Reserved for future extensions. Applications - must set the array to zero. - - - -
-
- - - &return-value; - - - - EINVAL - - The tuner index is out of -bounds, the wrap_around value is not supported or -one of the values in the type, -rangelow or rangehigh -fields is wrong. - - - - EAGAIN - - Attempted to call VIDIOC_S_HW_FREQ_SEEK - with the filehandle in non-blocking mode. - - - - ENODATA - - The hardware seek found no channels. - - - - EBUSY - - Another hardware seek is already in progress. - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-streamon.xml b/Documentation/DocBook/media/v4l/vidioc-streamon.xml deleted file mode 100644 index 89fd7ce964f9..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-streamon.xml +++ /dev/null @@ -1,136 +0,0 @@ - - - ioctl VIDIOC_STREAMON, VIDIOC_STREAMOFF - &manvol; - - - - VIDIOC_STREAMON - VIDIOC_STREAMOFF - Start or stop streaming I/O - - - - - - int ioctl - int fd - int request - const int *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_STREAMON, VIDIOC_STREAMOFF - - - - argp - - - - - - - - - Description - - The VIDIOC_STREAMON and -VIDIOC_STREAMOFF ioctl start and stop the capture -or output process during streaming (memory -mapping, user pointer or -DMABUF) I/O. - - Capture hardware is disabled and no input -buffers are filled (if there are any empty buffers in the incoming -queue) until VIDIOC_STREAMON has been called. -Output hardware is disabled and no video signal is -produced until VIDIOC_STREAMON has been called. -The ioctl will succeed when at least one output buffer is in the -incoming queue. - - Memory-to-memory devices will not start until -VIDIOC_STREAMON has been called for both the capture -and output stream types. - - If VIDIOC_STREAMON fails then any already -queued buffers will remain queued. - - The VIDIOC_STREAMOFF ioctl, apart of -aborting or finishing any DMA in progress, unlocks any user pointer -buffers locked in physical memory, and it removes all buffers from the -incoming and outgoing queues. That means all images captured but not -dequeued yet will be lost, likewise all images enqueued for output but -not transmitted yet. I/O returns to the same state as after calling -&VIDIOC-REQBUFS; and can be restarted accordingly. - - If buffers have been queued with &VIDIOC-QBUF; and -VIDIOC_STREAMOFF is called without ever having -called VIDIOC_STREAMON, then those queued buffers -will also be removed from the incoming queue and all are returned to the -same state as after calling &VIDIOC-REQBUFS; and can be restarted -accordingly. - - Both ioctls take a pointer to an integer, the desired buffer or -stream type. This is the same as &v4l2-requestbuffers; -type. - - If VIDIOC_STREAMON is called when streaming -is already in progress, or if VIDIOC_STREAMOFF is called -when streaming is already stopped, then 0 is returned. Nothing happens in the -case of VIDIOC_STREAMON, but VIDIOC_STREAMOFF -will return queued buffers to their starting state as mentioned above. - - Note that applications can be preempted for unknown periods right -before or after the VIDIOC_STREAMON or -VIDIOC_STREAMOFF calls, there is no notion of -starting or stopping "now". Buffer timestamps can be used to -synchronize with other events. - - - - &return-value; - - - - EINVAL - - The buffer type is not supported, - or no buffers have been allocated (memory mapping) or enqueued - (output) yet. - - - - EPIPE - - The driver implements pad-level format configuration and - the pipeline configuration is invalid. - - - - - ENOLINK - - The driver implements Media Controller interface and - the pipeline link configuration is invalid. - - - - - - diff --git a/Documentation/DocBook/media/v4l/vidioc-subdev-enum-frame-interval.xml b/Documentation/DocBook/media/v4l/vidioc-subdev-enum-frame-interval.xml deleted file mode 100644 index 9d0251a27e5f..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-subdev-enum-frame-interval.xml +++ /dev/null @@ -1,151 +0,0 @@ - - - ioctl VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL - &manvol; - - - - VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL - Enumerate frame intervals - - - - - - int ioctl - int fd - int request - struct v4l2_subdev_frame_interval_enum * - argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL - - - - argp - - - - - - - - - Description - - 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. - - 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. - - To enumerate frame intervals applications initialize the - index, pad, - which, code, - width and height - fields of &v4l2-subdev-frame-interval-enum; and call the - VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL 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 - EINVAL is returned. - - 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. - - 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. - - - struct <structname>v4l2_subdev_frame_interval_enum</structname> - - &cs-str; - - - __u32 - index - Number of the format in the enumeration, set by the - application. - - - __u32 - pad - Pad number as reported by the media controller API. - - - __u32 - code - The media bus format code, as defined in - . - - - __u32 - width - Frame width, in pixels. - - - __u32 - height - Frame height, in pixels. - - - &v4l2-fract; - interval - Period, in seconds, between consecutive video frames. - - - __u32 - which - Frame intervals to be enumerated, from &v4l2-subdev-format-whence;. - - - __u32 - reserved[8] - Reserved for future extensions. Applications and drivers must - set the array to zero. - - - -
-
- - - &return-value; - - - - EINVAL - - The &v4l2-subdev-frame-interval-enum; - pad references a non-existing pad, one of - the code, width - or height fields are invalid for the given - pad or the index field is out of bounds. - - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-subdev-enum-frame-size.xml b/Documentation/DocBook/media/v4l/vidioc-subdev-enum-frame-size.xml deleted file mode 100644 index 9b91b8332ba9..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-subdev-enum-frame-size.xml +++ /dev/null @@ -1,153 +0,0 @@ - - - ioctl VIDIOC_SUBDEV_ENUM_FRAME_SIZE - &manvol; - - - - VIDIOC_SUBDEV_ENUM_FRAME_SIZE - Enumerate media bus frame sizes - - - - - - int ioctl - int fd - int request - struct v4l2_subdev_frame_size_enum * - argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_SUBDEV_ENUM_FRAME_SIZE - - - - argp - - - - - - - - - Description - - 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. - - To enumerate frame sizes applications initialize the - pad, which , - code and index - fields of the &v4l2-subdev-mbus-code-enum; and call the - VIDIOC_SUBDEV_ENUM_FRAME_SIZE 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. - - 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. - - 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. - - 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. - - - struct <structname>v4l2_subdev_frame_size_enum</structname> - - &cs-str; - - - __u32 - index - Number of the format in the enumeration, set by the - application. - - - __u32 - pad - Pad number as reported by the media controller API. - - - __u32 - code - The media bus format code, as defined in - . - - - __u32 - min_width - Minimum frame width, in pixels. - - - __u32 - max_width - Maximum frame width, in pixels. - - - __u32 - min_height - Minimum frame height, in pixels. - - - __u32 - max_height - Maximum frame height, in pixels. - - - __u32 - which - Frame sizes to be enumerated, from &v4l2-subdev-format-whence;. - - - __u32 - reserved[8] - Reserved for future extensions. Applications and drivers must - set the array to zero. - - - -
-
- - - &return-value; - - - - EINVAL - - The &v4l2-subdev-frame-size-enum; pad - references a non-existing pad, the code is - invalid for the given pad or the index - field is out of bounds. - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-subdev-enum-mbus-code.xml b/Documentation/DocBook/media/v4l/vidioc-subdev-enum-mbus-code.xml deleted file mode 100644 index c67256ada87a..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-subdev-enum-mbus-code.xml +++ /dev/null @@ -1,118 +0,0 @@ - - - ioctl VIDIOC_SUBDEV_ENUM_MBUS_CODE - &manvol; - - - - VIDIOC_SUBDEV_ENUM_MBUS_CODE - Enumerate media bus formats - - - - - - int ioctl - int fd - int request - struct v4l2_subdev_mbus_code_enum * - argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_SUBDEV_ENUM_MBUS_CODE - - - - argp - - - - - - - - - Description - - To enumerate media bus formats available at a given sub-device pad - applications initialize the pad, which - and index fields of &v4l2-subdev-mbus-code-enum; and - call the VIDIOC_SUBDEV_ENUM_MBUS_CODE ioctl with a - pointer to this structure. Drivers fill the rest of the structure or return - an &EINVAL; if either the pad or - index are invalid. All media bus formats are - enumerable by beginning at index zero and incrementing by one until - EINVAL is returned. - - 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. - - - struct <structname>v4l2_subdev_mbus_code_enum</structname> - - &cs-str; - - - __u32 - pad - Pad number as reported by the media controller API. - - - __u32 - index - Number of the format in the enumeration, set by the - application. - - - __u32 - code - The media bus format code, as defined in - . - - - __u32 - which - Media bus format codes to be enumerated, from &v4l2-subdev-format-whence;. - - - __u32 - reserved[8] - Reserved for future extensions. Applications and drivers must - set the array to zero. - - - -
-
- - - &return-value; - - - - EINVAL - - The &v4l2-subdev-mbus-code-enum; pad - references a non-existing pad, or the index - field is out of bounds. - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-subdev-g-crop.xml b/Documentation/DocBook/media/v4l/vidioc-subdev-g-crop.xml deleted file mode 100644 index 4cddd788c589..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-subdev-g-crop.xml +++ /dev/null @@ -1,158 +0,0 @@ - - - ioctl VIDIOC_SUBDEV_G_CROP, VIDIOC_SUBDEV_S_CROP - &manvol; - - - - VIDIOC_SUBDEV_G_CROP - VIDIOC_SUBDEV_S_CROP - Get or set the crop rectangle on a subdev pad - - - - - - int ioctl - int fd - int request - struct v4l2_subdev_crop *argp - - - - - int ioctl - int fd - int request - const struct v4l2_subdev_crop *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_SUBDEV_G_CROP, VIDIOC_SUBDEV_S_CROP - - - - argp - - - - - - - - - Description - - - Obsolete - - This is an obsolete - interface and may be removed in the future. It is superseded by - the selection - API. - - - To retrieve the current crop rectangle applications set the - pad field of a &v4l2-subdev-crop; to the - desired pad number as reported by the media API and the - which field to - V4L2_SUBDEV_FORMAT_ACTIVE. They then call the - VIDIOC_SUBDEV_G_CROP ioctl with a pointer to this - structure. The driver fills the members of the rect - field or returns &EINVAL; if the input arguments are invalid, or if cropping - is not supported on the given pad. - - To change the current crop rectangle applications set both the - pad and which fields - and all members of the rect field. They then call - the VIDIOC_SUBDEV_S_CROP 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 VIDIOC_SUBDEV_G_CROP call. - - Applications can query the device capabilities by setting the - which to - V4L2_SUBDEV_FORMAT_TRY. 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. - - 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. - - - struct <structname>v4l2_subdev_crop</structname> - - &cs-str; - - - __u32 - pad - Pad number as reported by the media framework. - - - __u32 - which - Crop rectangle to get or set, from - &v4l2-subdev-format-whence;. - - - &v4l2-rect; - rect - Crop rectangle boundaries, in pixels. - - - __u32 - reserved[8] - Reserved for future extensions. Applications and drivers must - set the array to zero. - - - -
-
- - - &return-value; - - - - EBUSY - - 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 - VIDIOC_SUBDEV_S_CROP - - - - EINVAL - - The &v4l2-subdev-crop; pad - references a non-existing pad, the which - field references a non-existing format, or cropping is not supported - on the given subdev pad. - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-subdev-g-fmt.xml b/Documentation/DocBook/media/v4l/vidioc-subdev-g-fmt.xml deleted file mode 100644 index 781089cba453..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-subdev-g-fmt.xml +++ /dev/null @@ -1,177 +0,0 @@ - - - ioctl VIDIOC_SUBDEV_G_FMT, VIDIOC_SUBDEV_S_FMT - &manvol; - - - - VIDIOC_SUBDEV_G_FMT - VIDIOC_SUBDEV_S_FMT - Get or set the data format on a subdev pad - - - - - - int ioctl - int fd - int request - struct v4l2_subdev_format *argp - - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_SUBDEV_G_FMT, VIDIOC_SUBDEV_S_FMT - - - - argp - - - - - - - - - Description - - These ioctls are used to negotiate the frame format at specific - subdev pads in the image pipeline. - - To retrieve the current format applications set the - pad field of a &v4l2-subdev-format; to the - desired pad number as reported by the media API and the - which field to - V4L2_SUBDEV_FORMAT_ACTIVE. When they call the - VIDIOC_SUBDEV_G_FMT ioctl with a pointer to this - structure the driver fills the members of the format - field. - - To change the current format applications set both the - pad and which fields - and all members of the format field. When they - call the VIDIOC_SUBDEV_S_FMT 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 - VIDIOC_SUBDEV_G_FMT call. - - Applications can query the device capabilities by setting the - which to - V4L2_SUBDEV_FORMAT_TRY. 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. - - 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 - VIDIOC_SUBDEV_S_FMT ioctl. They would then either - retrieve the default format at the output pad with the - VIDIOC_SUBDEV_G_FMT ioctl, or set the desired output - pad format with the VIDIOC_SUBDEV_S_FMT ioctl and check - the returned value. - - 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. - - 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. - - - struct <structname>v4l2_subdev_format</structname> - - &cs-str; - - - __u32 - pad - Pad number as reported by the media controller API. - - - __u32 - which - Format to modified, from &v4l2-subdev-format-whence;. - - - &v4l2-mbus-framefmt; - format - Definition of an image format, see for details. - - - __u32 - reserved[8] - Reserved for future extensions. Applications and drivers must - set the array to zero. - - - -
- - - enum <structname>v4l2_subdev_format_whence</structname> - - &cs-def; - - - V4L2_SUBDEV_FORMAT_TRY - 0 - Try formats, used for querying device capabilities. - - - V4L2_SUBDEV_FORMAT_ACTIVE - 1 - Active formats, applied to the hardware. - - - -
-
- - - &return-value; - - - - EBUSY - - 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 - VIDIOC_SUBDEV_S_FMT - - - - EINVAL - - The &v4l2-subdev-format; pad - references a non-existing pad, or the which - field references a non-existing format. - - - - - - &return-value; - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-subdev-g-frame-interval.xml b/Documentation/DocBook/media/v4l/vidioc-subdev-g-frame-interval.xml deleted file mode 100644 index 848ec789ddaa..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-subdev-g-frame-interval.xml +++ /dev/null @@ -1,135 +0,0 @@ - - - ioctl VIDIOC_SUBDEV_G_FRAME_INTERVAL, VIDIOC_SUBDEV_S_FRAME_INTERVAL - &manvol; - - - - VIDIOC_SUBDEV_G_FRAME_INTERVAL - VIDIOC_SUBDEV_S_FRAME_INTERVAL - Get or set the frame interval on a subdev pad - - - - - - int ioctl - int fd - int request - struct v4l2_subdev_frame_interval *argp - - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_SUBDEV_G_FRAME_INTERVAL, VIDIOC_SUBDEV_S_FRAME_INTERVAL - - - - argp - - - - - - - - - Description - - 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. - - To retrieve the current frame interval applications set the - pad field of a &v4l2-subdev-frame-interval; to - the desired pad number as reported by the media controller API. When they - call the VIDIOC_SUBDEV_G_FRAME_INTERVAL ioctl with a - pointer to this structure the driver fills the members of the - interval field. - - To change the current frame interval applications set both the - pad field and all members of the - interval field. When they call the - VIDIOC_SUBDEV_S_FRAME_INTERVAL 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 VIDIOC_SUBDEV_G_FRAME_INTERVAL call. - - - 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. - - 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. - - - struct <structname>v4l2_subdev_frame_interval</structname> - - &cs-str; - - - __u32 - pad - Pad number as reported by the media controller API. - - - &v4l2-fract; - interval - Period, in seconds, between consecutive video frames. - - - __u32 - reserved[9] - Reserved for future extensions. Applications and drivers must - set the array to zero. - - - -
-
- - - &return-value; - - - - EBUSY - - 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 - VIDIOC_SUBDEV_S_FRAME_INTERVAL - - - - EINVAL - - The &v4l2-subdev-frame-interval; pad - references a non-existing pad, or the pad doesn't support frame - intervals. - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-subdev-g-selection.xml b/Documentation/DocBook/media/v4l/vidioc-subdev-g-selection.xml deleted file mode 100644 index 8346b2e4a703..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-subdev-g-selection.xml +++ /dev/null @@ -1,159 +0,0 @@ - - - ioctl VIDIOC_SUBDEV_G_SELECTION, VIDIOC_SUBDEV_S_SELECTION - &manvol; - - - - VIDIOC_SUBDEV_G_SELECTION - VIDIOC_SUBDEV_S_SELECTION - Get or set selection rectangles on a subdev pad - - - - - - int ioctl - int fd - int request - struct v4l2_subdev_selection *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_SUBDEV_G_SELECTION, VIDIOC_SUBDEV_S_SELECTION - - - - argp - - - - - - - - - Description - - The selections are used to configure various image - processing functionality performed by the subdevs which affect the - image size. This currently includes cropping, scaling and - composition. - - The selection API replaces the old subdev crop API. All - the function of the crop API, and more, are supported by the - selections API. - - See for - more information on how each selection target affects the image - processing pipeline inside the subdevice. - - - Types of selection targets - - There are two types of selection targets: actual and bounds. The - actual targets are the targets which configure the hardware. The BOUNDS - target will return a rectangle that contain all possible actual - rectangles. - - - - Discovering supported features - - To discover which targets are supported, the user can - perform VIDIOC_SUBDEV_G_SELECTION on them. - Any unsupported target will return - EINVAL. - - Selection targets and flags are documented in . - - - struct <structname>v4l2_subdev_selection</structname> - - &cs-str; - - - __u32 - which - Active or try selection, from - &v4l2-subdev-format-whence;. - - - __u32 - pad - Pad number as reported by the media framework. - - - __u32 - target - Target selection rectangle. See - . - - - __u32 - flags - Flags. See - . - - - &v4l2-rect; - r - Selection rectangle, in pixels. - - - __u32 - reserved[8] - Reserved for future extensions. Applications and drivers must - set the array to zero. - - - -
-
- -
- - - &return-value; - - - - EBUSY - - The selection 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 - VIDIOC_SUBDEV_S_SELECTION - - - - EINVAL - - The &v4l2-subdev-selection; - pad references a non-existing - pad, the which field references a - non-existing format, or the selection target is not - supported on the given subdev pad. - - - - -
diff --git a/Documentation/DocBook/media/v4l/vidioc-subscribe-event.xml b/Documentation/DocBook/media/v4l/vidioc-subscribe-event.xml deleted file mode 100644 index 5fd0ee78f880..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-subscribe-event.xml +++ /dev/null @@ -1,130 +0,0 @@ - - - ioctl VIDIOC_SUBSCRIBE_EVENT, VIDIOC_UNSUBSCRIBE_EVENT - &manvol; - - - - VIDIOC_SUBSCRIBE_EVENT - VIDIOC_UNSUBSCRIBE_EVENT - Subscribe or unsubscribe event - - - - - - int ioctl - int fd - int request - struct v4l2_event_subscription -*argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_SUBSCRIBE_EVENT, VIDIOC_UNSUBSCRIBE_EVENT - - - - argp - - - - - - - - - Description - - Subscribe or unsubscribe V4L2 event. Subscribed events are - dequeued by using the &VIDIOC-DQEVENT; ioctl. - - - struct <structname>v4l2_event_subscription</structname> - - &cs-str; - - - __u32 - type - Type of the event, see . Note that -V4L2_EVENT_ALL can be used with VIDIOC_UNSUBSCRIBE_EVENT -for unsubscribing all events at once. - - - __u32 - id - ID of the event source. If there is no ID associated with - the event source, then set this to 0. Whether or not an event - needs an ID depends on the event type. - - - __u32 - flags - Event flags, see . - - - __u32 - reserved[5] - Reserved for future extensions. Drivers and applications - must set the array to zero. - - - -
- - - Event Flags - - &cs-def; - - - V4L2_EVENT_SUB_FL_SEND_INITIAL - 0x0001 - When this event is subscribed an initial event will be sent - containing the current status. This only makes sense for events - that are triggered by a status change such as V4L2_EVENT_CTRL. - Other events will ignore this flag. - - - V4L2_EVENT_SUB_FL_ALLOW_FEEDBACK - 0x0002 - If set, then events directly caused by an ioctl will also be sent to - the filehandle that called that ioctl. For example, changing a control using - &VIDIOC-S-CTRL; will cause a V4L2_EVENT_CTRL to be sent back to that same - filehandle. Normally such events are suppressed to prevent feedback loops - where an application changes a control to a one value and then another, and - then receives an event telling it that that control has changed to the first - value. - - Since it can't tell whether that event was caused by another application - or by the &VIDIOC-S-CTRL; call it is hard to decide whether to set the - control to the value in the event, or ignore it. - - Think carefully when you set this flag so you won't get into situations - like that. - - - - -
- -
- - &return-value; - -
diff --git a/Documentation/DocBook/media/vbi_525.gif.b64 b/Documentation/DocBook/media/vbi_525.gif.b64 deleted file mode 100644 index d5dcf06f2aef..000000000000 --- a/Documentation/DocBook/media/vbi_525.gif.b64 +++ /dev/null @@ -1,84 +0,0 @@ -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 -E9gqF8bNWgAAOw== diff --git a/Documentation/DocBook/media/vbi_625.gif.b64 b/Documentation/DocBook/media/vbi_625.gif.b64 deleted file mode 100644 index 831f49a02821..000000000000 --- a/Documentation/DocBook/media/vbi_625.gif.b64 +++ /dev/null @@ -1,90 +0,0 @@ -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 -0Adtyay8rcRcXsY8yW56buKsptPTzwkX0C6Xzx03zy1MzcccngxdcfDcbNE8yyatziSdbSFdzgX9 -yxqdaRxdZIpm0b/+iaY+PcgeJs2UEW3KjKeQGMmPDM2cHNHJbMv1DNKAbMpYLNKJ2kH1I9W5TNWk -nNWwTHJ9M9SKnNDL7Mgq7YpevdTa/NJuUNRPjXNvbWQKt3NwPdc8nSNhjRdtTc9wqtQOjdZ+PclN -jc4TrdBy/dV0bdcjp62SZNYEdtdr3RF6jdKH2s6VLYqN/cuCDdOETdYX2G6f7dmGfdg3F9c7gtex -FdOXvNCWrV6sDZF3KNGqbNT6FNqKDWyiXdqkXdeL/diazdYnDdXsfNmuXWVq7duRDdznPNqJrdvM -vdu8XdG4DWan3bypTdFlTdzmNm4ufdzTbN2FbdvFLN3OvdzkHd7RF93bJf3b393ZKZ3dSY3Z2AzZ -3s3ZAhzd551mNv3Ozw3U5lHGpfPfl3NGA351Rmfgj6XHd7xYUKdZCR51rGE2vVJ1E04eAU45Fl7F -1htMGv5LHN7hXZ3EIS7iI07iJW7iJ47iKa7iK87iLe7iLw7jMS7jM07jNW7jN47jOa7jO87jPe7j -Pw7kQV68E+EQhqrAQs6aZmirzYzkQC4aAmmIygHlTS7kP0G3gRJ8VB7kAGCRbQB8uqflTu6Ci4jl -ehjmPs7laf58XB7Fau6DR56aBQAAOw== diff --git a/Documentation/DocBook/media/vbi_hsync.gif.b64 b/Documentation/DocBook/media/vbi_hsync.gif.b64 deleted file mode 100644 index cdafabed5c11..000000000000 --- a/Documentation/DocBook/media/vbi_hsync.gif.b64 +++ /dev/null @@ -1,43 +0,0 @@ -R0lGODlhBwHJAOcAAAAAAAEBAQICAgMDAwQEBAUFBQYGBgcHBwgICAkJCQoKCgsLCwwMDA0NDQ4O -Dg8PDxAQEBERERISEhMTExQUFBUVFRYWFhcXFxgYGBkZGRoaGhsbGxwcHB0dHR4eHh8fHyAgICEh -ISIiIiMjIyQkJCUlJSYmJicnJygoKCkpKSoqKisrKywsLC0tLS4uLi8vLzAwMDExMTIyMjMzMzQ0 -NDU1NTY2Njc3Nzg4ODk5OTo6Ojs7Ozw8PD09PT4+Pj8/P0BAQEFBQUJCQkNDQ0REREVFRUZGRkdH -R0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1BQUFFRUVJSUlNTU1RUVFVVVVZWVldXV1hYWFlZWVpa -WltbW1xcXF1dXV5eXl9fX2BgYGFhYWJiYmNjY2RkZGVlZWZmZmdnZ2hoaGlpaWpqamtra2xsbG1t -bW5ubm9vb3BwcHFxcXJycnNzc3R0dHV1dXZ2dnd3d3h4eHl5eXp6ent7e3x8fH19fX5+fn9/f4CA -gIGBgYKCgoODg4SEhIWFhYaGhoeHh4iIiImJiYqKiouLi4yMjI2NjY6Ojo+Pj5CQkJGRkZKSkpOT -k5SUlJWVlZaWlpeXl5iYmJmZmZqampubm5ycnJ2dnZ6enp+fn6CgoKGhoaKioqOjo6SkpKWlpaam -pqenp6ioqKmpqaqqqqurq6ysrK2tra6urq+vr7CwsLGxsbKysrOzs7S0tLW1tba2tre3t7i4uLm5 -ubq6uru7u7y8vL29vb6+vr+/v8DAwMHBwcLCwsPDw8TExMXFxcbGxsfHx8jIyMnJycrKysvLy8zM -zM3Nzc7Ozs/Pz9DQ0NHR0dLS0tPT09TU1NXV1dbW1tfX19jY2NnZ2dra2tvb29zc3N3d3d7e3t/f -3+Dg4OHh4eLi4uPj4+Tk5OXl5ebm5ufn5+jo6Onp6erq6uvr6+zs7O3t7e7u7u/v7/Dw8PHx8fLy -8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///ywAAAAABwHJAAAI/gD/CRxI -sKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjypxJs6bN -mzhz6tzJs6fPn0CDCh1KtKjRo0iTKl3KtKnTp1CjSp1KtarVqyQBYN1aVSvXr1C9gh2rVOxCsV4B -mE2b0GxDt2TjtnWo9l9du2rrar2bl+BavQL3ApZLeC5du3j77g2MF/FAtIv1AoZb+Gfey5gza97M -ua/ByJ4XI8b8+PHl0ZkrE6XsuCDr1xD5ip7d2m9pv6IZqxYK+zPC3g/T0mabGLdk4YEH7wYK3PZB -yqyXSw/++3l139OzS4R+Hbtr7eCp/nv/bp18+PMKuZcfj7792fXm47ufz/52fd308zu/X3u/fv3N -+Sfgf/MFaJ98BLpnIH4IJojegv0d6GB7EEI4oXYVdnfhgxoOyOCG4WXIH4jTidggiSV2KOGHKGa3 -oIUtqvaiijEuNyN8NUp344g5EqYef9H1KNePJwYpJFlEehjhkT7iuCKLTMZl4olRgjWlklV+deWT -WWpJ45JgdrnVllCKOeaXMJrZFZpfqmkVmWG6SRWcRsoZFZl12hkWmzxemCdXeAr555lOgjnof4de -tSOVG0KWaFl3GVponH52ZumlmGaq6aaY0pjmhJppmRqQbTaKm6gewgnio2uSOumq/jpO+qmDrE5F -p6AtSZZeSrf2WOtEoZEmm2C/Astnn6CapKtjbClWZki95lhsbLcRtxmlHkVb47TBWcuYcGvxeiyj -fp7kGbOJEZscStrGyK1T7bb4blPxojgvU4Hiulu+vto4Lpck3rvUoljCuq+npZp6cKGz0uovwwmX -u3CRESc7sZINJyhwWbJW7PDFXGZM4MZI1WsvyCF7rDHKZYqMKMuSvmqwS5yOypHJAcP0K8k4z5xr -RTz/C7DPLO2crdDPEr2S0R31rDDNQB/dMbISQ01R0FOT+/TPV0vtqtZVc21s0wjLLONFJG8XNdkQ -y5z2UNy+TW3XbN8Ho9xBxa3z/to3lz0i3nljBPhbfG+UZMoqG5db2+KJ9O7gDDHd99dUstpscsgR -x6CzqC0O0uN70z05xVlHdNpwgvUHGWrFef5RppGHPjawNddue3nB5nYufsKmu/vrhL/3kuRqq1Tr -6pd/G+6HymGLdvC7Dl+46cYD7aywoSleXGOtj5RnnZALP3vx7Bb2J/iyk6++subTZanz2ZJ2te2R -st8+9NaFHx/x1Jff5GFz0Z9/+Dc3c9EnSK4ryfLG1z89GaY6AjwQARvnQLfBr24XpFrizGSk+tlv -aOJbXwULxj3/gTB6DBwhCD2oQLBtkIR66mAEVTe9AqqQhCzMigvNhsIbrnCG/m6ZIAB9+MPqwfCB -IryhDI14QiQ2kIiUyqH3dqhBHtoJfSZs4gu16CYsGpCKYDyinLz4QS5W8YwcjF0WkxbCJxKRjC0M -oxnlmCU46tA19BPiCO04xZjM8IBq/GL63hjIMloNitiS4uv+aMUxRk5/ihQXIhMJSUaiUUzgq6RM -LEmhR5qLk2LsoieVBco5YnKUCiwlG2OIyqyoMoNpPIsm/TjJRMKya698JYZiB7kELq2W6OvlLT8H -TF62MJfM+R3+lnnIAB5zk8zBHOZks7/BqEuXwXwmLS1DzestDnmNud5MsqlDZPKGWMkzT+9CBc33 -5PGd8IynPOfJwkilLp37/gniN8dZyDgOcienCadudnc6anavnT30p/SKokvH9fOO/+RmqxIK0YUi -EosBNVz2tnnRR9KzUxyFYjAzqpHehZSQbdxYEBEqUhcVM0WTbGhNZBor+7xNj8SMaT7TJc1Tgcug -Bf2LNZnlKODp1KYCbR64ujcZ0OBxe5FR3jAfqsSdNiujucMnPnl3uaxiraNI3ep3hro8161uNLbB -G00fNk3abG+aAiXqcKqlGG8Oy6hgLang+HnUjERyiBFV4VpZitKa5rWEgKJjldgpKs5d9KOQjeym -XkrSMdnzpYatpWY3y1l6NXGB3RlsZ9eDzp7ydKmnW1dAlTnaQ94zruEkS2tUnfra1iIUdRvlHueu -iS7N2daic1VncEEz3N/6MbVyNU1TV0tUdL3VuF6aKnQhJdrpWve62M2udrfL3e5697vgDa94x0ve -8lIkIAA7 diff --git a/Documentation/DocBook/media_api.tmpl b/Documentation/DocBook/media_api.tmpl deleted file mode 100644 index a2765d8ad05c..000000000000 --- a/Documentation/DocBook/media_api.tmpl +++ /dev/null @@ -1,121 +0,0 @@ - - %media-entities; - - - - -open()."> -open()."> -2C"> -Return ValueOn success 0 is returned, on error -1 and the errno variable is set appropriately. The generic error codes are described at the Generic Error Codes chapter."> -RETURN VALUEOn success 0 is returned, on error -1 and the errno variable is set appropriately. The generic error codes are described at the Generic Error Codes chapter."> -2"> - - -"> -"> -"> - - -https://linuxtv.org/lists.php"> - - -https://linuxtv.org/repo/"> ---------"> -----------"> -------------"> ---------------"> -----------------"> ---------------------"> -----------------------"> -------------------------"> -]> - - - - LINUX MEDIA INFRASTRUCTURE API - - - 2009-2015 - LinuxTV Developers - - - - Permission is granted to copy, distribute and/or modify - this document under the terms of the GNU Free Documentation License, - Version 1.1 or any later version published by the Free Software - Foundation. A copy of the license is included in the chapter entitled - "GNU Free Documentation License" - - - - - - - Introduction - - This document covers the Linux Kernel to Userspace API's used by - video and radio streaming devices, including video cameras, - analog and digital TV receiver cards, AM/FM receiver cards, - streaming capture and output devices, codec devices and remote - controllers. - A typical media device hardware is shown at - . -
- Typical Media Device - - - - - - Typical Media Device Block Diagram - - -
- The media infrastructure API was designed to control such - devices. It is divided into five parts. - The first part covers radio, video capture and output, - cameras, analog TV devices and codecs. - The second part covers the - API used for digital TV and Internet reception via one of the - several digital tv standards. While it is called as DVB API, - in fact it covers several different video standards including - DVB-T/T2, DVB-S/S2, DVB-C, ATSC, ISDB-T, ISDB-S,etc. The complete - list of supported standards can be found at - . - The third part covers the Remote Controller API. - The fourth part covers the Media Controller API. - The fifth part covers the CEC (Consumer Electronics Control) API. - It should also be noted that a media device may also have audio - components, like mixers, PCM capture, PCM playback, etc, which - are controlled via ALSA API. - For additional information and for the latest development code, - see: https://linuxtv.org. - For discussing improvements, reporting troubles, sending new drivers, etc, please mail to: Linux Media Mailing List (LMML).. -
- - -&sub-v4l2; - - -&sub-dvbapi; - - -&sub-remote_controllers; - - -&sub-media-controller; - - -&sub-cec-api; - - - -&sub-gen-errors; - - -&sub-fdl-appendix; - -
diff --git a/Documentation/Makefile.sphinx b/Documentation/Makefile.sphinx index fd565e1f1368..b10b6c598ae2 100644 --- a/Documentation/Makefile.sphinx +++ b/Documentation/Makefile.sphinx @@ -63,7 +63,6 @@ sgmldocs: psdocs: mandocs: installmandocs: -cleanmediadocs: cleandocs: $(Q)rm -rf $(BUILDDIR) diff --git a/Makefile b/Makefile index d384848478b9..b92fd9e081d9 100644 --- a/Makefile +++ b/Makefile @@ -1432,7 +1432,7 @@ $(help-board-dirs): help-%: # Documentation targets # --------------------------------------------------------------------------- -DOC_TARGETS := xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs epubdocs cleandocs cleanmediadocs +DOC_TARGETS := xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs epubdocs cleandocs PHONY += $(DOC_TARGETS) $(DOC_TARGETS): scripts_basic FORCE $(Q)$(MAKE) $(build)=scripts build_docproc build_check-lc_ctype -- cgit v1.2.3-59-g8ed1b From 44d1240d006c9cd0249263b5449c8e4752500f6a Mon Sep 17 00:00:00 2001 From: Marek Szyprowski Date: Mon, 13 Jun 2016 11:11:26 +0200 Subject: drm: add generic zpos property MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit version 8: - move drm_blend.o from drm-y to drm_kms_helper-y to avoid EXPORT_SYMBOL(drm_atomic_helper_normalize_zpos) - remove dead function declarations in drm_crtc.h version 7: - remove useless EXPORT_SYMBOL() - better z-order wording in Documentation version 6: - add zpos in gpu documentation file - merge Ville patch about zpos initial value and API improvement. I have split Ville patch between zpos core and drivers version 5: - remove zpos range check and comeback to 0 to N-1 normalization algorithm version 4: - make sure that normalized zpos value is stay in the defined property range and warn user if not This patch adds support for generic plane's zpos property property with well-defined semantics: - added zpos properties to plane and plane state structures - added helpers for normalizing zpos properties of given set of planes - well defined semantics: planes are sorted by zpos values and then plane id value if zpos equals Normalized zpos values are calculated automatically when generic muttable zpos property has been initialized. Drivers can simply use plane_state->normalized_zpos in their atomic_check and/or plane_update callbacks without any additional calls to DRM core. Signed-off-by: Marek Szyprowski Compare to Marek's original patch zpos property is now specific to each plane and no more to the core. Normalize function take care of the range of per plane defined range before set normalized_zpos. Signed-off-by: Benjamin Gaignard Reviewed-by: Ville Syrjälä Acked-by: Laurent Pinchart Tested-by: Laurent Pinchart Cc: Inki Dae Cc: Daniel Vetter Cc: Ville Syrjala Cc: Joonyoung Shim Cc: Seung-Woo Kim Cc: Andrzej Hajda Cc: Krzysztof Kozlowski Cc: Bartlomiej Zolnierkiewicz Cc: Tobias Jakobi Cc: Gustavo Padovan Cc: vincent.abriou@st.com Cc: fabien.dessenne@st.com Cc: Laurent Pinchart --- Documentation/gpu/kms-properties.csv | 1 + drivers/gpu/drm/Makefile | 2 +- drivers/gpu/drm/drm_atomic.c | 4 + drivers/gpu/drm/drm_atomic_helper.c | 7 ++ drivers/gpu/drm/drm_blend.c | 238 +++++++++++++++++++++++++++++++++++ drivers/gpu/drm/drm_crtc_internal.h | 4 + include/drm/drm_crtc.h | 20 +++ 7 files changed, 275 insertions(+), 1 deletion(-) create mode 100644 drivers/gpu/drm/drm_blend.c (limited to 'Documentation') diff --git a/Documentation/gpu/kms-properties.csv b/Documentation/gpu/kms-properties.csv index b6fcaf639c04..4c5ce3edcfd9 100644 --- a/Documentation/gpu/kms-properties.csv +++ b/Documentation/gpu/kms-properties.csv @@ -17,6 +17,7 @@ DRM,Generic,“rotation”,BITMASK,"{ 0, ""rotate-0"" }, { 1, ""rotate-90"" }, { ,,“CRTC_H”,RANGE,"Min=0, Max=UINT_MAX",Plane,Scanout CRTC (destination) height (atomic) ,,“FB_ID”,OBJECT,DRM_MODE_OBJECT_FB,Plane,Scanout framebuffer (atomic) ,,“CRTC_ID”,OBJECT,DRM_MODE_OBJECT_CRTC,Plane,CRTC that plane is attached to (atomic) +,,“zpos”,RANGE,"Min=0, Max=UINT_MAX","Plane,Z-order of the plane.Planes with higher Z-order values are displayed on top, planes with identical Z-order values are display in an undefined order" ,DVI-I,“subconnector”,ENUM,"{ “Unknown”, “DVI-D”, “DVI-A” }",Connector,TBD ,,“select subconnector”,ENUM,"{ “Automatic”, “DVI-D”, “DVI-A” }",Connector,TBD ,TV,“subconnector”,ENUM,"{ ""Unknown"", ""Composite"", ""SVIDEO"", ""Component"", ""SCART"" }",Connector,TBD diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile index e3dba6f44a79..0238bf8bc8c3 100644 --- a/drivers/gpu/drm/Makefile +++ b/drivers/gpu/drm/Makefile @@ -24,7 +24,7 @@ drm-$(CONFIG_AGP) += drm_agpsupport.o drm_kms_helper-y := drm_crtc_helper.o drm_dp_helper.o drm_probe_helper.o \ drm_plane_helper.o drm_dp_mst_topology.o drm_atomic_helper.o \ drm_kms_helper_common.o drm_dp_dual_mode_helper.o \ - drm_simple_kms_helper.o + drm_simple_kms_helper.o drm_blend.o drm_kms_helper-$(CONFIG_DRM_LOAD_EDID_FIRMWARE) += drm_edid_load.o drm_kms_helper-$(CONFIG_DRM_FBDEV_EMULATION) += drm_fb_helper.o diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c index 8d2f111fa113..fa3930757972 100644 --- a/drivers/gpu/drm/drm_atomic.c +++ b/drivers/gpu/drm/drm_atomic.c @@ -711,6 +711,8 @@ int drm_atomic_plane_set_property(struct drm_plane *plane, state->src_h = val; } else if (property == config->rotation_property) { state->rotation = val; + } else if (property == plane->zpos_property) { + state->zpos = val; } else if (plane->funcs->atomic_set_property) { return plane->funcs->atomic_set_property(plane, state, property, val); @@ -767,6 +769,8 @@ drm_atomic_plane_get_property(struct drm_plane *plane, *val = state->src_h; } else if (property == config->rotation_property) { *val = state->rotation; + } else if (property == plane->zpos_property) { + *val = state->zpos; } else if (plane->funcs->atomic_get_property) { return plane->funcs->atomic_get_property(plane, state, property, val); } else { diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c index de7fddce3cef..20be86d89a20 100644 --- a/drivers/gpu/drm/drm_atomic_helper.c +++ b/drivers/gpu/drm/drm_atomic_helper.c @@ -32,6 +32,8 @@ #include #include +#include "drm_crtc_internal.h" + /** * DOC: overview * @@ -592,6 +594,10 @@ drm_atomic_helper_check_planes(struct drm_device *dev, struct drm_plane_state *plane_state; int i, ret = 0; + ret = drm_atomic_helper_normalize_zpos(dev, state); + if (ret) + return ret; + for_each_plane_in_state(state, plane, plane_state, i) { const struct drm_plane_helper_funcs *funcs; @@ -2955,6 +2961,7 @@ void __drm_atomic_helper_crtc_duplicate_state(struct drm_crtc *crtc, state->planes_changed = false; state->connectors_changed = false; state->color_mgmt_changed = false; + state->zpos_changed = false; state->event = NULL; } EXPORT_SYMBOL(__drm_atomic_helper_crtc_duplicate_state); diff --git a/drivers/gpu/drm/drm_blend.c b/drivers/gpu/drm/drm_blend.c new file mode 100644 index 000000000000..f3c0942bd756 --- /dev/null +++ b/drivers/gpu/drm/drm_blend.c @@ -0,0 +1,238 @@ +/* + * Copyright (C) 2016 Samsung Electronics Co.Ltd + * Authors: + * Marek Szyprowski + * + * DRM core plane blending related functions + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting documentation, and + * that the name of the copyright holders not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. The copyright holders make no representations + * about the suitability of this software for any purpose. It is provided "as + * is" without express or implied warranty. + * + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ +#include +#include +#include +#include +#include +#include + +#include "drm_internal.h" + +/** + * drm_plane_create_zpos_property - create mutable zpos property + * @plane: drm plane + * @zpos: initial value of zpos property + * @min: minimal possible value of zpos property + * @max: maximal possible value of zpos property + * + * This function initializes generic mutable zpos property and enables support + * for it in drm core. Drivers can then attach this property to planes to enable + * support for configurable planes arrangement during blending operation. + * Once mutable zpos property has been enabled, the DRM core will automatically + * calculate drm_plane_state->normalized_zpos values. Usually min should be set + * to 0 and max to maximal number of planes for given crtc - 1. + * + * If zpos of some planes cannot be changed (like fixed background or + * cursor/topmost planes), driver should adjust min/max values and assign those + * planes immutable zpos property with lower or higher values (for more + * information, see drm_mode_create_zpos_immutable_property() function). In such + * case driver should also assign proper initial zpos values for all planes in + * its plane_reset() callback, so the planes will be always sorted properly. + * + * Returns: + * Zero on success, negative errno on failure. + */ +int drm_plane_create_zpos_property(struct drm_plane *plane, + unsigned int zpos, + unsigned int min, unsigned int max) +{ + struct drm_property *prop; + + prop = drm_property_create_range(plane->dev, 0, "zpos", min, max); + if (!prop) + return -ENOMEM; + + drm_object_attach_property(&plane->base, prop, zpos); + + plane->zpos_property = prop; + + if (plane->state) { + plane->state->zpos = zpos; + plane->state->normalized_zpos = zpos; + } + + return 0; +} +EXPORT_SYMBOL(drm_plane_create_zpos_property); + +/** + * drm_plane_create_zpos_immutable_property - create immuttable zpos property + * @plane: drm plane + * @zpos: value of zpos property + * + * This function initializes generic immutable zpos property and enables + * support for it in drm core. Using this property driver lets userspace + * to get the arrangement of the planes for blending operation and notifies + * it that the hardware (or driver) doesn't support changing of the planes' + * order. + * + * Returns: + * Zero on success, negative errno on failure. + */ +int drm_plane_create_zpos_immutable_property(struct drm_plane *plane, + unsigned int zpos) +{ + struct drm_property *prop; + + prop = drm_property_create_range(plane->dev, DRM_MODE_PROP_IMMUTABLE, + "zpos", zpos, zpos); + if (!prop) + return -ENOMEM; + + drm_object_attach_property(&plane->base, prop, zpos); + + plane->zpos_property = prop; + + if (plane->state) { + plane->state->zpos = zpos; + plane->state->normalized_zpos = zpos; + } + + return 0; +} +EXPORT_SYMBOL(drm_plane_create_zpos_immutable_property); + +static int drm_atomic_state_zpos_cmp(const void *a, const void *b) +{ + const struct drm_plane_state *sa = *(struct drm_plane_state **)a; + const struct drm_plane_state *sb = *(struct drm_plane_state **)b; + + if (sa->zpos != sb->zpos) + return sa->zpos - sb->zpos; + else + return sa->plane->base.id - sb->plane->base.id; +} + +/** + * drm_atomic_helper_crtc_normalize_zpos - calculate normalized zpos values + * @crtc: crtc with planes, which have to be considered for normalization + * @crtc_state: new atomic state to apply + * + * This function checks new states of all planes assigned to given crtc and + * calculates normalized zpos value for them. Planes are compared first by their + * zpos values, then by plane id (if zpos equals). Plane with lowest zpos value + * is at the bottom. The plane_state->normalized_zpos is then filled with unique + * values from 0 to number of active planes in crtc minus one. + * + * RETURNS + * Zero for success or -errno + */ +static int drm_atomic_helper_crtc_normalize_zpos(struct drm_crtc *crtc, + struct drm_crtc_state *crtc_state) +{ + struct drm_atomic_state *state = crtc_state->state; + struct drm_device *dev = crtc->dev; + int total_planes = dev->mode_config.num_total_plane; + struct drm_plane_state **states; + struct drm_plane *plane; + int i, n = 0; + int ret = 0; + + DRM_DEBUG_ATOMIC("[CRTC:%d:%s] calculating normalized zpos values\n", + crtc->base.id, crtc->name); + + states = kmalloc_array(total_planes, sizeof(*states), GFP_TEMPORARY); + if (!states) + return -ENOMEM; + + /* + * Normalization process might create new states for planes which + * normalized_zpos has to be recalculated. + */ + drm_for_each_plane_mask(plane, dev, crtc_state->plane_mask) { + struct drm_plane_state *plane_state = + drm_atomic_get_plane_state(state, plane); + if (IS_ERR(plane_state)) { + ret = PTR_ERR(plane_state); + goto done; + } + states[n++] = plane_state; + DRM_DEBUG_ATOMIC("[PLANE:%d:%s] processing zpos value %d\n", + plane->base.id, plane->name, + plane_state->zpos); + } + + sort(states, n, sizeof(*states), drm_atomic_state_zpos_cmp, NULL); + + for (i = 0; i < n; i++) { + plane = states[i]->plane; + + states[i]->normalized_zpos = i; + DRM_DEBUG_ATOMIC("[PLANE:%d:%s] normalized zpos value %d\n", + plane->base.id, plane->name, i); + } + crtc_state->zpos_changed = true; + +done: + kfree(states); + return ret; +} + +/** + * drm_atomic_helper_normalize_zpos - calculate normalized zpos values for all + * crtcs + * @dev: DRM device + * @state: atomic state of DRM device + * + * This function calculates normalized zpos value for all modified planes in + * the provided atomic state of DRM device. For more information, see + * drm_atomic_helper_crtc_normalize_zpos() function. + * + * RETURNS + * Zero for success or -errno + */ +int drm_atomic_helper_normalize_zpos(struct drm_device *dev, + struct drm_atomic_state *state) +{ + struct drm_crtc *crtc; + struct drm_crtc_state *crtc_state; + struct drm_plane *plane; + struct drm_plane_state *plane_state; + int i, ret = 0; + + for_each_plane_in_state(state, plane, plane_state, i) { + crtc = plane_state->crtc; + if (!crtc) + continue; + if (plane->state->zpos != plane_state->zpos) { + crtc_state = + drm_atomic_get_existing_crtc_state(state, crtc); + crtc_state->zpos_changed = true; + } + } + + for_each_crtc_in_state(state, crtc, crtc_state, i) { + if (crtc_state->plane_mask != crtc->state->plane_mask || + crtc_state->zpos_changed) { + ret = drm_atomic_helper_crtc_normalize_zpos(crtc, + crtc_state); + if (ret) + return ret; + } + } + return 0; +} diff --git a/drivers/gpu/drm/drm_crtc_internal.h b/drivers/gpu/drm/drm_crtc_internal.h index 47a500b90fd7..0c34e6d906d1 100644 --- a/drivers/gpu/drm/drm_crtc_internal.h +++ b/drivers/gpu/drm/drm_crtc_internal.h @@ -128,3 +128,7 @@ int drm_mode_atomic_ioctl(struct drm_device *dev, int drm_modeset_register_all(struct drm_device *dev); void drm_modeset_unregister_all(struct drm_device *dev); + +/* drm_blend.c */ +int drm_atomic_helper_normalize_zpos(struct drm_device *dev, + struct drm_atomic_state *state); diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index 3edeaf88ebc0..44e070800b6d 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h @@ -308,6 +308,7 @@ struct drm_plane_helper_funcs; * @mode_changed: crtc_state->mode or crtc_state->enable has been changed * @active_changed: crtc_state->active has been toggled. * @connectors_changed: connectors to this crtc have been updated + * @zpos_changed: zpos values of planes on this crtc have been updated * @color_mgmt_changed: color management properties have changed (degamma or * gamma LUT or CSC matrix) * @plane_mask: bitmask of (1 << drm_plane_index(plane)) of attached planes @@ -344,6 +345,7 @@ struct drm_crtc_state { bool mode_changed : 1; bool active_changed : 1; bool connectors_changed : 1; + bool zpos_changed : 1; bool color_mgmt_changed : 1; /* attached planes bitmask: @@ -1409,6 +1411,9 @@ struct drm_connector { * @src_w: width of visible portion of plane (in 16.16) * @src_h: height of visible portion of plane (in 16.16) * @rotation: rotation of the plane + * @zpos: priority of the given plane on crtc (optional) + * @normalized_zpos: normalized value of zpos: unique, range from 0 to N-1 + * where N is the number of active planes for given crtc * @state: backpointer to global drm_atomic_state */ struct drm_plane_state { @@ -1429,6 +1434,10 @@ struct drm_plane_state { /* Plane rotation */ unsigned int rotation; + /* Plane zpos */ + unsigned int zpos; + unsigned int normalized_zpos; + struct drm_atomic_state *state; }; @@ -1688,6 +1697,7 @@ enum drm_plane_type { * @properties: property tracking for this plane * @type: type of plane (overlay, primary, cursor) * @state: current atomic state for this plane + * @zpos_property: zpos property for this plane * @helper_private: mid-layer private data */ struct drm_plane { @@ -1732,6 +1742,8 @@ struct drm_plane { const struct drm_plane_helper_funcs *helper_private; struct drm_plane_state *state; + + struct drm_property *zpos_property; }; /** @@ -2958,6 +2970,14 @@ extern void drm_crtc_enable_color_mgmt(struct drm_crtc *crtc, uint degamma_lut_size, bool has_ctm, uint gamma_lut_size); + +int drm_plane_create_zpos_property(struct drm_plane *plane, + unsigned int zpos, + unsigned int min, unsigned int max); + +int drm_plane_create_zpos_immutable_property(struct drm_plane *plane, + unsigned int zpos); + /* Helpers */ struct drm_mode_object *drm_mode_object_find(struct drm_device *dev, uint32_t id, uint32_t type); -- cgit v1.2.3-59-g8ed1b From 6fa67e707559303e086303aeecc9e8b91ef497d5 Mon Sep 17 00:00:00 2001 From: Al Viro Date: Sun, 31 Jul 2016 16:37:25 -0400 Subject: get rid of 'parent' argument of ->d_compare() Signed-off-by: Al Viro --- Documentation/filesystems/Locking | 2 +- Documentation/filesystems/porting | 7 +++++++ Documentation/filesystems/vfs.txt | 2 +- drivers/staging/lustre/lustre/llite/dcache.c | 2 +- fs/adfs/dir.c | 2 +- fs/affs/namei.c | 8 ++++---- fs/cifs/dir.c | 2 +- fs/dcache.c | 4 ++-- fs/efivarfs/super.c | 3 +-- fs/fat/namei_msdos.c | 2 +- fs/fat/namei_vfat.c | 4 ++-- fs/hfs/hfs_fs.h | 2 +- fs/hfs/string.c | 2 +- fs/hfsplus/hfsplus_fs.h | 3 +-- fs/hfsplus/unicode.c | 2 +- fs/hpfs/dentry.c | 2 +- fs/isofs/inode.c | 15 ++++++--------- fs/isofs/namei.c | 2 +- fs/jfs/namei.c | 2 +- fs/ncpfs/dir.c | 6 +++--- fs/proc/proc_sysctl.c | 2 +- include/linux/dcache.h | 2 +- 22 files changed, 40 insertions(+), 38 deletions(-) (limited to 'Documentation') diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking index 1b3c39a7de62..d30fb2cb5066 100644 --- a/Documentation/filesystems/Locking +++ b/Documentation/filesystems/Locking @@ -12,7 +12,7 @@ prototypes: int (*d_revalidate)(struct dentry *, unsigned int); int (*d_weak_revalidate)(struct dentry *, unsigned int); int (*d_hash)(const struct dentry *, struct qstr *); - int (*d_compare)(const struct dentry *, const struct dentry *, + int (*d_compare)(const struct dentry *, unsigned int, const char *, const struct qstr *); int (*d_delete)(struct dentry *); int (*d_init)(struct dentry *); diff --git a/Documentation/filesystems/porting b/Documentation/filesystems/porting index a5fb89cac615..b1bd05ea66b2 100644 --- a/Documentation/filesystems/porting +++ b/Documentation/filesystems/porting @@ -585,3 +585,10 @@ in your dentry operations instead. in the instances. Rationale: !@#!@# security_d_instantiate() needs to be called before we attach dentry to inode and !@#!@##!@$!$#!@#$!@$!@$ smack ->d_instantiate() uses not just ->getxattr() but ->setxattr() as well. +-- +[mandatory] + ->d_compare() doesn't get parent as a separate argument anymore. If you + used it for finding the struct super_block involved, dentry->d_sb will + work just as well; if it's something more complicated, use dentry->d_parent. + Just be careful not to assume that fetching it more than once will yield + the same value - in RCU mode it could change under you. diff --git a/Documentation/filesystems/vfs.txt b/Documentation/filesystems/vfs.txt index 8a196851f01d..9ace359d6cc5 100644 --- a/Documentation/filesystems/vfs.txt +++ b/Documentation/filesystems/vfs.txt @@ -931,7 +931,7 @@ struct dentry_operations { int (*d_revalidate)(struct dentry *, unsigned int); int (*d_weak_revalidate)(struct dentry *, unsigned int); int (*d_hash)(const struct dentry *, struct qstr *); - int (*d_compare)(const struct dentry *, const struct dentry *, + int (*d_compare)(const struct dentry *, unsigned int, const char *, const struct qstr *); int (*d_delete)(const struct dentry *); int (*d_init)(struct dentry *); diff --git a/drivers/staging/lustre/lustre/llite/dcache.c b/drivers/staging/lustre/lustre/llite/dcache.c index 581a63a0a63e..463b1a360733 100644 --- a/drivers/staging/lustre/lustre/llite/dcache.c +++ b/drivers/staging/lustre/lustre/llite/dcache.c @@ -78,7 +78,7 @@ static void ll_release(struct dentry *de) * INVALID) so d_lookup() matches it, but we have no lock on it (so * lock_match() fails) and we spin around real_lookup(). */ -static int ll_dcompare(const struct dentry *parent, const struct dentry *dentry, +static int ll_dcompare(const struct dentry *dentry, unsigned int len, const char *str, const struct qstr *name) { diff --git a/fs/adfs/dir.c b/fs/adfs/dir.c index bec25f7017c0..c30a5a65cbb5 100644 --- a/fs/adfs/dir.c +++ b/fs/adfs/dir.c @@ -227,7 +227,7 @@ adfs_hash(const struct dentry *parent, struct qstr *qstr) * requirements of the underlying filesystem. */ static int -adfs_compare(const struct dentry *parent, const struct dentry *dentry, +adfs_compare(const struct dentry *dentry, unsigned int len, const char *str, const struct qstr *name) { int i; diff --git a/fs/affs/namei.c b/fs/affs/namei.c index 27ca732680d9..a2d68f828d53 100644 --- a/fs/affs/namei.c +++ b/fs/affs/namei.c @@ -14,11 +14,11 @@ typedef int (*toupper_t)(int); static int affs_toupper(int ch); static int affs_hash_dentry(const struct dentry *, struct qstr *); -static int affs_compare_dentry(const struct dentry *parent, const struct dentry *dentry, +static int affs_compare_dentry(const struct dentry *dentry, unsigned int len, const char *str, const struct qstr *name); static int affs_intl_toupper(int ch); static int affs_intl_hash_dentry(const struct dentry *, struct qstr *); -static int affs_intl_compare_dentry(const struct dentry *parent, const struct dentry *dentry, +static int affs_intl_compare_dentry(const struct dentry *dentry, unsigned int len, const char *str, const struct qstr *name); const struct dentry_operations affs_dentry_operations = { @@ -131,7 +131,7 @@ static inline int __affs_compare_dentry(unsigned int len, } static int -affs_compare_dentry(const struct dentry *parent, const struct dentry *dentry, +affs_compare_dentry(const struct dentry *dentry, unsigned int len, const char *str, const struct qstr *name) { @@ -140,7 +140,7 @@ affs_compare_dentry(const struct dentry *parent, const struct dentry *dentry, } static int -affs_intl_compare_dentry(const struct dentry *parent, const struct dentry *dentry, +affs_intl_compare_dentry(const struct dentry *dentry, unsigned int len, const char *str, const struct qstr *name) { return __affs_compare_dentry(len, str, name, affs_intl_toupper, diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c index cf394da87cd4..4716c54dbfc6 100644 --- a/fs/cifs/dir.c +++ b/fs/cifs/dir.c @@ -903,7 +903,7 @@ static int cifs_ci_hash(const struct dentry *dentry, struct qstr *q) return 0; } -static int cifs_ci_compare(const struct dentry *parent, const struct dentry *dentry, +static int cifs_ci_compare(const struct dentry *dentry, unsigned int len, const char *str, const struct qstr *name) { struct nls_table *codepage = CIFS_SB(dentry->d_sb)->local_nls; diff --git a/fs/dcache.c b/fs/dcache.c index d9450bd496ac..32a9209c8138 100644 --- a/fs/dcache.c +++ b/fs/dcache.c @@ -2047,7 +2047,7 @@ static inline bool d_same_name(const struct dentry *dentry, return false; return dentry_cmp(dentry, name->name, name->len) == 0; } - return parent->d_op->d_compare(parent, dentry, + return parent->d_op->d_compare(dentry, dentry->d_name.len, dentry->d_name.name, name) == 0; } @@ -2150,7 +2150,7 @@ seqretry: cpu_relax(); goto seqretry; } - if (parent->d_op->d_compare(parent, dentry, + if (parent->d_op->d_compare(dentry, tlen, tname, name) != 0) continue; } else { diff --git a/fs/efivarfs/super.c b/fs/efivarfs/super.c index a5e607e8f056..688ccc16b702 100644 --- a/fs/efivarfs/super.c +++ b/fs/efivarfs/super.c @@ -45,8 +45,7 @@ static struct super_block *efivarfs_sb; * So we need to perform a case-sensitive match on part 1 and a * case-insensitive match on part 2. */ -static int efivarfs_d_compare(const struct dentry *parent, - const struct dentry *dentry, +static int efivarfs_d_compare(const struct dentry *dentry, unsigned int len, const char *str, const struct qstr *name) { diff --git a/fs/fat/namei_msdos.c b/fs/fat/namei_msdos.c index 0f177127e4d6..664655b2c55f 100644 --- a/fs/fat/namei_msdos.c +++ b/fs/fat/namei_msdos.c @@ -162,7 +162,7 @@ static int msdos_hash(const struct dentry *dentry, struct qstr *qstr) * Compare two msdos names. If either of the names are invalid, * we fall back to doing the standard name comparison. */ -static int msdos_cmp(const struct dentry *parent, const struct dentry *dentry, +static int msdos_cmp(const struct dentry *dentry, unsigned int len, const char *str, const struct qstr *name) { struct fat_mount_options *options = &MSDOS_SB(dentry->d_sb)->options; diff --git a/fs/fat/namei_vfat.c b/fs/fat/namei_vfat.c index e60a90841381..0335e504e65a 100644 --- a/fs/fat/namei_vfat.c +++ b/fs/fat/namei_vfat.c @@ -138,7 +138,7 @@ static int vfat_hashi(const struct dentry *dentry, struct qstr *qstr) /* * Case insensitive compare of two vfat names. */ -static int vfat_cmpi(const struct dentry *parent, const struct dentry *dentry, +static int vfat_cmpi(const struct dentry *dentry, unsigned int len, const char *str, const struct qstr *name) { struct nls_table *t = MSDOS_SB(dentry->d_sb)->nls_io; @@ -157,7 +157,7 @@ static int vfat_cmpi(const struct dentry *parent, const struct dentry *dentry, /* * Case sensitive compare of two vfat names. */ -static int vfat_cmp(const struct dentry *parent, const struct dentry *dentry, +static int vfat_cmp(const struct dentry *dentry, unsigned int len, const char *str, const struct qstr *name) { unsigned int alen, blen; diff --git a/fs/hfs/hfs_fs.h b/fs/hfs/hfs_fs.h index ee2f385811c8..f28d7a259105 100644 --- a/fs/hfs/hfs_fs.h +++ b/fs/hfs/hfs_fs.h @@ -233,7 +233,7 @@ extern const struct dentry_operations hfs_dentry_operations; extern int hfs_hash_dentry(const struct dentry *, struct qstr *); extern int hfs_strcmp(const unsigned char *, unsigned int, const unsigned char *, unsigned int); -extern int hfs_compare_dentry(const struct dentry *parent, const struct dentry *dentry, +extern int hfs_compare_dentry(const struct dentry *dentry, unsigned int len, const char *str, const struct qstr *name); /* trans.c */ diff --git a/fs/hfs/string.c b/fs/hfs/string.c index ec9f164c35a5..3912209153a8 100644 --- a/fs/hfs/string.c +++ b/fs/hfs/string.c @@ -92,7 +92,7 @@ int hfs_strcmp(const unsigned char *s1, unsigned int len1, * Test for equality of two strings in the HFS filename character ordering. * return 1 on failure and 0 on success */ -int hfs_compare_dentry(const struct dentry *parent, const struct dentry *dentry, +int hfs_compare_dentry(const struct dentry *dentry, unsigned int len, const char *str, const struct qstr *name) { const unsigned char *n1, *n2; diff --git a/fs/hfsplus/hfsplus_fs.h b/fs/hfsplus/hfsplus_fs.h index 047245bd2cd6..e95c01f1d62e 100644 --- a/fs/hfsplus/hfsplus_fs.h +++ b/fs/hfsplus/hfsplus_fs.h @@ -520,8 +520,7 @@ int hfsplus_uni2asc(struct super_block *sb, const struct hfsplus_unistr *ustr, int hfsplus_asc2uni(struct super_block *sb, struct hfsplus_unistr *ustr, int max_unistr_len, const char *astr, int len); int hfsplus_hash_dentry(const struct dentry *dentry, struct qstr *str); -int hfsplus_compare_dentry(const struct dentry *parent, - const struct dentry *dentry, unsigned int len, +int hfsplus_compare_dentry(const struct dentry *dentry, unsigned int len, const char *str, const struct qstr *name); /* wrapper.c */ diff --git a/fs/hfsplus/unicode.c b/fs/hfsplus/unicode.c index 509d7e231460..e563939882f3 100644 --- a/fs/hfsplus/unicode.c +++ b/fs/hfsplus/unicode.c @@ -385,7 +385,7 @@ int hfsplus_hash_dentry(const struct dentry *dentry, struct qstr *str) * Composed unicode characters are decomposed and case-folding is performed * if the appropriate bits are (un)set on the superblock. */ -int hfsplus_compare_dentry(const struct dentry *parent, const struct dentry *dentry, +int hfsplus_compare_dentry(const struct dentry *dentry, unsigned int len, const char *str, const struct qstr *name) { struct super_block *sb = dentry->d_sb; diff --git a/fs/hpfs/dentry.c b/fs/hpfs/dentry.c index a804300f4dce..bb87d65f0d97 100644 --- a/fs/hpfs/dentry.c +++ b/fs/hpfs/dentry.c @@ -34,7 +34,7 @@ static int hpfs_hash_dentry(const struct dentry *dentry, struct qstr *qstr) return 0; } -static int hpfs_compare_dentry(const struct dentry *parent, const struct dentry *dentry, +static int hpfs_compare_dentry(const struct dentry *dentry, unsigned int len, const char *str, const struct qstr *name) { unsigned al = len; diff --git a/fs/isofs/inode.c b/fs/isofs/inode.c index 761fade7680f..ad0c745ebad7 100644 --- a/fs/isofs/inode.c +++ b/fs/isofs/inode.c @@ -29,18 +29,15 @@ #define BEQUIET static int isofs_hashi(const struct dentry *parent, struct qstr *qstr); -static int isofs_dentry_cmpi(const struct dentry *parent, - const struct dentry *dentry, +static int isofs_dentry_cmpi(const struct dentry *dentry, unsigned int len, const char *str, const struct qstr *name); #ifdef CONFIG_JOLIET static int isofs_hashi_ms(const struct dentry *parent, struct qstr *qstr); static int isofs_hash_ms(const struct dentry *parent, struct qstr *qstr); -static int isofs_dentry_cmpi_ms(const struct dentry *parent, - const struct dentry *dentry, +static int isofs_dentry_cmpi_ms(const struct dentry *dentry, unsigned int len, const char *str, const struct qstr *name); -static int isofs_dentry_cmp_ms(const struct dentry *parent, - const struct dentry *dentry, +static int isofs_dentry_cmp_ms(const struct dentry *dentry, unsigned int len, const char *str, const struct qstr *name); #endif @@ -235,7 +232,7 @@ isofs_hashi(const struct dentry *dentry, struct qstr *qstr) } static int -isofs_dentry_cmpi(const struct dentry *parent, const struct dentry *dentry, +isofs_dentry_cmpi(const struct dentry *dentry, unsigned int len, const char *str, const struct qstr *name) { return isofs_dentry_cmp_common(len, str, name, 0, 1); @@ -276,14 +273,14 @@ isofs_hashi_ms(const struct dentry *dentry, struct qstr *qstr) } static int -isofs_dentry_cmp_ms(const struct dentry *parent, const struct dentry *dentry, +isofs_dentry_cmp_ms(const struct dentry *dentry, unsigned int len, const char *str, const struct qstr *name) { return isofs_dentry_cmp_common(len, str, name, 1, 0); } static int -isofs_dentry_cmpi_ms(const struct dentry *parent, const struct dentry *dentry, +isofs_dentry_cmpi_ms(const struct dentry *dentry, unsigned int len, const char *str, const struct qstr *name) { return isofs_dentry_cmp_common(len, str, name, 1, 1); diff --git a/fs/isofs/namei.c b/fs/isofs/namei.c index 7b543e6b6526..aee592767f1d 100644 --- a/fs/isofs/namei.c +++ b/fs/isofs/namei.c @@ -22,7 +22,7 @@ isofs_cmp(struct dentry *dentry, const char *compare, int dlen) qstr.len = dlen; if (likely(!dentry->d_op)) return dentry->d_name.len != dlen || memcmp(dentry->d_name.name, compare, dlen); - return dentry->d_op->d_compare(NULL, NULL, dentry->d_name.len, dentry->d_name.name, &qstr); + return dentry->d_op->d_compare(NULL, dentry->d_name.len, dentry->d_name.name, &qstr); } /* diff --git a/fs/jfs/namei.c b/fs/jfs/namei.c index 04baf0dfc40c..814b0c58016c 100644 --- a/fs/jfs/namei.c +++ b/fs/jfs/namei.c @@ -1572,7 +1572,7 @@ static int jfs_ci_hash(const struct dentry *dir, struct qstr *this) return 0; } -static int jfs_ci_compare(const struct dentry *parent, const struct dentry *dentry, +static int jfs_ci_compare(const struct dentry *dentry, unsigned int len, const char *str, const struct qstr *name) { int i, result = 1; diff --git a/fs/ncpfs/dir.c b/fs/ncpfs/dir.c index 9add7ab747a5..17de5c13dfae 100644 --- a/fs/ncpfs/dir.c +++ b/fs/ncpfs/dir.c @@ -74,7 +74,7 @@ const struct inode_operations ncp_dir_inode_operations = */ static int ncp_lookup_validate(struct dentry *, unsigned int); static int ncp_hash_dentry(const struct dentry *, struct qstr *); -static int ncp_compare_dentry(const struct dentry *, const struct dentry *, +static int ncp_compare_dentry(const struct dentry *, unsigned int, const char *, const struct qstr *); static int ncp_delete_dentry(const struct dentry *); static void ncp_d_prune(struct dentry *dentry); @@ -154,7 +154,7 @@ ncp_hash_dentry(const struct dentry *dentry, struct qstr *this) * the callers will handle races. */ static int -ncp_compare_dentry(const struct dentry *parent, const struct dentry *dentry, +ncp_compare_dentry(const struct dentry *dentry, unsigned int len, const char *str, const struct qstr *name) { struct inode *pinode; @@ -162,7 +162,7 @@ ncp_compare_dentry(const struct dentry *parent, const struct dentry *dentry, if (len != name->len) return 1; - pinode = d_inode_rcu(parent); + pinode = d_inode_rcu(dentry->d_parent); if (!pinode) return 1; diff --git a/fs/proc/proc_sysctl.c b/fs/proc/proc_sysctl.c index b59db94d2ff4..30bb00130d0f 100644 --- a/fs/proc/proc_sysctl.c +++ b/fs/proc/proc_sysctl.c @@ -834,7 +834,7 @@ static int sysctl_is_seen(struct ctl_table_header *p) return res; } -static int proc_sys_compare(const struct dentry *parent, const struct dentry *dentry, +static int proc_sys_compare(const struct dentry *dentry, unsigned int len, const char *str, const struct qstr *name) { struct ctl_table_header *head; diff --git a/include/linux/dcache.h b/include/linux/dcache.h index 98044a8d1487..107d9abe7166 100644 --- a/include/linux/dcache.h +++ b/include/linux/dcache.h @@ -130,7 +130,7 @@ struct dentry_operations { int (*d_revalidate)(struct dentry *, unsigned int); int (*d_weak_revalidate)(struct dentry *, unsigned int); int (*d_hash)(const struct dentry *, struct qstr *); - int (*d_compare)(const struct dentry *, const struct dentry *, + int (*d_compare)(const struct dentry *, unsigned int, const char *, const struct qstr *); int (*d_delete)(const struct dentry *); int (*d_init)(struct dentry *); -- cgit v1.2.3-59-g8ed1b From 3197704cae5e00d9c78563d2fa4647b576a49fef Mon Sep 17 00:00:00 2001 From: Robert Dolca Date: Thu, 28 Jul 2016 14:28:46 -0700 Subject: Input: add driver for Silead touchscreens This driver adds support for Silead touchscreens. It has been tested with GSL1680 and GSL3680 touch panels. It supports ACPI and device tree enumeration. Screen resolution, the maximum number of fingers supported and firmware name are configurable. Signed-off-by: Robert Dolca Signed-off-by: Daniel Jansen Signed-off-by: Hans de Goede Signed-off-by: Dmitry Torokhov --- .../bindings/input/touchscreen/silead_gsl1680.txt | 36 ++ drivers/input/touchscreen/Kconfig | 12 + drivers/input/touchscreen/Makefile | 1 + drivers/input/touchscreen/silead.c | 568 +++++++++++++++++++++ 4 files changed, 617 insertions(+) create mode 100644 Documentation/devicetree/bindings/input/touchscreen/silead_gsl1680.txt create mode 100644 drivers/input/touchscreen/silead.c (limited to 'Documentation') diff --git a/Documentation/devicetree/bindings/input/touchscreen/silead_gsl1680.txt b/Documentation/devicetree/bindings/input/touchscreen/silead_gsl1680.txt new file mode 100644 index 000000000000..1112e0d794e1 --- /dev/null +++ b/Documentation/devicetree/bindings/input/touchscreen/silead_gsl1680.txt @@ -0,0 +1,36 @@ +* GSL 1680 touchscreen controller + +Required properties: +- compatible : "silead,gsl1680" +- reg : I2C slave address of the chip (0x40) +- interrupt-parent : a phandle pointing to the interrupt controller + serving the interrupt for this chip +- interrupts : interrupt specification for the gsl1680 interrupt +- power-gpios : Specification for the pin connected to the gsl1680's + shutdown input. This needs to be driven high to take the + gsl1680 out of its low power state +- touchscreen-size-x : See touchscreen.txt +- touchscreen-size-y : See touchscreen.txt + +Optional properties: +- touchscreen-inverted-x : See touchscreen.txt +- touchscreen-inverted-y : See touchscreen.txt +- touchscreen-swapped-x-y : See touchscreen.txt +- silead,max-fingers : maximum number of fingers the touchscreen can detect + +Example: + +i2c@00000000 { + gsl1680: touchscreen@40 { + compatible = "silead,gsl1680"; + reg = <0x40>; + interrupt-parent = <&pio>; + interrupts = <6 11 IRQ_TYPE_EDGE_FALLING>; + power-gpios = <&pio 1 3 GPIO_ACTIVE_HIGH>; + touchscreen-size-x = <480>; + touchscreen-size-y = <800>; + touchscreen-inverted-x; + touchscreen-swapped-x-y; + silead,max-fingers = <5>; + }; +}; diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig index ee02dc7422bd..6abcd1766092 100644 --- a/drivers/input/touchscreen/Kconfig +++ b/drivers/input/touchscreen/Kconfig @@ -1059,6 +1059,18 @@ config TOUCHSCREEN_RM_TS To compile this driver as a module, choose M here: the module will be called raydium_i2c_ts. +config TOUCHSCREEN_SILEAD + tristate "Silead I2C touchscreen" + depends on I2C + help + Say Y here if you have the Silead touchscreen connected to + your system. + + If unsure, say N. + + To compile this driver as a module, choose M here: the + module will be called silead. + config TOUCHSCREEN_ST1232 tristate "Sitronix ST1232 touchscreen controllers" depends on I2C diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile index 3315882905f7..3b598c901677 100644 --- a/drivers/input/touchscreen/Makefile +++ b/drivers/input/touchscreen/Makefile @@ -64,6 +64,7 @@ obj-$(CONFIG_TOUCHSCREEN_PENMOUNT) += penmount.o obj-$(CONFIG_TOUCHSCREEN_PIXCIR) += pixcir_i2c_ts.o obj-$(CONFIG_TOUCHSCREEN_RM_TS) += raydium_i2c_ts.o obj-$(CONFIG_TOUCHSCREEN_S3C2410) += s3c2410_ts.o +obj-$(CONFIG_TOUCHSCREEN_SILEAD) += silead.o obj-$(CONFIG_TOUCHSCREEN_ST1232) += st1232.o obj-$(CONFIG_TOUCHSCREEN_STMPE) += stmpe-ts.o obj-$(CONFIG_TOUCHSCREEN_SUN4I) += sun4i-ts.o diff --git a/drivers/input/touchscreen/silead.c b/drivers/input/touchscreen/silead.c new file mode 100644 index 000000000000..5f55167855d3 --- /dev/null +++ b/drivers/input/touchscreen/silead.c @@ -0,0 +1,568 @@ +/* ------------------------------------------------------------------------- + * Copyright (C) 2014-2015, Intel Corporation + * + * Derived from: + * gslX68X.c + * Copyright (C) 2010-2015, Shanghai Sileadinc Co.Ltd + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * ------------------------------------------------------------------------- + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#define SILEAD_TS_NAME "silead_ts" + +#define SILEAD_REG_RESET 0xE0 +#define SILEAD_REG_DATA 0x80 +#define SILEAD_REG_TOUCH_NR 0x80 +#define SILEAD_REG_POWER 0xBC +#define SILEAD_REG_CLOCK 0xE4 +#define SILEAD_REG_STATUS 0xB0 +#define SILEAD_REG_ID 0xFC +#define SILEAD_REG_MEM_CHECK 0xB0 + +#define SILEAD_STATUS_OK 0x5A5A5A5A +#define SILEAD_TS_DATA_LEN 44 +#define SILEAD_CLOCK 0x04 + +#define SILEAD_CMD_RESET 0x88 +#define SILEAD_CMD_START 0x00 + +#define SILEAD_POINT_DATA_LEN 0x04 +#define SILEAD_POINT_Y_OFF 0x00 +#define SILEAD_POINT_Y_MSB_OFF 0x01 +#define SILEAD_POINT_X_OFF 0x02 +#define SILEAD_POINT_X_MSB_OFF 0x03 +#define SILEAD_TOUCH_ID_MASK 0xF0 + +#define SILEAD_CMD_SLEEP_MIN 10000 +#define SILEAD_CMD_SLEEP_MAX 20000 +#define SILEAD_POWER_SLEEP 20 +#define SILEAD_STARTUP_SLEEP 30 + +#define SILEAD_MAX_FINGERS 10 + +enum silead_ts_power { + SILEAD_POWER_ON = 1, + SILEAD_POWER_OFF = 0 +}; + +struct silead_ts_data { + struct i2c_client *client; + struct gpio_desc *gpio_power; + struct input_dev *input; + char fw_name[64]; + struct touchscreen_properties prop; + u32 max_fingers; + u32 chip_id; + struct input_mt_pos pos[SILEAD_MAX_FINGERS]; + int slots[SILEAD_MAX_FINGERS]; + int id[SILEAD_MAX_FINGERS]; +}; + +struct silead_fw_data { + u32 offset; + u32 val; +}; + +static int silead_ts_request_input_dev(struct silead_ts_data *data) +{ + struct device *dev = &data->client->dev; + int error; + + data->input = devm_input_allocate_device(dev); + if (!data->input) { + dev_err(dev, + "Failed to allocate input device\n"); + return -ENOMEM; + } + + input_set_abs_params(data->input, ABS_MT_POSITION_X, 0, 4095, 0, 0); + input_set_abs_params(data->input, ABS_MT_POSITION_Y, 0, 4095, 0, 0); + touchscreen_parse_properties(data->input, true, &data->prop); + + input_mt_init_slots(data->input, data->max_fingers, + INPUT_MT_DIRECT | INPUT_MT_DROP_UNUSED | + INPUT_MT_TRACK); + + data->input->name = SILEAD_TS_NAME; + data->input->phys = "input/ts"; + data->input->id.bustype = BUS_I2C; + + error = input_register_device(data->input); + if (error) { + dev_err(dev, "Failed to register input device: %d\n", error); + return error; + } + + return 0; +} + +static void silead_ts_set_power(struct i2c_client *client, + enum silead_ts_power state) +{ + struct silead_ts_data *data = i2c_get_clientdata(client); + + if (data->gpio_power) { + gpiod_set_value_cansleep(data->gpio_power, state); + msleep(SILEAD_POWER_SLEEP); + } +} + +static void silead_ts_read_data(struct i2c_client *client) +{ + struct silead_ts_data *data = i2c_get_clientdata(client); + struct input_dev *input = data->input; + struct device *dev = &client->dev; + u8 *bufp, buf[SILEAD_TS_DATA_LEN]; + int touch_nr, error, i; + + error = i2c_smbus_read_i2c_block_data(client, SILEAD_REG_DATA, + SILEAD_TS_DATA_LEN, buf); + if (error < 0) { + dev_err(dev, "Data read error %d\n", error); + return; + } + + touch_nr = buf[0]; + if (touch_nr < 0) + return; + + if (touch_nr > data->max_fingers) { + dev_warn(dev, "More touches reported then supported %d > %d\n", + touch_nr, data->max_fingers); + touch_nr = data->max_fingers; + } + + bufp = buf + SILEAD_POINT_DATA_LEN; + for (i = 0; i < touch_nr; i++, bufp += SILEAD_POINT_DATA_LEN) { + /* Bits 4-7 are the touch id */ + data->id[i] = (bufp[SILEAD_POINT_X_MSB_OFF] & + SILEAD_TOUCH_ID_MASK) >> 4; + touchscreen_set_mt_pos(&data->pos[i], &data->prop, + get_unaligned_le16(&bufp[SILEAD_POINT_X_OFF]) & 0xfff, + get_unaligned_le16(&bufp[SILEAD_POINT_Y_OFF]) & 0xfff); + } + + input_mt_assign_slots(input, data->slots, data->pos, touch_nr, 0); + + for (i = 0; i < touch_nr; i++) { + input_mt_slot(input, data->slots[i]); + input_mt_report_slot_state(input, MT_TOOL_FINGER, true); + input_report_abs(input, ABS_MT_POSITION_X, data->pos[i].x); + input_report_abs(input, ABS_MT_POSITION_Y, data->pos[i].y); + + dev_dbg(dev, "x=%d y=%d hw_id=%d sw_id=%d\n", data->pos[i].x, + data->pos[i].y, data->id[i], data->slots[i]); + } + + input_mt_sync_frame(input); + input_sync(input); +} + +static int silead_ts_init(struct i2c_client *client) +{ + struct silead_ts_data *data = i2c_get_clientdata(client); + int error; + + error = i2c_smbus_write_byte_data(client, SILEAD_REG_RESET, + SILEAD_CMD_RESET); + if (error) + goto i2c_write_err; + usleep_range(SILEAD_CMD_SLEEP_MIN, SILEAD_CMD_SLEEP_MAX); + + error = i2c_smbus_write_byte_data(client, SILEAD_REG_TOUCH_NR, + data->max_fingers); + if (error) + goto i2c_write_err; + usleep_range(SILEAD_CMD_SLEEP_MIN, SILEAD_CMD_SLEEP_MAX); + + error = i2c_smbus_write_byte_data(client, SILEAD_REG_CLOCK, + SILEAD_CLOCK); + if (error) + goto i2c_write_err; + usleep_range(SILEAD_CMD_SLEEP_MIN, SILEAD_CMD_SLEEP_MAX); + + error = i2c_smbus_write_byte_data(client, SILEAD_REG_RESET, + SILEAD_CMD_START); + if (error) + goto i2c_write_err; + usleep_range(SILEAD_CMD_SLEEP_MIN, SILEAD_CMD_SLEEP_MAX); + + return 0; + +i2c_write_err: + dev_err(&client->dev, "Registers clear error %d\n", error); + return error; +} + +static int silead_ts_reset(struct i2c_client *client) +{ + int error; + + error = i2c_smbus_write_byte_data(client, SILEAD_REG_RESET, + SILEAD_CMD_RESET); + if (error) + goto i2c_write_err; + usleep_range(SILEAD_CMD_SLEEP_MIN, SILEAD_CMD_SLEEP_MAX); + + error = i2c_smbus_write_byte_data(client, SILEAD_REG_CLOCK, + SILEAD_CLOCK); + if (error) + goto i2c_write_err; + usleep_range(SILEAD_CMD_SLEEP_MIN, SILEAD_CMD_SLEEP_MAX); + + error = i2c_smbus_write_byte_data(client, SILEAD_REG_POWER, + SILEAD_CMD_START); + if (error) + goto i2c_write_err; + usleep_range(SILEAD_CMD_SLEEP_MIN, SILEAD_CMD_SLEEP_MAX); + + return 0; + +i2c_write_err: + dev_err(&client->dev, "Chip reset error %d\n", error); + return error; +} + +static int silead_ts_startup(struct i2c_client *client) +{ + int error; + + error = i2c_smbus_write_byte_data(client, SILEAD_REG_RESET, 0x00); + if (error) { + dev_err(&client->dev, "Startup error %d\n", error); + return error; + } + + msleep(SILEAD_STARTUP_SLEEP); + + return 0; +} + +static int silead_ts_load_fw(struct i2c_client *client) +{ + struct device *dev = &client->dev; + struct silead_ts_data *data = i2c_get_clientdata(client); + unsigned int fw_size, i; + const struct firmware *fw; + struct silead_fw_data *fw_data; + int error; + + dev_dbg(dev, "Firmware file name: %s", data->fw_name); + + error = request_firmware(&fw, data->fw_name, dev); + if (error) { + dev_err(dev, "Firmware request error %d\n", error); + return error; + } + + fw_size = fw->size / sizeof(*fw_data); + fw_data = (struct silead_fw_data *)fw->data; + + for (i = 0; i < fw_size; i++) { + error = i2c_smbus_write_i2c_block_data(client, + fw_data[i].offset, + 4, + (u8 *)&fw_data[i].val); + if (error) { + dev_err(dev, "Firmware load error %d\n", error); + break; + } + } + + release_firmware(fw); + return error ?: 0; +} + +static u32 silead_ts_get_status(struct i2c_client *client) +{ + int error; + __le32 status; + + error = i2c_smbus_read_i2c_block_data(client, SILEAD_REG_STATUS, + sizeof(status), (u8 *)&status); + if (error < 0) { + dev_err(&client->dev, "Status read error %d\n", error); + return error; + } + + return le32_to_cpu(status); +} + +static int silead_ts_get_id(struct i2c_client *client) +{ + struct silead_ts_data *data = i2c_get_clientdata(client); + __le32 chip_id; + int error; + + error = i2c_smbus_read_i2c_block_data(client, SILEAD_REG_ID, + sizeof(chip_id), (u8 *)&chip_id); + if (error < 0) { + dev_err(&client->dev, "Chip ID read error %d\n", error); + return error; + } + + data->chip_id = le32_to_cpu(chip_id); + dev_info(&client->dev, "Silead chip ID: 0x%8X", data->chip_id); + + return 0; +} + +static int silead_ts_setup(struct i2c_client *client) +{ + int error; + u32 status; + + silead_ts_set_power(client, SILEAD_POWER_OFF); + silead_ts_set_power(client, SILEAD_POWER_ON); + + error = silead_ts_get_id(client); + if (error) + return error; + + error = silead_ts_init(client); + if (error) + return error; + + error = silead_ts_reset(client); + if (error) + return error; + + error = silead_ts_load_fw(client); + if (error) + return error; + + error = silead_ts_startup(client); + if (error) + return error; + + status = silead_ts_get_status(client); + if (status != SILEAD_STATUS_OK) { + dev_err(&client->dev, + "Initialization error, status: 0x%X\n", status); + return -ENODEV; + } + + return 0; +} + +static irqreturn_t silead_ts_threaded_irq_handler(int irq, void *id) +{ + struct silead_ts_data *data = id; + struct i2c_client *client = data->client; + + silead_ts_read_data(client); + + return IRQ_HANDLED; +} + +static void silead_ts_read_props(struct i2c_client *client) +{ + struct silead_ts_data *data = i2c_get_clientdata(client); + struct device *dev = &client->dev; + const char *str; + int error; + + error = device_property_read_u32(dev, "silead,max-fingers", + &data->max_fingers); + if (error) { + dev_dbg(dev, "Max fingers read error %d\n", error); + data->max_fingers = 5; /* Most devices handle up-to 5 fingers */ + } + + error = device_property_read_string(dev, "touchscreen-fw-name", &str); + if (!error) + snprintf(data->fw_name, sizeof(data->fw_name), "%s", str); + else + dev_dbg(dev, "Firmware file name read error. Using default."); +} + +#ifdef CONFIG_ACPI +static int silead_ts_set_default_fw_name(struct silead_ts_data *data, + const struct i2c_device_id *id) +{ + const struct acpi_device_id *acpi_id; + struct device *dev = &data->client->dev; + int i; + + if (ACPI_HANDLE(dev)) { + acpi_id = acpi_match_device(dev->driver->acpi_match_table, dev); + if (!acpi_id) + return -ENODEV; + + snprintf(data->fw_name, sizeof(data->fw_name), "%s.fw", + acpi_id->id); + + for (i = 0; i < strlen(data->fw_name); i++) + data->fw_name[i] = tolower(data->fw_name[i]); + } else { + snprintf(data->fw_name, sizeof(data->fw_name), "%s.fw", + id->name); + } + + return 0; +} +#else +static int silead_ts_set_default_fw_name(struct silead_ts_data *data, + const struct i2c_device_id *id) +{ + snprintf(data->fw_name, sizeof(data->fw_name), "%s.fw", id->name); + return 0; +} +#endif + +static int silead_ts_probe(struct i2c_client *client, + const struct i2c_device_id *id) +{ + struct silead_ts_data *data; + struct device *dev = &client->dev; + int error; + + if (!i2c_check_functionality(client->adapter, + I2C_FUNC_I2C | + I2C_FUNC_SMBUS_READ_I2C_BLOCK | + I2C_FUNC_SMBUS_WRITE_I2C_BLOCK)) { + dev_err(dev, "I2C functionality check failed\n"); + return -ENXIO; + } + + data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); + if (!data) + return -ENOMEM; + + i2c_set_clientdata(client, data); + data->client = client; + + error = silead_ts_set_default_fw_name(data, id); + if (error) + return error; + + silead_ts_read_props(client); + + /* We must have the IRQ provided by DT or ACPI subsytem */ + if (client->irq <= 0) + return -ENODEV; + + /* Power GPIO pin */ + data->gpio_power = gpiod_get_optional(dev, "power", GPIOD_OUT_LOW); + if (IS_ERR(data->gpio_power)) { + if (PTR_ERR(data->gpio_power) != -EPROBE_DEFER) + dev_err(dev, "Shutdown GPIO request failed\n"); + return PTR_ERR(data->gpio_power); + } + + error = silead_ts_setup(client); + if (error) + return error; + + error = silead_ts_request_input_dev(data); + if (error) + return error; + + error = devm_request_threaded_irq(dev, client->irq, + NULL, silead_ts_threaded_irq_handler, + IRQF_ONESHOT, client->name, data); + if (error) { + if (error != -EPROBE_DEFER) + dev_err(dev, "IRQ request failed %d\n", error); + return error; + } + + return 0; +} + +static int __maybe_unused silead_ts_suspend(struct device *dev) +{ + struct i2c_client *client = to_i2c_client(dev); + + silead_ts_set_power(client, SILEAD_POWER_OFF); + return 0; +} + +static int __maybe_unused silead_ts_resume(struct device *dev) +{ + struct i2c_client *client = to_i2c_client(dev); + int error, status; + + silead_ts_set_power(client, SILEAD_POWER_ON); + + error = silead_ts_reset(client); + if (error) + return error; + + error = silead_ts_startup(client); + if (error) + return error; + + status = silead_ts_get_status(client); + if (status != SILEAD_STATUS_OK) { + dev_err(dev, "Resume error, status: 0x%02x\n", status); + return -ENODEV; + } + + return 0; +} + +static SIMPLE_DEV_PM_OPS(silead_ts_pm, silead_ts_suspend, silead_ts_resume); + +static const struct i2c_device_id silead_ts_id[] = { + { "gsl1680", 0 }, + { "gsl1688", 0 }, + { "gsl3670", 0 }, + { "gsl3675", 0 }, + { "gsl3692", 0 }, + { "mssl1680", 0 }, + { } +}; +MODULE_DEVICE_TABLE(i2c, silead_ts_id); + +#ifdef CONFIG_ACPI +static const struct acpi_device_id silead_ts_acpi_match[] = { + { "GSL1680", 0 }, + { "GSL1688", 0 }, + { "GSL3670", 0 }, + { "GSL3675", 0 }, + { "GSL3692", 0 }, + { "MSSL1680", 0 }, + { } +}; +MODULE_DEVICE_TABLE(acpi, silead_ts_acpi_match); +#endif + +static struct i2c_driver silead_ts_driver = { + .probe = silead_ts_probe, + .id_table = silead_ts_id, + .driver = { + .name = SILEAD_TS_NAME, + .acpi_match_table = ACPI_PTR(silead_ts_acpi_match), + .pm = &silead_ts_pm, + }, +}; +module_i2c_driver(silead_ts_driver); + +MODULE_AUTHOR("Robert Dolca "); +MODULE_DESCRIPTION("Silead I2C touchscreen driver"); +MODULE_LICENSE("GPL"); -- cgit v1.2.3-59-g8ed1b From a485cb037fe64367ec14813f018edb87799c5eb1 Mon Sep 17 00:00:00 2001 From: Mika Penttilä Date: Tue, 2 Aug 2016 23:52:32 -0700 Subject: Input: add driver for SiS 9200 family I2C touchscreen controllers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is a driver for SiS 9200 family touchscreen controllers using I2C bus. Signed-off-by: Mika Penttilä Acked-by: Tammy Tseng Acked-by: Yuger Yu Signed-off-by: Dmitry Torokhov --- .../bindings/input/touchscreen/sis_i2c.txt | 33 ++ .../devicetree/bindings/vendor-prefixes.txt | 1 + drivers/input/touchscreen/Kconfig | 12 + drivers/input/touchscreen/Makefile | 1 + drivers/input/touchscreen/sis_i2c.c | 413 +++++++++++++++++++++ 5 files changed, 460 insertions(+) create mode 100644 Documentation/devicetree/bindings/input/touchscreen/sis_i2c.txt create mode 100644 drivers/input/touchscreen/sis_i2c.c (limited to 'Documentation') diff --git a/Documentation/devicetree/bindings/input/touchscreen/sis_i2c.txt b/Documentation/devicetree/bindings/input/touchscreen/sis_i2c.txt new file mode 100644 index 000000000000..d87ad14f1efe --- /dev/null +++ b/Documentation/devicetree/bindings/input/touchscreen/sis_i2c.txt @@ -0,0 +1,33 @@ +* SiS I2C Multiple Touch Controller + +Required properties: +- compatible: must be "sis,9200-ts" +- reg: i2c slave address +- interrupt-parent: the phandle for the interrupt controller + (see interrupt binding [0]) +- interrupts: touch controller interrupt (see interrupt + binding [0]) + +Optional properties: +- pinctrl-names: should be "default" (see pinctrl binding [1]). +- pinctrl-0: a phandle pointing to the pin settings for the + device (see pinctrl binding [1]). +- attn-gpios: the gpio pin used as attention line +- reset-gpios: the gpio pin used to reset the controller +- wakeup-source: touchscreen can be used as a wakeup source + +[0]: Documentation/devicetree/bindings/interrupt-controller/interrupts.txt +[1]: Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt + +Example: + + sis9255@5c { + compatible = "sis,9200-ts"; + reg = <0x5c>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_sis>; + interrupt-parent = <&gpio3>; + interrupts = <19 IRQ_TYPE_EDGE_FALLING>; + irq-gpios = <&gpio3 19 GPIO_ACTIVE_LOW>; + reset-gpios = <&gpio2 30 GPIO_ACTIVE_LOW>; + }; diff --git a/Documentation/devicetree/bindings/vendor-prefixes.txt b/Documentation/devicetree/bindings/vendor-prefixes.txt index 80fdbe2ce088..99029cfed459 100644 --- a/Documentation/devicetree/bindings/vendor-prefixes.txt +++ b/Documentation/devicetree/bindings/vendor-prefixes.txt @@ -221,6 +221,7 @@ simtek sii Seiko Instruments, Inc. silergy Silergy Corp. sirf SiRF Technology, Inc. +sis Silicon Integrated Systems Corp. sitronix Sitronix Technology Corporation skyworks Skyworks Solutions, Inc. smsc Standard Microsystems Corporation diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig index 6abcd1766092..8d893cefb0e3 100644 --- a/drivers/input/touchscreen/Kconfig +++ b/drivers/input/touchscreen/Kconfig @@ -1071,6 +1071,18 @@ config TOUCHSCREEN_SILEAD To compile this driver as a module, choose M here: the module will be called silead. +config TOUCHSCREEN_SIS_I2C + tristate "SiS 9200 family I2C touchscreen" + depends on I2C + depends on GPIOLIB || COMPILE_TEST + help + This enables support for SiS 9200 family over I2C based touchscreens. + + If unsure, say N. + + To compile this driver as a module, choose M here: the + module will be called sis_i2c. + config TOUCHSCREEN_ST1232 tristate "Sitronix ST1232 touchscreen controllers" depends on I2C diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile index 3b598c901677..b4373d6be402 100644 --- a/drivers/input/touchscreen/Makefile +++ b/drivers/input/touchscreen/Makefile @@ -65,6 +65,7 @@ obj-$(CONFIG_TOUCHSCREEN_PIXCIR) += pixcir_i2c_ts.o obj-$(CONFIG_TOUCHSCREEN_RM_TS) += raydium_i2c_ts.o obj-$(CONFIG_TOUCHSCREEN_S3C2410) += s3c2410_ts.o obj-$(CONFIG_TOUCHSCREEN_SILEAD) += silead.o +obj-$(CONFIG_TOUCHSCREEN_SIS_I2C) += sis_i2c.o obj-$(CONFIG_TOUCHSCREEN_ST1232) += st1232.o obj-$(CONFIG_TOUCHSCREEN_STMPE) += stmpe-ts.o obj-$(CONFIG_TOUCHSCREEN_SUN4I) += sun4i-ts.o diff --git a/drivers/input/touchscreen/sis_i2c.c b/drivers/input/touchscreen/sis_i2c.c new file mode 100644 index 000000000000..8d93f8c9a403 --- /dev/null +++ b/drivers/input/touchscreen/sis_i2c.c @@ -0,0 +1,413 @@ +/* + * Touch Screen driver for SiS 9200 family I2C Touch panels + * + * Copyright (C) 2015 SiS, Inc. + * Copyright (C) 2016 Nextfour Group + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define SIS_I2C_NAME "sis_i2c_ts" + +/* + * The I2C packet format: + * le16 byte count + * u8 Report ID + * + * u8 Number of contacts + * le16 Scan Time (optional) + * le16 CRC + * + * One touch point information consists of 6+ bytes, the order is: + * u8 contact state + * u8 finger id + * le16 x axis + * le16 y axis + * u8 contact width (optional) + * u8 contact height (optional) + * u8 pressure (optional) + * + * Maximum amount of data transmitted in one shot is 64 bytes, if controller + * needs to report more contacts than fit in one packet it will send true + * number of contacts in first packet and 0 as number of contacts in second + * packet. + */ + +#define SIS_MAX_PACKET_SIZE 64 + +#define SIS_PKT_LEN_OFFSET 0 +#define SIS_PKT_REPORT_OFFSET 2 /* Report ID/type */ +#define SIS_PKT_CONTACT_OFFSET 3 /* First contact */ + +#define SIS_SCAN_TIME_LEN 2 + +/* Supported report types */ +#define SIS_ALL_IN_ONE_PACKAGE 0x10 +#define SIS_PKT_IS_TOUCH(x) (((x) & 0x0f) == 0x01) +#define SIS_PKT_IS_HIDI2C(x) (((x) & 0x0f) == 0x06) + +/* Contact properties within report */ +#define SIS_PKT_HAS_AREA(x) ((x) & BIT(4)) +#define SIS_PKT_HAS_PRESSURE(x) ((x) & BIT(5)) +#define SIS_PKT_HAS_SCANTIME(x) ((x) & BIT(6)) + +/* Contact size */ +#define SIS_BASE_LEN_PER_CONTACT 6 +#define SIS_AREA_LEN_PER_CONTACT 2 +#define SIS_PRESSURE_LEN_PER_CONTACT 1 + +/* Offsets within contact data */ +#define SIS_CONTACT_STATUS_OFFSET 0 +#define SIS_CONTACT_ID_OFFSET 1 /* Contact ID */ +#define SIS_CONTACT_X_OFFSET 2 +#define SIS_CONTACT_Y_OFFSET 4 +#define SIS_CONTACT_WIDTH_OFFSET 6 +#define SIS_CONTACT_HEIGHT_OFFSET 7 +#define SIS_CONTACT_PRESSURE_OFFSET(id) (SIS_PKT_HAS_AREA(id) ? 8 : 6) + +/* Individual contact state */ +#define SIS_STATUS_UP 0x0 +#define SIS_STATUS_DOWN 0x3 + +/* Touchscreen parameters */ +#define SIS_MAX_FINGERS 10 +#define SIS_MAX_X 4095 +#define SIS_MAX_Y 4095 +#define SIS_MAX_PRESSURE 255 + +/* Resolution diagonal */ +#define SIS_AREA_LENGTH_LONGER 5792 +/*((SIS_MAX_X^2) + (SIS_MAX_Y^2))^0.5*/ +#define SIS_AREA_LENGTH_SHORT 5792 +#define SIS_AREA_UNIT (5792 / 32) + +struct sis_ts_data { + struct i2c_client *client; + struct input_dev *input; + + struct gpio_desc *attn_gpio; + struct gpio_desc *reset_gpio; + + u8 packet[SIS_MAX_PACKET_SIZE]; +}; + +static int sis_read_packet(struct i2c_client *client, u8 *buf, + unsigned int *num_contacts, + unsigned int *contact_size) +{ + int count_idx; + int ret; + u16 len; + u16 crc, pkg_crc; + u8 report_id; + + ret = i2c_master_recv(client, buf, SIS_MAX_PACKET_SIZE); + if (ret <= 0) + return -EIO; + + len = get_unaligned_le16(&buf[SIS_PKT_LEN_OFFSET]); + if (len > SIS_MAX_PACKET_SIZE) { + dev_err(&client->dev, + "%s: invalid packet length (%d vs %d)\n", + __func__, len, SIS_MAX_PACKET_SIZE); + return -E2BIG; + } + + if (len < 10) + return -EINVAL; + + report_id = buf[SIS_PKT_REPORT_OFFSET]; + count_idx = len - 1; + *contact_size = SIS_BASE_LEN_PER_CONTACT; + + if (report_id != SIS_ALL_IN_ONE_PACKAGE) { + if (SIS_PKT_IS_TOUCH(report_id)) { + /* + * Calculate CRC ignoring packet length + * in the beginning and CRC transmitted + * at the end of the packet. + */ + crc = crc_itu_t(0, buf + 2, len - 2 - 2); + pkg_crc = get_unaligned_le16(&buf[len - 2]); + + if (crc != pkg_crc) { + dev_err(&client->dev, + "%s: CRC Error (%d vs %d)\n", + __func__, crc, pkg_crc); + return -EINVAL; + } + + count_idx -= 2; + + } else if (!SIS_PKT_IS_HIDI2C(report_id)) { + dev_err(&client->dev, + "%s: invalid packet ID %#02x\n", + __func__, report_id); + return -EINVAL; + } + + if (SIS_PKT_HAS_SCANTIME(report_id)) + count_idx -= SIS_SCAN_TIME_LEN; + + if (SIS_PKT_HAS_AREA(report_id)) + *contact_size += SIS_AREA_LEN_PER_CONTACT; + if (SIS_PKT_HAS_PRESSURE(report_id)) + *contact_size += SIS_PRESSURE_LEN_PER_CONTACT; + } + + *num_contacts = buf[count_idx]; + return 0; +} + +static int sis_ts_report_contact(struct sis_ts_data *ts, const u8 *data, u8 id) +{ + struct input_dev *input = ts->input; + int slot; + u8 status = data[SIS_CONTACT_STATUS_OFFSET]; + u8 pressure; + u8 height, width; + u16 x, y; + + if (status != SIS_STATUS_DOWN && status != SIS_STATUS_UP) { + dev_err(&ts->client->dev, "Unexpected touch status: %#02x\n", + data[SIS_CONTACT_STATUS_OFFSET]); + return -EINVAL; + } + + slot = input_mt_get_slot_by_key(input, data[SIS_CONTACT_ID_OFFSET]); + if (slot < 0) + return -ENOENT; + + input_mt_slot(input, slot); + input_mt_report_slot_state(input, MT_TOOL_FINGER, + status == SIS_STATUS_DOWN); + + if (status == SIS_STATUS_DOWN) { + pressure = height = width = 1; + if (id != SIS_ALL_IN_ONE_PACKAGE) { + if (SIS_PKT_HAS_AREA(id)) { + width = data[SIS_CONTACT_WIDTH_OFFSET]; + height = data[SIS_CONTACT_HEIGHT_OFFSET]; + } + + if (SIS_PKT_HAS_PRESSURE(id)) + pressure = + data[SIS_CONTACT_PRESSURE_OFFSET(id)]; + } + + x = get_unaligned_le16(&data[SIS_CONTACT_X_OFFSET]); + y = get_unaligned_le16(&data[SIS_CONTACT_Y_OFFSET]); + + input_report_abs(input, ABS_MT_TOUCH_MAJOR, + width * SIS_AREA_UNIT); + input_report_abs(input, ABS_MT_TOUCH_MINOR, + height * SIS_AREA_UNIT); + input_report_abs(input, ABS_MT_PRESSURE, pressure); + input_report_abs(input, ABS_MT_POSITION_X, x); + input_report_abs(input, ABS_MT_POSITION_Y, y); + } + + return 0; +} + +static void sis_ts_handle_packet(struct sis_ts_data *ts) +{ + const u8 *contact; + unsigned int num_to_report = 0; + unsigned int num_contacts; + unsigned int num_reported; + unsigned int contact_size; + int error; + u8 report_id; + + do { + error = sis_read_packet(ts->client, ts->packet, + &num_contacts, &contact_size); + if (error) + break; + + if (num_to_report == 0) { + num_to_report = num_contacts; + } else if (num_contacts != 0) { + dev_err(&ts->client->dev, + "%s: nonzero (%d) point count in tail packet\n", + __func__, num_contacts); + break; + } + + report_id = ts->packet[SIS_PKT_REPORT_OFFSET]; + contact = &ts->packet[SIS_PKT_CONTACT_OFFSET]; + num_reported = 0; + + while (num_to_report > 0) { + error = sis_ts_report_contact(ts, contact, report_id); + if (error) + break; + + contact += contact_size; + num_to_report--; + num_reported++; + + if (report_id != SIS_ALL_IN_ONE_PACKAGE && + num_reported >= 5) { + /* + * The remainder of contacts is sent + * in the 2nd packet. + */ + break; + } + } + } while (num_to_report > 0); + + input_mt_sync_frame(ts->input); + input_sync(ts->input); +} + +static irqreturn_t sis_ts_irq_handler(int irq, void *dev_id) +{ + struct sis_ts_data *ts = dev_id; + + do { + sis_ts_handle_packet(ts); + } while (ts->attn_gpio && gpiod_get_value_cansleep(ts->attn_gpio)); + + return IRQ_HANDLED; +} + +static void sis_ts_reset(struct sis_ts_data *ts) +{ + if (ts->reset_gpio) { + /* Get out of reset */ + usleep_range(1000, 2000); + gpiod_set_value(ts->reset_gpio, 1); + usleep_range(1000, 2000); + gpiod_set_value(ts->reset_gpio, 0); + msleep(100); + } +} + +static int sis_ts_probe(struct i2c_client *client, + const struct i2c_device_id *id) +{ + struct sis_ts_data *ts; + struct input_dev *input; + int error; + + ts = devm_kzalloc(&client->dev, sizeof(*ts), GFP_KERNEL); + if (!ts) + return -ENOMEM; + + ts->client = client; + i2c_set_clientdata(client, ts); + + ts->attn_gpio = devm_gpiod_get_optional(&client->dev, + "attn", GPIOD_IN); + if (IS_ERR(ts->attn_gpio)) { + error = PTR_ERR(ts->attn_gpio); + if (error != -EPROBE_DEFER) + dev_err(&client->dev, + "Failed to get attention GPIO: %d\n", error); + return error; + } + + ts->reset_gpio = devm_gpiod_get_optional(&client->dev, + "reset", GPIOD_OUT_LOW); + if (IS_ERR(ts->reset_gpio)) { + error = PTR_ERR(ts->reset_gpio); + if (error != -EPROBE_DEFER) + dev_err(&client->dev, + "Failed to get reset GPIO: %d\n", error); + return error; + } + + sis_ts_reset(ts); + + ts->input = input = devm_input_allocate_device(&client->dev); + if (!input) { + dev_err(&client->dev, "Failed to allocate input device\n"); + return -ENOMEM; + } + + input->name = "SiS Touchscreen"; + input->id.bustype = BUS_I2C; + + input_set_abs_params(input, ABS_MT_POSITION_X, 0, SIS_MAX_X, 0, 0); + input_set_abs_params(input, ABS_MT_POSITION_Y, 0, SIS_MAX_Y, 0, 0); + input_set_abs_params(input, ABS_MT_PRESSURE, 0, SIS_MAX_PRESSURE, 0, 0); + input_set_abs_params(input, ABS_MT_TOUCH_MAJOR, + 0, SIS_AREA_LENGTH_LONGER, 0, 0); + input_set_abs_params(input, ABS_MT_TOUCH_MINOR, + 0, SIS_AREA_LENGTH_SHORT, 0, 0); + + error = input_mt_init_slots(input, SIS_MAX_FINGERS, INPUT_MT_DIRECT); + if (error) { + dev_err(&client->dev, + "Failed to initialize MT slots: %d\n", error); + return error; + } + + error = devm_request_threaded_irq(&client->dev, client->irq, + NULL, sis_ts_irq_handler, + IRQF_ONESHOT, + client->name, ts); + if (error) { + dev_err(&client->dev, "Failed to request IRQ: %d\n", error); + return error; + } + + error = input_register_device(ts->input); + if (error) { + dev_err(&client->dev, + "Failed to register input device: %d\n", error); + return error; + } + + return 0; +} + +#ifdef CONFIG_OF +static const struct of_device_id sis_ts_dt_ids[] = { + { .compatible = "sis,9200-ts" }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(of, sis_ts_dt_ids); +#endif + +static const struct i2c_device_id sis_ts_id[] = { + { SIS_I2C_NAME, 0 }, + { "9200-ts", 0 }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(i2c, sis_ts_id); + +static struct i2c_driver sis_ts_driver = { + .driver = { + .name = SIS_I2C_NAME, + .of_match_table = of_match_ptr(sis_ts_dt_ids), + }, + .probe = sis_ts_probe, + .id_table = sis_ts_id, +}; +module_i2c_driver(sis_ts_driver); + +MODULE_DESCRIPTION("SiS 9200 Family Touchscreen Driver"); +MODULE_LICENSE("GPL v2"); +MODULE_AUTHOR("Mika Penttilä "); -- cgit v1.2.3-59-g8ed1b From d9a77fe243c9cee108050dcbfe8a91b10426dd3d Mon Sep 17 00:00:00 2001 From: Jani Nikula Date: Mon, 1 Aug 2016 12:37:05 +0300 Subject: Documentation/sphinx: do not warn about missing tools in 'make help' Simply move the dochelp rule outside of the HAVE_SPHINX check, overriding the .DEFAULT rule for HAVE_SPHINX=0. Cc: Jonathan Corbet Cc: Christian Kujau Signed-off-by: Jani Nikula Signed-off-by: Jonathan Corbet --- Documentation/Makefile.sphinx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Documentation') diff --git a/Documentation/Makefile.sphinx b/Documentation/Makefile.sphinx index d8d13c92a178..bcb07f8dc664 100644 --- a/Documentation/Makefile.sphinx +++ b/Documentation/Makefile.sphinx @@ -67,6 +67,8 @@ cleanmediadocs: cleandocs: $(Q)rm -rf $(BUILDDIR) +endif # HAVE_SPHINX + dochelp: @echo ' Linux kernel internal documentation in different formats (Sphinx):' @echo ' htmldocs - HTML' @@ -74,5 +76,3 @@ dochelp: @echo ' epubdocs - EPUB' @echo ' xmldocs - XML' @echo ' cleandocs - clean all generated files' - -endif # HAVE_SPHINX -- cgit v1.2.3-59-g8ed1b From 09c3bcce7c3f640b560df148a3f47d4a3a13dc5e Mon Sep 17 00:00:00 2001 From: "seokhoon.yoon" Date: Tue, 2 Aug 2016 23:23:57 +0900 Subject: Documenation: update cgroup's document path cgroup's document path is changed to "cgroup-v1". update it. Signed-off-by: seokhoon.yoon Signed-off-by: Jonathan Corbet --- Documentation/cgroup-v1/cgroups.txt | 4 ++-- Documentation/cgroup-v1/cpusets.txt | 2 +- Documentation/cgroup-v1/memcg_test.txt | 4 ++-- Documentation/filesystems/tmpfs.txt | 2 +- Documentation/kernel-parameters.txt | 4 ++-- Documentation/kernel-per-CPU-kthreads.txt | 2 +- Documentation/scheduler/sched-deadline.txt | 2 +- Documentation/scheduler/sched-design-CFS.txt | 2 +- Documentation/scheduler/sched-rt-group.txt | 2 +- Documentation/vm/numa | 4 ++-- Documentation/vm/numa_memory_policy.txt | 2 +- Documentation/vm/page_migration | 2 +- Documentation/vm/unevictable-lru.txt | 2 +- Documentation/x86/x86_64/fake-numa-for-cpusets | 4 ++-- 14 files changed, 19 insertions(+), 19 deletions(-) (limited to 'Documentation') diff --git a/Documentation/cgroup-v1/cgroups.txt b/Documentation/cgroup-v1/cgroups.txt index 947e6fe31ef9..308e5ff7207a 100644 --- a/Documentation/cgroup-v1/cgroups.txt +++ b/Documentation/cgroup-v1/cgroups.txt @@ -2,7 +2,7 @@ ------- Written by Paul Menage based on -Documentation/cgroups/cpusets.txt +Documentation/cgroup-v1/cpusets.txt Original copyright statements from cpusets.txt: Portions Copyright (C) 2004 BULL SA. @@ -72,7 +72,7 @@ On their own, the only use for cgroups is for simple job tracking. The intention is that other subsystems hook into the generic cgroup support to provide new attributes for cgroups, such as accounting/limiting the resources which processes in a cgroup can -access. For example, cpusets (see Documentation/cgroups/cpusets.txt) allow +access. For example, cpusets (see Documentation/cgroup-v1/cpusets.txt) allow you to associate a set of CPUs and a set of memory nodes with the tasks in each cgroup. diff --git a/Documentation/cgroup-v1/cpusets.txt b/Documentation/cgroup-v1/cpusets.txt index e5cdcd445615..e5ac5da86682 100644 --- a/Documentation/cgroup-v1/cpusets.txt +++ b/Documentation/cgroup-v1/cpusets.txt @@ -48,7 +48,7 @@ hooks, beyond what is already present, required to manage dynamic job placement on large systems. Cpusets use the generic cgroup subsystem described in -Documentation/cgroups/cgroups.txt. +Documentation/cgroup-v1/cgroups.txt. Requests by a task, using the sched_setaffinity(2) system call to include CPUs in its CPU affinity mask, and using the mbind(2) and diff --git a/Documentation/cgroup-v1/memcg_test.txt b/Documentation/cgroup-v1/memcg_test.txt index 8870b0212150..896a1805ebfc 100644 --- a/Documentation/cgroup-v1/memcg_test.txt +++ b/Documentation/cgroup-v1/memcg_test.txt @@ -6,7 +6,7 @@ Because VM is getting complex (one of reasons is memcg...), memcg's behavior is complex. This is a document for memcg's internal behavior. Please note that implementation details can be changed. -(*) Topics on API should be in Documentation/cgroups/memory.txt) +(*) Topics on API should be in Documentation/cgroup-v1/memory.txt) 0. How to record usage ? 2 objects are used. @@ -256,7 +256,7 @@ Under below explanation, we assume CONFIG_MEM_RES_CTRL_SWAP=y. You can see charges have been moved by reading *.usage_in_bytes or memory.stat of both A and B. - See 8.2 of Documentation/cgroups/memory.txt to see what value should be + See 8.2 of Documentation/cgroup-v1/memory.txt to see what value should be written to move_charge_at_immigrate. 9.10 Memory thresholds diff --git a/Documentation/filesystems/tmpfs.txt b/Documentation/filesystems/tmpfs.txt index d9c11d25bf02..a85355cf85f4 100644 --- a/Documentation/filesystems/tmpfs.txt +++ b/Documentation/filesystems/tmpfs.txt @@ -98,7 +98,7 @@ A memory policy with a valid NodeList will be saved, as specified, for use at file creation time. When a task allocates a file in the file system, the mount option memory policy will be applied with a NodeList, if any, modified by the calling task's cpuset constraints -[See Documentation/cgroups/cpusets.txt] and any optional flags, listed +[See Documentation/cgroup-v1/cpusets.txt] and any optional flags, listed below. If the resulting NodeLists is the empty set, the effective memory policy for the file will revert to "default" policy. diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index a2a662d4da83..b63f820eee89 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt @@ -3547,7 +3547,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted. relax_domain_level= [KNL, SMP] Set scheduler's default relax_domain_level. - See Documentation/cgroups/cpusets.txt. + See Documentation/cgroup-v1/cpusets.txt. relative_sleep_states= [SUSPEND] Use sleep state labeling where the deepest @@ -3867,7 +3867,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted. swapaccount=[0|1] [KNL] Enable accounting of swap in memory resource controller if no parameter or 1 is given or disable - it if 0 is given (See Documentation/cgroups/memory.txt) + it if 0 is given (See Documentation/cgroup-v1/memory.txt) swiotlb= [ARM,IA-64,PPC,MIPS,X86] Format: { | force } diff --git a/Documentation/kernel-per-CPU-kthreads.txt b/Documentation/kernel-per-CPU-kthreads.txt index edec3a3e648d..bbc3a8b8cff4 100644 --- a/Documentation/kernel-per-CPU-kthreads.txt +++ b/Documentation/kernel-per-CPU-kthreads.txt @@ -10,7 +10,7 @@ REFERENCES o Documentation/IRQ-affinity.txt: Binding interrupts to sets of CPUs. -o Documentation/cgroups: Using cgroups to bind tasks to sets of CPUs. +o Documentation/cgroup-v1: Using cgroups to bind tasks to sets of CPUs. o man taskset: Using the taskset command to bind tasks to sets of CPUs. diff --git a/Documentation/scheduler/sched-deadline.txt b/Documentation/scheduler/sched-deadline.txt index e114513a2731..53a2fe1ae8b8 100644 --- a/Documentation/scheduler/sched-deadline.txt +++ b/Documentation/scheduler/sched-deadline.txt @@ -431,7 +431,7 @@ CONTENTS -deadline tasks cannot have an affinity mask smaller that the entire root_domain they are created on. However, affinities can be specified - through the cpuset facility (Documentation/cgroups/cpusets.txt). + through the cpuset facility (Documentation/cgroup-v1/cpusets.txt). 5.1 SCHED_DEADLINE and cpusets HOWTO ------------------------------------ diff --git a/Documentation/scheduler/sched-design-CFS.txt b/Documentation/scheduler/sched-design-CFS.txt index f14f49304222..edd861c94c1b 100644 --- a/Documentation/scheduler/sched-design-CFS.txt +++ b/Documentation/scheduler/sched-design-CFS.txt @@ -215,7 +215,7 @@ SCHED_BATCH) tasks. These options need CONFIG_CGROUPS to be defined, and let the administrator create arbitrary groups of tasks, using the "cgroup" pseudo filesystem. See - Documentation/cgroups/cgroups.txt for more information about this filesystem. + Documentation/cgroup-v1/cgroups.txt for more information about this filesystem. When CONFIG_FAIR_GROUP_SCHED is defined, a "cpu.shares" file is created for each group created using the pseudo filesystem. See example steps below to create diff --git a/Documentation/scheduler/sched-rt-group.txt b/Documentation/scheduler/sched-rt-group.txt index 71b54d549987..a03f0d944fe6 100644 --- a/Documentation/scheduler/sched-rt-group.txt +++ b/Documentation/scheduler/sched-rt-group.txt @@ -133,7 +133,7 @@ This uses the cgroup virtual file system and "/cpu.rt_runtime_us" to control the CPU time reserved for each control group. For more information on working with control groups, you should read -Documentation/cgroups/cgroups.txt as well. +Documentation/cgroup-v1/cgroups.txt as well. Group settings are checked against the following limits in order to keep the configuration schedulable: diff --git a/Documentation/vm/numa b/Documentation/vm/numa index ade01274212d..e0b58c0e6b49 100644 --- a/Documentation/vm/numa +++ b/Documentation/vm/numa @@ -63,7 +63,7 @@ nodes. Each emulated node will manage a fraction of the underlying cells' physical memory. NUMA emluation is useful for testing NUMA kernel and application features on non-NUMA platforms, and as a sort of memory resource management mechanism when used together with cpusets. -[see Documentation/cgroups/cpusets.txt] +[see Documentation/cgroup-v1/cpusets.txt] For each node with memory, Linux constructs an independent memory management subsystem, complete with its own free page lists, in-use page lists, usage @@ -113,7 +113,7 @@ allocation behavior using Linux NUMA memory policy. System administrators can restrict the CPUs and nodes' memories that a non- privileged user can specify in the scheduling or NUMA commands and functions -using control groups and CPUsets. [see Documentation/cgroups/cpusets.txt] +using control groups and CPUsets. [see Documentation/cgroup-v1/cpusets.txt] On architectures that do not hide memoryless nodes, Linux will include only zones [nodes] with memory in the zonelists. This means that for a memoryless diff --git a/Documentation/vm/numa_memory_policy.txt b/Documentation/vm/numa_memory_policy.txt index badb0507608f..622b927816e7 100644 --- a/Documentation/vm/numa_memory_policy.txt +++ b/Documentation/vm/numa_memory_policy.txt @@ -9,7 +9,7 @@ document attempts to describe the concepts and APIs of the 2.6 memory policy support. Memory policies should not be confused with cpusets -(Documentation/cgroups/cpusets.txt) +(Documentation/cgroup-v1/cpusets.txt) which is an administrative mechanism for restricting the nodes from which memory may be allocated by a set of processes. Memory policies are a programming interface that a NUMA-aware application can take advantage of. When diff --git a/Documentation/vm/page_migration b/Documentation/vm/page_migration index fea5c0864170..344d2d3ad3cd 100644 --- a/Documentation/vm/page_migration +++ b/Documentation/vm/page_migration @@ -38,7 +38,7 @@ locations. Larger installations usually partition the system using cpusets into sections of nodes. Paul Jackson has equipped cpusets with the ability to move pages when a task is moved to another cpuset (See -Documentation/cgroups/cpusets.txt). +Documentation/cgroup-v1/cpusets.txt). Cpusets allows the automation of process locality. If a task is moved to a new cpuset then also all its pages are moved with it so that the performance of the process does not sink dramatically. Also the pages diff --git a/Documentation/vm/unevictable-lru.txt b/Documentation/vm/unevictable-lru.txt index fa3b527086fa..4e565ed09218 100644 --- a/Documentation/vm/unevictable-lru.txt +++ b/Documentation/vm/unevictable-lru.txt @@ -122,7 +122,7 @@ MEMORY CONTROL GROUP INTERACTION -------------------------------- The unevictable LRU facility interacts with the memory control group [aka -memory controller; see Documentation/cgroups/memory.txt] by extending the +memory controller; see Documentation/cgroup-v1/memory.txt] by extending the lru_list enum. The memory controller data structure automatically gets a per-zone unevictable diff --git a/Documentation/x86/x86_64/fake-numa-for-cpusets b/Documentation/x86/x86_64/fake-numa-for-cpusets index 0f11d9becb0b..4b09f18831f8 100644 --- a/Documentation/x86/x86_64/fake-numa-for-cpusets +++ b/Documentation/x86/x86_64/fake-numa-for-cpusets @@ -8,7 +8,7 @@ assign them to cpusets and their attached tasks. This is a way of limiting the amount of system memory that are available to a certain class of tasks. For more information on the features of cpusets, see -Documentation/cgroups/cpusets.txt. +Documentation/cgroup-v1/cpusets.txt. There are a number of different configurations you can use for your needs. For more information on the numa=fake command line option and its various ways of configuring fake nodes, see Documentation/x86/x86_64/boot-options.txt. @@ -33,7 +33,7 @@ A machine may be split as follows with "numa=fake=4*512," as reported by dmesg: On node 3 totalpages: 131072 Now following the instructions for mounting the cpusets filesystem from -Documentation/cgroups/cpusets.txt, you can assign fake nodes (i.e. contiguous memory +Documentation/cgroup-v1/cpusets.txt, you can assign fake nodes (i.e. contiguous memory address spaces) to individual cpusets: [root@xroads /]# mkdir exampleset -- cgit v1.2.3-59-g8ed1b From be7de5f91fdc3a63ee01910c43f20db213445ce4 Mon Sep 17 00:00:00 2001 From: Prarit Bhargava Date: Thu, 21 Jul 2016 15:37:56 +0930 Subject: modules: Add kernel parameter to blacklist modules Blacklisting a module in linux has long been a problem. The current procedure is to use rd.blacklist=module_name, however, that doesn't cover the case after the initramfs and before a boot prompt (where one is supposed to use /etc/modprobe.d/blacklist.conf to blacklist runtime loading). Using rd.shell to get an early prompt is hit-or-miss, and doesn't cover all situations AFAICT. This patch adds this functionality of permanently blacklisting a module by its name via the kernel parameter module_blacklist=module_name. [v2]: Rusty, use core_param() instead of __setup() which simplifies things. [v3]: Rusty, undo wreckage from strsep() [v4]: Rusty, simpler version of blacklisted() Signed-off-by: Prarit Bhargava Cc: Jonathan Corbet Cc: Rusty Russell Cc: linux-doc@vger.kernel.org Signed-off-by: Rusty Russell --- Documentation/kernel-parameters.txt | 3 +++ kernel/module.c | 24 ++++++++++++++++++++++++ 2 files changed, 27 insertions(+) (limited to 'Documentation') diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 724970a25666..c59ae1af02b3 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt @@ -2301,6 +2301,9 @@ bytes respectively. Such letter suffixes can also be entirely omitted. Note that if CONFIG_MODULE_SIG_FORCE is set, that is always true, so this option does nothing. + module_blacklist= [KNL] Do not load a comma-separated list of + modules. Useful for debugging problem modules. + mousedev.tap_time= [MOUSE] Maximum time between finger touching and leaving touchpad surface for touch to be considered diff --git a/kernel/module.c b/kernel/module.c index beaebea627ff..c91c2fdca2e6 100644 --- a/kernel/module.c +++ b/kernel/module.c @@ -3168,6 +3168,27 @@ int __weak module_frob_arch_sections(Elf_Ehdr *hdr, return 0; } +/* module_blacklist is a comma-separated list of module names */ +static char *module_blacklist; +static bool blacklisted(char *module_name) +{ + const char *p; + size_t len; + + if (!module_blacklist) + return false; + + for (p = module_blacklist; *p; p += len) { + len = strcspn(p, ","); + if (strlen(module_name) == len && !memcmp(module_name, p, len)) + return true; + if (p[len] == ',') + len++; + } + return false; +} +core_param(module_blacklist, module_blacklist, charp, 0400); + static struct module *layout_and_allocate(struct load_info *info, int flags) { /* Module within temporary copy. */ @@ -3178,6 +3199,9 @@ static struct module *layout_and_allocate(struct load_info *info, int flags) if (IS_ERR(mod)) return mod; + if (blacklisted(mod->name)) + return ERR_PTR(-EPERM); + err = check_modinfo(mod, info, flags); if (err) return ERR_PTR(err); -- cgit v1.2.3-59-g8ed1b From 055b6ae95e14326a514334a0a8528a40cd629d10 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 4 Aug 2016 14:01:05 +0200 Subject: KVM: documentation: fix KVM_CAP_X2APIC_API information The KVM_X2APIC_API_USE_32BIT_IDS feature applies to both KVM_SET_GSI_ROUTING and KVM_SIGNAL_MSI, but was not mentioned in the documentation for the latter ioctl. Signed-off-by: Paolo Bonzini --- Documentation/virtual/kvm/api.txt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'Documentation') diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt index da3c395ed174..739db9ab16b2 100644 --- a/Documentation/virtual/kvm/api.txt +++ b/Documentation/virtual/kvm/api.txt @@ -2224,9 +2224,10 @@ If KVM_MSI_VALID_DEVID is set, devid contains a unique device identifier for the device that wrote the MSI message. For PCI, this is usually a BFD identifier in the lower 16 bits. -On x86, address_hi is ignored unless the KVM_CAP_X2APIC_API capability is -enabled. If it is enabled, address_hi bits 31-8 provide bits 31-8 of the -destination id. Bits 7-0 of address_hi must be zero. +On x86, address_hi is ignored unless the KVM_X2APIC_API_USE_32BIT_IDS +feature of KVM_CAP_X2APIC_API capability is enabled. If it is enabled, +address_hi bits 31-8 provide bits 31-8 of the destination id. Bits 7-0 of +address_hi must be zero. 4.71 KVM_CREATE_PIT2 -- cgit v1.2.3-59-g8ed1b From 00085f1efa387a8ce100e3734920f7639c80caa3 Mon Sep 17 00:00:00 2001 From: Krzysztof Kozlowski Date: Wed, 3 Aug 2016 13:46:00 -0700 Subject: dma-mapping: use unsigned long for dma_attrs The dma-mapping core and the implementations do not change the DMA attributes passed by pointer. Thus the pointer can point to const data. However the attributes do not have to be a bitfield. Instead unsigned long will do fine: 1. This is just simpler. Both in terms of reading the code and setting attributes. Instead of initializing local attributes on the stack and passing pointer to it to dma_set_attr(), just set the bits. 2. It brings safeness and checking for const correctness because the attributes are passed by value. Semantic patches for this change (at least most of them): virtual patch virtual context @r@ identifier f, attrs; @@ f(..., - struct dma_attrs *attrs + unsigned long attrs , ...) { ... } @@ identifier r.f; @@ f(..., - NULL + 0 ) and // Options: --all-includes virtual patch virtual context @r@ identifier f, attrs; type t; @@ t f(..., struct dma_attrs *attrs); @@ identifier r.f; @@ f(..., - NULL + 0 ) Link: http://lkml.kernel.org/r/1468399300-5399-2-git-send-email-k.kozlowski@samsung.com Signed-off-by: Krzysztof Kozlowski Acked-by: Vineet Gupta Acked-by: Robin Murphy Acked-by: Hans-Christian Noren Egtvedt Acked-by: Mark Salter [c6x] Acked-by: Jesper Nilsson [cris] Acked-by: Daniel Vetter [drm] Reviewed-by: Bart Van Assche Acked-by: Joerg Roedel [iommu] Acked-by: Fabien Dessenne [bdisp] Reviewed-by: Marek Szyprowski [vb2-core] Acked-by: David Vrabel [xen] Acked-by: Konrad Rzeszutek Wilk [xen swiotlb] Acked-by: Joerg Roedel [iommu] Acked-by: Richard Kuo [hexagon] Acked-by: Geert Uytterhoeven [m68k] Acked-by: Gerald Schaefer [s390] Acked-by: Bjorn Andersson Acked-by: Hans-Christian Noren Egtvedt [avr32] Acked-by: Vineet Gupta [arc] Acked-by: Robin Murphy [arm64 and dma-iommu] Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- Documentation/DMA-API.txt | 33 +++--- Documentation/DMA-attributes.txt | 2 +- arch/alpha/include/asm/dma-mapping.h | 2 - arch/alpha/kernel/pci-noop.c | 2 +- arch/alpha/kernel/pci_iommu.c | 12 +- arch/arc/mm/dma.c | 12 +- arch/arm/common/dmabounce.c | 4 +- arch/arm/include/asm/dma-mapping.h | 13 +-- arch/arm/include/asm/xen/page-coherent.h | 16 +-- arch/arm/mm/dma-mapping.c | 129 ++++++++++----------- arch/arm/xen/mm.c | 8 +- arch/arm64/mm/dma-mapping.c | 66 +++++------ arch/avr32/mm/dma-coherent.c | 12 +- arch/blackfin/kernel/dma-mapping.c | 8 +- arch/c6x/include/asm/dma-mapping.h | 4 +- arch/c6x/kernel/dma.c | 9 +- arch/c6x/mm/dma-coherent.c | 4 +- arch/cris/arch-v32/drivers/pci/dma.c | 9 +- arch/frv/mb93090-mb00/pci-dma-nommu.c | 8 +- arch/frv/mb93090-mb00/pci-dma.c | 9 +- arch/h8300/kernel/dma.c | 8 +- arch/hexagon/include/asm/dma-mapping.h | 1 - arch/hexagon/kernel/dma.c | 8 +- arch/ia64/hp/common/sba_iommu.c | 22 ++-- arch/ia64/include/asm/machvec.h | 1 - arch/ia64/kernel/pci-swiotlb.c | 4 +- arch/ia64/sn/pci/pci_dma.c | 22 ++-- arch/m68k/kernel/dma.c | 12 +- arch/metag/kernel/dma.c | 16 +-- arch/microblaze/include/asm/dma-mapping.h | 1 - arch/microblaze/kernel/dma.c | 12 +- arch/mips/cavium-octeon/dma-octeon.c | 8 +- arch/mips/loongson64/common/dma-swiotlb.c | 10 +- arch/mips/mm/dma-default.c | 20 ++-- arch/mips/netlogic/common/nlm-dma.c | 4 +- arch/mn10300/mm/dma-alloc.c | 8 +- arch/nios2/mm/dma-mapping.c | 12 +- arch/openrisc/kernel/dma.c | 21 ++-- arch/parisc/kernel/pci-dma.c | 18 +-- arch/powerpc/include/asm/dma-mapping.h | 7 +- arch/powerpc/include/asm/iommu.h | 10 +- arch/powerpc/kernel/dma-iommu.c | 12 +- arch/powerpc/kernel/dma.c | 18 +-- arch/powerpc/kernel/ibmebus.c | 12 +- arch/powerpc/kernel/iommu.c | 12 +- arch/powerpc/kernel/vio.c | 12 +- arch/powerpc/platforms/cell/iommu.c | 28 ++--- arch/powerpc/platforms/pasemi/iommu.c | 2 +- arch/powerpc/platforms/powernv/npu-dma.c | 8 +- arch/powerpc/platforms/powernv/pci-ioda.c | 4 +- arch/powerpc/platforms/powernv/pci.c | 2 +- arch/powerpc/platforms/powernv/pci.h | 2 +- arch/powerpc/platforms/ps3/system-bus.c | 18 +-- arch/powerpc/platforms/pseries/iommu.c | 6 +- arch/powerpc/sysdev/dart_iommu.c | 2 +- arch/s390/include/asm/dma-mapping.h | 1 - arch/s390/pci/pci_dma.c | 23 ++-- arch/sh/include/asm/dma-mapping.h | 4 +- arch/sh/kernel/dma-nommu.c | 4 +- arch/sh/mm/consistent.c | 4 +- arch/sparc/kernel/iommu.c | 12 +- arch/sparc/kernel/ioport.c | 24 ++-- arch/sparc/kernel/pci_sun4v.c | 12 +- arch/tile/kernel/pci-dma.c | 28 ++--- arch/unicore32/mm/dma-swiotlb.c | 4 +- arch/x86/include/asm/dma-mapping.h | 5 +- arch/x86/include/asm/swiotlb.h | 4 +- arch/x86/include/asm/xen/page-coherent.h | 9 +- arch/x86/kernel/amd_gart_64.c | 20 ++-- arch/x86/kernel/pci-calgary_64.c | 14 +-- arch/x86/kernel/pci-dma.c | 4 +- arch/x86/kernel/pci-nommu.c | 4 +- arch/x86/kernel/pci-swiotlb.c | 4 +- arch/x86/pci/sta2x11-fixup.c | 2 +- arch/x86/pci/vmd.c | 16 +-- arch/xtensa/kernel/pci-dma.c | 12 +- drivers/gpu/drm/exynos/exynos_drm_fbdev.c | 2 +- drivers/gpu/drm/exynos/exynos_drm_g2d.c | 12 +- drivers/gpu/drm/exynos/exynos_drm_gem.c | 20 ++-- drivers/gpu/drm/exynos/exynos_drm_gem.h | 2 +- drivers/gpu/drm/mediatek/mtk_drm_gem.c | 13 +-- drivers/gpu/drm/mediatek/mtk_drm_gem.h | 2 +- drivers/gpu/drm/msm/msm_drv.c | 13 +-- .../gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.c | 13 +-- drivers/gpu/drm/rockchip/rockchip_drm_gem.c | 17 ++- drivers/gpu/drm/rockchip/rockchip_drm_gem.h | 2 +- drivers/infiniband/core/umem.c | 7 +- drivers/iommu/amd_iommu.c | 12 +- drivers/iommu/dma-iommu.c | 8 +- drivers/iommu/intel-iommu.c | 12 +- drivers/media/platform/sti/bdisp/bdisp-hw.c | 26 ++--- drivers/media/v4l2-core/videobuf2-dma-contig.c | 28 ++--- drivers/media/v4l2-core/videobuf2-dma-sg.c | 21 +--- drivers/media/v4l2-core/videobuf2-vmalloc.c | 2 +- drivers/misc/mic/host/mic_boot.c | 20 ++-- drivers/parisc/ccio-dma.c | 16 +-- drivers/parisc/sba_iommu.c | 16 +-- drivers/remoteproc/qcom_q6v5_pil.c | 7 +- drivers/video/fbdev/omap2/omapfb/omapfb-main.c | 12 +- drivers/video/fbdev/omap2/omapfb/omapfb.h | 3 +- drivers/xen/swiotlb-xen.c | 14 +-- include/linux/dma-attrs.h | 71 ------------ include/linux/dma-iommu.h | 6 +- include/linux/dma-mapping.h | 128 +++++++++++++------- include/linux/swiotlb.h | 10 +- include/media/videobuf2-core.h | 6 +- include/media/videobuf2-dma-contig.h | 2 - include/rdma/ib_verbs.h | 17 +-- include/xen/swiotlb-xen.h | 12 +- lib/dma-noop.c | 9 +- lib/swiotlb.c | 13 ++- 111 files changed, 705 insertions(+), 804 deletions(-) delete mode 100644 include/linux/dma-attrs.h (limited to 'Documentation') diff --git a/Documentation/DMA-API.txt b/Documentation/DMA-API.txt index 45ef3f279c3b..1d26eeb6b5f6 100644 --- a/Documentation/DMA-API.txt +++ b/Documentation/DMA-API.txt @@ -369,35 +369,32 @@ See also dma_map_single(). dma_addr_t dma_map_single_attrs(struct device *dev, void *cpu_addr, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) void dma_unmap_single_attrs(struct device *dev, dma_addr_t dma_addr, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) int dma_map_sg_attrs(struct device *dev, struct scatterlist *sgl, int nents, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) void dma_unmap_sg_attrs(struct device *dev, struct scatterlist *sgl, int nents, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) The four functions above are just like the counterpart functions without the _attrs suffixes, except that they pass an optional -struct dma_attrs*. - -struct dma_attrs encapsulates a set of "DMA attributes". For the -definition of struct dma_attrs see linux/dma-attrs.h. +dma_attrs. The interpretation of DMA attributes is architecture-specific, and each attribute should be documented in Documentation/DMA-attributes.txt. -If struct dma_attrs* is NULL, the semantics of each of these -functions is identical to those of the corresponding function +If dma_attrs are 0, the semantics of each of these functions +is identical to those of the corresponding function without the _attrs suffix. As a result dma_map_single_attrs() can generally replace dma_map_single(), etc. @@ -405,15 +402,15 @@ As an example of the use of the *_attrs functions, here's how you could pass an attribute DMA_ATTR_FOO when mapping memory for DMA: -#include -/* DMA_ATTR_FOO should be defined in linux/dma-attrs.h and +#include +/* DMA_ATTR_FOO should be defined in linux/dma-mapping.h and * documented in Documentation/DMA-attributes.txt */ ... - DEFINE_DMA_ATTRS(attrs); - dma_set_attr(DMA_ATTR_FOO, &attrs); + unsigned long attr; + attr |= DMA_ATTR_FOO; .... - n = dma_map_sg_attrs(dev, sg, nents, DMA_TO_DEVICE, &attr); + n = dma_map_sg_attrs(dev, sg, nents, DMA_TO_DEVICE, attr); .... Architectures that care about DMA_ATTR_FOO would check for its @@ -422,12 +419,10 @@ routines, e.g.: void whizco_dma_map_sg_attrs(struct device *dev, dma_addr_t dma_addr, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { .... - int foo = dma_get_attr(DMA_ATTR_FOO, attrs); - .... - if (foo) + if (attrs & DMA_ATTR_FOO) /* twizzle the frobnozzle */ .... diff --git a/Documentation/DMA-attributes.txt b/Documentation/DMA-attributes.txt index e8cf9cf873b3..2d455a5cf671 100644 --- a/Documentation/DMA-attributes.txt +++ b/Documentation/DMA-attributes.txt @@ -2,7 +2,7 @@ ============== This document describes the semantics of the DMA attributes that are -defined in linux/dma-attrs.h. +defined in linux/dma-mapping.h. DMA_ATTR_WRITE_BARRIER ---------------------- diff --git a/arch/alpha/include/asm/dma-mapping.h b/arch/alpha/include/asm/dma-mapping.h index 3c3451f58ff4..c63b6ac19ee5 100644 --- a/arch/alpha/include/asm/dma-mapping.h +++ b/arch/alpha/include/asm/dma-mapping.h @@ -1,8 +1,6 @@ #ifndef _ALPHA_DMA_MAPPING_H #define _ALPHA_DMA_MAPPING_H -#include - extern struct dma_map_ops *dma_ops; static inline struct dma_map_ops *get_dma_ops(struct device *dev) diff --git a/arch/alpha/kernel/pci-noop.c b/arch/alpha/kernel/pci-noop.c index 8e735b5e56bd..bb152e21e5ae 100644 --- a/arch/alpha/kernel/pci-noop.c +++ b/arch/alpha/kernel/pci-noop.c @@ -109,7 +109,7 @@ sys_pciconfig_write(unsigned long bus, unsigned long dfn, static void *alpha_noop_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t gfp, - struct dma_attrs *attrs) + unsigned long attrs) { void *ret; diff --git a/arch/alpha/kernel/pci_iommu.c b/arch/alpha/kernel/pci_iommu.c index 8969bf2dfe3a..451fc9cdd323 100644 --- a/arch/alpha/kernel/pci_iommu.c +++ b/arch/alpha/kernel/pci_iommu.c @@ -349,7 +349,7 @@ static struct pci_dev *alpha_gendev_to_pci(struct device *dev) static dma_addr_t alpha_pci_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { struct pci_dev *pdev = alpha_gendev_to_pci(dev); int dac_allowed; @@ -369,7 +369,7 @@ static dma_addr_t alpha_pci_map_page(struct device *dev, struct page *page, static void alpha_pci_unmap_page(struct device *dev, dma_addr_t dma_addr, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { unsigned long flags; struct pci_dev *pdev = alpha_gendev_to_pci(dev); @@ -433,7 +433,7 @@ static void alpha_pci_unmap_page(struct device *dev, dma_addr_t dma_addr, static void *alpha_pci_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_addrp, gfp_t gfp, - struct dma_attrs *attrs) + unsigned long attrs) { struct pci_dev *pdev = alpha_gendev_to_pci(dev); void *cpu_addr; @@ -478,7 +478,7 @@ try_again: static void alpha_pci_free_coherent(struct device *dev, size_t size, void *cpu_addr, dma_addr_t dma_addr, - struct dma_attrs *attrs) + unsigned long attrs) { struct pci_dev *pdev = alpha_gendev_to_pci(dev); pci_unmap_single(pdev, dma_addr, size, PCI_DMA_BIDIRECTIONAL); @@ -651,7 +651,7 @@ sg_fill(struct device *dev, struct scatterlist *leader, struct scatterlist *end, static int alpha_pci_map_sg(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { struct pci_dev *pdev = alpha_gendev_to_pci(dev); struct scatterlist *start, *end, *out; @@ -729,7 +729,7 @@ static int alpha_pci_map_sg(struct device *dev, struct scatterlist *sg, static void alpha_pci_unmap_sg(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { struct pci_dev *pdev = alpha_gendev_to_pci(dev); unsigned long flags; diff --git a/arch/arc/mm/dma.c b/arch/arc/mm/dma.c index ab74b5d9186c..20afc65e22dc 100644 --- a/arch/arc/mm/dma.c +++ b/arch/arc/mm/dma.c @@ -22,7 +22,7 @@ static void *arc_dma_alloc(struct device *dev, size_t size, - dma_addr_t *dma_handle, gfp_t gfp, struct dma_attrs *attrs) + dma_addr_t *dma_handle, gfp_t gfp, unsigned long attrs) { unsigned long order = get_order(size); struct page *page; @@ -46,7 +46,7 @@ static void *arc_dma_alloc(struct device *dev, size_t size, * (vs. always going to memory - thus are faster) */ if ((is_isa_arcv2() && ioc_exists) || - dma_get_attr(DMA_ATTR_NON_CONSISTENT, attrs)) + (attrs & DMA_ATTR_NON_CONSISTENT)) need_coh = 0; /* @@ -90,13 +90,13 @@ static void *arc_dma_alloc(struct device *dev, size_t size, } static void arc_dma_free(struct device *dev, size_t size, void *vaddr, - dma_addr_t dma_handle, struct dma_attrs *attrs) + dma_addr_t dma_handle, unsigned long attrs) { phys_addr_t paddr = plat_dma_to_phys(dev, dma_handle); struct page *page = virt_to_page(paddr); int is_non_coh = 1; - is_non_coh = dma_get_attr(DMA_ATTR_NON_CONSISTENT, attrs) || + is_non_coh = (attrs & DMA_ATTR_NON_CONSISTENT) || (is_isa_arcv2() && ioc_exists); if (PageHighMem(page) || !is_non_coh) @@ -130,7 +130,7 @@ static void _dma_cache_sync(phys_addr_t paddr, size_t size, static dma_addr_t arc_dma_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { phys_addr_t paddr = page_to_phys(page) + offset; _dma_cache_sync(paddr, size, dir); @@ -138,7 +138,7 @@ static dma_addr_t arc_dma_map_page(struct device *dev, struct page *page, } static int arc_dma_map_sg(struct device *dev, struct scatterlist *sg, - int nents, enum dma_data_direction dir, struct dma_attrs *attrs) + int nents, enum dma_data_direction dir, unsigned long attrs) { struct scatterlist *s; int i; diff --git a/arch/arm/common/dmabounce.c b/arch/arm/common/dmabounce.c index 1143c4d5c567..301281645d08 100644 --- a/arch/arm/common/dmabounce.c +++ b/arch/arm/common/dmabounce.c @@ -310,7 +310,7 @@ static inline void unmap_single(struct device *dev, struct safe_buffer *buf, */ static dma_addr_t dmabounce_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { dma_addr_t dma_addr; int ret; @@ -344,7 +344,7 @@ static dma_addr_t dmabounce_map_page(struct device *dev, struct page *page, * should be) */ static void dmabounce_unmap_page(struct device *dev, dma_addr_t dma_addr, size_t size, - enum dma_data_direction dir, struct dma_attrs *attrs) + enum dma_data_direction dir, unsigned long attrs) { struct safe_buffer *buf; diff --git a/arch/arm/include/asm/dma-mapping.h b/arch/arm/include/asm/dma-mapping.h index a83570f10124..d009f7911ffc 100644 --- a/arch/arm/include/asm/dma-mapping.h +++ b/arch/arm/include/asm/dma-mapping.h @@ -5,7 +5,6 @@ #include #include -#include #include #include @@ -174,7 +173,7 @@ static inline void dma_mark_clean(void *addr, size_t size) { } * to be the device-viewed address. */ extern void *arm_dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, - gfp_t gfp, struct dma_attrs *attrs); + gfp_t gfp, unsigned long attrs); /** * arm_dma_free - free memory allocated by arm_dma_alloc @@ -191,7 +190,7 @@ extern void *arm_dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, * during and after this call executing are illegal. */ extern void arm_dma_free(struct device *dev, size_t size, void *cpu_addr, - dma_addr_t handle, struct dma_attrs *attrs); + dma_addr_t handle, unsigned long attrs); /** * arm_dma_mmap - map a coherent DMA allocation into user space @@ -208,7 +207,7 @@ extern void arm_dma_free(struct device *dev, size_t size, void *cpu_addr, */ extern int arm_dma_mmap(struct device *dev, struct vm_area_struct *vma, void *cpu_addr, dma_addr_t dma_addr, size_t size, - struct dma_attrs *attrs); + unsigned long attrs); /* * This can be called during early boot to increase the size of the atomic @@ -262,16 +261,16 @@ extern void dmabounce_unregister_dev(struct device *); * The scatter list versions of the above methods. */ extern int arm_dma_map_sg(struct device *, struct scatterlist *, int, - enum dma_data_direction, struct dma_attrs *attrs); + enum dma_data_direction, unsigned long attrs); extern void arm_dma_unmap_sg(struct device *, struct scatterlist *, int, - enum dma_data_direction, struct dma_attrs *attrs); + enum dma_data_direction, unsigned long attrs); extern void arm_dma_sync_sg_for_cpu(struct device *, struct scatterlist *, int, enum dma_data_direction); extern void arm_dma_sync_sg_for_device(struct device *, struct scatterlist *, int, enum dma_data_direction); extern int arm_dma_get_sgtable(struct device *dev, struct sg_table *sgt, void *cpu_addr, dma_addr_t dma_addr, size_t size, - struct dma_attrs *attrs); + unsigned long attrs); #endif /* __KERNEL__ */ #endif diff --git a/arch/arm/include/asm/xen/page-coherent.h b/arch/arm/include/asm/xen/page-coherent.h index 9408a994cc91..95ce6ac3a971 100644 --- a/arch/arm/include/asm/xen/page-coherent.h +++ b/arch/arm/include/asm/xen/page-coherent.h @@ -2,15 +2,14 @@ #define _ASM_ARM_XEN_PAGE_COHERENT_H #include -#include #include void __xen_dma_map_page(struct device *hwdev, struct page *page, dma_addr_t dev_addr, unsigned long offset, size_t size, - enum dma_data_direction dir, struct dma_attrs *attrs); + enum dma_data_direction dir, unsigned long attrs); void __xen_dma_unmap_page(struct device *hwdev, dma_addr_t handle, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs); + unsigned long attrs); void __xen_dma_sync_single_for_cpu(struct device *hwdev, dma_addr_t handle, size_t size, enum dma_data_direction dir); @@ -18,22 +17,20 @@ void __xen_dma_sync_single_for_device(struct device *hwdev, dma_addr_t handle, size_t size, enum dma_data_direction dir); static inline void *xen_alloc_coherent_pages(struct device *hwdev, size_t size, - dma_addr_t *dma_handle, gfp_t flags, - struct dma_attrs *attrs) + dma_addr_t *dma_handle, gfp_t flags, unsigned long attrs) { return __generic_dma_ops(hwdev)->alloc(hwdev, size, dma_handle, flags, attrs); } static inline void xen_free_coherent_pages(struct device *hwdev, size_t size, - void *cpu_addr, dma_addr_t dma_handle, - struct dma_attrs *attrs) + void *cpu_addr, dma_addr_t dma_handle, unsigned long attrs) { __generic_dma_ops(hwdev)->free(hwdev, size, cpu_addr, dma_handle, attrs); } static inline void xen_dma_map_page(struct device *hwdev, struct page *page, dma_addr_t dev_addr, unsigned long offset, size_t size, - enum dma_data_direction dir, struct dma_attrs *attrs) + enum dma_data_direction dir, unsigned long attrs) { unsigned long page_pfn = page_to_xen_pfn(page); unsigned long dev_pfn = XEN_PFN_DOWN(dev_addr); @@ -58,8 +55,7 @@ static inline void xen_dma_map_page(struct device *hwdev, struct page *page, } static inline void xen_dma_unmap_page(struct device *hwdev, dma_addr_t handle, - size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + size_t size, enum dma_data_direction dir, unsigned long attrs) { unsigned long pfn = PFN_DOWN(handle); /* diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c index b7eed75960fe..c6834c0cfd1c 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c @@ -128,16 +128,16 @@ static void __dma_page_dev_to_cpu(struct page *, unsigned long, */ static dma_addr_t arm_dma_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { - if (!dma_get_attr(DMA_ATTR_SKIP_CPU_SYNC, attrs)) + if ((attrs & DMA_ATTR_SKIP_CPU_SYNC) == 0) __dma_page_cpu_to_dev(page, offset, size, dir); return pfn_to_dma(dev, page_to_pfn(page)) + offset; } static dma_addr_t arm_coherent_dma_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { return pfn_to_dma(dev, page_to_pfn(page)) + offset; } @@ -157,10 +157,9 @@ static dma_addr_t arm_coherent_dma_map_page(struct device *dev, struct page *pag * whatever the device wrote there. */ static void arm_dma_unmap_page(struct device *dev, dma_addr_t handle, - size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + size_t size, enum dma_data_direction dir, unsigned long attrs) { - if (!dma_get_attr(DMA_ATTR_SKIP_CPU_SYNC, attrs)) + if ((attrs & DMA_ATTR_SKIP_CPU_SYNC) == 0) __dma_page_dev_to_cpu(pfn_to_page(dma_to_pfn(dev, handle)), handle & ~PAGE_MASK, size, dir); } @@ -198,12 +197,12 @@ struct dma_map_ops arm_dma_ops = { EXPORT_SYMBOL(arm_dma_ops); static void *arm_coherent_dma_alloc(struct device *dev, size_t size, - dma_addr_t *handle, gfp_t gfp, struct dma_attrs *attrs); + dma_addr_t *handle, gfp_t gfp, unsigned long attrs); static void arm_coherent_dma_free(struct device *dev, size_t size, void *cpu_addr, - dma_addr_t handle, struct dma_attrs *attrs); + dma_addr_t handle, unsigned long attrs); static int arm_coherent_dma_mmap(struct device *dev, struct vm_area_struct *vma, void *cpu_addr, dma_addr_t dma_addr, size_t size, - struct dma_attrs *attrs); + unsigned long attrs); struct dma_map_ops arm_coherent_dma_ops = { .alloc = arm_coherent_dma_alloc, @@ -639,11 +638,11 @@ static void __free_from_contiguous(struct device *dev, struct page *page, dma_release_from_contiguous(dev, page, size >> PAGE_SHIFT); } -static inline pgprot_t __get_dma_pgprot(struct dma_attrs *attrs, pgprot_t prot) +static inline pgprot_t __get_dma_pgprot(unsigned long attrs, pgprot_t prot) { - prot = dma_get_attr(DMA_ATTR_WRITE_COMBINE, attrs) ? - pgprot_writecombine(prot) : - pgprot_dmacoherent(prot); + prot = (attrs & DMA_ATTR_WRITE_COMBINE) ? + pgprot_writecombine(prot) : + pgprot_dmacoherent(prot); return prot; } @@ -751,7 +750,7 @@ static struct arm_dma_allocator remap_allocator = { static void *__dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp, pgprot_t prot, bool is_coherent, - struct dma_attrs *attrs, const void *caller) + unsigned long attrs, const void *caller) { u64 mask = get_coherent_dma_mask(dev); struct page *page = NULL; @@ -764,7 +763,7 @@ static void *__dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, .gfp = gfp, .prot = prot, .caller = caller, - .want_vaddr = !dma_get_attr(DMA_ATTR_NO_KERNEL_MAPPING, attrs), + .want_vaddr = ((attrs & DMA_ATTR_NO_KERNEL_MAPPING) == 0), .coherent_flag = is_coherent ? COHERENT : NORMAL, }; @@ -834,7 +833,7 @@ static void *__dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, * virtual and bus address for that space. */ void *arm_dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, - gfp_t gfp, struct dma_attrs *attrs) + gfp_t gfp, unsigned long attrs) { pgprot_t prot = __get_dma_pgprot(attrs, PAGE_KERNEL); @@ -843,7 +842,7 @@ void *arm_dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, } static void *arm_coherent_dma_alloc(struct device *dev, size_t size, - dma_addr_t *handle, gfp_t gfp, struct dma_attrs *attrs) + dma_addr_t *handle, gfp_t gfp, unsigned long attrs) { return __dma_alloc(dev, size, handle, gfp, PAGE_KERNEL, true, attrs, __builtin_return_address(0)); @@ -851,7 +850,7 @@ static void *arm_coherent_dma_alloc(struct device *dev, size_t size, static int __arm_dma_mmap(struct device *dev, struct vm_area_struct *vma, void *cpu_addr, dma_addr_t dma_addr, size_t size, - struct dma_attrs *attrs) + unsigned long attrs) { int ret = -ENXIO; #ifdef CONFIG_MMU @@ -879,14 +878,14 @@ static int __arm_dma_mmap(struct device *dev, struct vm_area_struct *vma, */ static int arm_coherent_dma_mmap(struct device *dev, struct vm_area_struct *vma, void *cpu_addr, dma_addr_t dma_addr, size_t size, - struct dma_attrs *attrs) + unsigned long attrs) { return __arm_dma_mmap(dev, vma, cpu_addr, dma_addr, size, attrs); } int arm_dma_mmap(struct device *dev, struct vm_area_struct *vma, void *cpu_addr, dma_addr_t dma_addr, size_t size, - struct dma_attrs *attrs) + unsigned long attrs) { #ifdef CONFIG_MMU vma->vm_page_prot = __get_dma_pgprot(attrs, vma->vm_page_prot); @@ -898,7 +897,7 @@ int arm_dma_mmap(struct device *dev, struct vm_area_struct *vma, * Free a buffer as defined by the above mapping. */ static void __arm_dma_free(struct device *dev, size_t size, void *cpu_addr, - dma_addr_t handle, struct dma_attrs *attrs, + dma_addr_t handle, unsigned long attrs, bool is_coherent) { struct page *page = pfn_to_page(dma_to_pfn(dev, handle)); @@ -908,7 +907,7 @@ static void __arm_dma_free(struct device *dev, size_t size, void *cpu_addr, .size = PAGE_ALIGN(size), .cpu_addr = cpu_addr, .page = page, - .want_vaddr = !dma_get_attr(DMA_ATTR_NO_KERNEL_MAPPING, attrs), + .want_vaddr = ((attrs & DMA_ATTR_NO_KERNEL_MAPPING) == 0), }; buf = arm_dma_buffer_find(cpu_addr); @@ -920,20 +919,20 @@ static void __arm_dma_free(struct device *dev, size_t size, void *cpu_addr, } void arm_dma_free(struct device *dev, size_t size, void *cpu_addr, - dma_addr_t handle, struct dma_attrs *attrs) + dma_addr_t handle, unsigned long attrs) { __arm_dma_free(dev, size, cpu_addr, handle, attrs, false); } static void arm_coherent_dma_free(struct device *dev, size_t size, void *cpu_addr, - dma_addr_t handle, struct dma_attrs *attrs) + dma_addr_t handle, unsigned long attrs) { __arm_dma_free(dev, size, cpu_addr, handle, attrs, true); } int arm_dma_get_sgtable(struct device *dev, struct sg_table *sgt, void *cpu_addr, dma_addr_t handle, size_t size, - struct dma_attrs *attrs) + unsigned long attrs) { struct page *page = pfn_to_page(dma_to_pfn(dev, handle)); int ret; @@ -1066,7 +1065,7 @@ static void __dma_page_dev_to_cpu(struct page *page, unsigned long off, * here. */ int arm_dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, - enum dma_data_direction dir, struct dma_attrs *attrs) + enum dma_data_direction dir, unsigned long attrs) { struct dma_map_ops *ops = get_dma_ops(dev); struct scatterlist *s; @@ -1100,7 +1099,7 @@ int arm_dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, * rules concerning calls here are the same as for dma_unmap_single(). */ void arm_dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nents, - enum dma_data_direction dir, struct dma_attrs *attrs) + enum dma_data_direction dir, unsigned long attrs) { struct dma_map_ops *ops = get_dma_ops(dev); struct scatterlist *s; @@ -1273,7 +1272,7 @@ static inline void __free_iova(struct dma_iommu_mapping *mapping, static const int iommu_order_array[] = { 9, 8, 4, 0 }; static struct page **__iommu_alloc_buffer(struct device *dev, size_t size, - gfp_t gfp, struct dma_attrs *attrs, + gfp_t gfp, unsigned long attrs, int coherent_flag) { struct page **pages; @@ -1289,7 +1288,7 @@ static struct page **__iommu_alloc_buffer(struct device *dev, size_t size, if (!pages) return NULL; - if (dma_get_attr(DMA_ATTR_FORCE_CONTIGUOUS, attrs)) + if (attrs & DMA_ATTR_FORCE_CONTIGUOUS) { unsigned long order = get_order(size); struct page *page; @@ -1307,7 +1306,7 @@ static struct page **__iommu_alloc_buffer(struct device *dev, size_t size, } /* Go straight to 4K chunks if caller says it's OK. */ - if (dma_get_attr(DMA_ATTR_ALLOC_SINGLE_PAGES, attrs)) + if (attrs & DMA_ATTR_ALLOC_SINGLE_PAGES) order_idx = ARRAY_SIZE(iommu_order_array) - 1; /* @@ -1363,12 +1362,12 @@ error: } static int __iommu_free_buffer(struct device *dev, struct page **pages, - size_t size, struct dma_attrs *attrs) + size_t size, unsigned long attrs) { int count = size >> PAGE_SHIFT; int i; - if (dma_get_attr(DMA_ATTR_FORCE_CONTIGUOUS, attrs)) { + if (attrs & DMA_ATTR_FORCE_CONTIGUOUS) { dma_release_from_contiguous(dev, pages[0], count); } else { for (i = 0; i < count; i++) @@ -1460,14 +1459,14 @@ static struct page **__atomic_get_pages(void *addr) return (struct page **)page; } -static struct page **__iommu_get_pages(void *cpu_addr, struct dma_attrs *attrs) +static struct page **__iommu_get_pages(void *cpu_addr, unsigned long attrs) { struct vm_struct *area; if (__in_atomic_pool(cpu_addr, PAGE_SIZE)) return __atomic_get_pages(cpu_addr); - if (dma_get_attr(DMA_ATTR_NO_KERNEL_MAPPING, attrs)) + if (attrs & DMA_ATTR_NO_KERNEL_MAPPING) return cpu_addr; area = find_vm_area(cpu_addr); @@ -1511,7 +1510,7 @@ static void __iommu_free_atomic(struct device *dev, void *cpu_addr, } static void *__arm_iommu_alloc_attrs(struct device *dev, size_t size, - dma_addr_t *handle, gfp_t gfp, struct dma_attrs *attrs, + dma_addr_t *handle, gfp_t gfp, unsigned long attrs, int coherent_flag) { pgprot_t prot = __get_dma_pgprot(attrs, PAGE_KERNEL); @@ -1542,7 +1541,7 @@ static void *__arm_iommu_alloc_attrs(struct device *dev, size_t size, if (*handle == DMA_ERROR_CODE) goto err_buffer; - if (dma_get_attr(DMA_ATTR_NO_KERNEL_MAPPING, attrs)) + if (attrs & DMA_ATTR_NO_KERNEL_MAPPING) return pages; addr = __iommu_alloc_remap(pages, size, gfp, prot, @@ -1560,20 +1559,20 @@ err_buffer: } static void *arm_iommu_alloc_attrs(struct device *dev, size_t size, - dma_addr_t *handle, gfp_t gfp, struct dma_attrs *attrs) + dma_addr_t *handle, gfp_t gfp, unsigned long attrs) { return __arm_iommu_alloc_attrs(dev, size, handle, gfp, attrs, NORMAL); } static void *arm_coherent_iommu_alloc_attrs(struct device *dev, size_t size, - dma_addr_t *handle, gfp_t gfp, struct dma_attrs *attrs) + dma_addr_t *handle, gfp_t gfp, unsigned long attrs) { return __arm_iommu_alloc_attrs(dev, size, handle, gfp, attrs, COHERENT); } static int __arm_iommu_mmap_attrs(struct device *dev, struct vm_area_struct *vma, void *cpu_addr, dma_addr_t dma_addr, size_t size, - struct dma_attrs *attrs) + unsigned long attrs) { unsigned long uaddr = vma->vm_start; unsigned long usize = vma->vm_end - vma->vm_start; @@ -1603,7 +1602,7 @@ static int __arm_iommu_mmap_attrs(struct device *dev, struct vm_area_struct *vma } static int arm_iommu_mmap_attrs(struct device *dev, struct vm_area_struct *vma, void *cpu_addr, - dma_addr_t dma_addr, size_t size, struct dma_attrs *attrs) + dma_addr_t dma_addr, size_t size, unsigned long attrs) { vma->vm_page_prot = __get_dma_pgprot(attrs, vma->vm_page_prot); @@ -1612,7 +1611,7 @@ static int arm_iommu_mmap_attrs(struct device *dev, static int arm_coherent_iommu_mmap_attrs(struct device *dev, struct vm_area_struct *vma, void *cpu_addr, - dma_addr_t dma_addr, size_t size, struct dma_attrs *attrs) + dma_addr_t dma_addr, size_t size, unsigned long attrs) { return __arm_iommu_mmap_attrs(dev, vma, cpu_addr, dma_addr, size, attrs); } @@ -1622,7 +1621,7 @@ static int arm_coherent_iommu_mmap_attrs(struct device *dev, * Must not be called with IRQs disabled. */ void __arm_iommu_free_attrs(struct device *dev, size_t size, void *cpu_addr, - dma_addr_t handle, struct dma_attrs *attrs, int coherent_flag) + dma_addr_t handle, unsigned long attrs, int coherent_flag) { struct page **pages; size = PAGE_ALIGN(size); @@ -1638,7 +1637,7 @@ void __arm_iommu_free_attrs(struct device *dev, size_t size, void *cpu_addr, return; } - if (!dma_get_attr(DMA_ATTR_NO_KERNEL_MAPPING, attrs)) { + if ((attrs & DMA_ATTR_NO_KERNEL_MAPPING) == 0) { dma_common_free_remap(cpu_addr, size, VM_ARM_DMA_CONSISTENT | VM_USERMAP); } @@ -1648,20 +1647,20 @@ void __arm_iommu_free_attrs(struct device *dev, size_t size, void *cpu_addr, } void arm_iommu_free_attrs(struct device *dev, size_t size, - void *cpu_addr, dma_addr_t handle, struct dma_attrs *attrs) + void *cpu_addr, dma_addr_t handle, unsigned long attrs) { __arm_iommu_free_attrs(dev, size, cpu_addr, handle, attrs, NORMAL); } void arm_coherent_iommu_free_attrs(struct device *dev, size_t size, - void *cpu_addr, dma_addr_t handle, struct dma_attrs *attrs) + void *cpu_addr, dma_addr_t handle, unsigned long attrs) { __arm_iommu_free_attrs(dev, size, cpu_addr, handle, attrs, COHERENT); } static int arm_iommu_get_sgtable(struct device *dev, struct sg_table *sgt, void *cpu_addr, dma_addr_t dma_addr, - size_t size, struct dma_attrs *attrs) + size_t size, unsigned long attrs) { unsigned int count = PAGE_ALIGN(size) >> PAGE_SHIFT; struct page **pages = __iommu_get_pages(cpu_addr, attrs); @@ -1699,7 +1698,7 @@ static int __dma_direction_to_prot(enum dma_data_direction dir) */ static int __map_sg_chunk(struct device *dev, struct scatterlist *sg, size_t size, dma_addr_t *handle, - enum dma_data_direction dir, struct dma_attrs *attrs, + enum dma_data_direction dir, unsigned long attrs, bool is_coherent) { struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev); @@ -1720,8 +1719,7 @@ static int __map_sg_chunk(struct device *dev, struct scatterlist *sg, phys_addr_t phys = page_to_phys(sg_page(s)); unsigned int len = PAGE_ALIGN(s->offset + s->length); - if (!is_coherent && - !dma_get_attr(DMA_ATTR_SKIP_CPU_SYNC, attrs)) + if (!is_coherent && (attrs & DMA_ATTR_SKIP_CPU_SYNC) == 0) __dma_page_cpu_to_dev(sg_page(s), s->offset, s->length, dir); prot = __dma_direction_to_prot(dir); @@ -1742,7 +1740,7 @@ fail: } static int __iommu_map_sg(struct device *dev, struct scatterlist *sg, int nents, - enum dma_data_direction dir, struct dma_attrs *attrs, + enum dma_data_direction dir, unsigned long attrs, bool is_coherent) { struct scatterlist *s = sg, *dma = sg, *start = sg; @@ -1800,7 +1798,7 @@ bad_mapping: * obtained via sg_dma_{address,length}. */ int arm_coherent_iommu_map_sg(struct device *dev, struct scatterlist *sg, - int nents, enum dma_data_direction dir, struct dma_attrs *attrs) + int nents, enum dma_data_direction dir, unsigned long attrs) { return __iommu_map_sg(dev, sg, nents, dir, attrs, true); } @@ -1818,14 +1816,14 @@ int arm_coherent_iommu_map_sg(struct device *dev, struct scatterlist *sg, * sg_dma_{address,length}. */ int arm_iommu_map_sg(struct device *dev, struct scatterlist *sg, - int nents, enum dma_data_direction dir, struct dma_attrs *attrs) + int nents, enum dma_data_direction dir, unsigned long attrs) { return __iommu_map_sg(dev, sg, nents, dir, attrs, false); } static void __iommu_unmap_sg(struct device *dev, struct scatterlist *sg, - int nents, enum dma_data_direction dir, struct dma_attrs *attrs, - bool is_coherent) + int nents, enum dma_data_direction dir, + unsigned long attrs, bool is_coherent) { struct scatterlist *s; int i; @@ -1834,8 +1832,7 @@ static void __iommu_unmap_sg(struct device *dev, struct scatterlist *sg, if (sg_dma_len(s)) __iommu_remove_mapping(dev, sg_dma_address(s), sg_dma_len(s)); - if (!is_coherent && - !dma_get_attr(DMA_ATTR_SKIP_CPU_SYNC, attrs)) + if (!is_coherent && (attrs & DMA_ATTR_SKIP_CPU_SYNC) == 0) __dma_page_dev_to_cpu(sg_page(s), s->offset, s->length, dir); } @@ -1852,7 +1849,8 @@ static void __iommu_unmap_sg(struct device *dev, struct scatterlist *sg, * rules concerning calls here are the same as for dma_unmap_single(). */ void arm_coherent_iommu_unmap_sg(struct device *dev, struct scatterlist *sg, - int nents, enum dma_data_direction dir, struct dma_attrs *attrs) + int nents, enum dma_data_direction dir, + unsigned long attrs) { __iommu_unmap_sg(dev, sg, nents, dir, attrs, true); } @@ -1868,7 +1866,8 @@ void arm_coherent_iommu_unmap_sg(struct device *dev, struct scatterlist *sg, * rules concerning calls here are the same as for dma_unmap_single(). */ void arm_iommu_unmap_sg(struct device *dev, struct scatterlist *sg, int nents, - enum dma_data_direction dir, struct dma_attrs *attrs) + enum dma_data_direction dir, + unsigned long attrs) { __iommu_unmap_sg(dev, sg, nents, dir, attrs, false); } @@ -1921,7 +1920,7 @@ void arm_iommu_sync_sg_for_device(struct device *dev, struct scatterlist *sg, */ static dma_addr_t arm_coherent_iommu_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev); dma_addr_t dma_addr; @@ -1955,9 +1954,9 @@ fail: */ static dma_addr_t arm_iommu_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { - if (!dma_get_attr(DMA_ATTR_SKIP_CPU_SYNC, attrs)) + if ((attrs & DMA_ATTR_SKIP_CPU_SYNC) == 0) __dma_page_cpu_to_dev(page, offset, size, dir); return arm_coherent_iommu_map_page(dev, page, offset, size, dir, attrs); @@ -1973,8 +1972,7 @@ static dma_addr_t arm_iommu_map_page(struct device *dev, struct page *page, * Coherent IOMMU aware version of arm_dma_unmap_page() */ static void arm_coherent_iommu_unmap_page(struct device *dev, dma_addr_t handle, - size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + size_t size, enum dma_data_direction dir, unsigned long attrs) { struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev); dma_addr_t iova = handle & PAGE_MASK; @@ -1998,8 +1996,7 @@ static void arm_coherent_iommu_unmap_page(struct device *dev, dma_addr_t handle, * IOMMU aware version of arm_dma_unmap_page() */ static void arm_iommu_unmap_page(struct device *dev, dma_addr_t handle, - size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + size_t size, enum dma_data_direction dir, unsigned long attrs) { struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev); dma_addr_t iova = handle & PAGE_MASK; @@ -2010,7 +2007,7 @@ static void arm_iommu_unmap_page(struct device *dev, dma_addr_t handle, if (!iova) return; - if (!dma_get_attr(DMA_ATTR_SKIP_CPU_SYNC, attrs)) + if ((attrs & DMA_ATTR_SKIP_CPU_SYNC) == 0) __dma_page_dev_to_cpu(page, offset, size, dir); iommu_unmap(mapping->domain, iova, len); diff --git a/arch/arm/xen/mm.c b/arch/arm/xen/mm.c index c5f9a9e3d1f3..d062f08f5020 100644 --- a/arch/arm/xen/mm.c +++ b/arch/arm/xen/mm.c @@ -98,11 +98,11 @@ static void __xen_dma_page_cpu_to_dev(struct device *hwdev, dma_addr_t handle, void __xen_dma_map_page(struct device *hwdev, struct page *page, dma_addr_t dev_addr, unsigned long offset, size_t size, - enum dma_data_direction dir, struct dma_attrs *attrs) + enum dma_data_direction dir, unsigned long attrs) { if (is_device_dma_coherent(hwdev)) return; - if (dma_get_attr(DMA_ATTR_SKIP_CPU_SYNC, attrs)) + if (attrs & DMA_ATTR_SKIP_CPU_SYNC) return; __xen_dma_page_cpu_to_dev(hwdev, dev_addr, size, dir); @@ -110,12 +110,12 @@ void __xen_dma_map_page(struct device *hwdev, struct page *page, void __xen_dma_unmap_page(struct device *hwdev, dma_addr_t handle, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { if (is_device_dma_coherent(hwdev)) return; - if (dma_get_attr(DMA_ATTR_SKIP_CPU_SYNC, attrs)) + if (attrs & DMA_ATTR_SKIP_CPU_SYNC) return; __xen_dma_page_dev_to_cpu(hwdev, handle, size, dir); diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c index f6c55afab3e2..c4284c432ae8 100644 --- a/arch/arm64/mm/dma-mapping.c +++ b/arch/arm64/mm/dma-mapping.c @@ -32,10 +32,10 @@ static int swiotlb __read_mostly; -static pgprot_t __get_dma_pgprot(struct dma_attrs *attrs, pgprot_t prot, +static pgprot_t __get_dma_pgprot(unsigned long attrs, pgprot_t prot, bool coherent) { - if (!coherent || dma_get_attr(DMA_ATTR_WRITE_COMBINE, attrs)) + if (!coherent || (attrs & DMA_ATTR_WRITE_COMBINE)) return pgprot_writecombine(prot); return prot; } @@ -91,7 +91,7 @@ static int __free_from_pool(void *start, size_t size) static void *__dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flags, - struct dma_attrs *attrs) + unsigned long attrs) { if (dev == NULL) { WARN_ONCE(1, "Use an actual device structure for DMA allocation\n"); @@ -121,7 +121,7 @@ static void *__dma_alloc_coherent(struct device *dev, size_t size, static void __dma_free_coherent(struct device *dev, size_t size, void *vaddr, dma_addr_t dma_handle, - struct dma_attrs *attrs) + unsigned long attrs) { bool freed; phys_addr_t paddr = dma_to_phys(dev, dma_handle); @@ -140,7 +140,7 @@ static void __dma_free_coherent(struct device *dev, size_t size, static void *__dma_alloc(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flags, - struct dma_attrs *attrs) + unsigned long attrs) { struct page *page; void *ptr, *coherent_ptr; @@ -188,7 +188,7 @@ no_mem: static void __dma_free(struct device *dev, size_t size, void *vaddr, dma_addr_t dma_handle, - struct dma_attrs *attrs) + unsigned long attrs) { void *swiotlb_addr = phys_to_virt(dma_to_phys(dev, dma_handle)); @@ -205,7 +205,7 @@ static void __dma_free(struct device *dev, size_t size, static dma_addr_t __swiotlb_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { dma_addr_t dev_addr; @@ -219,7 +219,7 @@ static dma_addr_t __swiotlb_map_page(struct device *dev, struct page *page, static void __swiotlb_unmap_page(struct device *dev, dma_addr_t dev_addr, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { if (!is_device_dma_coherent(dev)) __dma_unmap_area(phys_to_virt(dma_to_phys(dev, dev_addr)), size, dir); @@ -228,7 +228,7 @@ static void __swiotlb_unmap_page(struct device *dev, dma_addr_t dev_addr, static int __swiotlb_map_sg_attrs(struct device *dev, struct scatterlist *sgl, int nelems, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { struct scatterlist *sg; int i, ret; @@ -245,7 +245,7 @@ static int __swiotlb_map_sg_attrs(struct device *dev, struct scatterlist *sgl, static void __swiotlb_unmap_sg_attrs(struct device *dev, struct scatterlist *sgl, int nelems, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { struct scatterlist *sg; int i; @@ -306,7 +306,7 @@ static void __swiotlb_sync_sg_for_device(struct device *dev, static int __swiotlb_mmap(struct device *dev, struct vm_area_struct *vma, void *cpu_addr, dma_addr_t dma_addr, size_t size, - struct dma_attrs *attrs) + unsigned long attrs) { int ret = -ENXIO; unsigned long nr_vma_pages = (vma->vm_end - vma->vm_start) >> @@ -333,7 +333,7 @@ static int __swiotlb_mmap(struct device *dev, static int __swiotlb_get_sgtable(struct device *dev, struct sg_table *sgt, void *cpu_addr, dma_addr_t handle, size_t size, - struct dma_attrs *attrs) + unsigned long attrs) { int ret = sg_alloc_table(sgt, 1, GFP_KERNEL); @@ -435,21 +435,21 @@ out: static void *__dummy_alloc(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flags, - struct dma_attrs *attrs) + unsigned long attrs) { return NULL; } static void __dummy_free(struct device *dev, size_t size, void *vaddr, dma_addr_t dma_handle, - struct dma_attrs *attrs) + unsigned long attrs) { } static int __dummy_mmap(struct device *dev, struct vm_area_struct *vma, void *cpu_addr, dma_addr_t dma_addr, size_t size, - struct dma_attrs *attrs) + unsigned long attrs) { return -ENXIO; } @@ -457,20 +457,20 @@ static int __dummy_mmap(struct device *dev, static dma_addr_t __dummy_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { return DMA_ERROR_CODE; } static void __dummy_unmap_page(struct device *dev, dma_addr_t dev_addr, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { } static int __dummy_map_sg(struct device *dev, struct scatterlist *sgl, int nelems, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { return 0; } @@ -478,7 +478,7 @@ static int __dummy_map_sg(struct device *dev, struct scatterlist *sgl, static void __dummy_unmap_sg(struct device *dev, struct scatterlist *sgl, int nelems, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { } @@ -553,7 +553,7 @@ static void flush_page(struct device *dev, const void *virt, phys_addr_t phys) static void *__iommu_alloc_attrs(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp, - struct dma_attrs *attrs) + unsigned long attrs) { bool coherent = is_device_dma_coherent(dev); int ioprot = dma_direction_to_prot(DMA_BIDIRECTIONAL, coherent); @@ -613,7 +613,7 @@ static void *__iommu_alloc_attrs(struct device *dev, size_t size, } static void __iommu_free_attrs(struct device *dev, size_t size, void *cpu_addr, - dma_addr_t handle, struct dma_attrs *attrs) + dma_addr_t handle, unsigned long attrs) { size_t iosize = size; @@ -629,7 +629,7 @@ static void __iommu_free_attrs(struct device *dev, size_t size, void *cpu_addr, * Hence how dodgy the below logic looks... */ if (__in_atomic_pool(cpu_addr, size)) { - iommu_dma_unmap_page(dev, handle, iosize, 0, NULL); + iommu_dma_unmap_page(dev, handle, iosize, 0, 0); __free_from_pool(cpu_addr, size); } else if (is_vmalloc_addr(cpu_addr)){ struct vm_struct *area = find_vm_area(cpu_addr); @@ -639,14 +639,14 @@ static void __iommu_free_attrs(struct device *dev, size_t size, void *cpu_addr, iommu_dma_free(dev, area->pages, iosize, &handle); dma_common_free_remap(cpu_addr, size, VM_USERMAP); } else { - iommu_dma_unmap_page(dev, handle, iosize, 0, NULL); + iommu_dma_unmap_page(dev, handle, iosize, 0, 0); __free_pages(virt_to_page(cpu_addr), get_order(size)); } } static int __iommu_mmap_attrs(struct device *dev, struct vm_area_struct *vma, void *cpu_addr, dma_addr_t dma_addr, size_t size, - struct dma_attrs *attrs) + unsigned long attrs) { struct vm_struct *area; int ret; @@ -666,7 +666,7 @@ static int __iommu_mmap_attrs(struct device *dev, struct vm_area_struct *vma, static int __iommu_get_sgtable(struct device *dev, struct sg_table *sgt, void *cpu_addr, dma_addr_t dma_addr, - size_t size, struct dma_attrs *attrs) + size_t size, unsigned long attrs) { unsigned int count = PAGE_ALIGN(size) >> PAGE_SHIFT; struct vm_struct *area = find_vm_area(cpu_addr); @@ -707,14 +707,14 @@ static void __iommu_sync_single_for_device(struct device *dev, static dma_addr_t __iommu_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { bool coherent = is_device_dma_coherent(dev); int prot = dma_direction_to_prot(dir, coherent); dma_addr_t dev_addr = iommu_dma_map_page(dev, page, offset, size, prot); if (!iommu_dma_mapping_error(dev, dev_addr) && - !dma_get_attr(DMA_ATTR_SKIP_CPU_SYNC, attrs)) + (attrs & DMA_ATTR_SKIP_CPU_SYNC) == 0) __iommu_sync_single_for_device(dev, dev_addr, size, dir); return dev_addr; @@ -722,9 +722,9 @@ static dma_addr_t __iommu_map_page(struct device *dev, struct page *page, static void __iommu_unmap_page(struct device *dev, dma_addr_t dev_addr, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { - if (!dma_get_attr(DMA_ATTR_SKIP_CPU_SYNC, attrs)) + if ((attrs & DMA_ATTR_SKIP_CPU_SYNC) == 0) __iommu_sync_single_for_cpu(dev, dev_addr, size, dir); iommu_dma_unmap_page(dev, dev_addr, size, dir, attrs); @@ -760,11 +760,11 @@ static void __iommu_sync_sg_for_device(struct device *dev, static int __iommu_map_sg_attrs(struct device *dev, struct scatterlist *sgl, int nelems, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { bool coherent = is_device_dma_coherent(dev); - if (!dma_get_attr(DMA_ATTR_SKIP_CPU_SYNC, attrs)) + if ((attrs & DMA_ATTR_SKIP_CPU_SYNC) == 0) __iommu_sync_sg_for_device(dev, sgl, nelems, dir); return iommu_dma_map_sg(dev, sgl, nelems, @@ -774,9 +774,9 @@ static int __iommu_map_sg_attrs(struct device *dev, struct scatterlist *sgl, static void __iommu_unmap_sg_attrs(struct device *dev, struct scatterlist *sgl, int nelems, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { - if (!dma_get_attr(DMA_ATTR_SKIP_CPU_SYNC, attrs)) + if ((attrs & DMA_ATTR_SKIP_CPU_SYNC) == 0) __iommu_sync_sg_for_cpu(dev, sgl, nelems, dir); iommu_dma_unmap_sg(dev, sgl, nelems, dir, attrs); diff --git a/arch/avr32/mm/dma-coherent.c b/arch/avr32/mm/dma-coherent.c index 92cf1fb2b3e6..58610d0df7ed 100644 --- a/arch/avr32/mm/dma-coherent.c +++ b/arch/avr32/mm/dma-coherent.c @@ -99,7 +99,7 @@ static void __dma_free(struct device *dev, size_t size, } static void *avr32_dma_alloc(struct device *dev, size_t size, - dma_addr_t *handle, gfp_t gfp, struct dma_attrs *attrs) + dma_addr_t *handle, gfp_t gfp, unsigned long attrs) { struct page *page; dma_addr_t phys; @@ -109,7 +109,7 @@ static void *avr32_dma_alloc(struct device *dev, size_t size, return NULL; phys = page_to_phys(page); - if (dma_get_attr(DMA_ATTR_WRITE_COMBINE, attrs)) { + if (attrs & DMA_ATTR_WRITE_COMBINE) { /* Now, map the page into P3 with write-combining turned on */ *handle = phys; return __ioremap(phys, size, _PAGE_BUFFER); @@ -119,11 +119,11 @@ static void *avr32_dma_alloc(struct device *dev, size_t size, } static void avr32_dma_free(struct device *dev, size_t size, - void *cpu_addr, dma_addr_t handle, struct dma_attrs *attrs) + void *cpu_addr, dma_addr_t handle, unsigned long attrs) { struct page *page; - if (dma_get_attr(DMA_ATTR_WRITE_COMBINE, attrs)) { + if (attrs & DMA_ATTR_WRITE_COMBINE) { iounmap(cpu_addr); page = phys_to_page(handle); @@ -142,7 +142,7 @@ static void avr32_dma_free(struct device *dev, size_t size, static dma_addr_t avr32_dma_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, - enum dma_data_direction direction, struct dma_attrs *attrs) + enum dma_data_direction direction, unsigned long attrs) { void *cpu_addr = page_address(page) + offset; @@ -152,7 +152,7 @@ static dma_addr_t avr32_dma_map_page(struct device *dev, struct page *page, static int avr32_dma_map_sg(struct device *dev, struct scatterlist *sglist, int nents, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { int i; struct scatterlist *sg; diff --git a/arch/blackfin/kernel/dma-mapping.c b/arch/blackfin/kernel/dma-mapping.c index 771afe6e4264..53fbbb61aa86 100644 --- a/arch/blackfin/kernel/dma-mapping.c +++ b/arch/blackfin/kernel/dma-mapping.c @@ -79,7 +79,7 @@ static void __free_dma_pages(unsigned long addr, unsigned int pages) } static void *bfin_dma_alloc(struct device *dev, size_t size, - dma_addr_t *dma_handle, gfp_t gfp, struct dma_attrs *attrs) + dma_addr_t *dma_handle, gfp_t gfp, unsigned long attrs) { void *ret; @@ -94,7 +94,7 @@ static void *bfin_dma_alloc(struct device *dev, size_t size, } static void bfin_dma_free(struct device *dev, size_t size, void *vaddr, - dma_addr_t dma_handle, struct dma_attrs *attrs) + dma_addr_t dma_handle, unsigned long attrs) { __free_dma_pages((unsigned long)vaddr, get_pages(size)); } @@ -111,7 +111,7 @@ EXPORT_SYMBOL(__dma_sync); static int bfin_dma_map_sg(struct device *dev, struct scatterlist *sg_list, int nents, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { struct scatterlist *sg; int i; @@ -139,7 +139,7 @@ static void bfin_dma_sync_sg_for_device(struct device *dev, static dma_addr_t bfin_dma_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { dma_addr_t handle = (dma_addr_t)(page_address(page) + offset); diff --git a/arch/c6x/include/asm/dma-mapping.h b/arch/c6x/include/asm/dma-mapping.h index 6b5cd7b0cf32..5717b1e52d96 100644 --- a/arch/c6x/include/asm/dma-mapping.h +++ b/arch/c6x/include/asm/dma-mapping.h @@ -26,8 +26,8 @@ static inline struct dma_map_ops *get_dma_ops(struct device *dev) extern void coherent_mem_init(u32 start, u32 size); void *c6x_dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, - gfp_t gfp, struct dma_attrs *attrs); + gfp_t gfp, unsigned long attrs); void c6x_dma_free(struct device *dev, size_t size, void *vaddr, - dma_addr_t dma_handle, struct dma_attrs *attrs); + dma_addr_t dma_handle, unsigned long attrs); #endif /* _ASM_C6X_DMA_MAPPING_H */ diff --git a/arch/c6x/kernel/dma.c b/arch/c6x/kernel/dma.c index 8a80f3a250c0..db4a6a301f5e 100644 --- a/arch/c6x/kernel/dma.c +++ b/arch/c6x/kernel/dma.c @@ -38,7 +38,7 @@ static void c6x_dma_sync(dma_addr_t handle, size_t size, static dma_addr_t c6x_dma_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { dma_addr_t handle = virt_to_phys(page_address(page) + offset); @@ -47,13 +47,13 @@ static dma_addr_t c6x_dma_map_page(struct device *dev, struct page *page, } static void c6x_dma_unmap_page(struct device *dev, dma_addr_t handle, - size_t size, enum dma_data_direction dir, struct dma_attrs *attrs) + size_t size, enum dma_data_direction dir, unsigned long attrs) { c6x_dma_sync(handle, size, dir); } static int c6x_dma_map_sg(struct device *dev, struct scatterlist *sglist, - int nents, enum dma_data_direction dir, struct dma_attrs *attrs) + int nents, enum dma_data_direction dir, unsigned long attrs) { struct scatterlist *sg; int i; @@ -67,8 +67,7 @@ static int c6x_dma_map_sg(struct device *dev, struct scatterlist *sglist, } static void c6x_dma_unmap_sg(struct device *dev, struct scatterlist *sglist, - int nents, enum dma_data_direction dir, - struct dma_attrs *attrs) + int nents, enum dma_data_direction dir, unsigned long attrs) { struct scatterlist *sg; int i; diff --git a/arch/c6x/mm/dma-coherent.c b/arch/c6x/mm/dma-coherent.c index f7ee63af2541..95e38ad27c69 100644 --- a/arch/c6x/mm/dma-coherent.c +++ b/arch/c6x/mm/dma-coherent.c @@ -74,7 +74,7 @@ static void __free_dma_pages(u32 addr, int order) * virtual and DMA address for that space. */ void *c6x_dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, - gfp_t gfp, struct dma_attrs *attrs) + gfp_t gfp, unsigned long attrs) { u32 paddr; int order; @@ -99,7 +99,7 @@ void *c6x_dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, * Free DMA coherent memory as defined by the above mapping. */ void c6x_dma_free(struct device *dev, size_t size, void *vaddr, - dma_addr_t dma_handle, struct dma_attrs *attrs) + dma_addr_t dma_handle, unsigned long attrs) { int order; diff --git a/arch/cris/arch-v32/drivers/pci/dma.c b/arch/cris/arch-v32/drivers/pci/dma.c index 8d5efa58cce1..1f0636793f0c 100644 --- a/arch/cris/arch-v32/drivers/pci/dma.c +++ b/arch/cris/arch-v32/drivers/pci/dma.c @@ -17,7 +17,7 @@ #include static void *v32_dma_alloc(struct device *dev, size_t size, - dma_addr_t *dma_handle, gfp_t gfp, struct dma_attrs *attrs) + dma_addr_t *dma_handle, gfp_t gfp, unsigned long attrs) { void *ret; @@ -37,22 +37,21 @@ static void *v32_dma_alloc(struct device *dev, size_t size, } static void v32_dma_free(struct device *dev, size_t size, void *vaddr, - dma_addr_t dma_handle, struct dma_attrs *attrs) + dma_addr_t dma_handle, unsigned long attrs) { free_pages((unsigned long)vaddr, get_order(size)); } static inline dma_addr_t v32_dma_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, - enum dma_data_direction direction, - struct dma_attrs *attrs) + enum dma_data_direction direction, unsigned long attrs) { return page_to_phys(page) + offset; } static inline int v32_dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { printk("Map sg\n"); return nents; diff --git a/arch/frv/mb93090-mb00/pci-dma-nommu.c b/arch/frv/mb93090-mb00/pci-dma-nommu.c index 082be49b5df0..90f2e4cb33d6 100644 --- a/arch/frv/mb93090-mb00/pci-dma-nommu.c +++ b/arch/frv/mb93090-mb00/pci-dma-nommu.c @@ -35,7 +35,7 @@ static DEFINE_SPINLOCK(dma_alloc_lock); static LIST_HEAD(dma_alloc_list); static void *frv_dma_alloc(struct device *hwdev, size_t size, dma_addr_t *dma_handle, - gfp_t gfp, struct dma_attrs *attrs) + gfp_t gfp, unsigned long attrs) { struct dma_alloc_record *new; struct list_head *this = &dma_alloc_list; @@ -86,7 +86,7 @@ static void *frv_dma_alloc(struct device *hwdev, size_t size, dma_addr_t *dma_ha } static void frv_dma_free(struct device *hwdev, size_t size, void *vaddr, - dma_addr_t dma_handle, struct dma_attrs *attrs) + dma_addr_t dma_handle, unsigned long attrs) { struct dma_alloc_record *rec; unsigned long flags; @@ -107,7 +107,7 @@ static void frv_dma_free(struct device *hwdev, size_t size, void *vaddr, static int frv_dma_map_sg(struct device *dev, struct scatterlist *sglist, int nents, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { int i; struct scatterlist *sg; @@ -124,7 +124,7 @@ static int frv_dma_map_sg(struct device *dev, struct scatterlist *sglist, static dma_addr_t frv_dma_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, - enum dma_data_direction direction, struct dma_attrs *attrs) + enum dma_data_direction direction, unsigned long attrs) { BUG_ON(direction == DMA_NONE); flush_dcache_page(page); diff --git a/arch/frv/mb93090-mb00/pci-dma.c b/arch/frv/mb93090-mb00/pci-dma.c index 316b7b65348d..f585745b1abc 100644 --- a/arch/frv/mb93090-mb00/pci-dma.c +++ b/arch/frv/mb93090-mb00/pci-dma.c @@ -19,8 +19,7 @@ #include static void *frv_dma_alloc(struct device *hwdev, size_t size, - dma_addr_t *dma_handle, gfp_t gfp, - struct dma_attrs *attrs) + dma_addr_t *dma_handle, gfp_t gfp, unsigned long attrs) { void *ret; @@ -32,14 +31,14 @@ static void *frv_dma_alloc(struct device *hwdev, size_t size, } static void frv_dma_free(struct device *hwdev, size_t size, void *vaddr, - dma_addr_t dma_handle, struct dma_attrs *attrs) + dma_addr_t dma_handle, unsigned long attrs) { consistent_free(vaddr); } static int frv_dma_map_sg(struct device *dev, struct scatterlist *sglist, int nents, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { unsigned long dampr2; void *vaddr; @@ -69,7 +68,7 @@ static int frv_dma_map_sg(struct device *dev, struct scatterlist *sglist, static dma_addr_t frv_dma_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, - enum dma_data_direction direction, struct dma_attrs *attrs) + enum dma_data_direction direction, unsigned long attrs) { flush_dcache_page(page); return (dma_addr_t) page_to_phys(page) + offset; diff --git a/arch/h8300/kernel/dma.c b/arch/h8300/kernel/dma.c index eeb13d3f2424..3651da045806 100644 --- a/arch/h8300/kernel/dma.c +++ b/arch/h8300/kernel/dma.c @@ -12,7 +12,7 @@ static void *dma_alloc(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t gfp, - struct dma_attrs *attrs) + unsigned long attrs) { void *ret; @@ -32,7 +32,7 @@ static void *dma_alloc(struct device *dev, size_t size, static void dma_free(struct device *dev, size_t size, void *vaddr, dma_addr_t dma_handle, - struct dma_attrs *attrs) + unsigned long attrs) { free_pages((unsigned long)vaddr, get_order(size)); @@ -41,14 +41,14 @@ static void dma_free(struct device *dev, size_t size, static dma_addr_t map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { return page_to_phys(page) + offset; } static int map_sg(struct device *dev, struct scatterlist *sgl, int nents, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { struct scatterlist *sg; int i; diff --git a/arch/hexagon/include/asm/dma-mapping.h b/arch/hexagon/include/asm/dma-mapping.h index aa6203464520..7ef58df909fc 100644 --- a/arch/hexagon/include/asm/dma-mapping.h +++ b/arch/hexagon/include/asm/dma-mapping.h @@ -26,7 +26,6 @@ #include #include #include -#include #include struct device; diff --git a/arch/hexagon/kernel/dma.c b/arch/hexagon/kernel/dma.c index 9e3ddf792bd3..b9017785fb71 100644 --- a/arch/hexagon/kernel/dma.c +++ b/arch/hexagon/kernel/dma.c @@ -51,7 +51,7 @@ static struct gen_pool *coherent_pool; static void *hexagon_dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_addr, gfp_t flag, - struct dma_attrs *attrs) + unsigned long attrs) { void *ret; @@ -84,7 +84,7 @@ static void *hexagon_dma_alloc_coherent(struct device *dev, size_t size, } static void hexagon_free_coherent(struct device *dev, size_t size, void *vaddr, - dma_addr_t dma_addr, struct dma_attrs *attrs) + dma_addr_t dma_addr, unsigned long attrs) { gen_pool_free(coherent_pool, (unsigned long) vaddr, size); } @@ -105,7 +105,7 @@ static int check_addr(const char *name, struct device *hwdev, static int hexagon_map_sg(struct device *hwdev, struct scatterlist *sg, int nents, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { struct scatterlist *s; int i; @@ -172,7 +172,7 @@ static inline void dma_sync(void *addr, size_t size, static dma_addr_t hexagon_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { dma_addr_t bus = page_to_phys(page) + offset; WARN_ON(size == 0); diff --git a/arch/ia64/hp/common/sba_iommu.c b/arch/ia64/hp/common/sba_iommu.c index a6d6190c9d24..630ee8073899 100644 --- a/arch/ia64/hp/common/sba_iommu.c +++ b/arch/ia64/hp/common/sba_iommu.c @@ -919,7 +919,7 @@ sba_mark_invalid(struct ioc *ioc, dma_addr_t iova, size_t byte_cnt) static dma_addr_t sba_map_page(struct device *dev, struct page *page, unsigned long poff, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { struct ioc *ioc; void *addr = page_address(page) + poff; @@ -1005,7 +1005,7 @@ static dma_addr_t sba_map_page(struct device *dev, struct page *page, static dma_addr_t sba_map_single_attrs(struct device *dev, void *addr, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { return sba_map_page(dev, virt_to_page(addr), (unsigned long)addr & ~PAGE_MASK, size, dir, attrs); @@ -1046,7 +1046,7 @@ sba_mark_clean(struct ioc *ioc, dma_addr_t iova, size_t size) * See Documentation/DMA-API-HOWTO.txt */ static void sba_unmap_page(struct device *dev, dma_addr_t iova, size_t size, - enum dma_data_direction dir, struct dma_attrs *attrs) + enum dma_data_direction dir, unsigned long attrs) { struct ioc *ioc; #if DELAYED_RESOURCE_CNT > 0 @@ -1115,7 +1115,7 @@ static void sba_unmap_page(struct device *dev, dma_addr_t iova, size_t size, } void sba_unmap_single_attrs(struct device *dev, dma_addr_t iova, size_t size, - enum dma_data_direction dir, struct dma_attrs *attrs) + enum dma_data_direction dir, unsigned long attrs) { sba_unmap_page(dev, iova, size, dir, attrs); } @@ -1130,7 +1130,7 @@ void sba_unmap_single_attrs(struct device *dev, dma_addr_t iova, size_t size, */ static void * sba_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, - gfp_t flags, struct dma_attrs *attrs) + gfp_t flags, unsigned long attrs) { struct ioc *ioc; void *addr; @@ -1175,7 +1175,7 @@ sba_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, * device to map single to get an iova mapping. */ *dma_handle = sba_map_single_attrs(&ioc->sac_only_dev->dev, addr, - size, 0, NULL); + size, 0, 0); return addr; } @@ -1191,9 +1191,9 @@ sba_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, * See Documentation/DMA-API-HOWTO.txt */ static void sba_free_coherent(struct device *dev, size_t size, void *vaddr, - dma_addr_t dma_handle, struct dma_attrs *attrs) + dma_addr_t dma_handle, unsigned long attrs) { - sba_unmap_single_attrs(dev, dma_handle, size, 0, NULL); + sba_unmap_single_attrs(dev, dma_handle, size, 0, 0); free_pages((unsigned long) vaddr, get_order(size)); } @@ -1442,7 +1442,7 @@ sba_coalesce_chunks(struct ioc *ioc, struct device *dev, static void sba_unmap_sg_attrs(struct device *dev, struct scatterlist *sglist, int nents, enum dma_data_direction dir, - struct dma_attrs *attrs); + unsigned long attrs); /** * sba_map_sg - map Scatter/Gather list * @dev: instance of PCI owned by the driver that's asking. @@ -1455,7 +1455,7 @@ static void sba_unmap_sg_attrs(struct device *dev, struct scatterlist *sglist, */ static int sba_map_sg_attrs(struct device *dev, struct scatterlist *sglist, int nents, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { struct ioc *ioc; int coalesced, filled = 0; @@ -1551,7 +1551,7 @@ static int sba_map_sg_attrs(struct device *dev, struct scatterlist *sglist, */ static void sba_unmap_sg_attrs(struct device *dev, struct scatterlist *sglist, int nents, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { #ifdef ASSERT_PDIR_SANITY struct ioc *ioc; diff --git a/arch/ia64/include/asm/machvec.h b/arch/ia64/include/asm/machvec.h index 9c39bdfc2da8..ed7f09089f12 100644 --- a/arch/ia64/include/asm/machvec.h +++ b/arch/ia64/include/asm/machvec.h @@ -22,7 +22,6 @@ struct pci_bus; struct task_struct; struct pci_dev; struct msi_desc; -struct dma_attrs; typedef void ia64_mv_setup_t (char **); typedef void ia64_mv_cpu_init_t (void); diff --git a/arch/ia64/kernel/pci-swiotlb.c b/arch/ia64/kernel/pci-swiotlb.c index 939260aeac98..2933208c0285 100644 --- a/arch/ia64/kernel/pci-swiotlb.c +++ b/arch/ia64/kernel/pci-swiotlb.c @@ -16,7 +16,7 @@ EXPORT_SYMBOL(swiotlb); static void *ia64_swiotlb_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t gfp, - struct dma_attrs *attrs) + unsigned long attrs) { if (dev->coherent_dma_mask != DMA_BIT_MASK(64)) gfp |= GFP_DMA; @@ -25,7 +25,7 @@ static void *ia64_swiotlb_alloc_coherent(struct device *dev, size_t size, static void ia64_swiotlb_free_coherent(struct device *dev, size_t size, void *vaddr, dma_addr_t dma_addr, - struct dma_attrs *attrs) + unsigned long attrs) { swiotlb_free_coherent(dev, size, vaddr, dma_addr); } diff --git a/arch/ia64/sn/pci/pci_dma.c b/arch/ia64/sn/pci/pci_dma.c index 8f59907007cb..74c934a997bb 100644 --- a/arch/ia64/sn/pci/pci_dma.c +++ b/arch/ia64/sn/pci/pci_dma.c @@ -77,7 +77,7 @@ EXPORT_SYMBOL(sn_dma_set_mask); */ static void *sn_dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t * dma_handle, gfp_t flags, - struct dma_attrs *attrs) + unsigned long attrs) { void *cpuaddr; unsigned long phys_addr; @@ -138,7 +138,7 @@ static void *sn_dma_alloc_coherent(struct device *dev, size_t size, * any associated IOMMU mappings. */ static void sn_dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, - dma_addr_t dma_handle, struct dma_attrs *attrs) + dma_addr_t dma_handle, unsigned long attrs) { struct pci_dev *pdev = to_pci_dev(dev); struct sn_pcibus_provider *provider = SN_PCIDEV_BUSPROVIDER(pdev); @@ -176,21 +176,18 @@ static void sn_dma_free_coherent(struct device *dev, size_t size, void *cpu_addr static dma_addr_t sn_dma_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { void *cpu_addr = page_address(page) + offset; dma_addr_t dma_addr; unsigned long phys_addr; struct pci_dev *pdev = to_pci_dev(dev); struct sn_pcibus_provider *provider = SN_PCIDEV_BUSPROVIDER(pdev); - int dmabarr; - - dmabarr = dma_get_attr(DMA_ATTR_WRITE_BARRIER, attrs); BUG_ON(!dev_is_pci(dev)); phys_addr = __pa(cpu_addr); - if (dmabarr) + if (attrs & DMA_ATTR_WRITE_BARRIER) dma_addr = provider->dma_map_consistent(pdev, phys_addr, size, SN_DMA_ADDR_PHYS); else @@ -218,7 +215,7 @@ static dma_addr_t sn_dma_map_page(struct device *dev, struct page *page, */ static void sn_dma_unmap_page(struct device *dev, dma_addr_t dma_addr, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { struct pci_dev *pdev = to_pci_dev(dev); struct sn_pcibus_provider *provider = SN_PCIDEV_BUSPROVIDER(pdev); @@ -240,7 +237,7 @@ static void sn_dma_unmap_page(struct device *dev, dma_addr_t dma_addr, */ static void sn_dma_unmap_sg(struct device *dev, struct scatterlist *sgl, int nhwentries, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { int i; struct pci_dev *pdev = to_pci_dev(dev); @@ -273,16 +270,13 @@ static void sn_dma_unmap_sg(struct device *dev, struct scatterlist *sgl, */ static int sn_dma_map_sg(struct device *dev, struct scatterlist *sgl, int nhwentries, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { unsigned long phys_addr; struct scatterlist *saved_sg = sgl, *sg; struct pci_dev *pdev = to_pci_dev(dev); struct sn_pcibus_provider *provider = SN_PCIDEV_BUSPROVIDER(pdev); int i; - int dmabarr; - - dmabarr = dma_get_attr(DMA_ATTR_WRITE_BARRIER, attrs); BUG_ON(!dev_is_pci(dev)); @@ -292,7 +286,7 @@ static int sn_dma_map_sg(struct device *dev, struct scatterlist *sgl, for_each_sg(sgl, sg, nhwentries, i) { dma_addr_t dma_addr; phys_addr = SG_ENT_PHYS_ADDRESS(sg); - if (dmabarr) + if (attrs & DMA_ATTR_WRITE_BARRIER) dma_addr = provider->dma_map_consistent(pdev, phys_addr, sg->length, diff --git a/arch/m68k/kernel/dma.c b/arch/m68k/kernel/dma.c index cbc78b4117b5..8cf97cbadc91 100644 --- a/arch/m68k/kernel/dma.c +++ b/arch/m68k/kernel/dma.c @@ -19,7 +19,7 @@ #if defined(CONFIG_MMU) && !defined(CONFIG_COLDFIRE) static void *m68k_dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, - gfp_t flag, struct dma_attrs *attrs) + gfp_t flag, unsigned long attrs) { struct page *page, **map; pgprot_t pgprot; @@ -62,7 +62,7 @@ static void *m68k_dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, } static void m68k_dma_free(struct device *dev, size_t size, void *addr, - dma_addr_t handle, struct dma_attrs *attrs) + dma_addr_t handle, unsigned long attrs) { pr_debug("dma_free_coherent: %p, %x\n", addr, handle); vfree(addr); @@ -73,7 +73,7 @@ static void m68k_dma_free(struct device *dev, size_t size, void *addr, #include static void *m68k_dma_alloc(struct device *dev, size_t size, - dma_addr_t *dma_handle, gfp_t gfp, struct dma_attrs *attrs) + dma_addr_t *dma_handle, gfp_t gfp, unsigned long attrs) { void *ret; /* ignore region specifiers */ @@ -91,7 +91,7 @@ static void *m68k_dma_alloc(struct device *dev, size_t size, } static void m68k_dma_free(struct device *dev, size_t size, void *vaddr, - dma_addr_t dma_handle, struct dma_attrs *attrs) + dma_addr_t dma_handle, unsigned long attrs) { free_pages((unsigned long)vaddr, get_order(size)); } @@ -130,7 +130,7 @@ static void m68k_dma_sync_sg_for_device(struct device *dev, static dma_addr_t m68k_dma_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { dma_addr_t handle = page_to_phys(page) + offset; @@ -139,7 +139,7 @@ static dma_addr_t m68k_dma_map_page(struct device *dev, struct page *page, } static int m68k_dma_map_sg(struct device *dev, struct scatterlist *sglist, - int nents, enum dma_data_direction dir, struct dma_attrs *attrs) + int nents, enum dma_data_direction dir, unsigned long attrs) { int i; struct scatterlist *sg; diff --git a/arch/metag/kernel/dma.c b/arch/metag/kernel/dma.c index e12368d02155..0db31e24c541 100644 --- a/arch/metag/kernel/dma.c +++ b/arch/metag/kernel/dma.c @@ -172,7 +172,7 @@ out: * virtual and bus address for that space. */ static void *metag_dma_alloc(struct device *dev, size_t size, - dma_addr_t *handle, gfp_t gfp, struct dma_attrs *attrs) + dma_addr_t *handle, gfp_t gfp, unsigned long attrs) { struct page *page; struct metag_vm_region *c; @@ -268,7 +268,7 @@ no_page: * free a page as defined by the above mapping. */ static void metag_dma_free(struct device *dev, size_t size, void *vaddr, - dma_addr_t dma_handle, struct dma_attrs *attrs) + dma_addr_t dma_handle, unsigned long attrs) { struct metag_vm_region *c; unsigned long flags, addr; @@ -331,13 +331,13 @@ no_area: static int metag_dma_mmap(struct device *dev, struct vm_area_struct *vma, void *cpu_addr, dma_addr_t dma_addr, size_t size, - struct dma_attrs *attrs) + unsigned long attrs) { unsigned long flags, user_size, kern_size; struct metag_vm_region *c; int ret = -ENXIO; - if (dma_get_attr(DMA_ATTR_WRITE_COMBINE, attrs)) + if (attrs & DMA_ATTR_WRITE_COMBINE) vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); else vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); @@ -482,7 +482,7 @@ static void dma_sync_for_cpu(void *vaddr, size_t size, int dma_direction) static dma_addr_t metag_dma_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, - enum dma_data_direction direction, struct dma_attrs *attrs) + enum dma_data_direction direction, unsigned long attrs) { dma_sync_for_device((void *)(page_to_phys(page) + offset), size, direction); @@ -491,14 +491,14 @@ static dma_addr_t metag_dma_map_page(struct device *dev, struct page *page, static void metag_dma_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { dma_sync_for_cpu(phys_to_virt(dma_address), size, direction); } static int metag_dma_map_sg(struct device *dev, struct scatterlist *sglist, int nents, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { struct scatterlist *sg; int i; @@ -516,7 +516,7 @@ static int metag_dma_map_sg(struct device *dev, struct scatterlist *sglist, static void metag_dma_unmap_sg(struct device *dev, struct scatterlist *sglist, int nhwentries, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { struct scatterlist *sg; int i; diff --git a/arch/microblaze/include/asm/dma-mapping.h b/arch/microblaze/include/asm/dma-mapping.h index 1884783d15c0..1768d4bdc8d3 100644 --- a/arch/microblaze/include/asm/dma-mapping.h +++ b/arch/microblaze/include/asm/dma-mapping.h @@ -25,7 +25,6 @@ #include #include #include -#include #include #include diff --git a/arch/microblaze/kernel/dma.c b/arch/microblaze/kernel/dma.c index bf4dec229437..ec04dc1e2527 100644 --- a/arch/microblaze/kernel/dma.c +++ b/arch/microblaze/kernel/dma.c @@ -17,7 +17,7 @@ static void *dma_direct_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag, - struct dma_attrs *attrs) + unsigned long attrs) { #ifdef NOT_COHERENT_CACHE return consistent_alloc(flag, size, dma_handle); @@ -42,7 +42,7 @@ static void *dma_direct_alloc_coherent(struct device *dev, size_t size, static void dma_direct_free_coherent(struct device *dev, size_t size, void *vaddr, dma_addr_t dma_handle, - struct dma_attrs *attrs) + unsigned long attrs) { #ifdef NOT_COHERENT_CACHE consistent_free(size, vaddr); @@ -53,7 +53,7 @@ static void dma_direct_free_coherent(struct device *dev, size_t size, static int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl, int nents, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { struct scatterlist *sg; int i; @@ -78,7 +78,7 @@ static inline dma_addr_t dma_direct_map_page(struct device *dev, unsigned long offset, size_t size, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { __dma_sync(page_to_phys(page) + offset, size, direction); return page_to_phys(page) + offset; @@ -88,7 +88,7 @@ static inline void dma_direct_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { /* There is not necessary to do cache cleanup * @@ -157,7 +157,7 @@ dma_direct_sync_sg_for_device(struct device *dev, static int dma_direct_mmap_coherent(struct device *dev, struct vm_area_struct *vma, void *cpu_addr, dma_addr_t handle, size_t size, - struct dma_attrs *attrs) + unsigned long attrs) { #ifdef CONFIG_MMU unsigned long user_count = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT; diff --git a/arch/mips/cavium-octeon/dma-octeon.c b/arch/mips/cavium-octeon/dma-octeon.c index 2cd45f5f9481..fd69528b24fb 100644 --- a/arch/mips/cavium-octeon/dma-octeon.c +++ b/arch/mips/cavium-octeon/dma-octeon.c @@ -125,7 +125,7 @@ static phys_addr_t octeon_small_dma_to_phys(struct device *dev, static dma_addr_t octeon_dma_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { dma_addr_t daddr = swiotlb_map_page(dev, page, offset, size, direction, attrs); @@ -135,7 +135,7 @@ static dma_addr_t octeon_dma_map_page(struct device *dev, struct page *page, } static int octeon_dma_map_sg(struct device *dev, struct scatterlist *sg, - int nents, enum dma_data_direction direction, struct dma_attrs *attrs) + int nents, enum dma_data_direction direction, unsigned long attrs) { int r = swiotlb_map_sg_attrs(dev, sg, nents, direction, attrs); mb(); @@ -157,7 +157,7 @@ static void octeon_dma_sync_sg_for_device(struct device *dev, } static void *octeon_dma_alloc_coherent(struct device *dev, size_t size, - dma_addr_t *dma_handle, gfp_t gfp, struct dma_attrs *attrs) + dma_addr_t *dma_handle, gfp_t gfp, unsigned long attrs) { void *ret; @@ -189,7 +189,7 @@ static void *octeon_dma_alloc_coherent(struct device *dev, size_t size, } static void octeon_dma_free_coherent(struct device *dev, size_t size, - void *vaddr, dma_addr_t dma_handle, struct dma_attrs *attrs) + void *vaddr, dma_addr_t dma_handle, unsigned long attrs) { swiotlb_free_coherent(dev, size, vaddr, dma_handle); } diff --git a/arch/mips/loongson64/common/dma-swiotlb.c b/arch/mips/loongson64/common/dma-swiotlb.c index 4ffa6fc81c8f..1a80b6f73ab2 100644 --- a/arch/mips/loongson64/common/dma-swiotlb.c +++ b/arch/mips/loongson64/common/dma-swiotlb.c @@ -10,7 +10,7 @@ #include static void *loongson_dma_alloc_coherent(struct device *dev, size_t size, - dma_addr_t *dma_handle, gfp_t gfp, struct dma_attrs *attrs) + dma_addr_t *dma_handle, gfp_t gfp, unsigned long attrs) { void *ret; @@ -41,7 +41,7 @@ static void *loongson_dma_alloc_coherent(struct device *dev, size_t size, } static void loongson_dma_free_coherent(struct device *dev, size_t size, - void *vaddr, dma_addr_t dma_handle, struct dma_attrs *attrs) + void *vaddr, dma_addr_t dma_handle, unsigned long attrs) { swiotlb_free_coherent(dev, size, vaddr, dma_handle); } @@ -49,7 +49,7 @@ static void loongson_dma_free_coherent(struct device *dev, size_t size, static dma_addr_t loongson_dma_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { dma_addr_t daddr = swiotlb_map_page(dev, page, offset, size, dir, attrs); @@ -59,9 +59,9 @@ static dma_addr_t loongson_dma_map_page(struct device *dev, struct page *page, static int loongson_dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { - int r = swiotlb_map_sg_attrs(dev, sg, nents, dir, NULL); + int r = swiotlb_map_sg_attrs(dev, sg, nents, dir, 0); mb(); return r; diff --git a/arch/mips/mm/dma-default.c b/arch/mips/mm/dma-default.c index cb557d28cb21..b2eadd6fa9a1 100644 --- a/arch/mips/mm/dma-default.c +++ b/arch/mips/mm/dma-default.c @@ -131,7 +131,7 @@ static void *mips_dma_alloc_noncoherent(struct device *dev, size_t size, } static void *mips_dma_alloc_coherent(struct device *dev, size_t size, - dma_addr_t * dma_handle, gfp_t gfp, struct dma_attrs *attrs) + dma_addr_t *dma_handle, gfp_t gfp, unsigned long attrs) { void *ret; struct page *page = NULL; @@ -141,7 +141,7 @@ static void *mips_dma_alloc_coherent(struct device *dev, size_t size, * XXX: seems like the coherent and non-coherent implementations could * be consolidated. */ - if (dma_get_attr(DMA_ATTR_NON_CONSISTENT, attrs)) + if (attrs & DMA_ATTR_NON_CONSISTENT) return mips_dma_alloc_noncoherent(dev, size, dma_handle, gfp); gfp = massage_gfp_flags(dev, gfp); @@ -176,13 +176,13 @@ static void mips_dma_free_noncoherent(struct device *dev, size_t size, } static void mips_dma_free_coherent(struct device *dev, size_t size, void *vaddr, - dma_addr_t dma_handle, struct dma_attrs *attrs) + dma_addr_t dma_handle, unsigned long attrs) { unsigned long addr = (unsigned long) vaddr; unsigned int count = PAGE_ALIGN(size) >> PAGE_SHIFT; struct page *page = NULL; - if (dma_get_attr(DMA_ATTR_NON_CONSISTENT, attrs)) { + if (attrs & DMA_ATTR_NON_CONSISTENT) { mips_dma_free_noncoherent(dev, size, vaddr, dma_handle); return; } @@ -200,7 +200,7 @@ static void mips_dma_free_coherent(struct device *dev, size_t size, void *vaddr, static int mips_dma_mmap(struct device *dev, struct vm_area_struct *vma, void *cpu_addr, dma_addr_t dma_addr, size_t size, - struct dma_attrs *attrs) + unsigned long attrs) { unsigned long user_count = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT; unsigned long count = PAGE_ALIGN(size) >> PAGE_SHIFT; @@ -214,7 +214,7 @@ static int mips_dma_mmap(struct device *dev, struct vm_area_struct *vma, pfn = page_to_pfn(virt_to_page((void *)addr)); - if (dma_get_attr(DMA_ATTR_WRITE_COMBINE, attrs)) + if (attrs & DMA_ATTR_WRITE_COMBINE) vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); else vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); @@ -291,7 +291,7 @@ static inline void __dma_sync(struct page *page, } static void mips_dma_unmap_page(struct device *dev, dma_addr_t dma_addr, - size_t size, enum dma_data_direction direction, struct dma_attrs *attrs) + size_t size, enum dma_data_direction direction, unsigned long attrs) { if (cpu_needs_post_dma_flush(dev)) __dma_sync(dma_addr_to_page(dev, dma_addr), @@ -301,7 +301,7 @@ static void mips_dma_unmap_page(struct device *dev, dma_addr_t dma_addr, } static int mips_dma_map_sg(struct device *dev, struct scatterlist *sglist, - int nents, enum dma_data_direction direction, struct dma_attrs *attrs) + int nents, enum dma_data_direction direction, unsigned long attrs) { int i; struct scatterlist *sg; @@ -322,7 +322,7 @@ static int mips_dma_map_sg(struct device *dev, struct scatterlist *sglist, static dma_addr_t mips_dma_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { if (!plat_device_is_coherent(dev)) __dma_sync(page, offset, size, direction); @@ -332,7 +332,7 @@ static dma_addr_t mips_dma_map_page(struct device *dev, struct page *page, static void mips_dma_unmap_sg(struct device *dev, struct scatterlist *sglist, int nhwentries, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { int i; struct scatterlist *sg; diff --git a/arch/mips/netlogic/common/nlm-dma.c b/arch/mips/netlogic/common/nlm-dma.c index 3758715d4ab6..0630693bec2a 100644 --- a/arch/mips/netlogic/common/nlm-dma.c +++ b/arch/mips/netlogic/common/nlm-dma.c @@ -45,7 +45,7 @@ static char *nlm_swiotlb; static void *nlm_dma_alloc_coherent(struct device *dev, size_t size, - dma_addr_t *dma_handle, gfp_t gfp, struct dma_attrs *attrs) + dma_addr_t *dma_handle, gfp_t gfp, unsigned long attrs) { /* ignore region specifiers */ gfp &= ~(__GFP_DMA | __GFP_DMA32 | __GFP_HIGHMEM); @@ -62,7 +62,7 @@ static void *nlm_dma_alloc_coherent(struct device *dev, size_t size, } static void nlm_dma_free_coherent(struct device *dev, size_t size, - void *vaddr, dma_addr_t dma_handle, struct dma_attrs *attrs) + void *vaddr, dma_addr_t dma_handle, unsigned long attrs) { swiotlb_free_coherent(dev, size, vaddr, dma_handle); } diff --git a/arch/mn10300/mm/dma-alloc.c b/arch/mn10300/mm/dma-alloc.c index 8842394cb49a..4f4b9029f0ea 100644 --- a/arch/mn10300/mm/dma-alloc.c +++ b/arch/mn10300/mm/dma-alloc.c @@ -21,7 +21,7 @@ static unsigned long pci_sram_allocated = 0xbc000000; static void *mn10300_dma_alloc(struct device *dev, size_t size, - dma_addr_t *dma_handle, gfp_t gfp, struct dma_attrs *attrs) + dma_addr_t *dma_handle, gfp_t gfp, unsigned long attrs) { unsigned long addr; void *ret; @@ -63,7 +63,7 @@ done: } static void mn10300_dma_free(struct device *dev, size_t size, void *vaddr, - dma_addr_t dma_handle, struct dma_attrs *attrs) + dma_addr_t dma_handle, unsigned long attrs) { unsigned long addr = (unsigned long) vaddr & ~0x20000000; @@ -75,7 +75,7 @@ static void mn10300_dma_free(struct device *dev, size_t size, void *vaddr, static int mn10300_dma_map_sg(struct device *dev, struct scatterlist *sglist, int nents, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { struct scatterlist *sg; int i; @@ -92,7 +92,7 @@ static int mn10300_dma_map_sg(struct device *dev, struct scatterlist *sglist, static dma_addr_t mn10300_dma_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, - enum dma_data_direction direction, struct dma_attrs *attrs) + enum dma_data_direction direction, unsigned long attrs) { return page_to_bus(page) + offset; } diff --git a/arch/nios2/mm/dma-mapping.c b/arch/nios2/mm/dma-mapping.c index 90422c367ed3..d800fad87896 100644 --- a/arch/nios2/mm/dma-mapping.c +++ b/arch/nios2/mm/dma-mapping.c @@ -59,7 +59,7 @@ static inline void __dma_sync_for_cpu(void *vaddr, size_t size, } static void *nios2_dma_alloc(struct device *dev, size_t size, - dma_addr_t *dma_handle, gfp_t gfp, struct dma_attrs *attrs) + dma_addr_t *dma_handle, gfp_t gfp, unsigned long attrs) { void *ret; @@ -84,7 +84,7 @@ static void *nios2_dma_alloc(struct device *dev, size_t size, } static void nios2_dma_free(struct device *dev, size_t size, void *vaddr, - dma_addr_t dma_handle, struct dma_attrs *attrs) + dma_addr_t dma_handle, unsigned long attrs) { unsigned long addr = (unsigned long) CAC_ADDR((unsigned long) vaddr); @@ -93,7 +93,7 @@ static void nios2_dma_free(struct device *dev, size_t size, void *vaddr, static int nios2_dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { int i; @@ -113,7 +113,7 @@ static int nios2_dma_map_sg(struct device *dev, struct scatterlist *sg, static dma_addr_t nios2_dma_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { void *addr = page_address(page) + offset; @@ -123,14 +123,14 @@ static dma_addr_t nios2_dma_map_page(struct device *dev, struct page *page, static void nios2_dma_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { __dma_sync_for_cpu(phys_to_virt(dma_address), size, direction); } static void nios2_dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { void *addr; int i; diff --git a/arch/openrisc/kernel/dma.c b/arch/openrisc/kernel/dma.c index 0b77ddb1ee07..140c99140649 100644 --- a/arch/openrisc/kernel/dma.c +++ b/arch/openrisc/kernel/dma.c @@ -22,7 +22,6 @@ #include #include #include -#include #include #include @@ -83,7 +82,7 @@ page_clear_nocache(pte_t *pte, unsigned long addr, static void * or1k_dma_alloc(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t gfp, - struct dma_attrs *attrs) + unsigned long attrs) { unsigned long va; void *page; @@ -101,7 +100,7 @@ or1k_dma_alloc(struct device *dev, size_t size, va = (unsigned long)page; - if (!dma_get_attr(DMA_ATTR_NON_CONSISTENT, attrs)) { + if ((attrs & DMA_ATTR_NON_CONSISTENT) == 0) { /* * We need to iterate through the pages, clearing the dcache for * them and setting the cache-inhibit bit. @@ -117,7 +116,7 @@ or1k_dma_alloc(struct device *dev, size_t size, static void or1k_dma_free(struct device *dev, size_t size, void *vaddr, - dma_addr_t dma_handle, struct dma_attrs *attrs) + dma_addr_t dma_handle, unsigned long attrs) { unsigned long va = (unsigned long)vaddr; struct mm_walk walk = { @@ -125,7 +124,7 @@ or1k_dma_free(struct device *dev, size_t size, void *vaddr, .mm = &init_mm }; - if (!dma_get_attr(DMA_ATTR_NON_CONSISTENT, attrs)) { + if ((attrs & DMA_ATTR_NON_CONSISTENT) == 0) { /* walk_page_range shouldn't be able to fail here */ WARN_ON(walk_page_range(va, va + size, &walk)); } @@ -137,7 +136,7 @@ static dma_addr_t or1k_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { unsigned long cl; dma_addr_t addr = page_to_phys(page) + offset; @@ -170,7 +169,7 @@ or1k_map_page(struct device *dev, struct page *page, static void or1k_unmap_page(struct device *dev, dma_addr_t dma_handle, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { /* Nothing special to do here... */ } @@ -178,14 +177,14 @@ or1k_unmap_page(struct device *dev, dma_addr_t dma_handle, static int or1k_map_sg(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { struct scatterlist *s; int i; for_each_sg(sg, s, nents, i) { s->dma_address = or1k_map_page(dev, sg_page(s), s->offset, - s->length, dir, NULL); + s->length, dir, 0); } return nents; @@ -194,13 +193,13 @@ or1k_map_sg(struct device *dev, struct scatterlist *sg, static void or1k_unmap_sg(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { struct scatterlist *s; int i; for_each_sg(sg, s, nents, i) { - or1k_unmap_page(dev, sg_dma_address(s), sg_dma_len(s), dir, NULL); + or1k_unmap_page(dev, sg_dma_address(s), sg_dma_len(s), dir, 0); } } diff --git a/arch/parisc/kernel/pci-dma.c b/arch/parisc/kernel/pci-dma.c index a27e4928bf73..02d9ed0f3949 100644 --- a/arch/parisc/kernel/pci-dma.c +++ b/arch/parisc/kernel/pci-dma.c @@ -414,7 +414,7 @@ pcxl_dma_init(void) __initcall(pcxl_dma_init); static void *pa11_dma_alloc(struct device *dev, size_t size, - dma_addr_t *dma_handle, gfp_t flag, struct dma_attrs *attrs) + dma_addr_t *dma_handle, gfp_t flag, unsigned long attrs) { unsigned long vaddr; unsigned long paddr; @@ -441,7 +441,7 @@ static void *pa11_dma_alloc(struct device *dev, size_t size, } static void pa11_dma_free(struct device *dev, size_t size, void *vaddr, - dma_addr_t dma_handle, struct dma_attrs *attrs) + dma_addr_t dma_handle, unsigned long attrs) { int order; @@ -454,7 +454,7 @@ static void pa11_dma_free(struct device *dev, size_t size, void *vaddr, static dma_addr_t pa11_dma_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, - enum dma_data_direction direction, struct dma_attrs *attrs) + enum dma_data_direction direction, unsigned long attrs) { void *addr = page_address(page) + offset; BUG_ON(direction == DMA_NONE); @@ -465,7 +465,7 @@ static dma_addr_t pa11_dma_map_page(struct device *dev, struct page *page, static void pa11_dma_unmap_page(struct device *dev, dma_addr_t dma_handle, size_t size, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { BUG_ON(direction == DMA_NONE); @@ -484,7 +484,7 @@ static void pa11_dma_unmap_page(struct device *dev, dma_addr_t dma_handle, static int pa11_dma_map_sg(struct device *dev, struct scatterlist *sglist, int nents, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { int i; struct scatterlist *sg; @@ -503,7 +503,7 @@ static int pa11_dma_map_sg(struct device *dev, struct scatterlist *sglist, static void pa11_dma_unmap_sg(struct device *dev, struct scatterlist *sglist, int nents, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { int i; struct scatterlist *sg; @@ -577,11 +577,11 @@ struct dma_map_ops pcxl_dma_ops = { }; static void *pcx_dma_alloc(struct device *dev, size_t size, - dma_addr_t *dma_handle, gfp_t flag, struct dma_attrs *attrs) + dma_addr_t *dma_handle, gfp_t flag, unsigned long attrs) { void *addr; - if (!dma_get_attr(DMA_ATTR_NON_CONSISTENT, attrs)) + if ((attrs & DMA_ATTR_NON_CONSISTENT) == 0) return NULL; addr = (void *)__get_free_pages(flag, get_order(size)); @@ -592,7 +592,7 @@ static void *pcx_dma_alloc(struct device *dev, size_t size, } static void pcx_dma_free(struct device *dev, size_t size, void *vaddr, - dma_addr_t iova, struct dma_attrs *attrs) + dma_addr_t iova, unsigned long attrs) { free_pages((unsigned long)vaddr, get_order(size)); return; diff --git a/arch/powerpc/include/asm/dma-mapping.h b/arch/powerpc/include/asm/dma-mapping.h index 77816acd4fd9..84e3f8dd5e4f 100644 --- a/arch/powerpc/include/asm/dma-mapping.h +++ b/arch/powerpc/include/asm/dma-mapping.h @@ -13,7 +13,6 @@ /* need struct page definitions */ #include #include -#include #include #include #include @@ -25,14 +24,14 @@ /* Some dma direct funcs must be visible for use in other dma_ops */ extern void *__dma_direct_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag, - struct dma_attrs *attrs); + unsigned long attrs); extern void __dma_direct_free_coherent(struct device *dev, size_t size, void *vaddr, dma_addr_t dma_handle, - struct dma_attrs *attrs); + unsigned long attrs); extern int dma_direct_mmap_coherent(struct device *dev, struct vm_area_struct *vma, void *cpu_addr, dma_addr_t handle, - size_t size, struct dma_attrs *attrs); + size_t size, unsigned long attrs); #ifdef CONFIG_NOT_COHERENT_CACHE /* diff --git a/arch/powerpc/include/asm/iommu.h b/arch/powerpc/include/asm/iommu.h index f49a72a9062d..2c1d50792944 100644 --- a/arch/powerpc/include/asm/iommu.h +++ b/arch/powerpc/include/asm/iommu.h @@ -53,7 +53,7 @@ struct iommu_table_ops { long index, long npages, unsigned long uaddr, enum dma_data_direction direction, - struct dma_attrs *attrs); + unsigned long attrs); #ifdef CONFIG_IOMMU_API /* * Exchanges existing TCE with new TCE plus direction bits; @@ -248,12 +248,12 @@ extern int ppc_iommu_map_sg(struct device *dev, struct iommu_table *tbl, struct scatterlist *sglist, int nelems, unsigned long mask, enum dma_data_direction direction, - struct dma_attrs *attrs); + unsigned long attrs); extern void ppc_iommu_unmap_sg(struct iommu_table *tbl, struct scatterlist *sglist, int nelems, enum dma_data_direction direction, - struct dma_attrs *attrs); + unsigned long attrs); extern void *iommu_alloc_coherent(struct device *dev, struct iommu_table *tbl, size_t size, dma_addr_t *dma_handle, @@ -264,10 +264,10 @@ extern dma_addr_t iommu_map_page(struct device *dev, struct iommu_table *tbl, struct page *page, unsigned long offset, size_t size, unsigned long mask, enum dma_data_direction direction, - struct dma_attrs *attrs); + unsigned long attrs); extern void iommu_unmap_page(struct iommu_table *tbl, dma_addr_t dma_handle, size_t size, enum dma_data_direction direction, - struct dma_attrs *attrs); + unsigned long attrs); extern void iommu_init_early_pSeries(void); extern void iommu_init_early_dart(struct pci_controller_ops *controller_ops); diff --git a/arch/powerpc/kernel/dma-iommu.c b/arch/powerpc/kernel/dma-iommu.c index 41a7d9d49a5a..fb7cbaa37658 100644 --- a/arch/powerpc/kernel/dma-iommu.c +++ b/arch/powerpc/kernel/dma-iommu.c @@ -18,7 +18,7 @@ */ static void *dma_iommu_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag, - struct dma_attrs *attrs) + unsigned long attrs) { return iommu_alloc_coherent(dev, get_iommu_table_base(dev), size, dma_handle, dev->coherent_dma_mask, flag, @@ -27,7 +27,7 @@ static void *dma_iommu_alloc_coherent(struct device *dev, size_t size, static void dma_iommu_free_coherent(struct device *dev, size_t size, void *vaddr, dma_addr_t dma_handle, - struct dma_attrs *attrs) + unsigned long attrs) { iommu_free_coherent(get_iommu_table_base(dev), size, vaddr, dma_handle); } @@ -40,7 +40,7 @@ static void dma_iommu_free_coherent(struct device *dev, size_t size, static dma_addr_t dma_iommu_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { return iommu_map_page(dev, get_iommu_table_base(dev), page, offset, size, device_to_mask(dev), direction, attrs); @@ -49,7 +49,7 @@ static dma_addr_t dma_iommu_map_page(struct device *dev, struct page *page, static void dma_iommu_unmap_page(struct device *dev, dma_addr_t dma_handle, size_t size, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { iommu_unmap_page(get_iommu_table_base(dev), dma_handle, size, direction, attrs); @@ -58,7 +58,7 @@ static void dma_iommu_unmap_page(struct device *dev, dma_addr_t dma_handle, static int dma_iommu_map_sg(struct device *dev, struct scatterlist *sglist, int nelems, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { return ppc_iommu_map_sg(dev, get_iommu_table_base(dev), sglist, nelems, device_to_mask(dev), direction, attrs); @@ -66,7 +66,7 @@ static int dma_iommu_map_sg(struct device *dev, struct scatterlist *sglist, static void dma_iommu_unmap_sg(struct device *dev, struct scatterlist *sglist, int nelems, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { ppc_iommu_unmap_sg(get_iommu_table_base(dev), sglist, nelems, direction, attrs); diff --git a/arch/powerpc/kernel/dma.c b/arch/powerpc/kernel/dma.c index 3f1472a78f39..e64a6016fba7 100644 --- a/arch/powerpc/kernel/dma.c +++ b/arch/powerpc/kernel/dma.c @@ -64,7 +64,7 @@ static int dma_direct_dma_supported(struct device *dev, u64 mask) void *__dma_direct_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag, - struct dma_attrs *attrs) + unsigned long attrs) { void *ret; #ifdef CONFIG_NOT_COHERENT_CACHE @@ -121,7 +121,7 @@ void *__dma_direct_alloc_coherent(struct device *dev, size_t size, void __dma_direct_free_coherent(struct device *dev, size_t size, void *vaddr, dma_addr_t dma_handle, - struct dma_attrs *attrs) + unsigned long attrs) { #ifdef CONFIG_NOT_COHERENT_CACHE __dma_free_coherent(size, vaddr); @@ -132,7 +132,7 @@ void __dma_direct_free_coherent(struct device *dev, size_t size, static void *dma_direct_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag, - struct dma_attrs *attrs) + unsigned long attrs) { struct iommu_table *iommu; @@ -156,7 +156,7 @@ static void *dma_direct_alloc_coherent(struct device *dev, size_t size, static void dma_direct_free_coherent(struct device *dev, size_t size, void *vaddr, dma_addr_t dma_handle, - struct dma_attrs *attrs) + unsigned long attrs) { struct iommu_table *iommu; @@ -177,7 +177,7 @@ static void dma_direct_free_coherent(struct device *dev, size_t size, int dma_direct_mmap_coherent(struct device *dev, struct vm_area_struct *vma, void *cpu_addr, dma_addr_t handle, size_t size, - struct dma_attrs *attrs) + unsigned long attrs) { unsigned long pfn; @@ -195,7 +195,7 @@ int dma_direct_mmap_coherent(struct device *dev, struct vm_area_struct *vma, static int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl, int nents, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { struct scatterlist *sg; int i; @@ -211,7 +211,7 @@ static int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl, static void dma_direct_unmap_sg(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { } @@ -232,7 +232,7 @@ static inline dma_addr_t dma_direct_map_page(struct device *dev, unsigned long offset, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { BUG_ON(dir == DMA_NONE); __dma_sync_page(page, offset, size, dir); @@ -243,7 +243,7 @@ static inline void dma_direct_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { } diff --git a/arch/powerpc/kernel/ibmebus.c b/arch/powerpc/kernel/ibmebus.c index a89f4f7a66bd..c1ca9282f4a0 100644 --- a/arch/powerpc/kernel/ibmebus.c +++ b/arch/powerpc/kernel/ibmebus.c @@ -65,7 +65,7 @@ static void *ibmebus_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag, - struct dma_attrs *attrs) + unsigned long attrs) { void *mem; @@ -78,7 +78,7 @@ static void *ibmebus_alloc_coherent(struct device *dev, static void ibmebus_free_coherent(struct device *dev, size_t size, void *vaddr, dma_addr_t dma_handle, - struct dma_attrs *attrs) + unsigned long attrs) { kfree(vaddr); } @@ -88,7 +88,7 @@ static dma_addr_t ibmebus_map_page(struct device *dev, unsigned long offset, size_t size, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { return (dma_addr_t)(page_address(page) + offset); } @@ -97,7 +97,7 @@ static void ibmebus_unmap_page(struct device *dev, dma_addr_t dma_addr, size_t size, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { return; } @@ -105,7 +105,7 @@ static void ibmebus_unmap_page(struct device *dev, static int ibmebus_map_sg(struct device *dev, struct scatterlist *sgl, int nents, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { struct scatterlist *sg; int i; @@ -121,7 +121,7 @@ static int ibmebus_map_sg(struct device *dev, static void ibmebus_unmap_sg(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { return; } diff --git a/arch/powerpc/kernel/iommu.c b/arch/powerpc/kernel/iommu.c index a8e3490b54e3..37d6e741be82 100644 --- a/arch/powerpc/kernel/iommu.c +++ b/arch/powerpc/kernel/iommu.c @@ -307,7 +307,7 @@ static dma_addr_t iommu_alloc(struct device *dev, struct iommu_table *tbl, void *page, unsigned int npages, enum dma_data_direction direction, unsigned long mask, unsigned int align_order, - struct dma_attrs *attrs) + unsigned long attrs) { unsigned long entry; dma_addr_t ret = DMA_ERROR_CODE; @@ -431,7 +431,7 @@ static void iommu_free(struct iommu_table *tbl, dma_addr_t dma_addr, int ppc_iommu_map_sg(struct device *dev, struct iommu_table *tbl, struct scatterlist *sglist, int nelems, unsigned long mask, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { dma_addr_t dma_next = 0, dma_addr; struct scatterlist *s, *outs, *segstart; @@ -574,7 +574,7 @@ int ppc_iommu_map_sg(struct device *dev, struct iommu_table *tbl, void ppc_iommu_unmap_sg(struct iommu_table *tbl, struct scatterlist *sglist, int nelems, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { struct scatterlist *sg; @@ -753,7 +753,7 @@ void iommu_free_table(struct iommu_table *tbl, const char *node_name) dma_addr_t iommu_map_page(struct device *dev, struct iommu_table *tbl, struct page *page, unsigned long offset, size_t size, unsigned long mask, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { dma_addr_t dma_handle = DMA_ERROR_CODE; void *vaddr; @@ -790,7 +790,7 @@ dma_addr_t iommu_map_page(struct device *dev, struct iommu_table *tbl, void iommu_unmap_page(struct iommu_table *tbl, dma_addr_t dma_handle, size_t size, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { unsigned int npages; @@ -845,7 +845,7 @@ void *iommu_alloc_coherent(struct device *dev, struct iommu_table *tbl, nio_pages = size >> tbl->it_page_shift; io_order = get_iommu_order(size, tbl); mapping = iommu_alloc(dev, tbl, ret, nio_pages, DMA_BIDIRECTIONAL, - mask >> tbl->it_page_shift, io_order, NULL); + mask >> tbl->it_page_shift, io_order, 0); if (mapping == DMA_ERROR_CODE) { free_pages((unsigned long)ret, order); return NULL; diff --git a/arch/powerpc/kernel/vio.c b/arch/powerpc/kernel/vio.c index 8d7358f3a273..b3813ddb2fb4 100644 --- a/arch/powerpc/kernel/vio.c +++ b/arch/powerpc/kernel/vio.c @@ -482,7 +482,7 @@ static void vio_cmo_balance(struct work_struct *work) static void *vio_dma_iommu_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag, - struct dma_attrs *attrs) + unsigned long attrs) { struct vio_dev *viodev = to_vio_dev(dev); void *ret; @@ -503,7 +503,7 @@ static void *vio_dma_iommu_alloc_coherent(struct device *dev, size_t size, static void vio_dma_iommu_free_coherent(struct device *dev, size_t size, void *vaddr, dma_addr_t dma_handle, - struct dma_attrs *attrs) + unsigned long attrs) { struct vio_dev *viodev = to_vio_dev(dev); @@ -515,7 +515,7 @@ static void vio_dma_iommu_free_coherent(struct device *dev, size_t size, static dma_addr_t vio_dma_iommu_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { struct vio_dev *viodev = to_vio_dev(dev); struct iommu_table *tbl; @@ -539,7 +539,7 @@ static dma_addr_t vio_dma_iommu_map_page(struct device *dev, struct page *page, static void vio_dma_iommu_unmap_page(struct device *dev, dma_addr_t dma_handle, size_t size, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { struct vio_dev *viodev = to_vio_dev(dev); struct iommu_table *tbl; @@ -552,7 +552,7 @@ static void vio_dma_iommu_unmap_page(struct device *dev, dma_addr_t dma_handle, static int vio_dma_iommu_map_sg(struct device *dev, struct scatterlist *sglist, int nelems, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { struct vio_dev *viodev = to_vio_dev(dev); struct iommu_table *tbl; @@ -588,7 +588,7 @@ static int vio_dma_iommu_map_sg(struct device *dev, struct scatterlist *sglist, static void vio_dma_iommu_unmap_sg(struct device *dev, struct scatterlist *sglist, int nelems, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { struct vio_dev *viodev = to_vio_dev(dev); struct iommu_table *tbl; diff --git a/arch/powerpc/platforms/cell/iommu.c b/arch/powerpc/platforms/cell/iommu.c index 9027d7c48507..f7d1a4953ea0 100644 --- a/arch/powerpc/platforms/cell/iommu.c +++ b/arch/powerpc/platforms/cell/iommu.c @@ -166,7 +166,7 @@ static void invalidate_tce_cache(struct cbe_iommu *iommu, unsigned long *pte, static int tce_build_cell(struct iommu_table *tbl, long index, long npages, unsigned long uaddr, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { int i; unsigned long *io_pte, base_pte; @@ -193,7 +193,7 @@ static int tce_build_cell(struct iommu_table *tbl, long index, long npages, base_pte = CBE_IOPTE_PP_W | CBE_IOPTE_PP_R | CBE_IOPTE_M | CBE_IOPTE_SO_RW | (window->ioid & CBE_IOPTE_IOID_Mask); #endif - if (unlikely(dma_get_attr(DMA_ATTR_WEAK_ORDERING, attrs))) + if (unlikely(attrs & DMA_ATTR_WEAK_ORDERING)) base_pte &= ~CBE_IOPTE_SO_RW; io_pte = (unsigned long *)tbl->it_base + (index - tbl->it_offset); @@ -526,7 +526,7 @@ cell_iommu_setup_window(struct cbe_iommu *iommu, struct device_node *np, __set_bit(0, window->table.it_map); tce_build_cell(&window->table, window->table.it_offset, 1, - (unsigned long)iommu->pad_page, DMA_TO_DEVICE, NULL); + (unsigned long)iommu->pad_page, DMA_TO_DEVICE, 0); return window; } @@ -572,7 +572,7 @@ static struct iommu_table *cell_get_iommu_table(struct device *dev) static void *dma_fixed_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag, - struct dma_attrs *attrs) + unsigned long attrs) { if (iommu_fixed_is_weak) return iommu_alloc_coherent(dev, cell_get_iommu_table(dev), @@ -586,7 +586,7 @@ static void *dma_fixed_alloc_coherent(struct device *dev, size_t size, static void dma_fixed_free_coherent(struct device *dev, size_t size, void *vaddr, dma_addr_t dma_handle, - struct dma_attrs *attrs) + unsigned long attrs) { if (iommu_fixed_is_weak) iommu_free_coherent(cell_get_iommu_table(dev), size, vaddr, @@ -598,9 +598,9 @@ static void dma_fixed_free_coherent(struct device *dev, size_t size, static dma_addr_t dma_fixed_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { - if (iommu_fixed_is_weak == dma_get_attr(DMA_ATTR_WEAK_ORDERING, attrs)) + if (iommu_fixed_is_weak == (attrs & DMA_ATTR_WEAK_ORDERING)) return dma_direct_ops.map_page(dev, page, offset, size, direction, attrs); else @@ -611,9 +611,9 @@ static dma_addr_t dma_fixed_map_page(struct device *dev, struct page *page, static void dma_fixed_unmap_page(struct device *dev, dma_addr_t dma_addr, size_t size, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { - if (iommu_fixed_is_weak == dma_get_attr(DMA_ATTR_WEAK_ORDERING, attrs)) + if (iommu_fixed_is_weak == (attrs & DMA_ATTR_WEAK_ORDERING)) dma_direct_ops.unmap_page(dev, dma_addr, size, direction, attrs); else @@ -623,9 +623,9 @@ static void dma_fixed_unmap_page(struct device *dev, dma_addr_t dma_addr, static int dma_fixed_map_sg(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { - if (iommu_fixed_is_weak == dma_get_attr(DMA_ATTR_WEAK_ORDERING, attrs)) + if (iommu_fixed_is_weak == (attrs & DMA_ATTR_WEAK_ORDERING)) return dma_direct_ops.map_sg(dev, sg, nents, direction, attrs); else return ppc_iommu_map_sg(dev, cell_get_iommu_table(dev), sg, @@ -635,9 +635,9 @@ static int dma_fixed_map_sg(struct device *dev, struct scatterlist *sg, static void dma_fixed_unmap_sg(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { - if (iommu_fixed_is_weak == dma_get_attr(DMA_ATTR_WEAK_ORDERING, attrs)) + if (iommu_fixed_is_weak == (attrs & DMA_ATTR_WEAK_ORDERING)) dma_direct_ops.unmap_sg(dev, sg, nents, direction, attrs); else ppc_iommu_unmap_sg(cell_get_iommu_table(dev), sg, nents, @@ -1162,7 +1162,7 @@ static int __init setup_iommu_fixed(char *str) pciep = of_find_node_by_type(NULL, "pcie-endpoint"); if (strcmp(str, "weak") == 0 || (pciep && strcmp(str, "strong") != 0)) - iommu_fixed_is_weak = 1; + iommu_fixed_is_weak = DMA_ATTR_WEAK_ORDERING; of_node_put(pciep); diff --git a/arch/powerpc/platforms/pasemi/iommu.c b/arch/powerpc/platforms/pasemi/iommu.c index 43dd3fb514e0..309d9ccccd50 100644 --- a/arch/powerpc/platforms/pasemi/iommu.c +++ b/arch/powerpc/platforms/pasemi/iommu.c @@ -88,7 +88,7 @@ static int iommu_table_iobmap_inited; static int iobmap_build(struct iommu_table *tbl, long index, long npages, unsigned long uaddr, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { u32 *ip; u32 rpn; diff --git a/arch/powerpc/platforms/powernv/npu-dma.c b/arch/powerpc/platforms/powernv/npu-dma.c index 4383a5ff82ba..00e1a0195c78 100644 --- a/arch/powerpc/platforms/powernv/npu-dma.c +++ b/arch/powerpc/platforms/powernv/npu-dma.c @@ -73,7 +73,7 @@ EXPORT_SYMBOL(pnv_pci_get_npu_dev); static void *dma_npu_alloc(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag, - struct dma_attrs *attrs) + unsigned long attrs) { NPU_DMA_OP_UNSUPPORTED(); return NULL; @@ -81,7 +81,7 @@ static void *dma_npu_alloc(struct device *dev, size_t size, static void dma_npu_free(struct device *dev, size_t size, void *vaddr, dma_addr_t dma_handle, - struct dma_attrs *attrs) + unsigned long attrs) { NPU_DMA_OP_UNSUPPORTED(); } @@ -89,7 +89,7 @@ static void dma_npu_free(struct device *dev, size_t size, static dma_addr_t dma_npu_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { NPU_DMA_OP_UNSUPPORTED(); return 0; @@ -97,7 +97,7 @@ static dma_addr_t dma_npu_map_page(struct device *dev, struct page *page, static int dma_npu_map_sg(struct device *dev, struct scatterlist *sglist, int nelems, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { NPU_DMA_OP_UNSUPPORTED(); return 0; diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c index 891fc4a453df..6b9528307f62 100644 --- a/arch/powerpc/platforms/powernv/pci-ioda.c +++ b/arch/powerpc/platforms/powernv/pci-ioda.c @@ -1806,7 +1806,7 @@ static void pnv_pci_p7ioc_tce_invalidate(struct iommu_table *tbl, static int pnv_ioda1_tce_build(struct iommu_table *tbl, long index, long npages, unsigned long uaddr, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { int ret = pnv_tce_build(tbl, index, npages, uaddr, direction, attrs); @@ -1950,7 +1950,7 @@ static void pnv_pci_ioda2_tce_invalidate(struct iommu_table *tbl, static int pnv_ioda2_tce_build(struct iommu_table *tbl, long index, long npages, unsigned long uaddr, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { int ret = pnv_tce_build(tbl, index, npages, uaddr, direction, attrs); diff --git a/arch/powerpc/platforms/powernv/pci.c b/arch/powerpc/platforms/powernv/pci.c index 6701dd5ded20..a21d831c1114 100644 --- a/arch/powerpc/platforms/powernv/pci.c +++ b/arch/powerpc/platforms/powernv/pci.c @@ -704,7 +704,7 @@ static __be64 *pnv_tce(struct iommu_table *tbl, long idx) int pnv_tce_build(struct iommu_table *tbl, long index, long npages, unsigned long uaddr, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { u64 proto_tce = iommu_direction_to_tce_perm(direction); u64 rpn = __pa(uaddr) >> tbl->it_page_shift; diff --git a/arch/powerpc/platforms/powernv/pci.h b/arch/powerpc/platforms/powernv/pci.h index d088d4f06116..e64df7894d6e 100644 --- a/arch/powerpc/platforms/powernv/pci.h +++ b/arch/powerpc/platforms/powernv/pci.h @@ -181,7 +181,7 @@ struct pnv_phb { extern struct pci_ops pnv_pci_ops; extern int pnv_tce_build(struct iommu_table *tbl, long index, long npages, unsigned long uaddr, enum dma_data_direction direction, - struct dma_attrs *attrs); + unsigned long attrs); extern void pnv_tce_free(struct iommu_table *tbl, long index, long npages); extern int pnv_tce_xchg(struct iommu_table *tbl, long index, unsigned long *hpa, enum dma_data_direction *direction); diff --git a/arch/powerpc/platforms/ps3/system-bus.c b/arch/powerpc/platforms/ps3/system-bus.c index 5606fe36faf2..8af1c15aef85 100644 --- a/arch/powerpc/platforms/ps3/system-bus.c +++ b/arch/powerpc/platforms/ps3/system-bus.c @@ -516,7 +516,7 @@ core_initcall(ps3_system_bus_init); */ static void * ps3_alloc_coherent(struct device *_dev, size_t size, dma_addr_t *dma_handle, gfp_t flag, - struct dma_attrs *attrs) + unsigned long attrs) { int result; struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev); @@ -553,7 +553,7 @@ clean_none: } static void ps3_free_coherent(struct device *_dev, size_t size, void *vaddr, - dma_addr_t dma_handle, struct dma_attrs *attrs) + dma_addr_t dma_handle, unsigned long attrs) { struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev); @@ -569,7 +569,7 @@ static void ps3_free_coherent(struct device *_dev, size_t size, void *vaddr, static dma_addr_t ps3_sb_map_page(struct device *_dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev); int result; @@ -592,7 +592,7 @@ static dma_addr_t ps3_sb_map_page(struct device *_dev, struct page *page, static dma_addr_t ps3_ioc0_map_page(struct device *_dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev); int result; @@ -626,7 +626,7 @@ static dma_addr_t ps3_ioc0_map_page(struct device *_dev, struct page *page, } static void ps3_unmap_page(struct device *_dev, dma_addr_t dma_addr, - size_t size, enum dma_data_direction direction, struct dma_attrs *attrs) + size_t size, enum dma_data_direction direction, unsigned long attrs) { struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev); int result; @@ -640,7 +640,7 @@ static void ps3_unmap_page(struct device *_dev, dma_addr_t dma_addr, } static int ps3_sb_map_sg(struct device *_dev, struct scatterlist *sgl, - int nents, enum dma_data_direction direction, struct dma_attrs *attrs) + int nents, enum dma_data_direction direction, unsigned long attrs) { #if defined(CONFIG_PS3_DYNAMIC_DMA) BUG_ON("do"); @@ -670,14 +670,14 @@ static int ps3_sb_map_sg(struct device *_dev, struct scatterlist *sgl, static int ps3_ioc0_map_sg(struct device *_dev, struct scatterlist *sg, int nents, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { BUG(); return 0; } static void ps3_sb_unmap_sg(struct device *_dev, struct scatterlist *sg, - int nents, enum dma_data_direction direction, struct dma_attrs *attrs) + int nents, enum dma_data_direction direction, unsigned long attrs) { #if defined(CONFIG_PS3_DYNAMIC_DMA) BUG_ON("do"); @@ -686,7 +686,7 @@ static void ps3_sb_unmap_sg(struct device *_dev, struct scatterlist *sg, static void ps3_ioc0_unmap_sg(struct device *_dev, struct scatterlist *sg, int nents, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { BUG(); } diff --git a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c index 770a753b52c9..0024e451bb36 100644 --- a/arch/powerpc/platforms/pseries/iommu.c +++ b/arch/powerpc/platforms/pseries/iommu.c @@ -123,7 +123,7 @@ static void iommu_pseries_free_group(struct iommu_table_group *table_group, static int tce_build_pSeries(struct iommu_table *tbl, long index, long npages, unsigned long uaddr, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { u64 proto_tce; __be64 *tcep, *tces; @@ -173,7 +173,7 @@ static void tce_freemulti_pSeriesLP(struct iommu_table*, long, long); static int tce_build_pSeriesLP(struct iommu_table *tbl, long tcenum, long npages, unsigned long uaddr, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { u64 rc = 0; u64 proto_tce, tce; @@ -216,7 +216,7 @@ static DEFINE_PER_CPU(__be64 *, tce_page); static int tce_buildmulti_pSeriesLP(struct iommu_table *tbl, long tcenum, long npages, unsigned long uaddr, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { u64 rc = 0; u64 proto_tce; diff --git a/arch/powerpc/sysdev/dart_iommu.c b/arch/powerpc/sysdev/dart_iommu.c index 26904f4879ec..3573d54b2770 100644 --- a/arch/powerpc/sysdev/dart_iommu.c +++ b/arch/powerpc/sysdev/dart_iommu.c @@ -185,7 +185,7 @@ static void dart_flush(struct iommu_table *tbl) static int dart_build(struct iommu_table *tbl, long index, long npages, unsigned long uaddr, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { unsigned int *dp, *orig_dp; unsigned int rpn; diff --git a/arch/s390/include/asm/dma-mapping.h b/arch/s390/include/asm/dma-mapping.h index 3249b7464889..ffaba07f50ab 100644 --- a/arch/s390/include/asm/dma-mapping.h +++ b/arch/s390/include/asm/dma-mapping.h @@ -5,7 +5,6 @@ #include #include #include -#include #include #include diff --git a/arch/s390/pci/pci_dma.c b/arch/s390/pci/pci_dma.c index 070f1ae5cfad..7297fce9bf80 100644 --- a/arch/s390/pci/pci_dma.c +++ b/arch/s390/pci/pci_dma.c @@ -286,7 +286,7 @@ static inline void zpci_err_dma(unsigned long rc, unsigned long addr) static dma_addr_t s390_dma_map_pages(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { struct zpci_dev *zdev = to_zpci(to_pci_dev(dev)); unsigned long nr_pages, iommu_page_index; @@ -332,7 +332,7 @@ out_err: static void s390_dma_unmap_pages(struct device *dev, dma_addr_t dma_addr, size_t size, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { struct zpci_dev *zdev = to_zpci(to_pci_dev(dev)); unsigned long iommu_page_index; @@ -355,7 +355,7 @@ static void s390_dma_unmap_pages(struct device *dev, dma_addr_t dma_addr, static void *s390_dma_alloc(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag, - struct dma_attrs *attrs) + unsigned long attrs) { struct zpci_dev *zdev = to_zpci(to_pci_dev(dev)); struct page *page; @@ -370,7 +370,7 @@ static void *s390_dma_alloc(struct device *dev, size_t size, pa = page_to_phys(page); memset((void *) pa, 0, size); - map = s390_dma_map_pages(dev, page, 0, size, DMA_BIDIRECTIONAL, NULL); + map = s390_dma_map_pages(dev, page, 0, size, DMA_BIDIRECTIONAL, 0); if (dma_mapping_error(dev, map)) { free_pages(pa, get_order(size)); return NULL; @@ -384,19 +384,19 @@ static void *s390_dma_alloc(struct device *dev, size_t size, static void s390_dma_free(struct device *dev, size_t size, void *pa, dma_addr_t dma_handle, - struct dma_attrs *attrs) + unsigned long attrs) { struct zpci_dev *zdev = to_zpci(to_pci_dev(dev)); size = PAGE_ALIGN(size); atomic64_sub(size / PAGE_SIZE, &zdev->allocated_pages); - s390_dma_unmap_pages(dev, dma_handle, size, DMA_BIDIRECTIONAL, NULL); + s390_dma_unmap_pages(dev, dma_handle, size, DMA_BIDIRECTIONAL, 0); free_pages((unsigned long) pa, get_order(size)); } static int s390_dma_map_sg(struct device *dev, struct scatterlist *sg, int nr_elements, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { int mapped_elements = 0; struct scatterlist *s; @@ -405,7 +405,7 @@ static int s390_dma_map_sg(struct device *dev, struct scatterlist *sg, for_each_sg(sg, s, nr_elements, i) { struct page *page = sg_page(s); s->dma_address = s390_dma_map_pages(dev, page, s->offset, - s->length, dir, NULL); + s->length, dir, 0); if (!dma_mapping_error(dev, s->dma_address)) { s->dma_length = s->length; mapped_elements++; @@ -419,7 +419,7 @@ unmap: for_each_sg(sg, s, mapped_elements, i) { if (s->dma_address) s390_dma_unmap_pages(dev, s->dma_address, s->dma_length, - dir, NULL); + dir, 0); s->dma_address = 0; s->dma_length = 0; } @@ -429,13 +429,14 @@ unmap: static void s390_dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nr_elements, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { struct scatterlist *s; int i; for_each_sg(sg, s, nr_elements, i) { - s390_dma_unmap_pages(dev, s->dma_address, s->dma_length, dir, NULL); + s390_dma_unmap_pages(dev, s->dma_address, s->dma_length, dir, + 0); s->dma_address = 0; s->dma_length = 0; } diff --git a/arch/sh/include/asm/dma-mapping.h b/arch/sh/include/asm/dma-mapping.h index e11cf0c8206b..0052ad40e86d 100644 --- a/arch/sh/include/asm/dma-mapping.h +++ b/arch/sh/include/asm/dma-mapping.h @@ -17,9 +17,9 @@ void dma_cache_sync(struct device *dev, void *vaddr, size_t size, /* arch/sh/mm/consistent.c */ extern void *dma_generic_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_addr, gfp_t flag, - struct dma_attrs *attrs); + unsigned long attrs); extern void dma_generic_free_coherent(struct device *dev, size_t size, void *vaddr, dma_addr_t dma_handle, - struct dma_attrs *attrs); + unsigned long attrs); #endif /* __ASM_SH_DMA_MAPPING_H */ diff --git a/arch/sh/kernel/dma-nommu.c b/arch/sh/kernel/dma-nommu.c index 5b0bfcda6d0b..eadb669a7329 100644 --- a/arch/sh/kernel/dma-nommu.c +++ b/arch/sh/kernel/dma-nommu.c @@ -13,7 +13,7 @@ static dma_addr_t nommu_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { dma_addr_t addr = page_to_phys(page) + offset; @@ -25,7 +25,7 @@ static dma_addr_t nommu_map_page(struct device *dev, struct page *page, static int nommu_map_sg(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { struct scatterlist *s; int i; diff --git a/arch/sh/mm/consistent.c b/arch/sh/mm/consistent.c index b81d9dbf9fef..92b6976fde59 100644 --- a/arch/sh/mm/consistent.c +++ b/arch/sh/mm/consistent.c @@ -34,7 +34,7 @@ fs_initcall(dma_init); void *dma_generic_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t gfp, - struct dma_attrs *attrs) + unsigned long attrs) { void *ret, *ret_nocache; int order = get_order(size); @@ -66,7 +66,7 @@ void *dma_generic_alloc_coherent(struct device *dev, size_t size, void dma_generic_free_coherent(struct device *dev, size_t size, void *vaddr, dma_addr_t dma_handle, - struct dma_attrs *attrs) + unsigned long attrs) { int order = get_order(size); unsigned long pfn = dma_handle >> PAGE_SHIFT; diff --git a/arch/sparc/kernel/iommu.c b/arch/sparc/kernel/iommu.c index 37686828c3d9..5c615abff030 100644 --- a/arch/sparc/kernel/iommu.c +++ b/arch/sparc/kernel/iommu.c @@ -196,7 +196,7 @@ static inline void iommu_free_ctx(struct iommu *iommu, int ctx) static void *dma_4u_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_addrp, gfp_t gfp, - struct dma_attrs *attrs) + unsigned long attrs) { unsigned long order, first_page; struct iommu *iommu; @@ -245,7 +245,7 @@ static void *dma_4u_alloc_coherent(struct device *dev, size_t size, static void dma_4u_free_coherent(struct device *dev, size_t size, void *cpu, dma_addr_t dvma, - struct dma_attrs *attrs) + unsigned long attrs) { struct iommu *iommu; unsigned long order, npages; @@ -263,7 +263,7 @@ static void dma_4u_free_coherent(struct device *dev, size_t size, static dma_addr_t dma_4u_map_page(struct device *dev, struct page *page, unsigned long offset, size_t sz, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { struct iommu *iommu; struct strbuf *strbuf; @@ -385,7 +385,7 @@ do_flush_sync: static void dma_4u_unmap_page(struct device *dev, dma_addr_t bus_addr, size_t sz, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { struct iommu *iommu; struct strbuf *strbuf; @@ -431,7 +431,7 @@ static void dma_4u_unmap_page(struct device *dev, dma_addr_t bus_addr, static int dma_4u_map_sg(struct device *dev, struct scatterlist *sglist, int nelems, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { struct scatterlist *s, *outs, *segstart; unsigned long flags, handle, prot, ctx; @@ -607,7 +607,7 @@ static unsigned long fetch_sg_ctx(struct iommu *iommu, struct scatterlist *sg) static void dma_4u_unmap_sg(struct device *dev, struct scatterlist *sglist, int nelems, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { unsigned long flags, ctx; struct scatterlist *sg; diff --git a/arch/sparc/kernel/ioport.c b/arch/sparc/kernel/ioport.c index ffd5ff4678cf..2344103414d1 100644 --- a/arch/sparc/kernel/ioport.c +++ b/arch/sparc/kernel/ioport.c @@ -260,7 +260,7 @@ EXPORT_SYMBOL(sbus_set_sbus64); */ static void *sbus_alloc_coherent(struct device *dev, size_t len, dma_addr_t *dma_addrp, gfp_t gfp, - struct dma_attrs *attrs) + unsigned long attrs) { struct platform_device *op = to_platform_device(dev); unsigned long len_total = PAGE_ALIGN(len); @@ -315,7 +315,7 @@ err_nopages: } static void sbus_free_coherent(struct device *dev, size_t n, void *p, - dma_addr_t ba, struct dma_attrs *attrs) + dma_addr_t ba, unsigned long attrs) { struct resource *res; struct page *pgv; @@ -355,7 +355,7 @@ static void sbus_free_coherent(struct device *dev, size_t n, void *p, static dma_addr_t sbus_map_page(struct device *dev, struct page *page, unsigned long offset, size_t len, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { void *va = page_address(page) + offset; @@ -371,20 +371,20 @@ static dma_addr_t sbus_map_page(struct device *dev, struct page *page, } static void sbus_unmap_page(struct device *dev, dma_addr_t ba, size_t n, - enum dma_data_direction dir, struct dma_attrs *attrs) + enum dma_data_direction dir, unsigned long attrs) { mmu_release_scsi_one(dev, ba, n); } static int sbus_map_sg(struct device *dev, struct scatterlist *sg, int n, - enum dma_data_direction dir, struct dma_attrs *attrs) + enum dma_data_direction dir, unsigned long attrs) { mmu_get_scsi_sgl(dev, sg, n); return n; } static void sbus_unmap_sg(struct device *dev, struct scatterlist *sg, int n, - enum dma_data_direction dir, struct dma_attrs *attrs) + enum dma_data_direction dir, unsigned long attrs) { mmu_release_scsi_sgl(dev, sg, n); } @@ -429,7 +429,7 @@ arch_initcall(sparc_register_ioport); */ static void *pci32_alloc_coherent(struct device *dev, size_t len, dma_addr_t *pba, gfp_t gfp, - struct dma_attrs *attrs) + unsigned long attrs) { unsigned long len_total = PAGE_ALIGN(len); void *va; @@ -482,7 +482,7 @@ err_nopages: * past this call are illegal. */ static void pci32_free_coherent(struct device *dev, size_t n, void *p, - dma_addr_t ba, struct dma_attrs *attrs) + dma_addr_t ba, unsigned long attrs) { struct resource *res; @@ -518,14 +518,14 @@ static void pci32_free_coherent(struct device *dev, size_t n, void *p, static dma_addr_t pci32_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { /* IIep is write-through, not flushing. */ return page_to_phys(page) + offset; } static void pci32_unmap_page(struct device *dev, dma_addr_t ba, size_t size, - enum dma_data_direction dir, struct dma_attrs *attrs) + enum dma_data_direction dir, unsigned long attrs) { if (dir != PCI_DMA_TODEVICE) dma_make_coherent(ba, PAGE_ALIGN(size)); @@ -548,7 +548,7 @@ static void pci32_unmap_page(struct device *dev, dma_addr_t ba, size_t size, */ static int pci32_map_sg(struct device *device, struct scatterlist *sgl, int nents, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { struct scatterlist *sg; int n; @@ -567,7 +567,7 @@ static int pci32_map_sg(struct device *device, struct scatterlist *sgl, */ static void pci32_unmap_sg(struct device *dev, struct scatterlist *sgl, int nents, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { struct scatterlist *sg; int n; diff --git a/arch/sparc/kernel/pci_sun4v.c b/arch/sparc/kernel/pci_sun4v.c index 836e8cef47e2..61c6f935accc 100644 --- a/arch/sparc/kernel/pci_sun4v.c +++ b/arch/sparc/kernel/pci_sun4v.c @@ -130,7 +130,7 @@ static inline long iommu_batch_end(void) static void *dma_4v_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_addrp, gfp_t gfp, - struct dma_attrs *attrs) + unsigned long attrs) { unsigned long flags, order, first_page, npages, n; struct iommu *iommu; @@ -213,7 +213,7 @@ static void dma_4v_iommu_demap(void *demap_arg, unsigned long entry, } static void dma_4v_free_coherent(struct device *dev, size_t size, void *cpu, - dma_addr_t dvma, struct dma_attrs *attrs) + dma_addr_t dvma, unsigned long attrs) { struct pci_pbm_info *pbm; struct iommu *iommu; @@ -235,7 +235,7 @@ static void dma_4v_free_coherent(struct device *dev, size_t size, void *cpu, static dma_addr_t dma_4v_map_page(struct device *dev, struct page *page, unsigned long offset, size_t sz, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { struct iommu *iommu; unsigned long flags, npages, oaddr; @@ -294,7 +294,7 @@ iommu_map_fail: static void dma_4v_unmap_page(struct device *dev, dma_addr_t bus_addr, size_t sz, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { struct pci_pbm_info *pbm; struct iommu *iommu; @@ -322,7 +322,7 @@ static void dma_4v_unmap_page(struct device *dev, dma_addr_t bus_addr, static int dma_4v_map_sg(struct device *dev, struct scatterlist *sglist, int nelems, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { struct scatterlist *s, *outs, *segstart; unsigned long flags, handle, prot; @@ -466,7 +466,7 @@ iommu_map_failed: static void dma_4v_unmap_sg(struct device *dev, struct scatterlist *sglist, int nelems, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { struct pci_pbm_info *pbm; struct scatterlist *sg; diff --git a/arch/tile/kernel/pci-dma.c b/arch/tile/kernel/pci-dma.c index b6bc0547a4f6..09bb774b39cd 100644 --- a/arch/tile/kernel/pci-dma.c +++ b/arch/tile/kernel/pci-dma.c @@ -34,7 +34,7 @@ static void *tile_dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t gfp, - struct dma_attrs *attrs) + unsigned long attrs) { u64 dma_mask = (dev && dev->coherent_dma_mask) ? dev->coherent_dma_mask : DMA_BIT_MASK(32); @@ -78,7 +78,7 @@ static void *tile_dma_alloc_coherent(struct device *dev, size_t size, */ static void tile_dma_free_coherent(struct device *dev, size_t size, void *vaddr, dma_addr_t dma_handle, - struct dma_attrs *attrs) + unsigned long attrs) { homecache_free_pages((unsigned long)vaddr, get_order(size)); } @@ -202,7 +202,7 @@ static void __dma_complete_pa_range(dma_addr_t dma_addr, size_t size, static int tile_dma_map_sg(struct device *dev, struct scatterlist *sglist, int nents, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { struct scatterlist *sg; int i; @@ -224,7 +224,7 @@ static int tile_dma_map_sg(struct device *dev, struct scatterlist *sglist, static void tile_dma_unmap_sg(struct device *dev, struct scatterlist *sglist, int nents, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { struct scatterlist *sg; int i; @@ -240,7 +240,7 @@ static void tile_dma_unmap_sg(struct device *dev, struct scatterlist *sglist, static dma_addr_t tile_dma_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { BUG_ON(!valid_dma_direction(direction)); @@ -252,7 +252,7 @@ static dma_addr_t tile_dma_map_page(struct device *dev, struct page *page, static void tile_dma_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { BUG_ON(!valid_dma_direction(direction)); @@ -343,7 +343,7 @@ EXPORT_SYMBOL(tile_dma_map_ops); static void *tile_pci_dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t gfp, - struct dma_attrs *attrs) + unsigned long attrs) { int node = dev_to_node(dev); int order = get_order(size); @@ -368,14 +368,14 @@ static void *tile_pci_dma_alloc_coherent(struct device *dev, size_t size, */ static void tile_pci_dma_free_coherent(struct device *dev, size_t size, void *vaddr, dma_addr_t dma_handle, - struct dma_attrs *attrs) + unsigned long attrs) { homecache_free_pages((unsigned long)vaddr, get_order(size)); } static int tile_pci_dma_map_sg(struct device *dev, struct scatterlist *sglist, int nents, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { struct scatterlist *sg; int i; @@ -400,7 +400,7 @@ static int tile_pci_dma_map_sg(struct device *dev, struct scatterlist *sglist, static void tile_pci_dma_unmap_sg(struct device *dev, struct scatterlist *sglist, int nents, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { struct scatterlist *sg; int i; @@ -416,7 +416,7 @@ static void tile_pci_dma_unmap_sg(struct device *dev, static dma_addr_t tile_pci_dma_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { BUG_ON(!valid_dma_direction(direction)); @@ -429,7 +429,7 @@ static dma_addr_t tile_pci_dma_map_page(struct device *dev, struct page *page, static void tile_pci_dma_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { BUG_ON(!valid_dma_direction(direction)); @@ -531,7 +531,7 @@ EXPORT_SYMBOL(gx_pci_dma_map_ops); #ifdef CONFIG_SWIOTLB static void *tile_swiotlb_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t gfp, - struct dma_attrs *attrs) + unsigned long attrs) { gfp |= GFP_DMA; return swiotlb_alloc_coherent(dev, size, dma_handle, gfp); @@ -539,7 +539,7 @@ static void *tile_swiotlb_alloc_coherent(struct device *dev, size_t size, static void tile_swiotlb_free_coherent(struct device *dev, size_t size, void *vaddr, dma_addr_t dma_addr, - struct dma_attrs *attrs) + unsigned long attrs) { swiotlb_free_coherent(dev, size, vaddr, dma_addr); } diff --git a/arch/unicore32/mm/dma-swiotlb.c b/arch/unicore32/mm/dma-swiotlb.c index 16c08b2143a7..3e9f6489ba38 100644 --- a/arch/unicore32/mm/dma-swiotlb.c +++ b/arch/unicore32/mm/dma-swiotlb.c @@ -19,14 +19,14 @@ static void *unicore_swiotlb_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flags, - struct dma_attrs *attrs) + unsigned long attrs) { return swiotlb_alloc_coherent(dev, size, dma_handle, flags); } static void unicore_swiotlb_free_coherent(struct device *dev, size_t size, void *vaddr, dma_addr_t dma_addr, - struct dma_attrs *attrs) + unsigned long attrs) { swiotlb_free_coherent(dev, size, vaddr, dma_addr); } diff --git a/arch/x86/include/asm/dma-mapping.h b/arch/x86/include/asm/dma-mapping.h index 3a27b93e6261..44461626830e 100644 --- a/arch/x86/include/asm/dma-mapping.h +++ b/arch/x86/include/asm/dma-mapping.h @@ -9,7 +9,6 @@ #include #include #include -#include #include #include #include @@ -48,11 +47,11 @@ extern int dma_supported(struct device *hwdev, u64 mask); extern void *dma_generic_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_addr, gfp_t flag, - struct dma_attrs *attrs); + unsigned long attrs); extern void dma_generic_free_coherent(struct device *dev, size_t size, void *vaddr, dma_addr_t dma_addr, - struct dma_attrs *attrs); + unsigned long attrs); #ifdef CONFIG_X86_DMA_REMAP /* Platform code defines bridge-specific code */ extern bool dma_capable(struct device *dev, dma_addr_t addr, size_t size); diff --git a/arch/x86/include/asm/swiotlb.h b/arch/x86/include/asm/swiotlb.h index ab05d73e2bb7..d2f69b9ff732 100644 --- a/arch/x86/include/asm/swiotlb.h +++ b/arch/x86/include/asm/swiotlb.h @@ -31,9 +31,9 @@ static inline void dma_mark_clean(void *addr, size_t size) {} extern void *x86_swiotlb_alloc_coherent(struct device *hwdev, size_t size, dma_addr_t *dma_handle, gfp_t flags, - struct dma_attrs *attrs); + unsigned long attrs); extern void x86_swiotlb_free_coherent(struct device *dev, size_t size, void *vaddr, dma_addr_t dma_addr, - struct dma_attrs *attrs); + unsigned long attrs); #endif /* _ASM_X86_SWIOTLB_H */ diff --git a/arch/x86/include/asm/xen/page-coherent.h b/arch/x86/include/asm/xen/page-coherent.h index acd844c017d3..f02f025ff988 100644 --- a/arch/x86/include/asm/xen/page-coherent.h +++ b/arch/x86/include/asm/xen/page-coherent.h @@ -2,12 +2,11 @@ #define _ASM_X86_XEN_PAGE_COHERENT_H #include -#include #include static inline void *xen_alloc_coherent_pages(struct device *hwdev, size_t size, dma_addr_t *dma_handle, gfp_t flags, - struct dma_attrs *attrs) + unsigned long attrs) { void *vstart = (void*)__get_free_pages(flags, get_order(size)); *dma_handle = virt_to_phys(vstart); @@ -16,18 +15,18 @@ static inline void *xen_alloc_coherent_pages(struct device *hwdev, size_t size, static inline void xen_free_coherent_pages(struct device *hwdev, size_t size, void *cpu_addr, dma_addr_t dma_handle, - struct dma_attrs *attrs) + unsigned long attrs) { free_pages((unsigned long) cpu_addr, get_order(size)); } static inline void xen_dma_map_page(struct device *hwdev, struct page *page, dma_addr_t dev_addr, unsigned long offset, size_t size, - enum dma_data_direction dir, struct dma_attrs *attrs) { } + enum dma_data_direction dir, unsigned long attrs) { } static inline void xen_dma_unmap_page(struct device *hwdev, dma_addr_t handle, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) { } + unsigned long attrs) { } static inline void xen_dma_sync_single_for_cpu(struct device *hwdev, dma_addr_t handle, size_t size, enum dma_data_direction dir) { } diff --git a/arch/x86/kernel/amd_gart_64.c b/arch/x86/kernel/amd_gart_64.c index 42d27a62a404..63ff468a7986 100644 --- a/arch/x86/kernel/amd_gart_64.c +++ b/arch/x86/kernel/amd_gart_64.c @@ -241,7 +241,7 @@ static dma_addr_t dma_map_area(struct device *dev, dma_addr_t phys_mem, static dma_addr_t gart_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { unsigned long bus; phys_addr_t paddr = page_to_phys(page) + offset; @@ -263,7 +263,7 @@ static dma_addr_t gart_map_page(struct device *dev, struct page *page, */ static void gart_unmap_page(struct device *dev, dma_addr_t dma_addr, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { unsigned long iommu_page; int npages; @@ -285,7 +285,7 @@ static void gart_unmap_page(struct device *dev, dma_addr_t dma_addr, * Wrapper for pci_unmap_single working with scatterlists. */ static void gart_unmap_sg(struct device *dev, struct scatterlist *sg, int nents, - enum dma_data_direction dir, struct dma_attrs *attrs) + enum dma_data_direction dir, unsigned long attrs) { struct scatterlist *s; int i; @@ -293,7 +293,7 @@ static void gart_unmap_sg(struct device *dev, struct scatterlist *sg, int nents, for_each_sg(sg, s, nents, i) { if (!s->dma_length || !s->length) break; - gart_unmap_page(dev, s->dma_address, s->dma_length, dir, NULL); + gart_unmap_page(dev, s->dma_address, s->dma_length, dir, 0); } } @@ -315,7 +315,7 @@ static int dma_map_sg_nonforce(struct device *dev, struct scatterlist *sg, addr = dma_map_area(dev, addr, s->length, dir, 0); if (addr == bad_dma_addr) { if (i > 0) - gart_unmap_sg(dev, sg, i, dir, NULL); + gart_unmap_sg(dev, sg, i, dir, 0); nents = 0; sg[0].dma_length = 0; break; @@ -386,7 +386,7 @@ dma_map_cont(struct device *dev, struct scatterlist *start, int nelems, * Merge chunks that have page aligned sizes into a continuous mapping. */ static int gart_map_sg(struct device *dev, struct scatterlist *sg, int nents, - enum dma_data_direction dir, struct dma_attrs *attrs) + enum dma_data_direction dir, unsigned long attrs) { struct scatterlist *s, *ps, *start_sg, *sgmap; int need = 0, nextneed, i, out, start; @@ -456,7 +456,7 @@ static int gart_map_sg(struct device *dev, struct scatterlist *sg, int nents, error: flush_gart(); - gart_unmap_sg(dev, sg, out, dir, NULL); + gart_unmap_sg(dev, sg, out, dir, 0); /* When it was forced or merged try again in a dumb way */ if (force_iommu || iommu_merge) { @@ -476,7 +476,7 @@ error: /* allocate and map a coherent mapping */ static void * gart_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_addr, - gfp_t flag, struct dma_attrs *attrs) + gfp_t flag, unsigned long attrs) { dma_addr_t paddr; unsigned long align_mask; @@ -508,9 +508,9 @@ gart_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_addr, /* free a coherent mapping */ static void gart_free_coherent(struct device *dev, size_t size, void *vaddr, - dma_addr_t dma_addr, struct dma_attrs *attrs) + dma_addr_t dma_addr, unsigned long attrs) { - gart_unmap_page(dev, dma_addr, size, DMA_BIDIRECTIONAL, NULL); + gart_unmap_page(dev, dma_addr, size, DMA_BIDIRECTIONAL, 0); dma_generic_free_coherent(dev, size, vaddr, dma_addr, attrs); } diff --git a/arch/x86/kernel/pci-calgary_64.c b/arch/x86/kernel/pci-calgary_64.c index 833b1d329c47..5d400ba1349d 100644 --- a/arch/x86/kernel/pci-calgary_64.c +++ b/arch/x86/kernel/pci-calgary_64.c @@ -340,7 +340,7 @@ static inline struct iommu_table *find_iommu_table(struct device *dev) static void calgary_unmap_sg(struct device *dev, struct scatterlist *sglist, int nelems,enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { struct iommu_table *tbl = find_iommu_table(dev); struct scatterlist *s; @@ -364,7 +364,7 @@ static void calgary_unmap_sg(struct device *dev, struct scatterlist *sglist, static int calgary_map_sg(struct device *dev, struct scatterlist *sg, int nelems, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { struct iommu_table *tbl = find_iommu_table(dev); struct scatterlist *s; @@ -396,7 +396,7 @@ static int calgary_map_sg(struct device *dev, struct scatterlist *sg, return nelems; error: - calgary_unmap_sg(dev, sg, nelems, dir, NULL); + calgary_unmap_sg(dev, sg, nelems, dir, 0); for_each_sg(sg, s, nelems, i) { sg->dma_address = DMA_ERROR_CODE; sg->dma_length = 0; @@ -407,7 +407,7 @@ error: static dma_addr_t calgary_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { void *vaddr = page_address(page) + offset; unsigned long uaddr; @@ -422,7 +422,7 @@ static dma_addr_t calgary_map_page(struct device *dev, struct page *page, static void calgary_unmap_page(struct device *dev, dma_addr_t dma_addr, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { struct iommu_table *tbl = find_iommu_table(dev); unsigned int npages; @@ -432,7 +432,7 @@ static void calgary_unmap_page(struct device *dev, dma_addr_t dma_addr, } static void* calgary_alloc_coherent(struct device *dev, size_t size, - dma_addr_t *dma_handle, gfp_t flag, struct dma_attrs *attrs) + dma_addr_t *dma_handle, gfp_t flag, unsigned long attrs) { void *ret = NULL; dma_addr_t mapping; @@ -466,7 +466,7 @@ error: static void calgary_free_coherent(struct device *dev, size_t size, void *vaddr, dma_addr_t dma_handle, - struct dma_attrs *attrs) + unsigned long attrs) { unsigned int npages; struct iommu_table *tbl = find_iommu_table(dev); diff --git a/arch/x86/kernel/pci-dma.c b/arch/x86/kernel/pci-dma.c index 6ba014c61d62..d30c37750765 100644 --- a/arch/x86/kernel/pci-dma.c +++ b/arch/x86/kernel/pci-dma.c @@ -77,7 +77,7 @@ void __init pci_iommu_alloc(void) } void *dma_generic_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_addr, gfp_t flag, - struct dma_attrs *attrs) + unsigned long attrs) { unsigned long dma_mask; struct page *page; @@ -120,7 +120,7 @@ again: } void dma_generic_free_coherent(struct device *dev, size_t size, void *vaddr, - dma_addr_t dma_addr, struct dma_attrs *attrs) + dma_addr_t dma_addr, unsigned long attrs) { unsigned int count = PAGE_ALIGN(size) >> PAGE_SHIFT; struct page *page = virt_to_page(vaddr); diff --git a/arch/x86/kernel/pci-nommu.c b/arch/x86/kernel/pci-nommu.c index da15918d1c81..00e71ce396a8 100644 --- a/arch/x86/kernel/pci-nommu.c +++ b/arch/x86/kernel/pci-nommu.c @@ -28,7 +28,7 @@ check_addr(char *name, struct device *hwdev, dma_addr_t bus, size_t size) static dma_addr_t nommu_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { dma_addr_t bus = page_to_phys(page) + offset; WARN_ON(size == 0); @@ -55,7 +55,7 @@ static dma_addr_t nommu_map_page(struct device *dev, struct page *page, */ static int nommu_map_sg(struct device *hwdev, struct scatterlist *sg, int nents, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { struct scatterlist *s; int i; diff --git a/arch/x86/kernel/pci-swiotlb.c b/arch/x86/kernel/pci-swiotlb.c index 5069ef560d83..b47edb8f5256 100644 --- a/arch/x86/kernel/pci-swiotlb.c +++ b/arch/x86/kernel/pci-swiotlb.c @@ -16,7 +16,7 @@ int swiotlb __read_mostly; void *x86_swiotlb_alloc_coherent(struct device *hwdev, size_t size, dma_addr_t *dma_handle, gfp_t flags, - struct dma_attrs *attrs) + unsigned long attrs) { void *vaddr; @@ -37,7 +37,7 @@ void *x86_swiotlb_alloc_coherent(struct device *hwdev, size_t size, void x86_swiotlb_free_coherent(struct device *dev, size_t size, void *vaddr, dma_addr_t dma_addr, - struct dma_attrs *attrs) + unsigned long attrs) { if (is_swiotlb_buffer(dma_to_phys(dev, dma_addr))) swiotlb_free_coherent(dev, size, vaddr, dma_addr); diff --git a/arch/x86/pci/sta2x11-fixup.c b/arch/x86/pci/sta2x11-fixup.c index 5ceda85b8687..052c1cb76305 100644 --- a/arch/x86/pci/sta2x11-fixup.c +++ b/arch/x86/pci/sta2x11-fixup.c @@ -169,7 +169,7 @@ static void *sta2x11_swiotlb_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flags, - struct dma_attrs *attrs) + unsigned long attrs) { void *vaddr; diff --git a/arch/x86/pci/vmd.c b/arch/x86/pci/vmd.c index e88b4176260f..b814ca675131 100644 --- a/arch/x86/pci/vmd.c +++ b/arch/x86/pci/vmd.c @@ -274,14 +274,14 @@ static struct dma_map_ops *vmd_dma_ops(struct device *dev) } static void *vmd_alloc(struct device *dev, size_t size, dma_addr_t *addr, - gfp_t flag, struct dma_attrs *attrs) + gfp_t flag, unsigned long attrs) { return vmd_dma_ops(dev)->alloc(to_vmd_dev(dev), size, addr, flag, attrs); } static void vmd_free(struct device *dev, size_t size, void *vaddr, - dma_addr_t addr, struct dma_attrs *attrs) + dma_addr_t addr, unsigned long attrs) { return vmd_dma_ops(dev)->free(to_vmd_dev(dev), size, vaddr, addr, attrs); @@ -289,7 +289,7 @@ static void vmd_free(struct device *dev, size_t size, void *vaddr, static int vmd_mmap(struct device *dev, struct vm_area_struct *vma, void *cpu_addr, dma_addr_t addr, size_t size, - struct dma_attrs *attrs) + unsigned long attrs) { return vmd_dma_ops(dev)->mmap(to_vmd_dev(dev), vma, cpu_addr, addr, size, attrs); @@ -297,7 +297,7 @@ static int vmd_mmap(struct device *dev, struct vm_area_struct *vma, static int vmd_get_sgtable(struct device *dev, struct sg_table *sgt, void *cpu_addr, dma_addr_t addr, size_t size, - struct dma_attrs *attrs) + unsigned long attrs) { return vmd_dma_ops(dev)->get_sgtable(to_vmd_dev(dev), sgt, cpu_addr, addr, size, attrs); @@ -306,26 +306,26 @@ static int vmd_get_sgtable(struct device *dev, struct sg_table *sgt, static dma_addr_t vmd_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { return vmd_dma_ops(dev)->map_page(to_vmd_dev(dev), page, offset, size, dir, attrs); } static void vmd_unmap_page(struct device *dev, dma_addr_t addr, size_t size, - enum dma_data_direction dir, struct dma_attrs *attrs) + enum dma_data_direction dir, unsigned long attrs) { vmd_dma_ops(dev)->unmap_page(to_vmd_dev(dev), addr, size, dir, attrs); } static int vmd_map_sg(struct device *dev, struct scatterlist *sg, int nents, - enum dma_data_direction dir, struct dma_attrs *attrs) + enum dma_data_direction dir, unsigned long attrs) { return vmd_dma_ops(dev)->map_sg(to_vmd_dev(dev), sg, nents, dir, attrs); } static void vmd_unmap_sg(struct device *dev, struct scatterlist *sg, int nents, - enum dma_data_direction dir, struct dma_attrs *attrs) + enum dma_data_direction dir, unsigned long attrs) { vmd_dma_ops(dev)->unmap_sg(to_vmd_dev(dev), sg, nents, dir, attrs); } diff --git a/arch/xtensa/kernel/pci-dma.c b/arch/xtensa/kernel/pci-dma.c index cd66698348ca..1e68806d6695 100644 --- a/arch/xtensa/kernel/pci-dma.c +++ b/arch/xtensa/kernel/pci-dma.c @@ -142,7 +142,7 @@ static void xtensa_sync_sg_for_device(struct device *dev, static void *xtensa_dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, gfp_t flag, - struct dma_attrs *attrs) + unsigned long attrs) { unsigned long ret; unsigned long uncached = 0; @@ -171,7 +171,7 @@ static void *xtensa_dma_alloc(struct device *dev, size_t size, } static void xtensa_dma_free(struct device *hwdev, size_t size, void *vaddr, - dma_addr_t dma_handle, struct dma_attrs *attrs) + dma_addr_t dma_handle, unsigned long attrs) { unsigned long addr = (unsigned long)vaddr + XCHAL_KSEG_CACHED_VADDR - XCHAL_KSEG_BYPASS_VADDR; @@ -185,7 +185,7 @@ static void xtensa_dma_free(struct device *hwdev, size_t size, void *vaddr, static dma_addr_t xtensa_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { dma_addr_t dma_handle = page_to_phys(page) + offset; @@ -195,14 +195,14 @@ static dma_addr_t xtensa_map_page(struct device *dev, struct page *page, static void xtensa_unmap_page(struct device *dev, dma_addr_t dma_handle, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { xtensa_sync_single_for_cpu(dev, dma_handle, size, dir); } static int xtensa_map_sg(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { struct scatterlist *s; int i; @@ -217,7 +217,7 @@ static int xtensa_map_sg(struct device *dev, struct scatterlist *sg, static void xtensa_unmap_sg(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { struct scatterlist *s; int i; diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c index fb49443bfd32..4cfb39d543b4 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c +++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c @@ -52,7 +52,7 @@ static int exynos_drm_fb_mmap(struct fb_info *info, ret = dma_mmap_attrs(to_dma_dev(helper->dev), vma, exynos_gem->cookie, exynos_gem->dma_addr, exynos_gem->size, - &exynos_gem->dma_attrs); + exynos_gem->dma_attrs); if (ret < 0) { DRM_ERROR("failed to mmap.\n"); return ret; diff --git a/drivers/gpu/drm/exynos/exynos_drm_g2d.c b/drivers/gpu/drm/exynos/exynos_drm_g2d.c index 8564c3da0d22..4bf00f57ffe8 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_g2d.c +++ b/drivers/gpu/drm/exynos/exynos_drm_g2d.c @@ -17,7 +17,6 @@ #include #include #include -#include #include #include @@ -235,7 +234,7 @@ struct g2d_data { struct mutex cmdlist_mutex; dma_addr_t cmdlist_pool; void *cmdlist_pool_virt; - struct dma_attrs cmdlist_dma_attrs; + unsigned long cmdlist_dma_attrs; /* runqueue*/ struct g2d_runqueue_node *runqueue_node; @@ -256,13 +255,12 @@ static int g2d_init_cmdlist(struct g2d_data *g2d) int ret; struct g2d_buf_info *buf_info; - init_dma_attrs(&g2d->cmdlist_dma_attrs); - dma_set_attr(DMA_ATTR_WRITE_COMBINE, &g2d->cmdlist_dma_attrs); + g2d->cmdlist_dma_attrs = DMA_ATTR_WRITE_COMBINE; g2d->cmdlist_pool_virt = dma_alloc_attrs(to_dma_dev(subdrv->drm_dev), G2D_CMDLIST_POOL_SIZE, &g2d->cmdlist_pool, GFP_KERNEL, - &g2d->cmdlist_dma_attrs); + g2d->cmdlist_dma_attrs); if (!g2d->cmdlist_pool_virt) { dev_err(dev, "failed to allocate dma memory\n"); return -ENOMEM; @@ -295,7 +293,7 @@ static int g2d_init_cmdlist(struct g2d_data *g2d) err: dma_free_attrs(to_dma_dev(subdrv->drm_dev), G2D_CMDLIST_POOL_SIZE, g2d->cmdlist_pool_virt, - g2d->cmdlist_pool, &g2d->cmdlist_dma_attrs); + g2d->cmdlist_pool, g2d->cmdlist_dma_attrs); return ret; } @@ -309,7 +307,7 @@ static void g2d_fini_cmdlist(struct g2d_data *g2d) dma_free_attrs(to_dma_dev(subdrv->drm_dev), G2D_CMDLIST_POOL_SIZE, g2d->cmdlist_pool_virt, - g2d->cmdlist_pool, &g2d->cmdlist_dma_attrs); + g2d->cmdlist_pool, g2d->cmdlist_dma_attrs); } } diff --git a/drivers/gpu/drm/exynos/exynos_drm_gem.c b/drivers/gpu/drm/exynos/exynos_drm_gem.c index cdf9f1af4347..f2ae72ba7d5a 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_gem.c +++ b/drivers/gpu/drm/exynos/exynos_drm_gem.c @@ -24,7 +24,7 @@ static int exynos_drm_alloc_buf(struct exynos_drm_gem *exynos_gem) { struct drm_device *dev = exynos_gem->base.dev; - enum dma_attr attr; + unsigned long attr; unsigned int nr_pages; struct sg_table sgt; int ret = -ENOMEM; @@ -34,7 +34,7 @@ static int exynos_drm_alloc_buf(struct exynos_drm_gem *exynos_gem) return 0; } - init_dma_attrs(&exynos_gem->dma_attrs); + exynos_gem->dma_attrs = 0; /* * if EXYNOS_BO_CONTIG, fully physically contiguous memory @@ -42,7 +42,7 @@ static int exynos_drm_alloc_buf(struct exynos_drm_gem *exynos_gem) * as possible. */ if (!(exynos_gem->flags & EXYNOS_BO_NONCONTIG)) - dma_set_attr(DMA_ATTR_FORCE_CONTIGUOUS, &exynos_gem->dma_attrs); + exynos_gem->dma_attrs |= DMA_ATTR_FORCE_CONTIGUOUS; /* * if EXYNOS_BO_WC or EXYNOS_BO_NONCACHABLE, writecombine mapping @@ -54,8 +54,8 @@ static int exynos_drm_alloc_buf(struct exynos_drm_gem *exynos_gem) else attr = DMA_ATTR_NON_CONSISTENT; - dma_set_attr(attr, &exynos_gem->dma_attrs); - dma_set_attr(DMA_ATTR_NO_KERNEL_MAPPING, &exynos_gem->dma_attrs); + exynos_gem->dma_attrs |= attr; + exynos_gem->dma_attrs |= DMA_ATTR_NO_KERNEL_MAPPING; nr_pages = exynos_gem->size >> PAGE_SHIFT; @@ -67,7 +67,7 @@ static int exynos_drm_alloc_buf(struct exynos_drm_gem *exynos_gem) exynos_gem->cookie = dma_alloc_attrs(to_dma_dev(dev), exynos_gem->size, &exynos_gem->dma_addr, GFP_KERNEL, - &exynos_gem->dma_attrs); + exynos_gem->dma_attrs); if (!exynos_gem->cookie) { DRM_ERROR("failed to allocate buffer.\n"); goto err_free; @@ -75,7 +75,7 @@ static int exynos_drm_alloc_buf(struct exynos_drm_gem *exynos_gem) ret = dma_get_sgtable_attrs(to_dma_dev(dev), &sgt, exynos_gem->cookie, exynos_gem->dma_addr, exynos_gem->size, - &exynos_gem->dma_attrs); + exynos_gem->dma_attrs); if (ret < 0) { DRM_ERROR("failed to get sgtable.\n"); goto err_dma_free; @@ -99,7 +99,7 @@ err_sgt_free: sg_free_table(&sgt); err_dma_free: dma_free_attrs(to_dma_dev(dev), exynos_gem->size, exynos_gem->cookie, - exynos_gem->dma_addr, &exynos_gem->dma_attrs); + exynos_gem->dma_addr, exynos_gem->dma_attrs); err_free: drm_free_large(exynos_gem->pages); @@ -120,7 +120,7 @@ static void exynos_drm_free_buf(struct exynos_drm_gem *exynos_gem) dma_free_attrs(to_dma_dev(dev), exynos_gem->size, exynos_gem->cookie, (dma_addr_t)exynos_gem->dma_addr, - &exynos_gem->dma_attrs); + exynos_gem->dma_attrs); drm_free_large(exynos_gem->pages); } @@ -346,7 +346,7 @@ static int exynos_drm_gem_mmap_buffer(struct exynos_drm_gem *exynos_gem, ret = dma_mmap_attrs(to_dma_dev(drm_dev), vma, exynos_gem->cookie, exynos_gem->dma_addr, exynos_gem->size, - &exynos_gem->dma_attrs); + exynos_gem->dma_attrs); if (ret < 0) { DRM_ERROR("failed to mmap.\n"); return ret; diff --git a/drivers/gpu/drm/exynos/exynos_drm_gem.h b/drivers/gpu/drm/exynos/exynos_drm_gem.h index 78100742281d..df7c543d6558 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_gem.h +++ b/drivers/gpu/drm/exynos/exynos_drm_gem.h @@ -50,7 +50,7 @@ struct exynos_drm_gem { void *cookie; void __iomem *kvaddr; dma_addr_t dma_addr; - struct dma_attrs dma_attrs; + unsigned long dma_attrs; struct page **pages; struct sg_table *sgt; }; diff --git a/drivers/gpu/drm/mediatek/mtk_drm_gem.c b/drivers/gpu/drm/mediatek/mtk_drm_gem.c index fa2ec0cd00e8..7abc550ebc00 100644 --- a/drivers/gpu/drm/mediatek/mtk_drm_gem.c +++ b/drivers/gpu/drm/mediatek/mtk_drm_gem.c @@ -54,15 +54,14 @@ struct mtk_drm_gem_obj *mtk_drm_gem_create(struct drm_device *dev, obj = &mtk_gem->base; - init_dma_attrs(&mtk_gem->dma_attrs); - dma_set_attr(DMA_ATTR_WRITE_COMBINE, &mtk_gem->dma_attrs); + mtk_gem->dma_attrs = DMA_ATTR_WRITE_COMBINE; if (!alloc_kmap) - dma_set_attr(DMA_ATTR_NO_KERNEL_MAPPING, &mtk_gem->dma_attrs); + mtk_gem->dma_attrs |= DMA_ATTR_NO_KERNEL_MAPPING; mtk_gem->cookie = dma_alloc_attrs(priv->dma_dev, obj->size, &mtk_gem->dma_addr, GFP_KERNEL, - &mtk_gem->dma_attrs); + mtk_gem->dma_attrs); if (!mtk_gem->cookie) { DRM_ERROR("failed to allocate %zx byte dma buffer", obj->size); ret = -ENOMEM; @@ -93,7 +92,7 @@ void mtk_drm_gem_free_object(struct drm_gem_object *obj) drm_prime_gem_destroy(obj, mtk_gem->sg); else dma_free_attrs(priv->dma_dev, obj->size, mtk_gem->cookie, - mtk_gem->dma_addr, &mtk_gem->dma_attrs); + mtk_gem->dma_addr, mtk_gem->dma_attrs); /* release file pointer to gem object. */ drm_gem_object_release(obj); @@ -173,7 +172,7 @@ static int mtk_drm_gem_object_mmap(struct drm_gem_object *obj, vma->vm_pgoff = 0; ret = dma_mmap_attrs(priv->dma_dev, vma, mtk_gem->cookie, - mtk_gem->dma_addr, obj->size, &mtk_gem->dma_attrs); + mtk_gem->dma_addr, obj->size, mtk_gem->dma_attrs); if (ret) drm_gem_vm_close(vma); @@ -224,7 +223,7 @@ struct sg_table *mtk_gem_prime_get_sg_table(struct drm_gem_object *obj) ret = dma_get_sgtable_attrs(priv->dma_dev, sgt, mtk_gem->cookie, mtk_gem->dma_addr, obj->size, - &mtk_gem->dma_attrs); + mtk_gem->dma_attrs); if (ret) { DRM_ERROR("failed to allocate sgt, %d\n", ret); kfree(sgt); diff --git a/drivers/gpu/drm/mediatek/mtk_drm_gem.h b/drivers/gpu/drm/mediatek/mtk_drm_gem.h index 3a2a5624a1cb..2752718fa5b2 100644 --- a/drivers/gpu/drm/mediatek/mtk_drm_gem.h +++ b/drivers/gpu/drm/mediatek/mtk_drm_gem.h @@ -35,7 +35,7 @@ struct mtk_drm_gem_obj { void *cookie; void *kvaddr; dma_addr_t dma_addr; - struct dma_attrs dma_attrs; + unsigned long dma_attrs; struct sg_table *sg; }; diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c index 26f859ec24b3..8a0237008f74 100644 --- a/drivers/gpu/drm/msm/msm_drv.c +++ b/drivers/gpu/drm/msm/msm_drv.c @@ -238,11 +238,10 @@ static int msm_drm_uninit(struct device *dev) } if (priv->vram.paddr) { - DEFINE_DMA_ATTRS(attrs); - dma_set_attr(DMA_ATTR_NO_KERNEL_MAPPING, &attrs); + unsigned long attrs = DMA_ATTR_NO_KERNEL_MAPPING; drm_mm_takedown(&priv->vram.mm); dma_free_attrs(dev, priv->vram.size, NULL, - priv->vram.paddr, &attrs); + priv->vram.paddr, attrs); } component_unbind_all(dev, ddev); @@ -310,21 +309,21 @@ static int msm_init_vram(struct drm_device *dev) } if (size) { - DEFINE_DMA_ATTRS(attrs); + unsigned long attrs = 0; void *p; priv->vram.size = size; drm_mm_init(&priv->vram.mm, 0, (size >> PAGE_SHIFT) - 1); - dma_set_attr(DMA_ATTR_NO_KERNEL_MAPPING, &attrs); - dma_set_attr(DMA_ATTR_WRITE_COMBINE, &attrs); + attrs |= DMA_ATTR_NO_KERNEL_MAPPING; + attrs |= DMA_ATTR_WRITE_COMBINE; /* note that for no-kernel-mapping, the vaddr returned * is bogus, but non-null if allocation succeeded: */ p = dma_alloc_attrs(dev->dev, size, - &priv->vram.paddr, GFP_KERNEL, &attrs); + &priv->vram.paddr, GFP_KERNEL, attrs); if (!p) { dev_err(dev->dev, "failed to allocate VRAM\n"); priv->vram.paddr = 0; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.c b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.c index 6b8f2a19b2d9..a6a7fa0d7679 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.c @@ -109,7 +109,7 @@ struct gk20a_instmem { u16 iommu_bit; /* Only used by DMA API */ - struct dma_attrs attrs; + unsigned long attrs; }; #define gk20a_instmem(p) container_of((p), struct gk20a_instmem, base) @@ -293,7 +293,7 @@ gk20a_instobj_dtor_dma(struct nvkm_memory *memory) goto out; dma_free_attrs(dev, node->base.mem.size << PAGE_SHIFT, node->base.vaddr, - node->handle, &imem->attrs); + node->handle, imem->attrs); out: return node; @@ -386,7 +386,7 @@ gk20a_instobj_ctor_dma(struct gk20a_instmem *imem, u32 npages, u32 align, node->base.vaddr = dma_alloc_attrs(dev, npages << PAGE_SHIFT, &node->handle, GFP_KERNEL, - &imem->attrs); + imem->attrs); if (!node->base.vaddr) { nvkm_error(subdev, "cannot allocate DMA memory\n"); return -ENOMEM; @@ -597,10 +597,9 @@ gk20a_instmem_new(struct nvkm_device *device, int index, nvkm_info(&imem->base.subdev, "using IOMMU\n"); } else { - init_dma_attrs(&imem->attrs); - dma_set_attr(DMA_ATTR_NON_CONSISTENT, &imem->attrs); - dma_set_attr(DMA_ATTR_WEAK_ORDERING, &imem->attrs); - dma_set_attr(DMA_ATTR_WRITE_COMBINE, &imem->attrs); + imem->attrs = DMA_ATTR_NON_CONSISTENT | + DMA_ATTR_WEAK_ORDERING | + DMA_ATTR_WRITE_COMBINE; nvkm_info(&imem->base.subdev, "using DMA API\n"); } diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c index 059e902f872d..b70f9423379c 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c @@ -17,8 +17,6 @@ #include #include -#include - #include "rockchip_drm_drv.h" #include "rockchip_drm_gem.h" @@ -28,15 +26,14 @@ static int rockchip_gem_alloc_buf(struct rockchip_gem_object *rk_obj, struct drm_gem_object *obj = &rk_obj->base; struct drm_device *drm = obj->dev; - init_dma_attrs(&rk_obj->dma_attrs); - dma_set_attr(DMA_ATTR_WRITE_COMBINE, &rk_obj->dma_attrs); + rk_obj->dma_attrs = DMA_ATTR_WRITE_COMBINE; if (!alloc_kmap) - dma_set_attr(DMA_ATTR_NO_KERNEL_MAPPING, &rk_obj->dma_attrs); + rk_obj->dma_attrs |= DMA_ATTR_NO_KERNEL_MAPPING; rk_obj->kvaddr = dma_alloc_attrs(drm->dev, obj->size, &rk_obj->dma_addr, GFP_KERNEL, - &rk_obj->dma_attrs); + rk_obj->dma_attrs); if (!rk_obj->kvaddr) { DRM_ERROR("failed to allocate %zu byte dma buffer", obj->size); return -ENOMEM; @@ -51,7 +48,7 @@ static void rockchip_gem_free_buf(struct rockchip_gem_object *rk_obj) struct drm_device *drm = obj->dev; dma_free_attrs(drm->dev, obj->size, rk_obj->kvaddr, rk_obj->dma_addr, - &rk_obj->dma_attrs); + rk_obj->dma_attrs); } static int rockchip_drm_gem_object_mmap(struct drm_gem_object *obj, @@ -70,7 +67,7 @@ static int rockchip_drm_gem_object_mmap(struct drm_gem_object *obj, vma->vm_pgoff = 0; ret = dma_mmap_attrs(drm->dev, vma, rk_obj->kvaddr, rk_obj->dma_addr, - obj->size, &rk_obj->dma_attrs); + obj->size, rk_obj->dma_attrs); if (ret) drm_gem_vm_close(vma); @@ -262,7 +259,7 @@ struct sg_table *rockchip_gem_prime_get_sg_table(struct drm_gem_object *obj) ret = dma_get_sgtable_attrs(drm->dev, sgt, rk_obj->kvaddr, rk_obj->dma_addr, obj->size, - &rk_obj->dma_attrs); + rk_obj->dma_attrs); if (ret) { DRM_ERROR("failed to allocate sgt, %d\n", ret); kfree(sgt); @@ -276,7 +273,7 @@ void *rockchip_gem_prime_vmap(struct drm_gem_object *obj) { struct rockchip_gem_object *rk_obj = to_rockchip_obj(obj); - if (dma_get_attr(DMA_ATTR_NO_KERNEL_MAPPING, &rk_obj->dma_attrs)) + if (rk_obj->dma_attrs & DMA_ATTR_NO_KERNEL_MAPPING) return NULL; return rk_obj->kvaddr; diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.h b/drivers/gpu/drm/rockchip/rockchip_drm_gem.h index ad22618473a4..18b3488db4ec 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.h @@ -23,7 +23,7 @@ struct rockchip_gem_object { void *kvaddr; dma_addr_t dma_addr; - struct dma_attrs dma_attrs; + unsigned long dma_attrs; }; struct sg_table *rockchip_gem_prime_get_sg_table(struct drm_gem_object *obj); diff --git a/drivers/infiniband/core/umem.c b/drivers/infiniband/core/umem.c index fe4d2e1a8b58..c68746ce6624 100644 --- a/drivers/infiniband/core/umem.c +++ b/drivers/infiniband/core/umem.c @@ -37,7 +37,6 @@ #include #include #include -#include #include #include @@ -92,12 +91,12 @@ struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr, unsigned long npages; int ret; int i; - DEFINE_DMA_ATTRS(attrs); + unsigned long dma_attrs = 0; struct scatterlist *sg, *sg_list_start; int need_release = 0; if (dmasync) - dma_set_attr(DMA_ATTR_WRITE_BARRIER, &attrs); + dma_attrs |= DMA_ATTR_WRITE_BARRIER; if (!size) return ERR_PTR(-EINVAL); @@ -215,7 +214,7 @@ struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr, umem->sg_head.sgl, umem->npages, DMA_BIDIRECTIONAL, - &attrs); + dma_attrs); if (umem->nmap <= 0) { ret = -ENOMEM; diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c index 33c177ba93be..96de97a46079 100644 --- a/drivers/iommu/amd_iommu.c +++ b/drivers/iommu/amd_iommu.c @@ -2375,7 +2375,7 @@ static void __unmap_single(struct dma_ops_domain *dma_dom, static dma_addr_t map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { phys_addr_t paddr = page_to_phys(page) + offset; struct protection_domain *domain; @@ -2398,7 +2398,7 @@ static dma_addr_t map_page(struct device *dev, struct page *page, * The exported unmap_single function for dma_ops. */ static void unmap_page(struct device *dev, dma_addr_t dma_addr, size_t size, - enum dma_data_direction dir, struct dma_attrs *attrs) + enum dma_data_direction dir, unsigned long attrs) { struct protection_domain *domain; struct dma_ops_domain *dma_dom; @@ -2444,7 +2444,7 @@ static int sg_num_pages(struct device *dev, */ static int map_sg(struct device *dev, struct scatterlist *sglist, int nelems, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { int mapped_pages = 0, npages = 0, prot = 0, i; struct protection_domain *domain; @@ -2525,7 +2525,7 @@ out_err: */ static void unmap_sg(struct device *dev, struct scatterlist *sglist, int nelems, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { struct protection_domain *domain; struct dma_ops_domain *dma_dom; @@ -2548,7 +2548,7 @@ static void unmap_sg(struct device *dev, struct scatterlist *sglist, */ static void *alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_addr, gfp_t flag, - struct dma_attrs *attrs) + unsigned long attrs) { u64 dma_mask = dev->coherent_dma_mask; struct protection_domain *domain; @@ -2604,7 +2604,7 @@ out_free: */ static void free_coherent(struct device *dev, size_t size, void *virt_addr, dma_addr_t dma_addr, - struct dma_attrs *attrs) + unsigned long attrs) { struct protection_domain *domain; struct dma_ops_domain *dma_dom; diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c index ea5a9ebf0f78..08a1e2f3690f 100644 --- a/drivers/iommu/dma-iommu.c +++ b/drivers/iommu/dma-iommu.c @@ -286,7 +286,7 @@ void iommu_dma_free(struct device *dev, struct page **pages, size_t size, * or NULL on failure. */ struct page **iommu_dma_alloc(struct device *dev, size_t size, gfp_t gfp, - struct dma_attrs *attrs, int prot, dma_addr_t *handle, + unsigned long attrs, int prot, dma_addr_t *handle, void (*flush_page)(struct device *, const void *, phys_addr_t)) { struct iommu_domain *domain = iommu_get_domain_for_dev(dev); @@ -306,7 +306,7 @@ struct page **iommu_dma_alloc(struct device *dev, size_t size, gfp_t gfp, } else { size = ALIGN(size, min_size); } - if (dma_get_attr(DMA_ATTR_ALLOC_SINGLE_PAGES, attrs)) + if (attrs & DMA_ATTR_ALLOC_SINGLE_PAGES) alloc_sizes = min_size; count = PAGE_ALIGN(size) >> PAGE_SHIFT; @@ -400,7 +400,7 @@ dma_addr_t iommu_dma_map_page(struct device *dev, struct page *page, } void iommu_dma_unmap_page(struct device *dev, dma_addr_t handle, size_t size, - enum dma_data_direction dir, struct dma_attrs *attrs) + enum dma_data_direction dir, unsigned long attrs) { __iommu_dma_unmap(iommu_get_domain_for_dev(dev), handle); } @@ -560,7 +560,7 @@ out_restore_sg: } void iommu_dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nents, - enum dma_data_direction dir, struct dma_attrs *attrs) + enum dma_data_direction dir, unsigned long attrs) { /* * The scatterlist segments are mapped into a single diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c index afbaa2c69a59..ebb5bf3ddbd9 100644 --- a/drivers/iommu/intel-iommu.c +++ b/drivers/iommu/intel-iommu.c @@ -3552,7 +3552,7 @@ error: static dma_addr_t intel_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { return __intel_map_single(dev, page_to_phys(page) + offset, size, dir, *dev->dma_mask); @@ -3711,14 +3711,14 @@ static void intel_unmap(struct device *dev, dma_addr_t dev_addr, size_t size) static void intel_unmap_page(struct device *dev, dma_addr_t dev_addr, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { intel_unmap(dev, dev_addr, size); } static void *intel_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flags, - struct dma_attrs *attrs) + unsigned long attrs) { struct page *page = NULL; int order; @@ -3764,7 +3764,7 @@ static void *intel_alloc_coherent(struct device *dev, size_t size, } static void intel_free_coherent(struct device *dev, size_t size, void *vaddr, - dma_addr_t dma_handle, struct dma_attrs *attrs) + dma_addr_t dma_handle, unsigned long attrs) { int order; struct page *page = virt_to_page(vaddr); @@ -3779,7 +3779,7 @@ static void intel_free_coherent(struct device *dev, size_t size, void *vaddr, static void intel_unmap_sg(struct device *dev, struct scatterlist *sglist, int nelems, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { dma_addr_t startaddr = sg_dma_address(sglist) & PAGE_MASK; unsigned long nrpages = 0; @@ -3808,7 +3808,7 @@ static int intel_nontranslate_map_sg(struct device *hddev, } static int intel_map_sg(struct device *dev, struct scatterlist *sglist, int nelems, - enum dma_data_direction dir, struct dma_attrs *attrs) + enum dma_data_direction dir, unsigned long attrs) { int i; struct dmar_domain *domain; diff --git a/drivers/media/platform/sti/bdisp/bdisp-hw.c b/drivers/media/platform/sti/bdisp/bdisp-hw.c index 3df66d11c795..b7892f3efd98 100644 --- a/drivers/media/platform/sti/bdisp/bdisp-hw.c +++ b/drivers/media/platform/sti/bdisp/bdisp-hw.c @@ -430,14 +430,11 @@ int bdisp_hw_get_and_clear_irq(struct bdisp_dev *bdisp) */ void bdisp_hw_free_nodes(struct bdisp_ctx *ctx) { - if (ctx && ctx->node[0]) { - DEFINE_DMA_ATTRS(attrs); - - dma_set_attr(DMA_ATTR_WRITE_COMBINE, &attrs); + if (ctx && ctx->node[0]) dma_free_attrs(ctx->bdisp_dev->dev, sizeof(struct bdisp_node) * MAX_NB_NODE, - ctx->node[0], ctx->node_paddr[0], &attrs); - } + ctx->node[0], ctx->node_paddr[0], + DMA_ATTR_WRITE_COMBINE); } /** @@ -455,12 +452,10 @@ int bdisp_hw_alloc_nodes(struct bdisp_ctx *ctx) unsigned int i, node_size = sizeof(struct bdisp_node); void *base; dma_addr_t paddr; - DEFINE_DMA_ATTRS(attrs); /* Allocate all the nodes within a single memory page */ - dma_set_attr(DMA_ATTR_WRITE_COMBINE, &attrs); base = dma_alloc_attrs(dev, node_size * MAX_NB_NODE, &paddr, - GFP_KERNEL | GFP_DMA, &attrs); + GFP_KERNEL | GFP_DMA, DMA_ATTR_WRITE_COMBINE); if (!base) { dev_err(dev, "%s no mem\n", __func__); return -ENOMEM; @@ -493,13 +488,9 @@ void bdisp_hw_free_filters(struct device *dev) { int size = (BDISP_HF_NB * NB_H_FILTER) + (BDISP_VF_NB * NB_V_FILTER); - if (bdisp_h_filter[0].virt) { - DEFINE_DMA_ATTRS(attrs); - - dma_set_attr(DMA_ATTR_WRITE_COMBINE, &attrs); + if (bdisp_h_filter[0].virt) dma_free_attrs(dev, size, bdisp_h_filter[0].virt, - bdisp_h_filter[0].paddr, &attrs); - } + bdisp_h_filter[0].paddr, DMA_ATTR_WRITE_COMBINE); } /** @@ -516,12 +507,11 @@ int bdisp_hw_alloc_filters(struct device *dev) unsigned int i, size; void *base; dma_addr_t paddr; - DEFINE_DMA_ATTRS(attrs); /* Allocate all the filters within a single memory page */ size = (BDISP_HF_NB * NB_H_FILTER) + (BDISP_VF_NB * NB_V_FILTER); - dma_set_attr(DMA_ATTR_WRITE_COMBINE, &attrs); - base = dma_alloc_attrs(dev, size, &paddr, GFP_KERNEL | GFP_DMA, &attrs); + base = dma_alloc_attrs(dev, size, &paddr, GFP_KERNEL | GFP_DMA, + DMA_ATTR_WRITE_COMBINE); if (!base) return -ENOMEM; diff --git a/drivers/media/v4l2-core/videobuf2-dma-contig.c b/drivers/media/v4l2-core/videobuf2-dma-contig.c index 863f658a3fa1..b09b2c9b6b63 100644 --- a/drivers/media/v4l2-core/videobuf2-dma-contig.c +++ b/drivers/media/v4l2-core/videobuf2-dma-contig.c @@ -27,7 +27,7 @@ struct vb2_dc_buf { unsigned long size; void *cookie; dma_addr_t dma_addr; - struct dma_attrs attrs; + unsigned long attrs; enum dma_data_direction dma_dir; struct sg_table *dma_sgt; struct frame_vector *vec; @@ -130,12 +130,12 @@ static void vb2_dc_put(void *buf_priv) kfree(buf->sgt_base); } dma_free_attrs(buf->dev, buf->size, buf->cookie, buf->dma_addr, - &buf->attrs); + buf->attrs); put_device(buf->dev); kfree(buf); } -static void *vb2_dc_alloc(struct device *dev, const struct dma_attrs *attrs, +static void *vb2_dc_alloc(struct device *dev, unsigned long attrs, unsigned long size, enum dma_data_direction dma_dir, gfp_t gfp_flags) { @@ -146,16 +146,16 @@ static void *vb2_dc_alloc(struct device *dev, const struct dma_attrs *attrs, return ERR_PTR(-ENOMEM); if (attrs) - buf->attrs = *attrs; + buf->attrs = attrs; buf->cookie = dma_alloc_attrs(dev, size, &buf->dma_addr, - GFP_KERNEL | gfp_flags, &buf->attrs); + GFP_KERNEL | gfp_flags, buf->attrs); if (!buf->cookie) { dev_err(dev, "dma_alloc_coherent of size %ld failed\n", size); kfree(buf); return ERR_PTR(-ENOMEM); } - if (!dma_get_attr(DMA_ATTR_NO_KERNEL_MAPPING, &buf->attrs)) + if ((buf->attrs & DMA_ATTR_NO_KERNEL_MAPPING) == 0) buf->vaddr = buf->cookie; /* Prevent the device from being released while the buffer is used */ @@ -189,7 +189,7 @@ static int vb2_dc_mmap(void *buf_priv, struct vm_area_struct *vma) vma->vm_pgoff = 0; ret = dma_mmap_attrs(buf->dev, vma, buf->cookie, - buf->dma_addr, buf->size, &buf->attrs); + buf->dma_addr, buf->size, buf->attrs); if (ret) { pr_err("Remapping memory failed, error: %d\n", ret); @@ -372,7 +372,7 @@ static struct sg_table *vb2_dc_get_base_sgt(struct vb2_dc_buf *buf) } ret = dma_get_sgtable_attrs(buf->dev, sgt, buf->cookie, buf->dma_addr, - buf->size, &buf->attrs); + buf->size, buf->attrs); if (ret < 0) { dev_err(buf->dev, "failed to get scatterlist from DMA API\n"); kfree(sgt); @@ -421,15 +421,12 @@ static void vb2_dc_put_userptr(void *buf_priv) struct page **pages; if (sgt) { - DEFINE_DMA_ATTRS(attrs); - - dma_set_attr(DMA_ATTR_SKIP_CPU_SYNC, &attrs); /* * No need to sync to CPU, it's already synced to the CPU * since the finish() memop will have been called before this. */ dma_unmap_sg_attrs(buf->dev, sgt->sgl, sgt->orig_nents, - buf->dma_dir, &attrs); + buf->dma_dir, DMA_ATTR_SKIP_CPU_SYNC); pages = frame_vector_pages(buf->vec); /* sgt should exist only if vector contains pages... */ BUG_ON(IS_ERR(pages)); @@ -484,9 +481,6 @@ static void *vb2_dc_get_userptr(struct device *dev, unsigned long vaddr, struct sg_table *sgt; unsigned long contig_size; unsigned long dma_align = dma_get_cache_alignment(); - DEFINE_DMA_ATTRS(attrs); - - dma_set_attr(DMA_ATTR_SKIP_CPU_SYNC, &attrs); /* Only cache aligned DMA transfers are reliable */ if (!IS_ALIGNED(vaddr | size, dma_align)) { @@ -548,7 +542,7 @@ static void *vb2_dc_get_userptr(struct device *dev, unsigned long vaddr, * prepare() memop is called. */ sgt->nents = dma_map_sg_attrs(buf->dev, sgt->sgl, sgt->orig_nents, - buf->dma_dir, &attrs); + buf->dma_dir, DMA_ATTR_SKIP_CPU_SYNC); if (sgt->nents <= 0) { pr_err("failed to map scatterlist\n"); ret = -EIO; @@ -572,7 +566,7 @@ out: fail_map_sg: dma_unmap_sg_attrs(buf->dev, sgt->sgl, sgt->orig_nents, - buf->dma_dir, &attrs); + buf->dma_dir, DMA_ATTR_SKIP_CPU_SYNC); fail_sgt_init: sg_free_table(sgt); diff --git a/drivers/media/v4l2-core/videobuf2-dma-sg.c b/drivers/media/v4l2-core/videobuf2-dma-sg.c index a39db8a6db7a..bd82d709ee82 100644 --- a/drivers/media/v4l2-core/videobuf2-dma-sg.c +++ b/drivers/media/v4l2-core/videobuf2-dma-sg.c @@ -95,7 +95,7 @@ static int vb2_dma_sg_alloc_compacted(struct vb2_dma_sg_buf *buf, return 0; } -static void *vb2_dma_sg_alloc(struct device *dev, const struct dma_attrs *dma_attrs, +static void *vb2_dma_sg_alloc(struct device *dev, unsigned long dma_attrs, unsigned long size, enum dma_data_direction dma_dir, gfp_t gfp_flags) { @@ -103,9 +103,6 @@ static void *vb2_dma_sg_alloc(struct device *dev, const struct dma_attrs *dma_at struct sg_table *sgt; int ret; int num_pages; - DEFINE_DMA_ATTRS(attrs); - - dma_set_attr(DMA_ATTR_SKIP_CPU_SYNC, &attrs); if (WARN_ON(dev == NULL)) return NULL; @@ -144,7 +141,7 @@ static void *vb2_dma_sg_alloc(struct device *dev, const struct dma_attrs *dma_at * prepare() memop is called. */ sgt->nents = dma_map_sg_attrs(buf->dev, sgt->sgl, sgt->orig_nents, - buf->dma_dir, &attrs); + buf->dma_dir, DMA_ATTR_SKIP_CPU_SYNC); if (!sgt->nents) goto fail_map; @@ -179,13 +176,10 @@ static void vb2_dma_sg_put(void *buf_priv) int i = buf->num_pages; if (atomic_dec_and_test(&buf->refcount)) { - DEFINE_DMA_ATTRS(attrs); - - dma_set_attr(DMA_ATTR_SKIP_CPU_SYNC, &attrs); dprintk(1, "%s: Freeing buffer of %d pages\n", __func__, buf->num_pages); dma_unmap_sg_attrs(buf->dev, sgt->sgl, sgt->orig_nents, - buf->dma_dir, &attrs); + buf->dma_dir, DMA_ATTR_SKIP_CPU_SYNC); if (buf->vaddr) vm_unmap_ram(buf->vaddr, buf->num_pages); sg_free_table(buf->dma_sgt); @@ -228,10 +222,8 @@ static void *vb2_dma_sg_get_userptr(struct device *dev, unsigned long vaddr, { struct vb2_dma_sg_buf *buf; struct sg_table *sgt; - DEFINE_DMA_ATTRS(attrs); struct frame_vector *vec; - dma_set_attr(DMA_ATTR_SKIP_CPU_SYNC, &attrs); buf = kzalloc(sizeof *buf, GFP_KERNEL); if (!buf) return NULL; @@ -262,7 +254,7 @@ static void *vb2_dma_sg_get_userptr(struct device *dev, unsigned long vaddr, * prepare() memop is called. */ sgt->nents = dma_map_sg_attrs(buf->dev, sgt->sgl, sgt->orig_nents, - buf->dma_dir, &attrs); + buf->dma_dir, DMA_ATTR_SKIP_CPU_SYNC); if (!sgt->nents) goto userptr_fail_map; @@ -286,14 +278,11 @@ static void vb2_dma_sg_put_userptr(void *buf_priv) struct vb2_dma_sg_buf *buf = buf_priv; struct sg_table *sgt = &buf->sg_table; int i = buf->num_pages; - DEFINE_DMA_ATTRS(attrs); - - dma_set_attr(DMA_ATTR_SKIP_CPU_SYNC, &attrs); dprintk(1, "%s: Releasing userspace buffer of %d pages\n", __func__, buf->num_pages); dma_unmap_sg_attrs(buf->dev, sgt->sgl, sgt->orig_nents, buf->dma_dir, - &attrs); + DMA_ATTR_SKIP_CPU_SYNC); if (buf->vaddr) vm_unmap_ram(buf->vaddr, buf->num_pages); sg_free_table(buf->dma_sgt); diff --git a/drivers/media/v4l2-core/videobuf2-vmalloc.c b/drivers/media/v4l2-core/videobuf2-vmalloc.c index 7e8a07ed8d82..c2820a6e164d 100644 --- a/drivers/media/v4l2-core/videobuf2-vmalloc.c +++ b/drivers/media/v4l2-core/videobuf2-vmalloc.c @@ -33,7 +33,7 @@ struct vb2_vmalloc_buf { static void vb2_vmalloc_put(void *buf_priv); -static void *vb2_vmalloc_alloc(struct device *dev, const struct dma_attrs *attrs, +static void *vb2_vmalloc_alloc(struct device *dev, unsigned long attrs, unsigned long size, enum dma_data_direction dma_dir, gfp_t gfp_flags) { diff --git a/drivers/misc/mic/host/mic_boot.c b/drivers/misc/mic/host/mic_boot.c index e047efd83f57..9599d732aff3 100644 --- a/drivers/misc/mic/host/mic_boot.c +++ b/drivers/misc/mic/host/mic_boot.c @@ -38,7 +38,7 @@ static inline struct mic_device *vpdev_to_mdev(struct device *dev) static dma_addr_t _mic_dma_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, - enum dma_data_direction dir, struct dma_attrs *attrs) + enum dma_data_direction dir, unsigned long attrs) { void *va = phys_to_virt(page_to_phys(page)) + offset; struct mic_device *mdev = vpdev_to_mdev(dev); @@ -48,7 +48,7 @@ _mic_dma_map_page(struct device *dev, struct page *page, static void _mic_dma_unmap_page(struct device *dev, dma_addr_t dma_addr, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { struct mic_device *mdev = vpdev_to_mdev(dev); @@ -144,7 +144,7 @@ static inline struct mic_device *scdev_to_mdev(struct scif_hw_dev *scdev) static void *__mic_dma_alloc(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t gfp, - struct dma_attrs *attrs) + unsigned long attrs) { struct scif_hw_dev *scdev = dev_get_drvdata(dev); struct mic_device *mdev = scdev_to_mdev(scdev); @@ -164,7 +164,7 @@ static void *__mic_dma_alloc(struct device *dev, size_t size, } static void __mic_dma_free(struct device *dev, size_t size, void *vaddr, - dma_addr_t dma_handle, struct dma_attrs *attrs) + dma_addr_t dma_handle, unsigned long attrs) { struct scif_hw_dev *scdev = dev_get_drvdata(dev); struct mic_device *mdev = scdev_to_mdev(scdev); @@ -176,7 +176,7 @@ static void __mic_dma_free(struct device *dev, size_t size, void *vaddr, static dma_addr_t __mic_dma_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { void *va = phys_to_virt(page_to_phys(page)) + offset; struct scif_hw_dev *scdev = dev_get_drvdata(dev); @@ -188,7 +188,7 @@ __mic_dma_map_page(struct device *dev, struct page *page, unsigned long offset, static void __mic_dma_unmap_page(struct device *dev, dma_addr_t dma_addr, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { struct scif_hw_dev *scdev = dev_get_drvdata(dev); struct mic_device *mdev = scdev_to_mdev(scdev); @@ -198,7 +198,7 @@ __mic_dma_unmap_page(struct device *dev, dma_addr_t dma_addr, static int __mic_dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { struct scif_hw_dev *scdev = dev_get_drvdata(dev); struct mic_device *mdev = scdev_to_mdev(scdev); @@ -229,7 +229,7 @@ err: static void __mic_dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { struct scif_hw_dev *scdev = dev_get_drvdata(dev); struct mic_device *mdev = scdev_to_mdev(scdev); @@ -327,7 +327,7 @@ static inline struct mic_device *mbdev_to_mdev(struct mbus_device *mbdev) static dma_addr_t mic_dma_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { void *va = phys_to_virt(page_to_phys(page)) + offset; struct mic_device *mdev = dev_get_drvdata(dev->parent); @@ -338,7 +338,7 @@ mic_dma_map_page(struct device *dev, struct page *page, static void mic_dma_unmap_page(struct device *dev, dma_addr_t dma_addr, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { struct mic_device *mdev = dev_get_drvdata(dev->parent); mic_unmap_single(mdev, dma_addr, size); diff --git a/drivers/parisc/ccio-dma.c b/drivers/parisc/ccio-dma.c index e24b05996a1b..3ed6238f8f6e 100644 --- a/drivers/parisc/ccio-dma.c +++ b/drivers/parisc/ccio-dma.c @@ -790,7 +790,7 @@ ccio_map_single(struct device *dev, void *addr, size_t size, static dma_addr_t ccio_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { return ccio_map_single(dev, page_address(page) + offset, size, direction); @@ -806,7 +806,7 @@ ccio_map_page(struct device *dev, struct page *page, unsigned long offset, */ static void ccio_unmap_page(struct device *dev, dma_addr_t iova, size_t size, - enum dma_data_direction direction, struct dma_attrs *attrs) + enum dma_data_direction direction, unsigned long attrs) { struct ioc *ioc; unsigned long flags; @@ -844,7 +844,7 @@ ccio_unmap_page(struct device *dev, dma_addr_t iova, size_t size, */ static void * ccio_alloc(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag, - struct dma_attrs *attrs) + unsigned long attrs) { void *ret; #if 0 @@ -878,9 +878,9 @@ ccio_alloc(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag, */ static void ccio_free(struct device *dev, size_t size, void *cpu_addr, - dma_addr_t dma_handle, struct dma_attrs *attrs) + dma_addr_t dma_handle, unsigned long attrs) { - ccio_unmap_page(dev, dma_handle, size, 0, NULL); + ccio_unmap_page(dev, dma_handle, size, 0, 0); free_pages((unsigned long)cpu_addr, get_order(size)); } @@ -907,7 +907,7 @@ ccio_free(struct device *dev, size_t size, void *cpu_addr, */ static int ccio_map_sg(struct device *dev, struct scatterlist *sglist, int nents, - enum dma_data_direction direction, struct dma_attrs *attrs) + enum dma_data_direction direction, unsigned long attrs) { struct ioc *ioc; int coalesced, filled = 0; @@ -984,7 +984,7 @@ ccio_map_sg(struct device *dev, struct scatterlist *sglist, int nents, */ static void ccio_unmap_sg(struct device *dev, struct scatterlist *sglist, int nents, - enum dma_data_direction direction, struct dma_attrs *attrs) + enum dma_data_direction direction, unsigned long attrs) { struct ioc *ioc; @@ -1004,7 +1004,7 @@ ccio_unmap_sg(struct device *dev, struct scatterlist *sglist, int nents, ioc->usg_pages += sg_dma_len(sglist) >> PAGE_SHIFT; #endif ccio_unmap_page(dev, sg_dma_address(sglist), - sg_dma_len(sglist), direction, NULL); + sg_dma_len(sglist), direction, 0); ++sglist; } diff --git a/drivers/parisc/sba_iommu.c b/drivers/parisc/sba_iommu.c index 42ec4600b7e4..151b86b6d2e2 100644 --- a/drivers/parisc/sba_iommu.c +++ b/drivers/parisc/sba_iommu.c @@ -783,7 +783,7 @@ sba_map_single(struct device *dev, void *addr, size_t size, static dma_addr_t sba_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction direction, - struct dma_attrs *attrs) + unsigned long attrs) { return sba_map_single(dev, page_address(page) + offset, size, direction); @@ -801,7 +801,7 @@ sba_map_page(struct device *dev, struct page *page, unsigned long offset, */ static void sba_unmap_page(struct device *dev, dma_addr_t iova, size_t size, - enum dma_data_direction direction, struct dma_attrs *attrs) + enum dma_data_direction direction, unsigned long attrs) { struct ioc *ioc; #if DELAYED_RESOURCE_CNT > 0 @@ -876,7 +876,7 @@ sba_unmap_page(struct device *dev, dma_addr_t iova, size_t size, * See Documentation/DMA-API-HOWTO.txt */ static void *sba_alloc(struct device *hwdev, size_t size, dma_addr_t *dma_handle, - gfp_t gfp, struct dma_attrs *attrs) + gfp_t gfp, unsigned long attrs) { void *ret; @@ -908,9 +908,9 @@ static void *sba_alloc(struct device *hwdev, size_t size, dma_addr_t *dma_handle */ static void sba_free(struct device *hwdev, size_t size, void *vaddr, - dma_addr_t dma_handle, struct dma_attrs *attrs) + dma_addr_t dma_handle, unsigned long attrs) { - sba_unmap_page(hwdev, dma_handle, size, 0, NULL); + sba_unmap_page(hwdev, dma_handle, size, 0, 0); free_pages((unsigned long) vaddr, get_order(size)); } @@ -943,7 +943,7 @@ int dump_run_sg = 0; */ static int sba_map_sg(struct device *dev, struct scatterlist *sglist, int nents, - enum dma_data_direction direction, struct dma_attrs *attrs) + enum dma_data_direction direction, unsigned long attrs) { struct ioc *ioc; int coalesced, filled = 0; @@ -1026,7 +1026,7 @@ sba_map_sg(struct device *dev, struct scatterlist *sglist, int nents, */ static void sba_unmap_sg(struct device *dev, struct scatterlist *sglist, int nents, - enum dma_data_direction direction, struct dma_attrs *attrs) + enum dma_data_direction direction, unsigned long attrs) { struct ioc *ioc; #ifdef ASSERT_PDIR_SANITY @@ -1051,7 +1051,7 @@ sba_unmap_sg(struct device *dev, struct scatterlist *sglist, int nents, while (sg_dma_len(sglist) && nents--) { sba_unmap_page(dev, sg_dma_address(sglist), sg_dma_len(sglist), - direction, NULL); + direction, 0); #ifdef SBA_COLLECT_STATS ioc->usg_pages += ((sg_dma_address(sglist) & ~IOVP_MASK) + sg_dma_len(sglist) + IOVP_SIZE - 1) >> PAGE_SHIFT; ioc->usingle_calls--; /* kluge since call is unmap_sg() */ diff --git a/drivers/remoteproc/qcom_q6v5_pil.c b/drivers/remoteproc/qcom_q6v5_pil.c index 24791886219a..2a1b2c7d8f2c 100644 --- a/drivers/remoteproc/qcom_q6v5_pil.c +++ b/drivers/remoteproc/qcom_q6v5_pil.c @@ -349,13 +349,12 @@ static void q6v5proc_halt_axi_port(struct q6v5 *qproc, static int q6v5_mpss_init_image(struct q6v5 *qproc, const struct firmware *fw) { - DEFINE_DMA_ATTRS(attrs); + unsigned long dma_attrs = DMA_ATTR_FORCE_CONTIGUOUS; dma_addr_t phys; void *ptr; int ret; - dma_set_attr(DMA_ATTR_FORCE_CONTIGUOUS, &attrs); - ptr = dma_alloc_attrs(qproc->dev, fw->size, &phys, GFP_KERNEL, &attrs); + ptr = dma_alloc_attrs(qproc->dev, fw->size, &phys, GFP_KERNEL, dma_attrs); if (!ptr) { dev_err(qproc->dev, "failed to allocate mdt buffer\n"); return -ENOMEM; @@ -372,7 +371,7 @@ static int q6v5_mpss_init_image(struct q6v5 *qproc, const struct firmware *fw) else if (ret < 0) dev_err(qproc->dev, "MPSS header authentication failed: %d\n", ret); - dma_free_attrs(qproc->dev, fw->size, ptr, phys, &attrs); + dma_free_attrs(qproc->dev, fw->size, ptr, phys, dma_attrs); return ret < 0 ? ret : 0; } diff --git a/drivers/video/fbdev/omap2/omapfb/omapfb-main.c b/drivers/video/fbdev/omap2/omapfb/omapfb-main.c index 2fb90cb6803f..1d7c012f09db 100644 --- a/drivers/video/fbdev/omap2/omapfb/omapfb-main.c +++ b/drivers/video/fbdev/omap2/omapfb/omapfb-main.c @@ -1332,7 +1332,7 @@ static void omapfb_free_fbmem(struct fb_info *fbi) } dma_free_attrs(fbdev->dev, rg->size, rg->token, rg->dma_handle, - &rg->attrs); + rg->attrs); rg->token = NULL; rg->vaddr = NULL; @@ -1370,7 +1370,7 @@ static int omapfb_alloc_fbmem(struct fb_info *fbi, unsigned long size, struct omapfb2_device *fbdev = ofbi->fbdev; struct omapfb2_mem_region *rg; void *token; - DEFINE_DMA_ATTRS(attrs); + unsigned long attrs; dma_addr_t dma_handle; int r; @@ -1386,15 +1386,15 @@ static int omapfb_alloc_fbmem(struct fb_info *fbi, unsigned long size, size = PAGE_ALIGN(size); - dma_set_attr(DMA_ATTR_WRITE_COMBINE, &attrs); + attrs = DMA_ATTR_WRITE_COMBINE; if (ofbi->rotation_type == OMAP_DSS_ROT_VRFB) - dma_set_attr(DMA_ATTR_NO_KERNEL_MAPPING, &attrs); + attrs |= DMA_ATTR_NO_KERNEL_MAPPING; DBG("allocating %lu bytes for fb %d\n", size, ofbi->id); token = dma_alloc_attrs(fbdev->dev, size, &dma_handle, - GFP_KERNEL, &attrs); + GFP_KERNEL, attrs); if (token == NULL) { dev_err(fbdev->dev, "failed to allocate framebuffer\n"); @@ -1408,7 +1408,7 @@ static int omapfb_alloc_fbmem(struct fb_info *fbi, unsigned long size, r = omap_vrfb_request_ctx(&rg->vrfb); if (r) { dma_free_attrs(fbdev->dev, size, token, dma_handle, - &attrs); + attrs); dev_err(fbdev->dev, "vrfb create ctx failed\n"); return r; } diff --git a/drivers/video/fbdev/omap2/omapfb/omapfb.h b/drivers/video/fbdev/omap2/omapfb/omapfb.h index bcb9ff4a607d..555487d6dbea 100644 --- a/drivers/video/fbdev/omap2/omapfb/omapfb.h +++ b/drivers/video/fbdev/omap2/omapfb/omapfb.h @@ -28,7 +28,6 @@ #endif #include -#include #include #include