diff options
187 files changed, 5919 insertions, 3321 deletions
diff --git a/Documentation/devicetree/bindings/media/atmel-isc.txt b/Documentation/devicetree/bindings/media/atmel-isc.txt new file mode 100644 index 000000000000..bbe0e87c6188 --- /dev/null +++ b/Documentation/devicetree/bindings/media/atmel-isc.txt @@ -0,0 +1,65 @@ +Atmel Image Sensor Controller (ISC) +---------------------------------------------- + +Required properties for ISC: +- compatible + Must be "atmel,sama5d2-isc". +- reg + Physical base address and length of the registers set for the device. +- interrupts + Should contain IRQ line for the ISC. +- clocks + List of clock specifiers, corresponding to entries in + the clock-names property; + Please refer to clock-bindings.txt. +- clock-names + Required elements: "hclock", "iscck", "gck". +- #clock-cells + Should be 0. +- clock-output-names + Should be "isc-mck". +- pinctrl-names, pinctrl-0 + Please refer to pinctrl-bindings.txt. + +ISC supports a single port node with parallel bus. It should contain one +'port' child node with child 'endpoint' node. Please refer to the bindings +defined in Documentation/devicetree/bindings/media/video-interfaces.txt. + +Example: +isc: isc@f0008000 { + compatible = "atmel,sama5d2-isc"; + reg = <0xf0008000 0x4000>; + interrupts = <46 IRQ_TYPE_LEVEL_HIGH 5>; + clocks = <&isc_clk>, <&iscck>, <&isc_gclk>; + clock-names = "hclock", "iscck", "gck"; + #clock-cells = <0>; + clock-output-names = "isc-mck"; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_isc_base &pinctrl_isc_data_8bit &pinctrl_isc_data_9_10 &pinctrl_isc_data_11_12>; + + port { + isc_0: endpoint { + remote-endpoint = <&ov7740_0>; + hsync-active = <1>; + vsync-active = <0>; + pclk-sample = <1>; + }; + }; +}; + +i2c1: i2c@fc028000 { + ov7740: camera@21 { + compatible = "ovti,ov7740"; + reg = <0x21>; + clocks = <&isc>; + clock-names = "xvclk"; + assigned-clocks = <&isc>; + assigned-clock-rates = <24000000>; + + port { + ov7740_0: endpoint { + remote-endpoint = <&isc_0>; + }; + }; + }; +}; diff --git a/Documentation/cec.txt b/Documentation/media/kapi/cec-core.rst index 75155fe37153..88c33b53ec13 100644 --- a/Documentation/cec.txt +++ b/Documentation/media/kapi/cec-core.rst @@ -36,39 +36,50 @@ CEC Adapter The struct cec_adapter represents the CEC adapter hardware. It is created by calling cec_allocate_adapter() and deleted by calling cec_delete_adapter(): -struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops, +.. c:function:: + struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops, void *priv, const char *name, u32 caps, u8 available_las, struct device *parent); -void cec_delete_adapter(struct cec_adapter *adap); + +.. c:function:: + void cec_delete_adapter(struct cec_adapter *adap); To create an adapter you need to pass the following information: -ops: adapter operations which are called by the CEC framework and that you -have to implement. +ops: + adapter operations which are called by the CEC framework and that you + have to implement. -priv: will be stored in adap->priv and can be used by the adapter ops. +priv: + will be stored in adap->priv and can be used by the adapter ops. -name: the name of the CEC adapter. Note: this name will be copied. +name: + the name of the CEC adapter. Note: this name will be copied. -caps: capabilities of the CEC adapter. These capabilities determine the +caps: + capabilities of the CEC adapter. These capabilities determine the capabilities of the hardware and which parts are to be handled by userspace and which parts are handled by kernelspace. The capabilities are returned by CEC_ADAP_G_CAPS. -available_las: the number of simultaneous logical addresses that this +available_las: + the number of simultaneous logical addresses that this adapter can handle. Must be 1 <= available_las <= CEC_MAX_LOG_ADDRS. -parent: the parent device. +parent: + the parent device. To register the /dev/cecX device node and the remote control device (if CEC_CAP_RC is set) you call: -int cec_register_adapter(struct cec_adapter *adap); +.. c:function:: + int cec_register_adapter(struct cec_adapter \*adap); To unregister the devices call: -void cec_unregister_adapter(struct cec_adapter *adap); +.. c:function:: + void cec_unregister_adapter(struct cec_adapter \*adap); Note: if cec_register_adapter() fails, then call cec_delete_adapter() to clean up. But if cec_register_adapter() succeeded, then only call @@ -83,18 +94,23 @@ Implementing the Low-Level CEC Adapter The following low-level adapter operations have to be implemented in your driver: -struct cec_adap_ops { - /* Low-level callbacks */ - int (*adap_enable)(struct cec_adapter *adap, bool enable); - int (*adap_monitor_all_enable)(struct cec_adapter *adap, bool enable); - int (*adap_log_addr)(struct cec_adapter *adap, u8 logical_addr); - int (*adap_transmit)(struct cec_adapter *adap, u8 attempts, - u32 signal_free_time, struct cec_msg *msg); - void (*adap_log_status)(struct cec_adapter *adap); +.. c:type:: struct cec_adap_ops + +.. code-block:: none + + struct cec_adap_ops + { + /* Low-level callbacks */ + int (*adap_enable)(struct cec_adapter *adap, bool enable); + int (*adap_monitor_all_enable)(struct cec_adapter *adap, bool enable); + int (*adap_log_addr)(struct cec_adapter *adap, u8 logical_addr); + int (*adap_transmit)(struct cec_adapter *adap, u8 attempts, + u32 signal_free_time, struct cec_msg *msg); + void (\*adap_log_status)(struct cec_adapter *adap); - /* High-level callbacks */ - ... -}; + /* High-level callbacks */ + ... + }; The three low-level ops deal with various aspects of controlling the CEC adapter hardware: @@ -102,6 +118,7 @@ hardware: To enable/disable the hardware: +.. c:function:: int (*adap_enable)(struct cec_adapter *adap, bool enable); This callback enables or disables the CEC hardware. Enabling the CEC hardware @@ -115,6 +132,7 @@ Note that adap_enable must return 0 if enable is false. To enable/disable the 'monitor all' mode: +.. c:function:: int (*adap_monitor_all_enable)(struct cec_adapter *adap, bool enable); If enabled, then the adapter should be put in a mode to also monitor messages @@ -127,6 +145,7 @@ Note that adap_monitor_all_enable must return 0 if enable is false. To program a new logical address: +.. c:function:: int (*adap_log_addr)(struct cec_adapter *adap, u8 logical_addr); If logical_addr == CEC_LOG_ADDR_INVALID then all programmed logical addresses @@ -140,6 +159,7 @@ Note that adap_log_addr must return 0 if logical_addr is CEC_LOG_ADDR_INVALID. To transmit a new message: +.. c:function:: int (*adap_transmit)(struct cec_adapter *adap, u8 attempts, u32 signal_free_time, struct cec_msg *msg); @@ -158,6 +178,7 @@ microseconds (one data bit period is 2.4 ms). To log the current CEC hardware status: +.. c:function:: void (*adap_status)(struct cec_adapter *adap, struct seq_file *file); This optional callback can be used to show the status of the CEC hardware. @@ -169,29 +190,41 @@ driven) by calling into the framework in the following situations: When a transmit finished (successfully or otherwise): -void cec_transmit_done(struct cec_adapter *adap, u8 status, u8 arb_lost_cnt, +.. c:function:: + void cec_transmit_done(struct cec_adapter *adap, u8 status, u8 arb_lost_cnt, u8 nack_cnt, u8 low_drive_cnt, u8 error_cnt); The status can be one of: -CEC_TX_STATUS_OK: the transmit was successful. -CEC_TX_STATUS_ARB_LOST: arbitration was lost: another CEC initiator -took control of the CEC line and you lost the arbitration. -CEC_TX_STATUS_NACK: the message was nacked (for a directed message) or -acked (for a broadcast message). A retransmission is needed. -CEC_TX_STATUS_LOW_DRIVE: low drive was detected on the CEC bus. This -indicates that a follower detected an error on the bus and requested a -retransmission. -CEC_TX_STATUS_ERROR: some unspecified error occurred: this can be one of -the previous two if the hardware cannot differentiate or something else -entirely. -CEC_TX_STATUS_MAX_RETRIES: could not transmit the message after -trying multiple times. Should only be set by the driver if it has hardware -support for retrying messages. If set, then the framework assumes that it -doesn't have to make another attempt to transmit the message since the -hardware did that already. - -The *_cnt arguments are the number of error conditions that were seen. +CEC_TX_STATUS_OK: + the transmit was successful. + +CEC_TX_STATUS_ARB_LOST: + arbitration was lost: another CEC initiator + took control of the CEC line and you lost the arbitration. + +CEC_TX_STATUS_NACK: + the message was nacked (for a directed message) or + acked (for a broadcast message). A retransmission is needed. + +CEC_TX_STATUS_LOW_DRIVE: + low drive was detected on the CEC bus. This indicates that + a follower detected an error on the bus and requested a + retransmission. + +CEC_TX_STATUS_ERROR: + some unspecified error occurred: this can be one of + the previous two if the hardware cannot differentiate or something + else entirely. + +CEC_TX_STATUS_MAX_RETRIES: + could not transmit the message after trying multiple times. + Should only be set by the driver if it has hardware support for + retrying messages. If set, then the framework assumes that it + doesn't have to make another attempt to transmit the message + since the hardware did that already. + +The \*_cnt arguments are the number of error conditions that were seen. This may be 0 if no information is available. Drivers that do not support hardware retry can just set the counter corresponding to the transmit error to 1, if the hardware does support retry then either set these counters to @@ -200,7 +233,8 @@ times, or fill in the correct values as reported by the hardware. When a CEC message was received: -void cec_received_msg(struct cec_adapter *adap, struct cec_msg *msg); +.. c:function:: + void cec_received_msg(struct cec_adapter *adap, struct cec_msg *msg); Speaks for itself. @@ -210,17 +244,20 @@ Implementing the High-Level CEC Adapter The low-level operations drive the hardware, the high-level operations are CEC protocol driven. The following high-level callbacks are available: -struct cec_adap_ops { - /* Low-level callbacks */ - ... +.. code-block:: none - /* High-level CEC message callback */ - int (*received)(struct cec_adapter *adap, struct cec_msg *msg); -}; + struct cec_adap_ops { + /\* Low-level callbacks \*/ + ... + + /\* High-level CEC message callback \*/ + int (\*received)(struct cec_adapter \*adap, struct cec_msg \*msg); + }; The received() callback allows the driver to optionally handle a newly received CEC message +.. c:function:: int (*received)(struct cec_adapter *adap, struct cec_msg *msg); If the driver wants to process a CEC message, then it can implement this @@ -234,13 +271,16 @@ CEC framework functions CEC Adapter drivers can call the following CEC framework functions: -int cec_transmit_msg(struct cec_adapter *adap, struct cec_msg *msg, - bool block); +.. c:function:: + int cec_transmit_msg(struct cec_adapter *adap, struct cec_msg *msg, + bool block); Transmit a CEC message. If block is true, then wait until the message has been transmitted, otherwise just queue it and return. -void cec_s_phys_addr(struct cec_adapter *adap, u16 phys_addr, bool block); +.. c:function:: + void cec_s_phys_addr(struct cec_adapter *adap, u16 phys_addr, + bool block); Change the physical address. This function will set adap->phys_addr and send an event if it has changed. If cec_s_log_addrs() has been called and @@ -254,8 +294,9 @@ then the CEC adapter will be disabled. If you change a valid physical address to another valid physical address, then this function will first set the address to CEC_PHYS_ADDR_INVALID before enabling the new physical address. -int cec_s_log_addrs(struct cec_adapter *adap, - struct cec_log_addrs *log_addrs, bool block); +.. c:function:: + int cec_s_log_addrs(struct cec_adapter *adap, + struct cec_log_addrs *log_addrs, bool block); Claim the CEC logical addresses. Should never be called if CEC_CAP_LOG_ADDRS is set. If block is true, then wait until the logical addresses have been diff --git a/Documentation/media/kapi/v4l2-dev.rst b/Documentation/media/kapi/v4l2-dev.rst index cdfcf0bc78be..429883b2f6ef 100644 --- a/Documentation/media/kapi/v4l2-dev.rst +++ b/Documentation/media/kapi/v4l2-dev.rst @@ -262,6 +262,7 @@ file operations. It is a bitmask and the following bits can be set: +.. tabularcolumns:: |p{5ex}|L| ===== ================================================================ Mask Description diff --git a/Documentation/media/media_api_files/typical_media_device.pdf b/Documentation/media/media_api_files/typical_media_device.pdf Binary files differindex eb3045813815..d000d802b20f 100644 --- a/Documentation/media/media_api_files/typical_media_device.pdf +++ b/Documentation/media/media_api_files/typical_media_device.pdf diff --git a/Documentation/media/media_kapi.rst b/Documentation/media/media_kapi.rst index b71e8e8048ca..f282ca270369 100644 --- a/Documentation/media/media_kapi.rst +++ b/Documentation/media/media_kapi.rst @@ -32,3 +32,4 @@ For more details see the file COPYING in the source distribution of Linux. kapi/dtv-core kapi/rc-core kapi/mc-core + kapi/cec-core diff --git a/Documentation/media/uapi/cec/cec-func-close.rst b/Documentation/media/uapi/cec/cec-func-close.rst index bb94e4358910..bdbb9e545ae4 100644 --- a/Documentation/media/uapi/cec/cec-func-close.rst +++ b/Documentation/media/uapi/cec/cec-func-close.rst @@ -32,7 +32,9 @@ Arguments Description =========== -.. note:: This documents the proposed CEC API. This API is not yet finalized +.. 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 diff --git a/Documentation/media/uapi/cec/cec-func-ioctl.rst b/Documentation/media/uapi/cec/cec-func-ioctl.rst index d0279e6d2734..170bdd56211e 100644 --- a/Documentation/media/uapi/cec/cec-func-ioctl.rst +++ b/Documentation/media/uapi/cec/cec-func-ioctl.rst @@ -38,7 +38,9 @@ Arguments Description =========== -.. note:: This documents the proposed CEC API. This API is not yet finalized +.. note:: + + This documents the proposed CEC API. This API is not yet finalized and is currently only available as a staging kernel module. The :c:func:`ioctl()` function manipulates cec device parameters. The diff --git a/Documentation/media/uapi/cec/cec-func-open.rst b/Documentation/media/uapi/cec/cec-func-open.rst index 7c0f981a6e07..3d55e9f2f64d 100644 --- a/Documentation/media/uapi/cec/cec-func-open.rst +++ b/Documentation/media/uapi/cec/cec-func-open.rst @@ -45,7 +45,9 @@ Arguments Description =========== -.. note:: This documents the proposed CEC API. This API is not yet finalized +.. 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 :c:func:`open()` with the diff --git a/Documentation/media/uapi/cec/cec-func-poll.rst b/Documentation/media/uapi/cec/cec-func-poll.rst index fcab65f6d6b8..5d1e0525056e 100644 --- a/Documentation/media/uapi/cec/cec-func-poll.rst +++ b/Documentation/media/uapi/cec/cec-func-poll.rst @@ -29,7 +29,9 @@ Arguments Description =========== -.. note:: This documents the proposed CEC API. This API is not yet finalized +.. 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 :c:func:`poll()` function applications can wait for CEC diff --git a/Documentation/media/uapi/cec/cec-intro.rst b/Documentation/media/uapi/cec/cec-intro.rst index afa76f26fdde..4a19ea5323a9 100644 --- a/Documentation/media/uapi/cec/cec-intro.rst +++ b/Documentation/media/uapi/cec/cec-intro.rst @@ -3,7 +3,9 @@ Introduction ============ -.. note:: This documents the proposed CEC API. This API is not yet finalized +.. 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 diff --git a/Documentation/media/uapi/cec/cec-ioc-adap-g-caps.rst b/Documentation/media/uapi/cec/cec-ioc-adap-g-caps.rst index eaedc63186e6..89ba813e577c 100644 --- a/Documentation/media/uapi/cec/cec-ioc-adap-g-caps.rst +++ b/Documentation/media/uapi/cec/cec-ioc-adap-g-caps.rst @@ -31,7 +31,9 @@ Arguments Description =========== -.. note:: This documents the proposed CEC API. This API is not yet finalized +.. 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 :ref:`ioctl CEC_ADAP_G_CAPS <CEC_ADAP_G_CAPS>`. To query @@ -39,6 +41,7 @@ device information, applications call the ioctl with a pointer to a struct :ref:`cec_caps <cec-caps>`. The driver fills the structure and returns the information to the application. The ioctl never fails. +.. tabularcolumns:: |p{1.2cm}|p{2.5cm}|p{13.8cm}| .. _cec-caps: @@ -84,6 +87,7 @@ returns the information to the application. The ioctl never fails. macro. +.. tabularcolumns:: |p{4.4cm}|p{2.5cm}|p{10.6cm}| .. _cec-capabilities: diff --git a/Documentation/media/uapi/cec/cec-ioc-adap-g-log-addrs.rst b/Documentation/media/uapi/cec/cec-ioc-adap-g-log-addrs.rst index 04ee90099676..42f8e856ec55 100644 --- a/Documentation/media/uapi/cec/cec-ioc-adap-g-log-addrs.rst +++ b/Documentation/media/uapi/cec/cec-ioc-adap-g-log-addrs.rst @@ -35,7 +35,9 @@ Arguments Description =========== -.. note:: This documents the proposed CEC API. This API is not yet finalized +.. 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 @@ -64,9 +66,12 @@ logical addresses are claimed or cleared. Attempting to call :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>` when logical address types are already defined will return with error ``EBUSY``. +.. tabularcolumns:: |p{1.0cm}|p{7.5cm}|p{8.0cm}| .. _cec-log-addrs: +.. cssclass:: longtable + .. flat-table:: struct cec_log_addrs :header-rows: 0 :stub-columns: 0 @@ -201,6 +206,8 @@ logical address types are already defined will return with error ``EBUSY``. give the CEC framework more information about the device type, even though the framework won't use it directly in the CEC message. +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. _cec-versions: .. flat-table:: CEC Versions @@ -234,6 +241,7 @@ logical address types are already defined will return with error ``EBUSY``. - CEC version according to the HDMI 2.0 standard. +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| .. _cec-prim-dev-types: @@ -300,6 +308,7 @@ logical address types are already defined will return with error ``EBUSY``. - Use for a video processor device. +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| .. _cec-log-addr-types: @@ -369,6 +378,8 @@ logical address types are already defined will return with error ``EBUSY``. +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. _cec-all-dev-types-flags: .. flat-table:: CEC All Device Types Flags diff --git a/Documentation/media/uapi/cec/cec-ioc-adap-g-phys-addr.rst b/Documentation/media/uapi/cec/cec-ioc-adap-g-phys-addr.rst index b955d044b334..c50aa3ee1e0d 100644 --- a/Documentation/media/uapi/cec/cec-ioc-adap-g-phys-addr.rst +++ b/Documentation/media/uapi/cec/cec-ioc-adap-g-phys-addr.rst @@ -34,7 +34,9 @@ Arguments Description =========== -.. note:: This documents the proposed CEC API. This API is not yet finalized +.. 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 diff --git a/Documentation/media/uapi/cec/cec-ioc-dqevent.rst b/Documentation/media/uapi/cec/cec-ioc-dqevent.rst index 4e12e6cd88ee..ca9ef597527e 100644 --- a/Documentation/media/uapi/cec/cec-ioc-dqevent.rst +++ b/Documentation/media/uapi/cec/cec-ioc-dqevent.rst @@ -33,7 +33,9 @@ Arguments Description =========== -.. note:: This documents the proposed CEC API. This API is not yet finalized +.. 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 @@ -50,6 +52,7 @@ two :ref:`CEC_EVENT_STATE_CHANGE <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. +.. tabularcolumns:: |p{1.2cm}|p{2.9cm}|p{13.4cm}| .. _cec-event-state-change_s: @@ -76,6 +79,7 @@ it is guaranteed that the state did change in between the two events. - The current set of claimed logical addresses. +.. tabularcolumns:: |p{1.0cm}|p{2.0cm}|p{14.5cm}| .. _cec-event-lost-msgs_s: @@ -102,6 +106,7 @@ it is guaranteed that the state did change in between the two events. this is more than enough. +.. tabularcolumns:: |p{1.0cm}|p{4.2cm}|p{2.5cm}|p{8.8cm}| .. _cec-event: @@ -117,21 +122,18 @@ it is guaranteed that the state did change in between the two events. - ``ts`` - - Timestamp of the event in ns. + - :cspan:`1` Timestamp of the event in ns. + The timestamp has been taken from the ``CLOCK_MONOTONIC`` clock. To access the same clock from userspace use :c:func:`clock_gettime(2)`. - - - - .. row 2 - __u32 - ``event`` - - The CEC event type, see :ref:`cec-events`. - - - + - :cspan:`1` The CEC event type, see :ref:`cec-events`. - .. row 3 @@ -139,9 +141,7 @@ it is guaranteed that the state did change in between the two events. - ``flags`` - - Event flags, see :ref:`cec-event-flags`. - - - + - :cspan:`1` Event flags, see :ref:`cec-event-flags`. - .. row 4 @@ -173,6 +173,7 @@ it is guaranteed that the state did change in between the two events. event. +.. tabularcolumns:: |p{5.6cm}|p{0.9cm}|p{11.0cm}| .. _cec-events: @@ -202,6 +203,7 @@ it is guaranteed that the state did change in between the two events. application didn't dequeue CEC messages fast enough. +.. tabularcolumns:: |p{6.0cm}|p{0.6cm}|p{10.9cm}| .. _cec-event-flags: diff --git a/Documentation/media/uapi/cec/cec-ioc-g-mode.rst b/Documentation/media/uapi/cec/cec-ioc-g-mode.rst index f0084d892db6..b75ed7057f7c 100644 --- a/Documentation/media/uapi/cec/cec-ioc-g-mode.rst +++ b/Documentation/media/uapi/cec/cec-ioc-g-mode.rst @@ -30,7 +30,9 @@ Arguments Description =========== -.. note:: This documents the proposed CEC API. This API is not yet finalized +.. 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 :ref:`CEC_TRANSMIT`, but in order to prevent @@ -71,6 +73,7 @@ always call :ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>`. Available initiator modes are: +.. tabularcolumns:: |p{5.6cm}|p{0.9cm}|p{11.0cm}| .. _cec-mode-initiator_e: @@ -114,6 +117,7 @@ Available initiator modes are: Available follower modes are: +.. tabularcolumns:: |p{6.6cm}|p{0.9cm}|p{10.0cm}| .. _cec-mode-follower_e: @@ -206,6 +210,7 @@ Available follower modes are: Core message processing details: +.. tabularcolumns:: |p{6.6cm}|p{10.9cm}| .. _cec-core-processing: diff --git a/Documentation/media/uapi/cec/cec-ioc-receive.rst b/Documentation/media/uapi/cec/cec-ioc-receive.rst index ae5a39ade45f..821562bc8c7a 100644 --- a/Documentation/media/uapi/cec/cec-ioc-receive.rst +++ b/Documentation/media/uapi/cec/cec-ioc-receive.rst @@ -33,7 +33,9 @@ Arguments Description =========== -.. note:: This documents the proposed CEC API. This API is not yet finalized +.. 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 @@ -71,8 +73,12 @@ checked against the received messages to find the corresponding transmit result. +.. tabularcolumns:: |p{1.0cm}|p{3.5cm}|p{13.0cm}| + .. _cec-msg: +.. cssclass:: longtable + .. flat-table:: struct cec_msg :header-rows: 0 :stub-columns: 0 @@ -247,6 +253,7 @@ result. valid if the :ref:`CEC_TX_STATUS_ERROR <CEC-TX-STATUS-ERROR>` status bit is set. +.. tabularcolumns:: |p{5.6cm}|p{0.9cm}|p{11.0cm}| .. _cec-tx-status: @@ -315,6 +322,7 @@ result. be set to explain which failures were seen. +.. tabularcolumns:: |p{5.6cm}|p{0.9cm}|p{11.0cm}| .. _cec-rx-status: diff --git a/Documentation/media/uapi/dvb/audio-fopen.rst b/Documentation/media/uapi/dvb/audio-fopen.rst index ec3b23aa79b3..3ef4fd62ffb6 100644 --- a/Documentation/media/uapi/dvb/audio-fopen.rst +++ b/Documentation/media/uapi/dvb/audio-fopen.rst @@ -80,6 +80,8 @@ AUDIO_GET_STATUS. All other call will return with an error code. Return Value ------------ +.. tabularcolumns:: |p{2.5cm}|p{15.0cm}| + .. flat-table:: :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/dvb/ca-fopen.rst b/Documentation/media/uapi/dvb/ca-fopen.rst index f284461cce20..9960fc76189c 100644 --- a/Documentation/media/uapi/dvb/ca-fopen.rst +++ b/Documentation/media/uapi/dvb/ca-fopen.rst @@ -79,6 +79,8 @@ the device in this mode will fail, and an error code will be returned. Return Value ------------ +.. tabularcolumns:: |p{2.5cm}|p{15.0cm}| + .. flat-table:: :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/dvb/dmx-fread.rst b/Documentation/media/uapi/dvb/dmx-fread.rst index d25b19e4f696..266c9ca259c9 100644 --- a/Documentation/media/uapi/dvb/dmx-fread.rst +++ b/Documentation/media/uapi/dvb/dmx-fread.rst @@ -53,10 +53,11 @@ 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. - Return Value ------------ +.. tabularcolumns:: |p{2.5cm}|p{15.0cm}| + .. flat-table:: :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/dvb/dmx-fwrite.rst b/Documentation/media/uapi/dvb/dmx-fwrite.rst index 9efd81a1b5c8..3d76470bef60 100644 --- a/Documentation/media/uapi/dvb/dmx-fwrite.rst +++ b/Documentation/media/uapi/dvb/dmx-fwrite.rst @@ -59,6 +59,8 @@ The amount of data to be transferred is implied by count. Return Value ------------ +.. tabularcolumns:: |p{2.5cm}|p{15.0cm}| + .. flat-table:: :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/dvb/dmx-set-pes-filter.rst b/Documentation/media/uapi/dvb/dmx-set-pes-filter.rst index addc321011ce..d71db779b6fd 100644 --- a/Documentation/media/uapi/dvb/dmx-set-pes-filter.rst +++ b/Documentation/media/uapi/dvb/dmx-set-pes-filter.rst @@ -61,7 +61,7 @@ On success 0 is returned, on error -1 and the ``errno`` variable is set appropriately. The generic error codes are described at the :ref:`Generic Error Codes <gen-errors>` chapter. - +.. tabularcolumns:: |p{2.5cm}|p{15.0cm}| .. flat-table:: :header-rows: 0 diff --git a/Documentation/media/uapi/dvb/dmx-start.rst b/Documentation/media/uapi/dvb/dmx-start.rst index 9835d1e78400..959b5eee2647 100644 --- a/Documentation/media/uapi/dvb/dmx-start.rst +++ b/Documentation/media/uapi/dvb/dmx-start.rst @@ -53,7 +53,7 @@ On success 0 is returned, on error -1 and the ``errno`` variable is set appropriately. The generic error codes are described at the :ref:`Generic Error Codes <gen-errors>` chapter. - +.. tabularcolumns:: |p{2.5cm}|p{15.0cm}| .. flat-table:: :header-rows: 0 diff --git a/Documentation/media/uapi/dvb/dmx_types.rst b/Documentation/media/uapi/dvb/dmx_types.rst index 7a8900af2680..efd564035958 100644 --- a/Documentation/media/uapi/dvb/dmx_types.rst +++ b/Documentation/media/uapi/dvb/dmx_types.rst @@ -12,6 +12,7 @@ Demux Data Types Output for the demux ==================== +.. tabularcolumns:: |p{5.0cm}|p{12.5cm}| .. _dmx-output: diff --git a/Documentation/media/uapi/dvb/dvb-fe-read-status.rst b/Documentation/media/uapi/dvb/dvb-fe-read-status.rst index fcffaa7e1463..76c20612b274 100644 --- a/Documentation/media/uapi/dvb/dvb-fe-read-status.rst +++ b/Documentation/media/uapi/dvb/dvb-fe-read-status.rst @@ -17,7 +17,9 @@ using :ref:`FE_READ_STATUS`. Signal statistics are provided via :ref:`FE_GET_PROPERTY`. -.. note:: Most statistics require the demodulator to be fully locked +.. note:: + + Most statistics require the demodulator to be fully locked (e. g. with FE_HAS_LOCK bit set). See :ref:`Frontend statistics indicators <frontend-stat-properties>` for more details. diff --git a/Documentation/media/uapi/dvb/dvbapi.rst b/Documentation/media/uapi/dvb/dvbapi.rst index 48e61aba741e..37680137e3f2 100644 --- a/Documentation/media/uapi/dvb/dvbapi.rst +++ b/Documentation/media/uapi/dvb/dvbapi.rst @@ -8,7 +8,9 @@ Part II - Digital TV API ######################## -.. note:: This API is also known as **DVB API**, although it is generic +.. note:: + + This API is also known as **DVB API**, although it is generic enough to support all digital TV standards. **Version 5.10** diff --git a/Documentation/media/uapi/dvb/dvbproperty.rst b/Documentation/media/uapi/dvb/dvbproperty.rst index cd0511b06c2c..a5a859a45381 100644 --- a/Documentation/media/uapi/dvb/dvbproperty.rst +++ b/Documentation/media/uapi/dvb/dvbproperty.rst @@ -20,7 +20,9 @@ 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 +.. note:: + + On Linux DVB API version 3, setting a frontend were done via :ref:`struct dvb_frontend_parameters <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 diff --git a/Documentation/media/uapi/dvb/examples.rst b/Documentation/media/uapi/dvb/examples.rst index bf0a8617de92..1a94966312c0 100644 --- a/Documentation/media/uapi/dvb/examples.rst +++ b/Documentation/media/uapi/dvb/examples.rst @@ -9,7 +9,9 @@ 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 +.. note:: + + This section is out of date, and the code below won't even compile. Please refer to the `libdvbv5 <https://linuxtv.org/docs/libdvbv5/index.html>`__ for updated/recommended examples. diff --git a/Documentation/media/uapi/dvb/fe-diseqc-recv-slave-reply.rst b/Documentation/media/uapi/dvb/fe-diseqc-recv-slave-reply.rst index 7bd02ac7bff4..7b32566b77a3 100644 --- a/Documentation/media/uapi/dvb/fe-diseqc-recv-slave-reply.rst +++ b/Documentation/media/uapi/dvb/fe-diseqc-recv-slave-reply.rst @@ -42,6 +42,8 @@ Receives reply from a DiSEqC 2.0 command. struct dvb_diseqc_slave_reply ----------------------------- +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: struct dvb_diseqc_slave_reply :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/dvb/fe-diseqc-send-master-cmd.rst b/Documentation/media/uapi/dvb/fe-diseqc-send-master-cmd.rst index 58a5e6ac10bd..865914bf4efe 100644 --- a/Documentation/media/uapi/dvb/fe-diseqc-send-master-cmd.rst +++ b/Documentation/media/uapi/dvb/fe-diseqc-send-master-cmd.rst @@ -42,6 +42,8 @@ Sends a DiSEqC command to the antenna subsystem. struct dvb_diseqc_master_cmd ============================ +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: struct dvb_diseqc_master_cmd :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/dvb/fe-get-info.rst b/Documentation/media/uapi/dvb/fe-get-info.rst index bb6c32e47ce8..87ff3f62050d 100644 --- a/Documentation/media/uapi/dvb/fe-get-info.rst +++ b/Documentation/media/uapi/dvb/fe-get-info.rst @@ -47,6 +47,8 @@ returns an error. struct dvb_frontend_info ======================== +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: struct dvb_frontend_info :header-rows: 0 :stub-columns: 0 @@ -144,7 +146,9 @@ struct dvb_frontend_info - Capabilities supported by the frontend -.. note:: The frequencies are specified in Hz for Terrestrial and Cable +.. note:: + + The frequencies are specified in Hz for Terrestrial and Cable systems. They're specified in kHz for Satellite systems @@ -156,6 +160,7 @@ frontend capabilities Capabilities describe what a frontend can do. Some capabilities are supported only on some specific frontend types. +.. tabularcolumns:: |p{6.5cm}|p{11.0cm}| .. _fe-caps: diff --git a/Documentation/media/uapi/dvb/fe-read-status.rst b/Documentation/media/uapi/dvb/fe-read-status.rst index 624ed9d06488..def8160d6807 100644 --- a/Documentation/media/uapi/dvb/fe-read-status.rst +++ b/Documentation/media/uapi/dvb/fe-read-status.rst @@ -40,7 +40,9 @@ 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 +.. 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. @@ -54,6 +56,7 @@ The fe_status parameter is used to indicate the current state and/or state changes of the frontend hardware. It is produced using the enum :ref:`fe_status <fe-status>` values on a bitmask +.. tabularcolumns:: |p{3.5cm}|p{14.0cm}| .. _fe-status: diff --git a/Documentation/media/uapi/dvb/fe-type-t.rst b/Documentation/media/uapi/dvb/fe-type-t.rst index 8ca762b42e4d..fa377fe9e104 100644 --- a/Documentation/media/uapi/dvb/fe-type-t.rst +++ b/Documentation/media/uapi/dvb/fe-type-t.rst @@ -13,6 +13,8 @@ fe_type_t type, defined as: .. _fe-type: +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. flat-table:: Frontend types :header-rows: 1 :stub-columns: 0 diff --git a/Documentation/media/uapi/dvb/fe_property_parameters.rst b/Documentation/media/uapi/dvb/fe_property_parameters.rst index f776d62523da..304ac1a3c2ff 100644 --- a/Documentation/media/uapi/dvb/fe_property_parameters.rst +++ b/Documentation/media/uapi/dvb/fe_property_parameters.rst @@ -1005,10 +1005,9 @@ 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[A-C]_SEGMENT_COUNT`` - .. _isdbt-layer_seg-cnt-table: -.. flat-table:: +.. flat-table:: Truth table for ISDB-T Sound Broadcasting :header-rows: 0 :stub-columns: 0 @@ -1101,7 +1100,7 @@ TMCC-structure, as shown in the table below. .. _isdbt-layer-interleaving-table: -.. flat-table:: +.. flat-table:: ISDB-T time interleaving modes :header-rows: 0 :stub-columns: 0 @@ -1234,6 +1233,7 @@ Reed Solomon (RS) frame mode. Possible values are: +.. tabularcolumns:: |p{5.0cm}|p{12.5cm}| .. _atscmh-rs-frame-mode: @@ -1395,6 +1395,7 @@ Series Concatenated Convolutional Code Block Mode. Possible values are: +.. tabularcolumns:: |p{4.5cm}|p{13.0cm}| .. _atscmh-sccc-block-mode: @@ -1687,6 +1688,7 @@ on OFTM-based standards, e. g. DVB-T/T2, ISDB-T, DTMB enum fe_transmit_mode: Number of carriers per channel ----------------------------------------------------- +.. tabularcolumns:: |p{5.0cm}|p{12.5cm}| .. _fe-transmit-mode: diff --git a/Documentation/media/uapi/dvb/frontend.rst b/Documentation/media/uapi/dvb/frontend.rst index 48c5cd487ce7..e051a9012540 100644 --- a/Documentation/media/uapi/dvb/frontend.rst +++ b/Documentation/media/uapi/dvb/frontend.rst @@ -29,7 +29,9 @@ 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 +.. 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 diff --git a/Documentation/media/uapi/dvb/video-fopen.rst b/Documentation/media/uapi/dvb/video-fopen.rst index 9e5471557b83..9addca95516e 100644 --- a/Documentation/media/uapi/dvb/video-fopen.rst +++ b/Documentation/media/uapi/dvb/video-fopen.rst @@ -82,6 +82,8 @@ return an error code. Return Value ------------ +.. tabularcolumns:: |p{2.5cm}|p{15.0cm}| + .. flat-table:: :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/gen-errors.rst b/Documentation/media/uapi/gen-errors.rst index d6b0cfd00a3f..6e983b9880fc 100644 --- a/Documentation/media/uapi/gen-errors.rst +++ b/Documentation/media/uapi/gen-errors.rst @@ -9,6 +9,8 @@ Generic Error Codes .. _gen-errors: +.. tabularcolumns:: |p{2.5cm}|p{15.0cm}| + .. flat-table:: Generic error codes :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/mediactl/media-ioc-device-info.rst b/Documentation/media/uapi/mediactl/media-ioc-device-info.rst index 467d82cbb81e..567f5515a791 100644 --- a/Documentation/media/uapi/mediactl/media-ioc-device-info.rst +++ b/Documentation/media/uapi/mediactl/media-ioc-device-info.rst @@ -42,6 +42,8 @@ ioctl never fails. .. _media-device-info: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: struct media_device_info :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/mediactl/media-ioc-enum-entities.rst b/Documentation/media/uapi/mediactl/media-ioc-enum-entities.rst index 12d4b25d5b94..a51c4cc9f6d3 100644 --- a/Documentation/media/uapi/mediactl/media-ioc-enum-entities.rst +++ b/Documentation/media/uapi/mediactl/media-ioc-enum-entities.rst @@ -53,6 +53,8 @@ id's until they get an error. .. _media-entity-desc: +.. tabularcolumns:: |p{1.5cm}|p{1.5cm}|p{1.5cm}|p{1.5cm}|p{11.5cm}| + .. flat-table:: struct media_entity_desc :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/mediactl/media-ioc-enum-links.rst b/Documentation/media/uapi/mediactl/media-ioc-enum-links.rst index 87443b1ce42d..f4334f5765c6 100644 --- a/Documentation/media/uapi/mediactl/media-ioc-enum-links.rst +++ b/Documentation/media/uapi/mediactl/media-ioc-enum-links.rst @@ -57,6 +57,8 @@ returned during the enumeration process. .. _media-links-enum: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: struct media_links_enum :header-rows: 0 :stub-columns: 0 @@ -93,6 +95,8 @@ returned during the enumeration process. .. _media-pad-desc: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: struct media_pad_desc :header-rows: 0 :stub-columns: 0 @@ -127,6 +131,8 @@ returned during the enumeration process. .. _media-link-desc: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: struct media_link_desc :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/mediactl/media-ioc-g-topology.rst b/Documentation/media/uapi/mediactl/media-ioc-g-topology.rst index 2e382cc7762c..c836d64df03b 100644 --- a/Documentation/media/uapi/mediactl/media-ioc-g-topology.rst +++ b/Documentation/media/uapi/mediactl/media-ioc-g-topology.rst @@ -48,6 +48,7 @@ other values untouched. If the ``topology_version`` remains the same, the ioctl should fill the desired arrays with the media graph elements. +.. tabularcolumns:: |p{1.6cm}|p{3.2cm}|p{12.7cm}| .. _media-v2-topology: @@ -142,6 +143,7 @@ desired arrays with the media graph elements. won't store the links. It will just update ``num_links`` +.. tabularcolumns:: |p{1.6cm}|p{3.2cm}|p{12.7cm}| .. _media-v2-entity: @@ -185,6 +187,7 @@ desired arrays with the media graph elements. this array to zero. +.. tabularcolumns:: |p{1.6cm}|p{3.2cm}|p{12.7cm}| .. _media-v2-interface: @@ -236,6 +239,7 @@ desired arrays with the media graph elements. :ref:`media-v2-intf-devnode` for details.. +.. tabularcolumns:: |p{1.6cm}|p{3.2cm}|p{12.7cm}| .. _media-v2-intf-devnode: @@ -262,6 +266,7 @@ desired arrays with the media graph elements. - Device node minor number. +.. tabularcolumns:: |p{1.6cm}|p{3.2cm}|p{12.7cm}| .. _media-v2-pad: @@ -305,6 +310,7 @@ desired arrays with the media graph elements. this array to zero. +.. tabularcolumns:: |p{1.6cm}|p{3.2cm}|p{12.7cm}| .. _media-v2-link: diff --git a/Documentation/media/uapi/mediactl/media-types.rst b/Documentation/media/uapi/mediactl/media-types.rst index c77717b236ce..20f99301bfdb 100644 --- a/Documentation/media/uapi/mediactl/media-types.rst +++ b/Documentation/media/uapi/mediactl/media-types.rst @@ -5,9 +5,12 @@ Types and flags used to represent the media graph elements ========================================================== +.. tabularcolumns:: |p{8.0cm}|p{10.5cm}| .. _media-entity-type: +.. cssclass:: longtable + .. flat-table:: Media entity types :header-rows: 0 :stub-columns: 0 @@ -15,10 +18,12 @@ Types and flags used to represent the media graph elements - .. row 1 - .. _MEDIA-ENT-F-UNKNOWN: + .. _MEDIA-ENT-F-UNKNOWN: .. _MEDIA-ENT-F-V4L2-SUBDEV-UNKNOWN: - - ``MEDIA_ENT_F_UNKNOWN`` and ``MEDIA_ENT_F_V4L2_SUBDEV_UNKNOWN`` + - ``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 @@ -294,6 +299,8 @@ Types and flags used to represent the media graph elements its source pad. +.. tabularcolumns:: |p{5.5cm}|p{12.0cm}| + .. _media-entity-flag: .. flat-table:: Media entity flags @@ -319,6 +326,7 @@ Types and flags used to represent the media graph elements - The entity represents a data conector +.. tabularcolumns:: |p{6.5cm}|p{6.0cm}|p{5.0cm}| .. _media-intf-type: @@ -508,6 +516,7 @@ Types and flags used to represent the media graph elements - typically, /dev/snd/timer +.. tabularcolumns:: |p{5.5cm}|p{12.0cm}| .. _media-pad-flag: @@ -551,6 +560,7 @@ Types and flags used to represent the media graph elements One and only one of ``MEDIA_PAD_FL_SINK`` and ``MEDIA_PAD_FL_SOURCE`` must be set for every pad. +.. tabularcolumns:: |p{5.5cm}|p{12.0cm}| .. _media-link-flag: diff --git a/Documentation/media/uapi/rc/lirc-set-wideband-receiver.rst b/Documentation/media/uapi/rc/lirc-set-wideband-receiver.rst index cffb01fd1042..b9d582fd7df1 100644 --- a/Documentation/media/uapi/rc/lirc-set-wideband-receiver.rst +++ b/Documentation/media/uapi/rc/lirc-set-wideband-receiver.rst @@ -42,7 +42,9 @@ 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 +.. 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. diff --git a/Documentation/media/uapi/rc/rc-tables.rst b/Documentation/media/uapi/rc/rc-tables.rst index 0bb16c4af27d..c8ae9479f842 100644 --- a/Documentation/media/uapi/rc/rc-tables.rst +++ b/Documentation/media/uapi/rc/rc-tables.rst @@ -25,6 +25,8 @@ the remote via /dev/input/event devices. .. _rc_standard_keymap: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: IR default keymapping :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/v4l/audio.rst b/Documentation/media/uapi/v4l/audio.rst index 4dd11345866c..b8059fb05372 100644 --- a/Documentation/media/uapi/v4l/audio.rst +++ b/Documentation/media/uapi/v4l/audio.rst @@ -37,7 +37,9 @@ The :ref:`VIDIOC_G_AUDIO <VIDIOC_G_AUDIO>` and :ref:`VIDIOC_G_AUDOUT <VIDIOC_G_AUDOUT>` ioctls report the current audio input and output, respectively. -.. note:: Note that, unlike :ref:`VIDIOC_G_INPUT <VIDIOC_G_INPUT>` and +.. note:: + + Note that, unlike :ref:`VIDIOC_G_INPUT <VIDIOC_G_INPUT>` and :ref:`VIDIOC_G_OUTPUT <VIDIOC_G_OUTPUT>` these ioctls return a structure as :ref:`VIDIOC_ENUMAUDIO` and :ref:`VIDIOC_ENUMAUDOUT <VIDIOC_ENUMAUDOUT>` do, not just an index. diff --git a/Documentation/media/uapi/v4l/buffer.rst b/Documentation/media/uapi/v4l/buffer.rst index 5deb4a46f992..7bab30b59eae 100644 --- a/Documentation/media/uapi/v4l/buffer.rst +++ b/Documentation/media/uapi/v4l/buffer.rst @@ -39,10 +39,14 @@ buffer. struct v4l2_buffer ================== +.. tabularcolumns:: |p{2.8cm}|p{2.5cm}|p{1.3cm}|p{10.5cm}| + +.. cssclass:: longtable + .. flat-table:: struct v4l2_buffer :header-rows: 0 :stub-columns: 0 - :widths: 1 1 1 2 + :widths: 1 2 1 10 - .. row 1 @@ -166,12 +170,15 @@ struct v4l2_buffer output device because the application did not pass new data in time. - .. note:: This may count the frames received e.g. over USB, without + .. 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 :ref:`standard`. + - .. row 10 - __u32 @@ -279,6 +286,10 @@ struct v4l2_buffer struct v4l2_plane ================= +.. tabularcolumns:: |p{3.5cm}|p{3.5cm}|p{3.5cm}|p{7.0cm}| + +.. cssclass:: longtable + .. flat-table:: :header-rows: 0 :stub-columns: 0 @@ -299,7 +310,9 @@ struct v4l2_plane ``bytesused`` will be set to the size of the plane (see the ``length`` field of this struct) by the driver. - .. note:: Note that the actual image data starts at ``data_offset`` + .. note:: + + Note that the actual image data starts at ``data_offset`` which may not be 0. - .. row 2 @@ -371,7 +384,9 @@ struct v4l2_plane 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 + .. 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. @@ -392,10 +407,14 @@ struct v4l2_plane enum v4l2_buf_type ================== +.. cssclass:: longtable + +.. tabularcolumns:: |p{7.2cm}|p{0.6cm}|p{9.7cm}| + .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 3 1 4 + :widths: 4 1 9 - .. row 1 @@ -506,6 +525,10 @@ enum v4l2_buf_type Buffer Flags ============ +.. tabularcolumns:: |p{7.0cm}|p{2.2cm}|p{8.3cm}| + +.. cssclass:: longtable + .. flat-table:: :header-rows: 0 :stub-columns: 0 @@ -755,6 +778,8 @@ Buffer Flags enum v4l2_memory ================ +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. flat-table:: :header-rows: 0 :stub-columns: 0 @@ -809,6 +834,8 @@ The :ref:`struct v4l2_timecode <v4l2-timecode>` structure is designed to hold a struct v4l2_timecode -------------------- +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: :header-rows: 0 :stub-columns: 0 @@ -879,6 +906,8 @@ struct v4l2_timecode Timecode Types -------------- +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. flat-table:: :header-rows: 0 :stub-columns: 0 @@ -932,6 +961,8 @@ Timecode Types Timecode Flags -------------- +.. tabularcolumns:: |p{6.6cm}|p{1.4cm}|p{9.5cm}| + .. flat-table:: :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/v4l/control.rst b/Documentation/media/uapi/v4l/control.rst index 10ab53dd3163..e881cd1f30d6 100644 --- a/Documentation/media/uapi/v4l/control.rst +++ b/Documentation/media/uapi/v4l/control.rst @@ -191,10 +191,12 @@ Control IDs +.. tabularcolumns:: |p{5.5cm}|p{12cm}| + .. flat-table:: :header-rows: 0 :stub-columns: 0 - + :widths: 11 24 - .. row 1 diff --git a/Documentation/media/uapi/v4l/crop.rst b/Documentation/media/uapi/v4l/crop.rst index 0913822347af..4622884b06ea 100644 --- a/Documentation/media/uapi/v4l/crop.rst +++ b/Documentation/media/uapi/v4l/crop.rst @@ -15,7 +15,9 @@ 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. -.. note:: Despite their name, the :ref:`VIDIOC_CROPCAP <VIDIOC_CROPCAP>`, +.. note:: + + Despite their name, the :ref:`VIDIOC_CROPCAP <VIDIOC_CROPCAP>`, :ref:`VIDIOC_G_CROP <VIDIOC_G_CROP>` and :ref:`VIDIOC_S_CROP <VIDIOC_G_CROP>` ioctls apply to input as well as output devices. @@ -38,7 +40,9 @@ support scaling or the :ref:`VIDIOC_G_CROP <VIDIOC_G_CROP>` and :ref:`VIDIOC_S_CROP <VIDIOC_G_CROP>` ioctls. Their size (and position where applicable) will be fixed in this case. -.. note:: All capture and output devices must support the +.. note:: + + All capture and output devices must support the :ref:`VIDIOC_CROPCAP <VIDIOC_CROPCAP>` ioctl such that applications can determine if scaling takes place. @@ -144,7 +148,9 @@ 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. -.. note:: On the next two examples, a video capture device is assumed; +.. note:: + + On the next two examples, a video capture device is assumed; change ``V4L2_BUF_TYPE_VIDEO_CAPTURE`` for other types of device. Example: Resetting the cropping parameters diff --git a/Documentation/media/uapi/v4l/dev-codec.rst b/Documentation/media/uapi/v4l/dev-codec.rst index dfb20328e34d..d9f218449ddd 100644 --- a/Documentation/media/uapi/v4l/dev-codec.rst +++ b/Documentation/media/uapi/v4l/dev-codec.rst @@ -21,7 +21,9 @@ for both capture and output to start the codec. Video compression codecs use the MPEG controls to setup their codec parameters -.. note:: The MPEG controls actually support many more codecs than +.. note:: + + The MPEG controls actually support many more codecs than just MPEG. See :ref:`mpeg-controls`. Memory-to-memory devices can often be used as a shared resource: you can diff --git a/Documentation/media/uapi/v4l/dev-osd.rst b/Documentation/media/uapi/v4l/dev-osd.rst index fadda131f020..4e1ee79ec334 100644 --- a/Documentation/media/uapi/v4l/dev-osd.rst +++ b/Documentation/media/uapi/v4l/dev-osd.rst @@ -16,7 +16,9 @@ this interface, which borrows structures and ioctls of the The OSD function is accessible through the same character special file as the :ref:`Video Output <capture>` function. -.. note:: The default function of such a ``/dev/video`` device is video +.. note:: + + The default function of such a ``/dev/video`` device is video capturing or output. The OSD function is only available after calling the :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` ioctl. diff --git a/Documentation/media/uapi/v4l/dev-output.rst b/Documentation/media/uapi/v4l/dev-output.rst index 4f1123a0b40d..dfb8207c21cc 100644 --- a/Documentation/media/uapi/v4l/dev-output.rst +++ b/Documentation/media/uapi/v4l/dev-output.rst @@ -16,7 +16,7 @@ device special files named ``/dev/video`` and ``/dev/video0`` to ``/dev/video`` is typically a symbolic link to the preferred video device. -..note:: The same device file names are used also for video capture devices. +.. note:: The same device file names are used also for video capture devices. Querying Capabilities diff --git a/Documentation/media/uapi/v4l/dev-overlay.rst b/Documentation/media/uapi/v4l/dev-overlay.rst index 92b4471b0c6e..50e2d52fcae6 100644 --- a/Documentation/media/uapi/v4l/dev-overlay.rst +++ b/Documentation/media/uapi/v4l/dev-overlay.rst @@ -19,7 +19,9 @@ video into a window. Video overlay devices are accessed through the same character special files as :ref:`video capture <capture>` devices. -.. note:: The default function of a ``/dev/video`` device is video +.. note:: + + The default function of a ``/dev/video`` device is video capturing. The overlay function is only available after calling the :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` ioctl. @@ -236,10 +238,12 @@ exceeded are undefined. [#f3]_ :ref:`VIDIOC_S_FBUF <VIDIOC_G_FBUF>`, :ref:`framebuffer-flags`). - .. note:: This field was added in Linux 2.6.23, extending the - structure. However the :ref:`VIDIOC_[G|S|TRY]_FMT <VIDIOC_G_FMT>` - ioctls, which take a pointer to a :ref:`v4l2_format <v4l2-format>` - parent structure with padding bytes at the end, are not affected. +.. note:: + + This field was added in Linux 2.6.23, extending the + structure. However the :ref:`VIDIOC_[G|S|TRY]_FMT <VIDIOC_G_FMT>` + ioctls, which take a pointer to a :ref:`v4l2_format <v4l2-format>` + parent structure with padding bytes at the end, are not affected. .. _v4l2-clip: diff --git a/Documentation/media/uapi/v4l/dev-raw-vbi.rst b/Documentation/media/uapi/v4l/dev-raw-vbi.rst index d5a4b3530b69..3cf44869a425 100644 --- a/Documentation/media/uapi/v4l/dev-raw-vbi.rst +++ b/Documentation/media/uapi/v4l/dev-raw-vbi.rst @@ -99,9 +99,12 @@ VBI devices must implement both the :ref:`VIDIOC_G_FMT <VIDIOC_G_FMT>` and and always returns default parameters as :ref:`VIDIOC_G_FMT <VIDIOC_G_FMT>` does. :ref:`VIDIOC_TRY_FMT <VIDIOC_G_FMT>` is optional. +.. tabularcolumns:: |p{2.4cm}|p{4.4cm}|p{10.7cm}| .. _v4l2-vbi-format: +.. cssclass:: longtable + .. flat-table:: struct v4l2_vbi_format :header-rows: 0 :stub-columns: 0 @@ -194,10 +197,9 @@ and always returns default parameters as :ref:`VIDIOC_G_FMT <VIDIOC_G_FMT>` does 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 :ref:`vbi-525` and :ref:`vbi-625`, or a - field image covering lines of two fields, are invalid and shall - not be returned by the driver. + Both ``count`` values set to zero, or line numbers are outside the + bounds depicted\ [#f4]_, 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 @@ -224,6 +226,7 @@ and always returns default parameters as :ref:`VIDIOC_G_FMT <VIDIOC_G_FMT>` does applications must set it to zero. +.. tabularcolumns:: |p{4.0cm}|p{1.5cm}|p{12.0cm}| .. _vbifmt-flags: @@ -348,3 +351,6 @@ another process. 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. + +.. [#f4] + The valid values ar shown at :ref:`vbi-525` and :ref:`vbi-625`. diff --git a/Documentation/media/uapi/v4l/dev-raw-vbi_files/vbi_525.pdf b/Documentation/media/uapi/v4l/dev-raw-vbi_files/vbi_525.pdf Binary files differindex 9e72c25b208d..0bae28385dfa 100644 --- a/Documentation/media/uapi/v4l/dev-raw-vbi_files/vbi_525.pdf +++ b/Documentation/media/uapi/v4l/dev-raw-vbi_files/vbi_525.pdf diff --git a/Documentation/media/uapi/v4l/dev-raw-vbi_files/vbi_625.pdf b/Documentation/media/uapi/v4l/dev-raw-vbi_files/vbi_625.pdf Binary files differindex 765235e33a4d..bf29b95dcd08 100644 --- a/Documentation/media/uapi/v4l/dev-raw-vbi_files/vbi_625.pdf +++ b/Documentation/media/uapi/v4l/dev-raw-vbi_files/vbi_625.pdf diff --git a/Documentation/media/uapi/v4l/dev-rds.rst b/Documentation/media/uapi/v4l/dev-rds.rst index cd6ad63cb90b..841761a3ea59 100644 --- a/Documentation/media/uapi/v4l/dev-rds.rst +++ b/Documentation/media/uapi/v4l/dev-rds.rst @@ -14,7 +14,9 @@ at devices capable of receiving and/or transmitting RDS information. For more information see the core RDS standard :ref:`iec62106` and the RBDS standard :ref:`nrsc4`. -.. note:: Note that the RBDS standard as is used in the USA is almost +.. note:: + + 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. @@ -93,6 +95,8 @@ RDS datastructures .. _v4l2-rds-data: +.. tabularcolumns:: |p{2.5cm}|p{2.5cm}|p{12.5cm}| + .. flat-table:: struct v4l2_rds_data :header-rows: 0 :stub-columns: 0 @@ -127,6 +131,8 @@ RDS datastructures .. _v4l2-rds-block: +.. tabularcolumns:: |p{2.9cm}|p{14.6cm}| + .. flat-table:: Block description :header-rows: 0 :stub-columns: 0 @@ -164,6 +170,8 @@ RDS datastructures .. _v4l2-rds-block-codes: +.. tabularcolumns:: |p{5.6cm}|p{2.0cm}|p{1.5cm}|p{7.0cm}| + .. flat-table:: Block defines :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/v4l/dev-sdr.rst b/Documentation/media/uapi/v4l/dev-sdr.rst index fc4053f957fb..3b6aa2a58430 100644 --- a/Documentation/media/uapi/v4l/dev-sdr.rst +++ b/Documentation/media/uapi/v4l/dev-sdr.rst @@ -80,6 +80,8 @@ data transfer, set by the driver in order to inform application. .. _v4l2-sdr-format: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: struct v4l2_sdr_format :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/v4l/dev-sliced-vbi.rst b/Documentation/media/uapi/v4l/dev-sliced-vbi.rst index ec52a825f4d6..86d2d698d2af 100644 --- a/Documentation/media/uapi/v4l/dev-sliced-vbi.rst +++ b/Documentation/media/uapi/v4l/dev-sliced-vbi.rst @@ -105,6 +105,10 @@ which may return ``EBUSY`` can be the struct v4l2_sliced_vbi_format ----------------------------- +.. tabularcolumns:: |p{1.0cm}|p{4.5cm}|p{4.0cm}|p{4.0cm}|p{4.0cm}| + +.. cssclass:: longtable + .. flat-table:: :header-rows: 0 :stub-columns: 0 @@ -153,8 +157,7 @@ struct v4l2_sliced_vbi_format service the driver chooses. Data services are defined in :ref:`vbi-services2`. Array indices - map to ITU-R line numbers (see also :ref:`vbi-525` and - :ref:`vbi-625`) as follows: + map to ITU-R line numbers\ [#f2]_ as follows: - .. row 3 @@ -241,8 +244,8 @@ struct v4l2_sliced_vbi_format - ``reserved``\ [2] - :cspan:`2` This array is reserved for future extensions. - Applications and drivers must set it to zero. + Applications and drivers must set it to zero. .. _vbi-services2: @@ -250,6 +253,12 @@ struct v4l2_sliced_vbi_format Sliced VBI services ------------------- +.. raw:: latex + + \begin{adjustbox}{width=\columnwidth} + +.. tabularcolumns:: |p{5.0cm}|p{1.4cm}|p{3.0cm}|p{2.5cm}|p{9.0cm}| + .. flat-table:: :header-rows: 1 :stub-columns: 0 @@ -274,7 +283,9 @@ Sliced VBI services - 0x0001 - - :ref:`ets300706`, :ref:`itu653` + - :ref:`ets300706`, + + :ref:`itu653` - PAL/SECAM line 7-22, 320-335 (second field 7-22) @@ -313,7 +324,9 @@ Sliced VBI services - 0x4000 - - :ref:`itu1119`, :ref:`en300294` + - :ref:`itu1119`, + + :ref:`en300294` - PAL/SECAM line 23 @@ -341,6 +354,10 @@ Sliced VBI services - :cspan:`2` Set of services applicable to 625 line systems. +.. raw:: latex + + \end{adjustbox}\newline\newline + Drivers may return an ``EINVAL`` error code when applications attempt to read or write data without prior format negotiation, after switching the @@ -371,6 +388,8 @@ of one video frame. The ``id`` of unused struct v4l2_sliced_vbi_data --------------------------- +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. flat-table:: :header-rows: 0 :stub-columns: 0 @@ -556,6 +575,8 @@ number). struct v4l2_mpeg_vbi_fmt_ivtv ----------------------------- +.. tabularcolumns:: |p{1.0cm}|p{3.5cm}|p{1.0cm}|p{11.5cm}| + .. flat-table:: :header-rows: 0 :stub-columns: 0 @@ -611,6 +632,8 @@ struct v4l2_mpeg_vbi_fmt_ivtv Magic Constants for struct v4l2_mpeg_vbi_fmt_ivtv magic field ------------------------------------------------------------- +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. flat-table:: :header-rows: 1 :stub-columns: 0 @@ -652,6 +675,8 @@ Magic Constants for struct v4l2_mpeg_vbi_fmt_ivtv magic field struct v4l2_mpeg_vbi_itv0 ------------------------- +.. tabularcolumns:: |p{4.4cm}|p{2.4cm}|p{10.7cm}| + .. flat-table:: :header-rows: 0 :stub-columns: 0 @@ -676,9 +701,9 @@ struct v4l2_mpeg_vbi_itv0 :: 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[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 @@ -709,6 +734,8 @@ struct v4l2_mpeg_vbi_itv0 struct v4l2_mpeg_vbi_ITV0 ------------------------- +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: :header-rows: 0 :stub-columns: 0 @@ -734,6 +761,8 @@ struct v4l2_mpeg_vbi_ITV0 struct v4l2_mpeg_vbi_itv0_line ------------------------------ +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: :header-rows: 0 :stub-columns: 0 @@ -765,6 +794,8 @@ struct v4l2_mpeg_vbi_itv0_line Line Identifiers for struct v4l2_mpeg_vbi_itv0_line id field ------------------------------------------------------------ +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. flat-table:: :header-rows: 1 :stub-columns: 0 @@ -820,3 +851,6 @@ Line Identifiers for struct v4l2_mpeg_vbi_itv0_line id field .. [#f1] According to :ref:`ETS 300 706 <ets300706>` lines 6-22 of the first field and lines 5-22 of the second field may carry Teletext data. + +.. [#f2] + See also :ref:`vbi-525` and :ref:`vbi-625`. diff --git a/Documentation/media/uapi/v4l/dev-subdev.rst b/Documentation/media/uapi/v4l/dev-subdev.rst index 5a112eb7a245..1045b3c61031 100644 --- a/Documentation/media/uapi/v4l/dev-subdev.rst +++ b/Documentation/media/uapi/v4l/dev-subdev.rst @@ -202,11 +202,18 @@ for the pipeline described in :ref:`pipeline-scaling` (table columns list entity names and pad numbers). +.. raw:: latex + + \begin{adjustbox}{width=\columnwidth} + +.. tabularcolumns:: |p{4.5cm}|p{4.5cm}|p{4.5cm}|p{4.5cm}|p{4.5cm}|p{4.5cm}|p{4.5cm}| + .. _sample-pipeline-config: .. flat-table:: Sample Pipeline Configuration :header-rows: 1 :stub-columns: 0 + :widths: 5 5 5 5 5 5 5 - .. row 1 @@ -288,7 +295,9 @@ list entity names and pad numbers). - *1280x960/SGRBG8_1X8* +.. raw:: latex + \end{adjustbox}\newline\newline 1. 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 diff --git a/Documentation/media/uapi/v4l/diff-v4l.rst b/Documentation/media/uapi/v4l/diff-v4l.rst index e1e034df514c..93263e477127 100644 --- a/Documentation/media/uapi/v4l/diff-v4l.rst +++ b/Documentation/media/uapi/v4l/diff-v4l.rst @@ -95,7 +95,9 @@ and radio devices supporting a set of related functions like video capturing, video overlay and VBI capturing. See :ref:`open` for an introduction. +.. tabularcolumns:: |p{5.5cm}|p{6.5cm}|p{5.5cm} +.. cssclass:: longtable .. flat-table:: :header-rows: 1 @@ -104,7 +106,7 @@ introduction. - .. row 1 - - struct :c:type:`struct video_capability` ``type`` + - ``struct video_capability`` ``type`` - struct :ref:`v4l2_capability <v4l2-capability>` ``capabilities`` flags diff --git a/Documentation/media/uapi/v4l/extended-controls.rst b/Documentation/media/uapi/v4l/extended-controls.rst index 71071d73747d..9c6aff3e97c1 100644 --- a/Documentation/media/uapi/v4l/extended-controls.rst +++ b/Documentation/media/uapi/v4l/extended-controls.rst @@ -184,7 +184,9 @@ 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 +.. 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. @@ -207,7 +209,10 @@ Codec Control IDs .. _v4l2-mpeg-stream-type: -``V4L2_CID_MPEG_STREAM_TYPE (enum v4l2_mpeg_stream_type)`` +``V4L2_CID_MPEG_STREAM_TYPE`` + (enum) + +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 @@ -280,7 +285,10 @@ Codec Control IDs .. _v4l2-mpeg-stream-vbi-fmt: -``V4L2_CID_MPEG_STREAM_VBI_FMT (enum v4l2_mpeg_stream_vbi_fmt)`` +``V4L2_CID_MPEG_STREAM_VBI_FMT`` + (enum) + +enum v4l2_mpeg_stream_vbi_fmt - Some cards can embed VBI data (e. g. 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 @@ -289,6 +297,8 @@ Codec Control IDs +.. tabularcolumns:: |p{6 cm}|p{11.5cm}| + .. flat-table:: :header-rows: 0 :stub-columns: 0 @@ -312,7 +322,10 @@ Codec Control IDs .. _v4l2-mpeg-audio-sampling-freq: -``V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ (enum v4l2_mpeg_audio_sampling_freq)`` +``V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ`` + (enum) + +enum v4l2_mpeg_audio_sampling_freq - MPEG Audio sampling frequency. Possible values are: @@ -344,7 +357,10 @@ Codec Control IDs .. _v4l2-mpeg-audio-encoding: -``V4L2_CID_MPEG_AUDIO_ENCODING (enum v4l2_mpeg_audio_encoding)`` +``V4L2_CID_MPEG_AUDIO_ENCODING`` + (enum) + +enum v4l2_mpeg_audio_encoding - MPEG Audio encoding. This control is specific to multiplexed MPEG streams. Possible values are: @@ -389,7 +405,10 @@ Codec Control IDs .. _v4l2-mpeg-audio-l1-bitrate: -``V4L2_CID_MPEG_AUDIO_L1_BITRATE (enum v4l2_mpeg_audio_l1_bitrate)`` +``V4L2_CID_MPEG_AUDIO_L1_BITRATE`` + (enum) + +enum v4l2_mpeg_audio_l1_bitrate - MPEG-1/2 Layer I bitrate. Possible values are: @@ -487,7 +506,10 @@ Codec Control IDs .. _v4l2-mpeg-audio-l2-bitrate: -``V4L2_CID_MPEG_AUDIO_L2_BITRATE (enum v4l2_mpeg_audio_l2_bitrate)`` +``V4L2_CID_MPEG_AUDIO_L2_BITRATE`` + (enum) + +enum v4l2_mpeg_audio_l2_bitrate - MPEG-1/2 Layer II bitrate. Possible values are: @@ -585,7 +607,10 @@ Codec Control IDs .. _v4l2-mpeg-audio-l3-bitrate: -``V4L2_CID_MPEG_AUDIO_L3_BITRATE (enum v4l2_mpeg_audio_l3_bitrate)`` +``V4L2_CID_MPEG_AUDIO_L3_BITRATE`` + (enum) + +enum v4l2_mpeg_audio_l3_bitrate - MPEG-1/2 Layer III bitrate. Possible values are: @@ -686,7 +711,10 @@ Codec Control IDs .. _v4l2-mpeg-audio-ac3-bitrate: -``V4L2_CID_MPEG_AUDIO_AC3_BITRATE (enum v4l2_mpeg_audio_ac3_bitrate)`` +``V4L2_CID_MPEG_AUDIO_AC3_BITRATE`` + (enum) + +enum v4l2_mpeg_audio_ac3_bitrate - AC-3 bitrate. Possible values are: @@ -814,7 +842,10 @@ Codec Control IDs .. _v4l2-mpeg-audio-mode: -``V4L2_CID_MPEG_AUDIO_MODE (enum v4l2_mpeg_audio_mode)`` +``V4L2_CID_MPEG_AUDIO_MODE`` + (enum) + +enum v4l2_mpeg_audio_mode - MPEG Audio mode. Possible values are: @@ -852,7 +883,10 @@ Codec Control IDs .. _v4l2-mpeg-audio-mode-extension: -``V4L2_CID_MPEG_AUDIO_MODE_EXTENSION (enum v4l2_mpeg_audio_mode_extension)`` +``V4L2_CID_MPEG_AUDIO_MODE_EXTENSION`` + (enum) + +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: @@ -892,7 +926,10 @@ Codec Control IDs .. _v4l2-mpeg-audio-emphasis: -``V4L2_CID_MPEG_AUDIO_EMPHASIS (enum v4l2_mpeg_audio_emphasis)`` +``V4L2_CID_MPEG_AUDIO_EMPHASIS`` + (enum) + +enum v4l2_mpeg_audio_emphasis - Audio Emphasis. Possible values are: @@ -924,7 +961,10 @@ Codec Control IDs .. _v4l2-mpeg-audio-crc: -``V4L2_CID_MPEG_AUDIO_CRC (enum v4l2_mpeg_audio_crc)`` +``V4L2_CID_MPEG_AUDIO_CRC`` + (enum) + +enum v4l2_mpeg_audio_crc - CRC method. Possible values are: @@ -956,12 +996,17 @@ Codec Control IDs .. _v4l2-mpeg-audio-dec-playback: -``V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK (enum v4l2_mpeg_audio_dec_playback)`` +``V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK`` + (enum) + +enum v4l2_mpeg_audio_dec_playback - Determines how monolingual audio should be played back. Possible values are: +.. tabularcolumns:: |p{9.0cm}|p{8.5cm}| + .. flat-table:: :header-rows: 0 :stub-columns: 0 @@ -1007,12 +1052,18 @@ Codec Control IDs .. _v4l2-mpeg-audio-dec-multilingual-playback: -``V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK (enum v4l2_mpeg_audio_dec_playback)`` +``V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK`` + (enum) + +enum v4l2_mpeg_audio_dec_playback - Determines how multilingual audio should be played back. .. _v4l2-mpeg-video-encoding: -``V4L2_CID_MPEG_VIDEO_ENCODING (enum v4l2_mpeg_video_encoding)`` +``V4L2_CID_MPEG_VIDEO_ENCODING`` + (enum) + +enum v4l2_mpeg_video_encoding - MPEG Video encoding method. This control is specific to multiplexed MPEG streams. Possible values are: @@ -1045,7 +1096,10 @@ Codec Control IDs .. _v4l2-mpeg-video-aspect: -``V4L2_CID_MPEG_VIDEO_ASPECT (enum v4l2_mpeg_video_aspect)`` +``V4L2_CID_MPEG_VIDEO_ASPECT`` + (enum) + +enum v4l2_mpeg_video_aspect - Video aspect. Possible values are: @@ -1087,7 +1141,10 @@ Codec Control IDs .. _v4l2-mpeg-video-bitrate-mode: -``V4L2_CID_MPEG_VIDEO_BITRATE_MODE (enum v4l2_mpeg_video_bitrate_mode)`` +``V4L2_CID_MPEG_VIDEO_BITRATE_MODE`` + (enum) + +enum v4l2_mpeg_video_bitrate_mode - Video bitrate mode. Possible values are: @@ -1191,7 +1248,10 @@ Codec Control IDs .. _v4l2-mpeg-video-h264-vui-sar-idc: -``V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC (enum v4l2_mpeg_video_h264_vui_sar_idc)`` +``V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC`` + (enum) + +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. @@ -1323,7 +1383,10 @@ Codec Control IDs .. _v4l2-mpeg-video-h264-level: -``V4L2_CID_MPEG_VIDEO_H264_LEVEL (enum v4l2_mpeg_video_h264_level)`` +``V4L2_CID_MPEG_VIDEO_H264_LEVEL`` + (enum) + +enum v4l2_mpeg_video_h264_level - The level information for the H264 video elementary stream. Applicable to the H264 encoder. Possible values are: @@ -1434,7 +1497,10 @@ Codec Control IDs .. _v4l2-mpeg-video-mpeg4-level: -``V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL (enum v4l2_mpeg_video_mpeg4_level)`` +``V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL`` + (enum) + +enum v4l2_mpeg_video_mpeg4_level - The level information for the MPEG4 elementary stream. Applicable to the MPEG4 encoder. Possible values are: @@ -1497,7 +1563,10 @@ Codec Control IDs .. _v4l2-mpeg-video-h264-profile: -``V4L2_CID_MPEG_VIDEO_H264_PROFILE (enum v4l2_mpeg_video_h264_profile)`` +``V4L2_CID_MPEG_VIDEO_H264_PROFILE`` + (enum) + +enum v4l2_mpeg_video_h264_profile - The profile information for H264. Applicable to the H264 encoder. Possible values are: @@ -1614,7 +1683,10 @@ Codec Control IDs .. _v4l2-mpeg-video-mpeg4-profile: -``V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE (enum v4l2_mpeg_video_mpeg4_profile)`` +``V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE`` + (enum) + +enum v4l2_mpeg_video_mpeg4_profile - The profile information for MPEG4. Applicable to the MPEG4 encoder. Possible values are: @@ -1663,12 +1735,17 @@ Codec Control IDs .. _v4l2-mpeg-video-multi-slice-mode: -``V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE (enum v4l2_mpeg_video_multi_slice_mode)`` +``V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE`` + (enum) + +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: +.. tabularcolumns:: |p{8.7cm}|p{8.8cm}| + .. flat-table:: :header-rows: 0 :stub-columns: 0 @@ -1708,16 +1785,20 @@ Codec Control IDs .. _v4l2-mpeg-video-h264-loop-filter-mode: -``V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE (enum v4l2_mpeg_video_h264_loop_filter_mode)`` +``V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE`` + (enum) + +enum v4l2_mpeg_video_h264_loop_filter_mode - Loop filter mode for H264 encoder. Possible values are: +.. tabularcolumns:: |p{14.0cm}|p{3.5cm}| + .. flat-table:: :header-rows: 0 :stub-columns: 0 - - .. row 1 - ``V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_ENABLED`` @@ -1748,7 +1829,10 @@ Codec Control IDs .. _v4l2-mpeg-video-h264-entropy-mode: -``V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE (enum v4l2_mpeg_video_h264_entropy_mode)`` +``V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE`` + (enum) + +enum v4l2_mpeg_video_h264_entropy_mode - Entropy coding mode for H264 - CABAC/CAVALC. Applicable to the H264 encoder. Possible values are: @@ -1909,13 +1993,18 @@ Codec Control IDs .. _v4l2-mpeg-video-header-mode: -``V4L2_CID_MPEG_VIDEO_HEADER_MODE (enum v4l2_mpeg_video_header_mode)`` +``V4L2_CID_MPEG_VIDEO_HEADER_MODE`` + (enum) + +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: +.. tabularcolumns:: |p{10.3cm}|p{7.2cm}| + .. flat-table:: :header-rows: 0 :stub-columns: 0 @@ -1965,17 +2054,19 @@ Codec Control IDs .. _v4l2-mpeg-video-h264-sei-fp-arrangement-type: -``V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE (enum v4l2_mpeg_video_h264_sei_fp_arrangement_type)`` +``V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE`` + (enum) + +enum v4l2_mpeg_video_h264_sei_fp_arrangement_type - Frame packing arrangement type for H264 SEI. Applicable to the H264 encoder. Possible values are: - +.. tabularcolumns:: |p{12cm}|p{5.5cm}| .. flat-table:: :header-rows: 0 :stub-columns: 0 - - .. row 1 - ``V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_CHEKERBOARD`` @@ -2021,18 +2112,20 @@ Codec Control IDs .. _v4l2-mpeg-video-h264-fmo-map-type: -``V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE (enum v4l2_mpeg_video_h264_fmo_map_type)`` +``V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE`` ```` + (enum) + +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: - +.. tabularcolumns:: |p{12.5cm}|p{5.0cm}| .. flat-table:: :header-rows: 0 :stub-columns: 0 - - .. row 1 - ``V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_INTERLEAVED_SLICES`` @@ -2084,7 +2177,10 @@ Codec Control IDs .. _v4l2-mpeg-video-h264-fmo-change-direction: -``V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_DIRECTION (enum v4l2_mpeg_video_h264_fmo_change_dir)`` +``V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_DIRECTION`` + (enum) + +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: @@ -2152,7 +2248,10 @@ Codec Control IDs .. _v4l2-mpeg-video-h264-hierarchical-coding-type: -``V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_TYPE (enum v4l2_mpeg_video_h264_hierarchical_coding_type)`` +``V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_TYPE`` + (enum) + +enum v4l2_mpeg_video_h264_hierarchical_coding_type - Specifies the hierarchical coding type. Applicable to the H264 encoder. Possible values are: @@ -2321,19 +2420,22 @@ MFC 5.1 Control IDs .. _v4l2-mpeg-mfc51-video-frame-skip-mode: -``V4L2_CID_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE (enum v4l2_mpeg_mfc51_video_frame_skip_mode)`` +``V4L2_CID_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE`` + (enum) + +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: +.. tabularcolumns:: |p{9.0cm}|p{8.5cm}| .. flat-table:: :header-rows: 0 :stub-columns: 0 - - .. row 1 - ``V4L2_MPEG_MFC51_FRAME_SKIP_MODE_DISABLED`` @@ -2370,7 +2472,10 @@ MFC 5.1 Control IDs .. _v4l2-mpeg-mfc51-video-force-frame-type: -``V4L2_CID_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE (enum v4l2_mpeg_mfc51_video_force_frame_type)`` +``V4L2_CID_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE`` + (enum) + +enum v4l2_mpeg_mfc51_video_force_frame_type - Force a frame type for the next queued buffer. Applicable to encoders. Possible values are: @@ -2416,7 +2521,10 @@ CX2341x Control IDs .. _v4l2-mpeg-cx2341x-video-spatial-filter-mode: -``V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE (enum v4l2_mpeg_cx2341x_video_spatial_filter_mode)`` +``V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE`` + (enum) + +enum v4l2_mpeg_cx2341x_video_spatial_filter_mode - Sets the Spatial Filter mode (default ``MANUAL``). Possible values are: @@ -2447,12 +2555,17 @@ CX2341x Control IDs .. _luma-spatial-filter-type: -``V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE (enum v4l2_mpeg_cx2341x_video_luma_spatial_filter_type)`` +``V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE`` + (enum) + +enum v4l2_mpeg_cx2341x_video_luma_spatial_filter_type - Select the algorithm to use for the Luma Spatial Filter (default ``1D_HOR``). Possible values: +.. tabularcolumns:: |p{14.5cm}|p{3.0cm}| + .. flat-table:: :header-rows: 0 :stub-columns: 0 @@ -2492,7 +2605,10 @@ CX2341x Control IDs .. _chroma-spatial-filter-type: -``V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE (enum v4l2_mpeg_cx2341x_video_chroma_spatial_filter_type)`` +``V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE`` + (enum) + +enum v4l2_mpeg_cx2341x_video_chroma_spatial_filter_type - Select the algorithm for the Chroma Spatial Filter (default ``1D_HOR``). Possible values are: @@ -2519,7 +2635,10 @@ CX2341x Control IDs .. _v4l2-mpeg-cx2341x-video-temporal-filter-mode: -``V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE (enum v4l2_mpeg_cx2341x_video_temporal_filter_mode)`` +``V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE`` + (enum) + +enum v4l2_mpeg_cx2341x_video_temporal_filter_mode - Sets the Temporal Filter mode (default ``MANUAL``). Possible values are: @@ -2550,7 +2669,10 @@ CX2341x Control IDs .. _v4l2-mpeg-cx2341x-video-median-filter-type: -``V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE (enum v4l2_mpeg_cx2341x_video_median_filter_type)`` +``V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE`` + (enum) + +enum v4l2_mpeg_cx2341x_video_median_filter_type - Median Filter Type (default ``OFF``). Possible values are: @@ -2631,7 +2753,10 @@ VPX Control IDs .. _v4l2-vpx-num-partitions: -``V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS (enum v4l2_vp8_num_partitions)`` +``V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS`` + (enum) + +enum v4l2_vp8_num_partitions - The number of token partitions to use in VP8 encoder. Possible values are: @@ -2673,17 +2798,19 @@ VPX Control IDs .. _v4l2-vpx-num-ref-frames: -``V4L2_CID_MPEG_VIDEO_VPX_NUM_REF_FRAMES (enum v4l2_vp8_num_ref_frames)`` +``V4L2_CID_MPEG_VIDEO_VPX_NUM_REF_FRAMES`` + (enum) + +enum v4l2_vp8_num_ref_frames - The number of reference pictures for encoding P frames. Possible values are: - +.. tabularcolumns:: |p{7.9cm}|p{9.6cm}| .. flat-table:: :header-rows: 0 :stub-columns: 0 - - .. row 1 - ``V4L2_CID_MPEG_VIDEO_VPX_1_REF_FRAME`` @@ -2726,16 +2853,22 @@ VPX Control IDs .. _v4l2-vpx-golden-frame-sel: -``V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL (enum v4l2_vp8_golden_frame_sel)`` +``V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL`` + (enum) + +enum v4l2_vp8_golden_frame_sel - Selects the golden frame for encoding. Possible values are: +.. raw:: latex + + \begin{adjustbox}{width=\columnwidth} +.. tabularcolumns:: |p{11.0cm}|p{10.0cm}| .. flat-table:: :header-rows: 0 :stub-columns: 0 - - .. row 1 - ``V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_USE_PREV`` @@ -2748,9 +2881,12 @@ VPX Control IDs - ``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 + ``V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_REF_PERIOD`` as a golden frame. +.. raw:: latex + + \end{adjustbox} ``V4L2_CID_MPEG_VIDEO_VPX_MIN_QP (integer)`` @@ -2791,7 +2927,10 @@ Camera Control IDs .. _v4l2-exposure-auto-type: -``V4L2_CID_EXPOSURE_AUTO (enum v4l2_exposure_auto_type)`` +``V4L2_CID_EXPOSURE_AUTO`` + (enum) + +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 @@ -2856,17 +2995,19 @@ Camera Control IDs .. _v4l2-exposure-metering: -``V4L2_CID_EXPOSURE_METERING (enum v4l2_exposure_metering)`` +``V4L2_CID_EXPOSURE_METERING`` + (enum) + +enum v4l2_exposure_metering - Determines how the camera measures the amount of light available for the frame exposure. Possible values are: - +.. tabularcolumns:: |p{8.5cm}|p{9.0cm}| .. flat-table:: :header-rows: 0 :stub-columns: 0 - - .. row 1 - ``V4L2_EXPOSURE_METERING_AVERAGE`` @@ -2968,13 +3109,12 @@ Camera Control IDs control may stop updates of the ``V4L2_CID_AUTO_FOCUS_STATUS`` control value. - +.. tabularcolumns:: |p{6.5cm}|p{11.0cm}| .. flat-table:: :header-rows: 0 :stub-columns: 0 - - .. row 1 - ``V4L2_AUTO_FOCUS_STATUS_IDLE`` @@ -3004,10 +3144,13 @@ Camera Control IDs .. _v4l2-auto-focus-range: -``V4L2_CID_AUTO_FOCUS_RANGE (enum v4l2_auto_focus_range)`` - Determines auto focus distance range for which lens may be adjusted. +``V4L2_CID_AUTO_FOCUS_RANGE`` + (enum) +enum v4l2_auto_focus_range - + Determines auto focus distance range for which lens may be adjusted. +.. tabularcolumns:: |p{6.5cm}|p{11.0cm}| .. flat-table:: :header-rows: 0 @@ -3088,20 +3231,22 @@ Camera Control IDs .. _v4l2-auto-n-preset-white-balance: -``V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE (enum v4l2_auto_n_preset_white_balance)`` +``V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE`` + (enum) + +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. - +.. tabularcolumns:: |p{7.0 cm}|p{10.5cm}| .. flat-table:: :header-rows: 0 :stub-columns: 0 - - .. row 1 - ``V4L2_WHITE_BALANCE_MANUAL`` @@ -3205,7 +3350,10 @@ Camera Control IDs .. _v4l2-iso-sensitivity-auto-type: -``V4L2_CID_ISO_SENSITIVITY_AUTO (enum v4l2_iso_sensitivity_type)`` +``V4L2_CID_ISO_SENSITIVITY_AUTO`` + (enum) + +enum v4l2_iso_sensitivity_type - Enables or disables automatic ISO sensitivity adjustments. @@ -3231,7 +3379,10 @@ Camera Control IDs .. _v4l2-scene-mode: -``V4L2_CID_SCENE_MODE (enum v4l2_scene_mode)`` +``V4L2_CID_SCENE_MODE`` + (enum) + +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, @@ -3243,13 +3394,12 @@ Camera Control IDs to ``V4L2_SCENE_MODE_NONE`` to make sure the other possibly related controls are accessible. The following scene programs are defined: - +.. tabularcolumns:: |p{6.0cm}|p{11.5cm}| .. flat-table:: :header-rows: 0 :stub-columns: 0 - - .. row 1 - ``V4L2_SCENE_MODE_NONE`` @@ -3570,7 +3720,10 @@ FM_TX Control IDs Configures pilot tone frequency value. Unit is in Hz. The range and step are driver-specific. -``V4L2_CID_TUNE_PREEMPHASIS (enum v4l2_preemphasis)`` +``V4L2_CID_TUNE_PREEMPHASIS`` + (enum) + +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 @@ -3708,13 +3861,12 @@ Flash Control IDs ``V4L2_CID_FLASH_STROBE_SOURCE (menu)`` Defines the source of the flash LED strobe. - +.. tabularcolumns:: |p{7.0cm}|p{10.5cm}| .. flat-table:: :header-rows: 0 :stub-columns: 0 - - .. row 1 - ``V4L2_FLASH_STROBE_SOURCE_SOFTWARE`` @@ -3775,7 +3927,7 @@ Flash Control IDs an effect is chip dependent. Reading the faults resets the control and returns the chip to a usable state if possible. - +.. tabularcolumns:: |p{8.0cm}|p{9.5cm}| .. flat-table:: :header-rows: 0 @@ -3886,7 +4038,7 @@ JPEG Control IDs how Cb and Cr components are downsampled after coverting an input image from RGB to Y'CbCr color space. - +.. tabularcolumns:: |p{7.0cm}|p{10.5cm}| .. flat-table:: :header-rows: 0 @@ -4162,13 +4314,19 @@ Digital Video Control IDs 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)`` +``V4L2_CID_DV_TX_MODE`` + (enum) + +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)`` +``V4L2_CID_DV_TX_RGB_RANGE`` + (enum) + +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. :ref:`cea861` for HDMI). @@ -4180,7 +4338,10 @@ Digital Video Control IDs 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)`` +``V4L2_CID_DV_TX_IT_CONTENT_TYPE`` + (enum) + +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 @@ -4188,7 +4349,7 @@ Digital Video Control IDs or an analog source. The enum v4l2_dv_it_content_type defines the possible content types: - +.. tabularcolumns:: |p{7.0cm}|p{10.5cm}| .. flat-table:: :header-rows: 0 @@ -4241,7 +4402,10 @@ Digital Video Control IDs 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)`` +``V4L2_CID_DV_RX_RGB_RANGE`` + (enum) + +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. :ref:`cea861` for HDMI). @@ -4253,7 +4417,10 @@ Digital Video Control IDs 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)`` +``V4L2_CID_DV_RX_IT_CONTENT_TYPE`` + (enum) + +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 @@ -4325,7 +4492,10 @@ FM_RX Control IDs broadcasts speech. If the transmitter doesn't make this distinction, then it will be set. -``V4L2_CID_TUNE_DEEMPHASIS (enum v4l2_deemphasis)`` +``V4L2_CID_TUNE_DEEMPHASIS`` + (enum) + +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 @@ -4382,7 +4552,7 @@ Detect Control IDs ``V4L2_CID_DETECT_MD_MODE (menu)`` Sets the motion detection mode. - +.. tabularcolumns:: |p{7.5cm}|p{10.0cm}| .. flat-table:: :header-rows: 0 diff --git a/Documentation/media/uapi/v4l/field-order.rst b/Documentation/media/uapi/v4l/field-order.rst index 979fedbb2bda..95e9d2a41f1d 100644 --- a/Documentation/media/uapi/v4l/field-order.rst +++ b/Documentation/media/uapi/v4l/field-order.rst @@ -57,6 +57,8 @@ should have the value ``V4L2_FIELD_ANY`` (0). enum v4l2_field =============== +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. flat-table:: :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/v4l/func-mmap.rst b/Documentation/media/uapi/v4l/func-mmap.rst index c156fb7b7422..639fef5b4f78 100644 --- a/Documentation/media/uapi/v4l/func-mmap.rst +++ b/Documentation/media/uapi/v4l/func-mmap.rst @@ -78,7 +78,9 @@ Arguments ``MAP_SHARED`` allows applications to share the mapped memory with other (e. g. child-) processes. - .. note:: The Linux ``videobuf`` module which is used by some + .. note:: + + The Linux ``videobuf`` module which is used by some drivers 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`` diff --git a/Documentation/media/uapi/v4l/pixfmt-002.rst b/Documentation/media/uapi/v4l/pixfmt-002.rst index fae9b2d40a85..58e872f66a07 100644 --- a/Documentation/media/uapi/v4l/pixfmt-002.rst +++ b/Documentation/media/uapi/v4l/pixfmt-002.rst @@ -4,9 +4,12 @@ Single-planar format structure ****************************** +.. tabularcolumns:: |p{4.0cm}|p{2.5cm}|p{11.0cm}| .. _v4l2-pix-format: +.. cssclass:: longtable + .. flat-table:: struct v4l2_pix_format :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/v4l/pixfmt-003.rst b/Documentation/media/uapi/v4l/pixfmt-003.rst index 25c54872fbe1..6ec8ce639764 100644 --- a/Documentation/media/uapi/v4l/pixfmt-003.rst +++ b/Documentation/media/uapi/v4l/pixfmt-003.rst @@ -12,6 +12,8 @@ array of :ref:`struct v4l2_plane_pix_format <v4l2-plane-pix-format>` structures, describing all planes of that format. +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. _v4l2-plane-pix-format: .. flat-table:: struct v4l2_plane_pix_format @@ -47,6 +49,7 @@ describing all planes of that format. applications. +.. tabularcolumns:: |p{4.4cm}|p{5.6cm}|p{7.5cm}| .. _v4l2-pix-format-mplane: diff --git a/Documentation/media/uapi/v4l/pixfmt-006.rst b/Documentation/media/uapi/v4l/pixfmt-006.rst index 987b9a8a9eb4..56b691300158 100644 --- a/Documentation/media/uapi/v4l/pixfmt-006.rst +++ b/Documentation/media/uapi/v4l/pixfmt-006.rst @@ -19,10 +19,13 @@ colorspace field of struct :ref:`v4l2_pix_format <v4l2-pix-format>` or struct :ref:`v4l2_pix_format_mplane <v4l2-pix-format-mplane>` needs to be filled in. -.. note:: The default R'G'B' quantization is full range for all +.. note:: + + The default R'G'B' quantization is full range for all colorspaces except for BT.2020 which uses limited range R'G'B' quantization. +.. tabularcolumns:: |p{6.0cm}|p{11.5cm}| .. _v4l2-colorspace: @@ -181,6 +184,8 @@ needs to be filled in. .. _v4l2-ycbcr-encoding: +.. tabularcolumns:: |p{6.5cm}|p{11.0cm}| + .. flat-table:: V4L2 Y'CbCr Encodings :header-rows: 1 :stub-columns: 0 @@ -250,6 +255,8 @@ needs to be filled in. .. _v4l2-quantization: +.. tabularcolumns:: |p{6.5cm}|p{11.0cm}| + .. flat-table:: V4L2 Quantization Methods :header-rows: 1 :stub-columns: 0 diff --git a/Documentation/media/uapi/v4l/pixfmt-007.rst b/Documentation/media/uapi/v4l/pixfmt-007.rst index 8c946b0c63a0..95d790cbc152 100644 --- a/Documentation/media/uapi/v4l/pixfmt-007.rst +++ b/Documentation/media/uapi/v4l/pixfmt-007.rst @@ -19,6 +19,8 @@ are: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: SMPTE 170M Chromaticities :header-rows: 1 :stub-columns: 0 @@ -117,6 +119,8 @@ and the white reference are: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: Rec. 709 Chromaticities :header-rows: 1 :stub-columns: 0 @@ -246,6 +250,8 @@ The chromaticities of the primary colors and the white reference are: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: sRGB Chromaticities :header-rows: 1 :stub-columns: 0 @@ -345,6 +351,8 @@ are: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: Adobe RGB Chromaticities :header-rows: 1 :stub-columns: 0 @@ -429,6 +437,8 @@ of the primary colors and the white reference are: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: BT.2020 Chromaticities :header-rows: 1 :stub-columns: 0 @@ -538,7 +548,9 @@ 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:: Note that this colorspace does not specify a +.. note:: + + 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 @@ -546,6 +558,8 @@ is ``V4L2_XFER_FUNC_DCI_P3``. The default Y'CbCr encoding is +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: DCI-P3 Chromaticities :header-rows: 1 :stub-columns: 0 @@ -619,6 +633,8 @@ and the white reference are: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: SMPTE 240M Chromaticities :header-rows: 1 :stub-columns: 0 @@ -707,6 +723,8 @@ reference are: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: NTSC 1953 Chromaticities :header-rows: 1 :stub-columns: 0 @@ -754,7 +772,9 @@ reference are: - 0.316 -.. note:: This colorspace uses Illuminant C instead of D65 as the white +.. note:: + + 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. @@ -801,6 +821,8 @@ are: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: EBU Tech. 3213 Chromaticities :header-rows: 1 :stub-columns: 0 @@ -888,7 +910,9 @@ reference are identical to sRGB. The transfer function use is 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:: The JPEG standard does not actually store colorspace +.. note:: + + 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 diff --git a/Documentation/media/uapi/v4l/pixfmt-013.rst b/Documentation/media/uapi/v4l/pixfmt-013.rst index 475f6e6fe785..bfef4f4ce6b1 100644 --- a/Documentation/media/uapi/v4l/pixfmt-013.rst +++ b/Documentation/media/uapi/v4l/pixfmt-013.rst @@ -7,6 +7,8 @@ Compressed Formats .. _compressed-formats: +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. flat-table:: Compressed Image Formats :header-rows: 1 :stub-columns: 0 diff --git a/Documentation/media/uapi/v4l/pixfmt-grey.rst b/Documentation/media/uapi/v4l/pixfmt-grey.rst index 761d783d4989..fef58ca50f66 100644 --- a/Documentation/media/uapi/v4l/pixfmt-grey.rst +++ b/Documentation/media/uapi/v4l/pixfmt-grey.rst @@ -6,8 +6,6 @@ V4L2_PIX_FMT_GREY ('GREY') ************************** -*man V4L2_PIX_FMT_GREY(2)* - Grey-scale image @@ -20,12 +18,9 @@ which simply contains no Cb or Cr data. **Byte Order.** Each cell is one byte. - - .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-m420.rst b/Documentation/media/uapi/v4l/pixfmt-m420.rst index 4c5b2969c039..f4a21a8a6dcc 100644 --- a/Documentation/media/uapi/v4l/pixfmt-m420.rst +++ b/Documentation/media/uapi/v4l/pixfmt-m420.rst @@ -6,8 +6,6 @@ V4L2_PIX_FMT_M420 ('M420') ************************** -*man V4L2_PIX_FMT_M420(2)* - Format with ½ horizontal and vertical chroma resolution, also known as YUV 4:2:0. Hybrid plane line-interleaved layout. @@ -32,11 +30,9 @@ the CbCr lines. Each cell is one byte. - .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-nv12.rst b/Documentation/media/uapi/v4l/pixfmt-nv12.rst index cf59b28f75b7..6bbdc01362af 100644 --- a/Documentation/media/uapi/v4l/pixfmt-nv12.rst +++ b/Documentation/media/uapi/v4l/pixfmt-nv12.rst @@ -7,7 +7,6 @@ V4L2_PIX_FMT_NV12 ('NV12'), V4L2_PIX_FMT_NV21 ('NV21') ****************************************************** -*man V4L2_PIX_FMT_NV12(2)* V4L2_PIX_FMT_NV21 Formats with ½ horizontal and vertical chroma resolution, also known as @@ -36,12 +35,9 @@ many pad bytes after its rows. Each cell is one byte. - .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 - - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-nv12m.rst b/Documentation/media/uapi/v4l/pixfmt-nv12m.rst index a4e7eaeccea8..5c2e0648204b 100644 --- a/Documentation/media/uapi/v4l/pixfmt-nv12m.rst +++ b/Documentation/media/uapi/v4l/pixfmt-nv12m.rst @@ -8,7 +8,6 @@ V4L2_PIX_FMT_NV12M ('NM12'), V4L2_PIX_FMT_NV21M ('NM21'), V4L2_PIX_FMT_NV12MT_16X16 *********************************************************************************** -*man V4L2_PIX_FMT_NV12M(2)* V4L2_PIX_FMT_NV21M V4L2_PIX_FMT_NV12MT_16X16 @@ -50,8 +49,6 @@ Each cell is one byte. .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 - - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-nv12mt.rst b/Documentation/media/uapi/v4l/pixfmt-nv12mt.rst index 6198941bb814..9f250a1df2f6 100644 --- a/Documentation/media/uapi/v4l/pixfmt-nv12mt.rst +++ b/Documentation/media/uapi/v4l/pixfmt-nv12mt.rst @@ -6,8 +6,6 @@ V4L2_PIX_FMT_NV12MT ('TM12') **************************** -*man V4L2_PIX_FMT_NV12MT(2)* - 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 @@ -36,7 +34,7 @@ Layout of macroblocks in memory is presented in the following figure. .. _nv12mt: .. figure:: pixfmt-nv12mt_files/nv12mt.* - :alt: nv12mt.gif + :alt: nv12mt.png :align: center V4L2_PIX_FMT_NV12MT macroblock Z shape memory layout @@ -53,7 +51,7 @@ interleaved. Height of the buffer is aligned to 32. .. _nv12mt_ex: .. figure:: pixfmt-nv12mt_files/nv12mt_example.* - :alt: nv12mt_example.gif + :alt: nv12mt_example.png :align: center Example V4L2_PIX_FMT_NV12MT memory layout of macroblocks diff --git a/Documentation/media/uapi/v4l/pixfmt-nv12mt_files/nv12mt.gif b/Documentation/media/uapi/v4l/pixfmt-nv12mt_files/nv12mt.gif Binary files differdeleted file mode 100644 index ef2d4cf8367b..000000000000 --- a/Documentation/media/uapi/v4l/pixfmt-nv12mt_files/nv12mt.gif +++ /dev/null diff --git a/Documentation/media/uapi/v4l/pixfmt-nv12mt_files/nv12mt.png b/Documentation/media/uapi/v4l/pixfmt-nv12mt_files/nv12mt.png Binary files differnew file mode 100644 index 000000000000..41401860fb73 --- /dev/null +++ b/Documentation/media/uapi/v4l/pixfmt-nv12mt_files/nv12mt.png diff --git a/Documentation/media/uapi/v4l/pixfmt-nv12mt_files/nv12mt_example.gif b/Documentation/media/uapi/v4l/pixfmt-nv12mt_files/nv12mt_example.gif Binary files differdeleted file mode 100644 index df81d68108ee..000000000000 --- a/Documentation/media/uapi/v4l/pixfmt-nv12mt_files/nv12mt_example.gif +++ /dev/null diff --git a/Documentation/media/uapi/v4l/pixfmt-nv12mt_files/nv12mt_example.png b/Documentation/media/uapi/v4l/pixfmt-nv12mt_files/nv12mt_example.png Binary files differnew file mode 100644 index 000000000000..7775f5d7cc46 --- /dev/null +++ b/Documentation/media/uapi/v4l/pixfmt-nv12mt_files/nv12mt_example.png diff --git a/Documentation/media/uapi/v4l/pixfmt-nv16.rst b/Documentation/media/uapi/v4l/pixfmt-nv16.rst index 88aa7617f7cf..e2ea0fcdccc7 100644 --- a/Documentation/media/uapi/v4l/pixfmt-nv16.rst +++ b/Documentation/media/uapi/v4l/pixfmt-nv16.rst @@ -7,8 +7,6 @@ V4L2_PIX_FMT_NV16 ('NV16'), V4L2_PIX_FMT_NV61 ('NV61') ****************************************************** -*man V4L2_PIX_FMT_NV16(2)* - 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 @@ -35,12 +33,9 @@ many pad bytes after its rows. Each cell is one byte. - .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 - - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-nv16m.rst b/Documentation/media/uapi/v4l/pixfmt-nv16m.rst index b7ee068f491c..5908b0437697 100644 --- a/Documentation/media/uapi/v4l/pixfmt-nv16m.rst +++ b/Documentation/media/uapi/v4l/pixfmt-nv16m.rst @@ -7,8 +7,6 @@ V4L2_PIX_FMT_NV16M ('NM16'), V4L2_PIX_FMT_NV61M ('NM61') ******************************************************** -*man V4L2_PIX_FMT_NV16M(2)* - V4L2_PIX_FMT_NV61M Variation of ``V4L2_PIX_FMT_NV16`` and ``V4L2_PIX_FMT_NV61`` with planes non contiguous in memory. @@ -38,12 +36,9 @@ described in :ref:`planar-apis`. Each cell is one byte. - .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 - - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-nv24.rst b/Documentation/media/uapi/v4l/pixfmt-nv24.rst index db98f476446e..67f3c53ac48d 100644 --- a/Documentation/media/uapi/v4l/pixfmt-nv24.rst +++ b/Documentation/media/uapi/v4l/pixfmt-nv24.rst @@ -7,8 +7,6 @@ V4L2_PIX_FMT_NV24 ('NV24'), V4L2_PIX_FMT_NV42 ('NV42') ****************************************************** -*man V4L2_PIX_FMT_NV24(2)* - 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 @@ -35,12 +33,9 @@ twice as many pad bytes after its rows. Each cell is one byte. - .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 1 1 1 1 - - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-packed-rgb.rst b/Documentation/media/uapi/v4l/pixfmt-packed-rgb.rst index c7aa2e91ac78..4eba72266587 100644 --- a/Documentation/media/uapi/v4l/pixfmt-packed-rgb.rst +++ b/Documentation/media/uapi/v4l/pixfmt-packed-rgb.rst @@ -6,11 +6,6 @@ Packed RGB formats ****************** -*man Packed RGB formats(2)* - -Packed RGB formats - - Description =========== @@ -19,6 +14,11 @@ 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. +.. raw:: latex + + \begin{adjustbox}{width=\columnwidth} + +.. tabularcolumns:: |p{4.5cm}|p{3.3cm}|p{0.7cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.2cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.2cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.2cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{1.7cm}| .. _rgb-formats: @@ -36,10 +36,13 @@ next to each other in memory. - - :cspan:`7` Byte 0 in memory + - - :cspan:`7` Byte 1 + - - :cspan:`7` Byte 2 + - - :cspan:`7` Byte 3 - .. row 2 @@ -202,13 +205,13 @@ next to each other in memory. - b\ :sub:`0` - - - - + - - - - + - - - - + - - - - + - - r\ :sub:`3` @@ -282,7 +285,7 @@ next to each other in memory. - b\ :sub:`0` - - - - + - - r\ :sub:`4` @@ -385,7 +388,7 @@ next to each other in memory. - 'XR15' | (1 << 31) - - - - + - - r\ :sub:`4` @@ -617,34 +620,34 @@ next to each other in memory. - r\ :sub:`0` - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - .. _V4L2-PIX-FMT-ABGR32: @@ -778,21 +781,21 @@ next to each other in memory. - r\ :sub:`0` - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - .. _V4L2-PIX-FMT-ARGB32: @@ -875,21 +878,21 @@ next to each other in memory. - 'BX24' - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - r\ :sub:`7` @@ -942,8 +945,11 @@ next to each other in memory. - b\ :sub:`0` +.. raw:: latex + + \end{adjustbox}\newline\newline -Bit 7 is the most significant bit. +.. note:: 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 @@ -973,11 +979,16 @@ devices and drivers must ignore those bits, for both Each cell is one byte. +.. raw:: latex -.. flat-table:: + \newline\newline\begin{adjustbox}{width=\columnwidth} + +.. tabularcolumns:: |p{4.1cm}|p{1.1cm}|p{1.1cm}|p{1.1cm}|p{1.1cm}|p{1.1cm}|p{1.1cm}|p{1.1cm}|p{1.1cm}|p{1.1cm}|p{1.1cm}|p{1.1cm}|p{1.3cm}| + +.. flat-table:: RGB byte order :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 1 1 1 1 1 1 1 1 + :widths: 11 3 3 3 3 3 3 3 3 3 3 3 3 - .. row 1 @@ -1092,6 +1103,9 @@ Each cell is one byte. - R\ :sub:`33` +.. raw:: latex + + \end{adjustbox}\newline\newline Formats defined in :ref:`rgb-formats-deprecated` are deprecated and must not be used by new drivers. They are documented here for reference. @@ -1099,6 +1113,12 @@ 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. +.. raw:: latex + + \begin{adjustbox}{width=\columnwidth} + +.. tabularcolumns:: |p{4.2cm}|p{1.0cm}|p{0.7cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.2cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.2cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.2cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{1.7cm}| + .. _rgb-formats-deprecated: .. flat-table:: Deprecated Packed RGB Image Formats @@ -1115,10 +1135,13 @@ either the corresponding ARGB or XRGB format, depending on the driver. - - :cspan:`7` Byte 0 in memory + - - :cspan:`7` Byte 1 + - - :cspan:`7` Byte 2 + - - :cspan:`7` Byte 3 - .. row 2 @@ -1462,6 +1485,9 @@ either the corresponding ARGB or XRGB format, depending on the driver. - b\ :sub:`0` +.. raw:: latex + + \end{adjustbox}\newline\newline A test utility to determine which RGB formats a driver actually supports is available from the LinuxTV v4l-dvb repository. See diff --git a/Documentation/media/uapi/v4l/pixfmt-packed-yuv.rst b/Documentation/media/uapi/v4l/pixfmt-packed-yuv.rst index 54716455f453..6066f13af5b3 100644 --- a/Documentation/media/uapi/v4l/pixfmt-packed-yuv.rst +++ b/Documentation/media/uapi/v4l/pixfmt-packed-yuv.rst @@ -6,18 +6,19 @@ Packed YUV formats ****************** -*man Packed YUV formats(2)* - -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. +.. raw:: latex + + \newline\newline\begin{adjustbox}{width=\columnwidth} +.. _yuv-formats: + +.. tabularcolumns:: |p{4.5cm}|p{3.3cm}|p{0.7cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.2cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.2cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.2cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{1.7cm}| .. flat-table:: Packed YUV Image Formats :header-rows: 2 @@ -309,8 +310,15 @@ component of each pixel in one 16 or 32 bit word. - Cr\ :sub:`0` +.. raw:: latex + + \end{adjustbox}\newline\newline + +.. note:: + + #) Bit 7 is the most significant bit; -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 -:ref:`Video Overlay <overlay>` or :ref:`Video Output Overlay <osd>`. + #) 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 :ref:`Video Overlay <overlay>` or + :ref:`Video Output Overlay <osd>`. diff --git a/Documentation/media/uapi/v4l/pixfmt-reserved.rst b/Documentation/media/uapi/v4l/pixfmt-reserved.rst index 9a5704baf9fe..0dd2f7fe096f 100644 --- a/Documentation/media/uapi/v4l/pixfmt-reserved.rst +++ b/Documentation/media/uapi/v4l/pixfmt-reserved.rst @@ -17,6 +17,8 @@ you think your format should be listed in a standard format section please make a proposal on the linux-media mailing list. +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. _reserved-formats: .. flat-table:: Reserved Image Formats @@ -339,6 +341,8 @@ please make a proposal on the linux-media mailing list. +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. _format-flags: .. flat-table:: Format Flags diff --git a/Documentation/media/uapi/v4l/pixfmt-sbggr16.rst b/Documentation/media/uapi/v4l/pixfmt-sbggr16.rst index 14446ed7f650..801b78ccbc25 100644 --- a/Documentation/media/uapi/v4l/pixfmt-sbggr16.rst +++ b/Documentation/media/uapi/v4l/pixfmt-sbggr16.rst @@ -6,8 +6,6 @@ V4L2_PIX_FMT_SBGGR16 ('BYR2') ***************************** -*man V4L2_PIX_FMT_SBGGR16(2)* - Bayer RGB format @@ -19,19 +17,17 @@ This format is similar to 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, +.. note:: + + The actual sampling precision may be lower than 16 bits, for example 10 bits per pixel with values in tange 0 to 1023. **Byte Order.** Each cell is one byte. - - .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 1 1 1 1 - - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-sbggr8.rst b/Documentation/media/uapi/v4l/pixfmt-sbggr8.rst index db4c523f49a9..e880ba09379c 100644 --- a/Documentation/media/uapi/v4l/pixfmt-sbggr8.rst +++ b/Documentation/media/uapi/v4l/pixfmt-sbggr8.rst @@ -6,8 +6,6 @@ V4L2_PIX_FMT_SBGGR8 ('BA81') **************************** -*man V4L2_PIX_FMT_SBGGR8(2)* - Bayer RGB format @@ -25,11 +23,9 @@ scheme repeats to the right and down for every two columns and rows. Each cell is one byte. - .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-sdr-cs08.rst b/Documentation/media/uapi/v4l/pixfmt-sdr-cs08.rst index 2736275d080f..82b9995155fa 100644 --- a/Documentation/media/uapi/v4l/pixfmt-sdr-cs08.rst +++ b/Documentation/media/uapi/v4l/pixfmt-sdr-cs08.rst @@ -6,8 +6,6 @@ V4L2_SDR_FMT_CS8 ('CS08') ************************* -*man V4L2_SDR_FMT_CS8(2)* - Complex signed 8-bit IQ sample @@ -22,12 +20,9 @@ Q value after that. **Byte Order.** Each cell is one byte. - - .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-sdr-cs14le.rst b/Documentation/media/uapi/v4l/pixfmt-sdr-cs14le.rst index bfe5804bd84e..f06cbeb15dc2 100644 --- a/Documentation/media/uapi/v4l/pixfmt-sdr-cs14le.rst +++ b/Documentation/media/uapi/v4l/pixfmt-sdr-cs14le.rst @@ -6,8 +6,6 @@ V4L2_SDR_FMT_CS14LE ('CS14') **************************** -*man V4L2_SDR_FMT_CS14LE(2)* - Complex signed 14-bit little endian IQ sample @@ -24,12 +22,9 @@ space with unused high bits padded with 0. Each cell is one byte. - .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 - - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-sdr-cu08.rst b/Documentation/media/uapi/v4l/pixfmt-sdr-cu08.rst index 68ad1717f6d7..bd81eb2e0549 100644 --- a/Documentation/media/uapi/v4l/pixfmt-sdr-cu08.rst +++ b/Documentation/media/uapi/v4l/pixfmt-sdr-cu08.rst @@ -6,8 +6,6 @@ V4L2_SDR_FMT_CU8 ('CU08') ************************* -*man V4L2_SDR_FMT_CU8(2)* - Complex unsigned 8-bit IQ sample @@ -22,13 +20,9 @@ and Q value after that. **Byte Order.** Each cell is one byte. - - .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 - - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-sdr-cu16le.rst b/Documentation/media/uapi/v4l/pixfmt-sdr-cu16le.rst index 2a1c0d4924a1..c72587de4a8d 100644 --- a/Documentation/media/uapi/v4l/pixfmt-sdr-cu16le.rst +++ b/Documentation/media/uapi/v4l/pixfmt-sdr-cu16le.rst @@ -6,7 +6,6 @@ V4L2_SDR_FMT_CU16LE ('CU16') **************************** -*man V4L2_SDR_FMT_CU16LE(2)* Complex unsigned 16-bit little endian IQ sample @@ -23,12 +22,9 @@ comes first and Q value after that. Each cell is one byte. - .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 - - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-sdr-ru12le.rst b/Documentation/media/uapi/v4l/pixfmt-sdr-ru12le.rst index 378581b27d4a..b5f0ca0f0c45 100644 --- a/Documentation/media/uapi/v4l/pixfmt-sdr-ru12le.rst +++ b/Documentation/media/uapi/v4l/pixfmt-sdr-ru12le.rst @@ -6,7 +6,6 @@ V4L2_SDR_FMT_RU12LE ('RU12') **************************** -*man V4L2_SDR_FMT_RU12LE(2)* Real unsigned 12-bit little endian sample @@ -23,10 +22,10 @@ Each cell is one byte. + .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-sgbrg8.rst b/Documentation/media/uapi/v4l/pixfmt-sgbrg8.rst index 6345c24d86f3..5cd40d611d68 100644 --- a/Documentation/media/uapi/v4l/pixfmt-sgbrg8.rst +++ b/Documentation/media/uapi/v4l/pixfmt-sgbrg8.rst @@ -6,7 +6,6 @@ V4L2_PIX_FMT_SGBRG8 ('GBRG') **************************** -*man V4L2_PIX_FMT_SGBRG8(2)* Bayer RGB format @@ -26,10 +25,10 @@ Each cell is one byte. + .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-sgrbg8.rst b/Documentation/media/uapi/v4l/pixfmt-sgrbg8.rst index 51b7b8ef7519..05a09dbac494 100644 --- a/Documentation/media/uapi/v4l/pixfmt-sgrbg8.rst +++ b/Documentation/media/uapi/v4l/pixfmt-sgrbg8.rst @@ -6,7 +6,6 @@ V4L2_PIX_FMT_SGRBG8 ('GRBG') **************************** -*man V4L2_PIX_FMT_SGRBG8(2)* Bayer RGB format @@ -26,10 +25,10 @@ Each cell is one byte. + .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-srggb10.rst b/Documentation/media/uapi/v4l/pixfmt-srggb10.rst index 44a49563917c..8af756944fd4 100644 --- a/Documentation/media/uapi/v4l/pixfmt-srggb10.rst +++ b/Documentation/media/uapi/v4l/pixfmt-srggb10.rst @@ -9,7 +9,6 @@ V4L2_PIX_FMT_SRGGB10 ('RG10'), V4L2_PIX_FMT_SGRBG10 ('BA10'), V4L2_PIX_FMT_SGBRG10 ('GB10'), V4L2_PIX_FMT_SBGGR10 ('BG10'), *************************************************************************************************************************** -*man V4L2_PIX_FMT_SRGGB10(2)* V4L2_PIX_FMT_SGRBG10 V4L2_PIX_FMT_SGBRG10 @@ -33,10 +32,10 @@ Each cell is one byte, high 6 bits in high bytes are 0. + .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 1 1 1 1 - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-srggb10alaw8.rst b/Documentation/media/uapi/v4l/pixfmt-srggb10alaw8.rst index 68bae0cb764c..c44e093514de 100644 --- a/Documentation/media/uapi/v4l/pixfmt-srggb10alaw8.rst +++ b/Documentation/media/uapi/v4l/pixfmt-srggb10alaw8.rst @@ -9,8 +9,6 @@ V4L2_PIX_FMT_SBGGR10ALAW8 ('aBA8'), V4L2_PIX_FMT_SGBRG10ALAW8 ('aGA8'), V4L2_PIX_FMT_SGRBG10ALAW8 ('agA8'), V4L2_PIX_FMT_SRGGB10ALAW8 ('aRA8'), *********************************************************************************************************************************************** -*man V4L2_PIX_FMT_SBGGR10ALAW8(2)* - V4L2_PIX_FMT_SGBRG10ALAW8 V4L2_PIX_FMT_SGRBG10ALAW8 V4L2_PIX_FMT_SRGGB10ALAW8 diff --git a/Documentation/media/uapi/v4l/pixfmt-srggb10p.rst b/Documentation/media/uapi/v4l/pixfmt-srggb10p.rst index d71368f69087..a5752b9063e3 100644 --- a/Documentation/media/uapi/v4l/pixfmt-srggb10p.rst +++ b/Documentation/media/uapi/v4l/pixfmt-srggb10p.rst @@ -9,7 +9,6 @@ V4L2_PIX_FMT_SRGGB10P ('pRAA'), V4L2_PIX_FMT_SGRBG10P ('pgAA'), V4L2_PIX_FMT_SGBRG10P ('pGAA'), V4L2_PIX_FMT_SBGGR10P ('pBAA'), ******************************************************************************************************************************* -*man V4L2_PIX_FMT_SRGGB10P(2)* V4L2_PIX_FMT_SGRBG10P V4L2_PIX_FMT_SGBRG10P @@ -34,13 +33,16 @@ of one of these formats: **Byte Order.** Each cell is one byte. +.. raw:: latex + \newline\newline\begin{adjustbox}{width=\columnwidth} + +.. tabularcolumns:: |p{2.0cm}|p{1.3cm}|p{1.3cm}|p{1.3cm}|p{1.3cm}|p{10.9cm}| .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 1 - + :widths: 12 8 8 8 8 68 - .. row 1 @@ -101,3 +103,7 @@ Each cell is one byte. - G\ :sub:`30low`\ (bits 7--6) R\ :sub:`31low`\ (bits 5--4) G\ :sub:`32low`\ (bits 3--2) R\ :sub:`33low`\ (bits 1--0) + +.. raw:: latex + + \end{adjustbox}\newline\newline diff --git a/Documentation/media/uapi/v4l/pixfmt-srggb12.rst b/Documentation/media/uapi/v4l/pixfmt-srggb12.rst index f5303ab9e79c..109772fd0f23 100644 --- a/Documentation/media/uapi/v4l/pixfmt-srggb12.rst +++ b/Documentation/media/uapi/v4l/pixfmt-srggb12.rst @@ -10,7 +10,6 @@ V4L2_PIX_FMT_SRGGB12 ('RG12'), V4L2_PIX_FMT_SGRBG12 ('BA12'), V4L2_PIX_FMT_SGBRG12 ('GB12'), V4L2_PIX_FMT_SBGGR12 ('BG12'), *************************************************************************************************************************** -*man V4L2_PIX_FMT_SRGGB12(2)* V4L2_PIX_FMT_SGRBG12 V4L2_PIX_FMT_SGBRG12 @@ -34,10 +33,10 @@ Each cell is one byte, high 6 bits in high bytes are 0. + .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 1 1 1 1 - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-srggb8.rst b/Documentation/media/uapi/v4l/pixfmt-srggb8.rst index e88de4c48d47..41851bbde2cd 100644 --- a/Documentation/media/uapi/v4l/pixfmt-srggb8.rst +++ b/Documentation/media/uapi/v4l/pixfmt-srggb8.rst @@ -6,7 +6,6 @@ V4L2_PIX_FMT_SRGGB8 ('RGGB') **************************** -*man V4L2_PIX_FMT_SRGGB8(2)* Bayer RGB format @@ -26,10 +25,10 @@ Each cell is one byte. + .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-uv8.rst b/Documentation/media/uapi/v4l/pixfmt-uv8.rst index fa8f7ee9fee1..8c4ebbf79ca0 100644 --- a/Documentation/media/uapi/v4l/pixfmt-uv8.rst +++ b/Documentation/media/uapi/v4l/pixfmt-uv8.rst @@ -6,7 +6,6 @@ V4L2_PIX_FMT_UV8 ('UV8') ************************ -*man V4L2_PIX_FMT_UV8(2)* UV plane interleaved @@ -21,10 +20,10 @@ Each cell is one byte. + .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-uyvy.rst b/Documentation/media/uapi/v4l/pixfmt-uyvy.rst index 87b0081d44ee..ed8ccf52b1db 100644 --- a/Documentation/media/uapi/v4l/pixfmt-uyvy.rst +++ b/Documentation/media/uapi/v4l/pixfmt-uyvy.rst @@ -6,7 +6,6 @@ V4L2_PIX_FMT_UYVY ('UYVY') ************************** -*man V4L2_PIX_FMT_UYVY(2)* Variation of ``V4L2_PIX_FMT_YUYV`` with different order of samples in memory @@ -23,10 +22,10 @@ half the horizontal resolution of the Y component. **Byte Order.** Each cell is one byte. + .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 1 1 1 1 - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-vyuy.rst b/Documentation/media/uapi/v4l/pixfmt-vyuy.rst index 5d8f99f173b6..d62c1ac4ed08 100644 --- a/Documentation/media/uapi/v4l/pixfmt-vyuy.rst +++ b/Documentation/media/uapi/v4l/pixfmt-vyuy.rst @@ -6,7 +6,6 @@ V4L2_PIX_FMT_VYUY ('VYUY') ************************** -*man V4L2_PIX_FMT_VYUY(2)* Variation of ``V4L2_PIX_FMT_YUYV`` with different order of samples in memory @@ -23,10 +22,10 @@ half the horizontal resolution of the Y component. **Byte Order.** Each cell is one byte. + .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 1 1 1 1 - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-y10.rst b/Documentation/media/uapi/v4l/pixfmt-y10.rst index d22f77138289..cb78e365a84c 100644 --- a/Documentation/media/uapi/v4l/pixfmt-y10.rst +++ b/Documentation/media/uapi/v4l/pixfmt-y10.rst @@ -6,7 +6,6 @@ V4L2_PIX_FMT_Y10 ('Y10 ') ************************* -*man V4L2_PIX_FMT_Y10(2)* Grey-scale image @@ -23,10 +22,10 @@ Each cell is one byte. + .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 1 1 1 1 - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-y10b.rst b/Documentation/media/uapi/v4l/pixfmt-y10b.rst index 5b50cd61e654..e89850bfef58 100644 --- a/Documentation/media/uapi/v4l/pixfmt-y10b.rst +++ b/Documentation/media/uapi/v4l/pixfmt-y10b.rst @@ -6,8 +6,6 @@ V4L2_PIX_FMT_Y10BPACK ('Y10B') ****************************** -*man V4L2_PIX_FMT_Y10BPACK(2)* - Grey-scale image as a bit-packed array @@ -24,13 +22,9 @@ first from the left. pixels cross the byte boundary and have a ratio of 5 bytes for each 4 pixels. - - .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 - - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-y12.rst b/Documentation/media/uapi/v4l/pixfmt-y12.rst index 7729bcbf3350..0958e87b6d22 100644 --- a/Documentation/media/uapi/v4l/pixfmt-y12.rst +++ b/Documentation/media/uapi/v4l/pixfmt-y12.rst @@ -6,7 +6,6 @@ V4L2_PIX_FMT_Y12 ('Y12 ') ************************* -*man V4L2_PIX_FMT_Y12(2)* Grey-scale image @@ -23,10 +22,10 @@ Each cell is one byte. + .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 1 1 1 1 - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-y12i.rst b/Documentation/media/uapi/v4l/pixfmt-y12i.rst index 8967e8c33b47..e66d8bcdb410 100644 --- a/Documentation/media/uapi/v4l/pixfmt-y12i.rst +++ b/Documentation/media/uapi/v4l/pixfmt-y12i.rst @@ -6,8 +6,6 @@ V4L2_PIX_FMT_Y12I ('Y12I') ************************** -*man V4L2_PIX_FMT_Y12I(2)* - Interleaved grey-scale image, e.g. from a stereo-pair @@ -32,7 +30,6 @@ interleaved pixel. .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-y16-be.rst b/Documentation/media/uapi/v4l/pixfmt-y16-be.rst index 37fa099c16a6..fc23c6b12193 100644 --- a/Documentation/media/uapi/v4l/pixfmt-y16-be.rst +++ b/Documentation/media/uapi/v4l/pixfmt-y16-be.rst @@ -6,7 +6,6 @@ V4L2_PIX_FMT_Y16_BE ('Y16 ' | (1 << 31)) **************************************** -*man V4L2_PIX_FMT_Y16_BE(2)* Grey-scale image @@ -17,7 +16,9 @@ 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:: Tthe actual sampling precision may be lower than 16 bits, for +.. note:: + + The actual sampling precision may be lower than 16 bits, for example 10 bits per pixel with values in range 0 to 1023. **Byte Order.** @@ -25,10 +26,10 @@ Each cell is one byte. + .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 1 1 1 1 - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-y16.rst b/Documentation/media/uapi/v4l/pixfmt-y16.rst index 4c41c042188b..6b4edc4e34e5 100644 --- a/Documentation/media/uapi/v4l/pixfmt-y16.rst +++ b/Documentation/media/uapi/v4l/pixfmt-y16.rst @@ -6,7 +6,6 @@ V4L2_PIX_FMT_Y16 ('Y16 ') ************************* -*man V4L2_PIX_FMT_Y16(2)* Grey-scale image @@ -17,7 +16,9 @@ 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 +.. note:: + + The actual sampling precision may be lower than 16 bits, for example 10 bits per pixel with values in range 0 to 1023. **Byte Order.** @@ -25,10 +26,10 @@ Each cell is one byte. + .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 1 1 1 1 - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-y41p.rst b/Documentation/media/uapi/v4l/pixfmt-y41p.rst index 4760174a4668..9c3194bbf77e 100644 --- a/Documentation/media/uapi/v4l/pixfmt-y41p.rst +++ b/Documentation/media/uapi/v4l/pixfmt-y41p.rst @@ -6,7 +6,6 @@ V4L2_PIX_FMT_Y41P ('Y41P') ************************** -*man V4L2_PIX_FMT_Y41P(2)* Format with ¼ horizontal chroma resolution, also known as YUV 4:1:1 @@ -30,10 +29,10 @@ Each cell is one byte. + .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 1 1 1 1 1 1 1 1 - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-y8i.rst b/Documentation/media/uapi/v4l/pixfmt-y8i.rst index 7fa16ee85ab7..16bdfbbe6915 100644 --- a/Documentation/media/uapi/v4l/pixfmt-y8i.rst +++ b/Documentation/media/uapi/v4l/pixfmt-y8i.rst @@ -6,7 +6,6 @@ V4L2_PIX_FMT_Y8I ('Y8I ') ************************* -*man V4L2_PIX_FMT_Y8I(2)* Interleaved grey-scale image, e.g. from a stereo-pair @@ -24,10 +23,10 @@ Each cell is one byte. + .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 1 1 1 1 - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-yuv410.rst b/Documentation/media/uapi/v4l/pixfmt-yuv410.rst index 8a5d1a2ee005..54909839b0d1 100644 --- a/Documentation/media/uapi/v4l/pixfmt-yuv410.rst +++ b/Documentation/media/uapi/v4l/pixfmt-yuv410.rst @@ -7,7 +7,6 @@ V4L2_PIX_FMT_YVU410 ('YVU9'), V4L2_PIX_FMT_YUV410 ('YUV9') ********************************************************** -*man V4L2_PIX_FMT_YVU410(2)* V4L2_PIX_FMT_YUV410 Planar formats with ¼ horizontal and vertical chroma resolution, also @@ -37,10 +36,10 @@ Each cell is one byte. + .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-yuv411p.rst b/Documentation/media/uapi/v4l/pixfmt-yuv411p.rst index f85e3f388cbe..913f68fe2536 100644 --- a/Documentation/media/uapi/v4l/pixfmt-yuv411p.rst +++ b/Documentation/media/uapi/v4l/pixfmt-yuv411p.rst @@ -6,7 +6,6 @@ V4L2_PIX_FMT_YUV411P ('411P') ***************************** -*man V4L2_PIX_FMT_YUV411P(2)* Format with ¼ horizontal chroma resolution, also known as YUV 4:1:1. Planar layout as opposed to ``V4L2_PIX_FMT_Y41P`` @@ -33,10 +32,10 @@ have ¼ as many pad bytes after their rows. In other words, four C x rows Each cell is one byte. + .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-yuv420.rst b/Documentation/media/uapi/v4l/pixfmt-yuv420.rst index b22e64c14f67..a7f17e40b59e 100644 --- a/Documentation/media/uapi/v4l/pixfmt-yuv420.rst +++ b/Documentation/media/uapi/v4l/pixfmt-yuv420.rst @@ -7,7 +7,6 @@ V4L2_PIX_FMT_YVU420 ('YV12'), V4L2_PIX_FMT_YUV420 ('YU12') ********************************************************** -*man V4L2_PIX_FMT_YVU420(2)* V4L2_PIX_FMT_YUV420 Planar formats with ½ horizontal and vertical chroma resolution, also @@ -38,10 +37,10 @@ Each cell is one byte. + .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-yuv420m.rst b/Documentation/media/uapi/v4l/pixfmt-yuv420m.rst index 4dab85090d7d..588784512944 100644 --- a/Documentation/media/uapi/v4l/pixfmt-yuv420m.rst +++ b/Documentation/media/uapi/v4l/pixfmt-yuv420m.rst @@ -7,7 +7,6 @@ V4L2_PIX_FMT_YUV420M ('YM12'), V4L2_PIX_FMT_YVU420M ('YM21') ************************************************************ -*man V4L2_PIX_FMT_YUV420M(2)* V4L2_PIX_FMT_YVU420M Variation of ``V4L2_PIX_FMT_YUV420`` and ``V4L2_PIX_FMT_YVU420`` with @@ -45,10 +44,10 @@ Each cell is one byte. + .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-yuv422m.rst b/Documentation/media/uapi/v4l/pixfmt-yuv422m.rst index ccb67284133a..0c0a462c4dde 100644 --- a/Documentation/media/uapi/v4l/pixfmt-yuv422m.rst +++ b/Documentation/media/uapi/v4l/pixfmt-yuv422m.rst @@ -7,7 +7,6 @@ V4L2_PIX_FMT_YUV422M ('YM16'), V4L2_PIX_FMT_YVU422M ('YM61') ************************************************************ -*man V4L2_PIX_FMT_YUV422M(2)* V4L2_PIX_FMT_YVU422M Planar formats with ½ horizontal resolution, also known as YUV and YVU @@ -44,10 +43,10 @@ Each cell is one byte. + .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-yuv422p.rst b/Documentation/media/uapi/v4l/pixfmt-yuv422p.rst index 9f34762adf18..9618f0d24265 100644 --- a/Documentation/media/uapi/v4l/pixfmt-yuv422p.rst +++ b/Documentation/media/uapi/v4l/pixfmt-yuv422p.rst @@ -6,7 +6,6 @@ V4L2_PIX_FMT_YUV422P ('422P') ***************************** -*man V4L2_PIX_FMT_YUV422P(2)* Format with ½ horizontal chroma resolution, also known as YUV 4:2:2. Planar layout as opposed to ``V4L2_PIX_FMT_YUYV`` @@ -34,10 +33,10 @@ Each cell is one byte. + .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-yuv444m.rst b/Documentation/media/uapi/v4l/pixfmt-yuv444m.rst index 04f34508b934..5985d45efb2c 100644 --- a/Documentation/media/uapi/v4l/pixfmt-yuv444m.rst +++ b/Documentation/media/uapi/v4l/pixfmt-yuv444m.rst @@ -7,7 +7,6 @@ V4L2_PIX_FMT_YUV444M ('YM24'), V4L2_PIX_FMT_YVU444M ('YM42') ************************************************************ -*man V4L2_PIX_FMT_YUV444M(2)* V4L2_PIX_FMT_YVU444M Planar formats with full horizontal resolution, also known as YUV and @@ -38,10 +37,10 @@ described in :ref:`planar-apis`. **Byte Order.** Each cell is one byte. + .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-yuyv.rst b/Documentation/media/uapi/v4l/pixfmt-yuyv.rst index 52917dfa9261..10deab080d51 100644 --- a/Documentation/media/uapi/v4l/pixfmt-yuyv.rst +++ b/Documentation/media/uapi/v4l/pixfmt-yuyv.rst @@ -6,7 +6,6 @@ V4L2_PIX_FMT_YUYV ('YUYV') ************************** -*man V4L2_PIX_FMT_YUYV(2)* Packed format with ½ horizontal chroma resolution, also known as YUV 4:2:2 @@ -26,10 +25,10 @@ Each cell is one byte. + .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 1 1 1 1 - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-yvyu.rst b/Documentation/media/uapi/v4l/pixfmt-yvyu.rst index e466052b68b2..d126f08c1adc 100644 --- a/Documentation/media/uapi/v4l/pixfmt-yvyu.rst +++ b/Documentation/media/uapi/v4l/pixfmt-yvyu.rst @@ -6,7 +6,6 @@ V4L2_PIX_FMT_YVYU ('YVYU') ************************** -*man V4L2_PIX_FMT_YVYU(2)* Variation of ``V4L2_PIX_FMT_YUYV`` with different order of samples in memory @@ -23,10 +22,10 @@ half the horizontal resolution of the Y component. **Byte Order.** Each cell is one byte. + .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 1 1 1 1 - .. row 1 diff --git a/Documentation/media/uapi/v4l/pixfmt-z16.rst b/Documentation/media/uapi/v4l/pixfmt-z16.rst index 4ebc561d0480..97fe1483a481 100644 --- a/Documentation/media/uapi/v4l/pixfmt-z16.rst +++ b/Documentation/media/uapi/v4l/pixfmt-z16.rst @@ -6,7 +6,6 @@ V4L2_PIX_FMT_Z16 ('Z16 ') ************************* -*man V4L2_PIX_FMT_Z16(2)* 16-bit depth data with distance values at each pixel @@ -24,10 +23,10 @@ Each cell is one byte. + .. flat-table:: :header-rows: 0 :stub-columns: 0 - :widths: 2 1 1 1 1 1 1 1 1 - .. row 1 diff --git a/Documentation/media/uapi/v4l/standard.rst b/Documentation/media/uapi/v4l/standard.rst index c4f678f545ec..2320008f6063 100644 --- a/Documentation/media/uapi/v4l/standard.rst +++ b/Documentation/media/uapi/v4l/standard.rst @@ -41,7 +41,9 @@ output applications call the :ref:`VIDIOC_G_STD <VIDIOC_G_STD>` and *received* standard can be sensed with the :ref:`VIDIOC_QUERYSTD` ioctl. -..note:: The parameter of all these ioctls is a pointer to a +.. note:: + + The parameter of all these ioctls is a pointer to a :ref:`v4l2_std_id <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. diff --git a/Documentation/media/uapi/v4l/subdev-formats.rst b/Documentation/media/uapi/v4l/subdev-formats.rst index 6dbb27b09c34..8b1ba4f53b18 100644 --- a/Documentation/media/uapi/v4l/subdev-formats.rst +++ b/Documentation/media/uapi/v4l/subdev-formats.rst @@ -5,6 +5,7 @@ Media Bus Formats ================= +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| .. _v4l2-mbus-framefmt: @@ -153,13 +154,25 @@ half of the green value) transferred first will be named The following tables list existing packed RGB formats. +.. HACK: ideally, we would be using adjustbox here. However, Sphinx +.. is a very bad behaviored guy: if the table has more than 30 cols, +.. it switches to long table, and there's no way to override it. + + +.. tabularcolumns:: |p{4.0cm}|p{0.7cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}| .. _v4l2-mbus-pixelcode-rgb: +.. raw:: latex + + \begingroup + \tiny + \setlength{\tabcolsep}{2pt} + .. flat-table:: RGB formats :header-rows: 2 :stub-columns: 0 - + :widths: 36 7 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - .. row 1 @@ -247,45 +260,45 @@ The following tables list existing packed RGB formats. - 0x1016 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - r\ :sub:`3` @@ -318,53 +331,53 @@ The following tables list existing packed RGB formats. - 0x1001 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - 0 @@ -387,53 +400,53 @@ The following tables list existing packed RGB formats. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - g\ :sub:`3` @@ -458,53 +471,53 @@ The following tables list existing packed RGB formats. - 0x1002 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - g\ :sub:`3` @@ -527,53 +540,53 @@ The following tables list existing packed RGB formats. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - 0 @@ -598,53 +611,53 @@ The following tables list existing packed RGB formats. - 0x1003 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - 0 @@ -667,53 +680,53 @@ The following tables list existing packed RGB formats. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - g\ :sub:`2` @@ -738,53 +751,53 @@ The following tables list existing packed RGB formats. - 0x1004 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - g\ :sub:`2` @@ -807,53 +820,53 @@ The following tables list existing packed RGB formats. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - 0 @@ -878,37 +891,37 @@ The following tables list existing packed RGB formats. - 0x1017 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - r\ :sub:`4` @@ -949,53 +962,53 @@ The following tables list existing packed RGB formats. - 0x1005 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - b\ :sub:`4` @@ -1018,53 +1031,53 @@ The following tables list existing packed RGB formats. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - g\ :sub:`2` @@ -1089,53 +1102,53 @@ The following tables list existing packed RGB formats. - 0x1006 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - g\ :sub:`2` @@ -1158,53 +1171,53 @@ The following tables list existing packed RGB formats. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - b\ :sub:`4` @@ -1229,53 +1242,53 @@ The following tables list existing packed RGB formats. - 0x1007 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - r\ :sub:`4` @@ -1298,53 +1311,53 @@ The following tables list existing packed RGB formats. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - g\ :sub:`2` @@ -1369,53 +1382,53 @@ The following tables list existing packed RGB formats. - 0x1008 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - g\ :sub:`2` @@ -1438,53 +1451,53 @@ The following tables list existing packed RGB formats. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - r\ :sub:`4` @@ -1509,33 +1522,33 @@ The following tables list existing packed RGB formats. - 0x1009 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - r\ :sub:`5` @@ -1580,21 +1593,21 @@ The following tables list existing packed RGB formats. - 0x100e - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - r\ :sub:`7` @@ -1651,21 +1664,21 @@ The following tables list existing packed RGB formats. - 0x1015 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - 0 @@ -1722,21 +1735,21 @@ The following tables list existing packed RGB formats. - 0x1013 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - b\ :sub:`7` @@ -1793,21 +1806,21 @@ The following tables list existing packed RGB formats. - 0x1014 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - g\ :sub:`7` @@ -1864,21 +1877,21 @@ The following tables list existing packed RGB formats. - 0x100a - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - r\ :sub:`7` @@ -1935,45 +1948,45 @@ The following tables list existing packed RGB formats. - 0x100b - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - r\ :sub:`7` @@ -2004,45 +2017,45 @@ The following tables list existing packed RGB formats. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - g\ :sub:`3` @@ -2075,45 +2088,45 @@ The following tables list existing packed RGB formats. - 0x100c - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - g\ :sub:`3` @@ -2144,45 +2157,45 @@ The following tables list existing packed RGB formats. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - r\ :sub:`7` @@ -2350,6 +2363,9 @@ The following tables list existing packed RGB formats. - b\ :sub:`0` +.. raw:: latex + + \endgroup On LVDS buses, usually each sample is transferred serialized in seven time slots per pixel clock, on three (18-bit) or four (24-bit) @@ -2359,6 +2375,9 @@ for control signals as defined by SPWG/PSWG/VESA or JEIDA standards. The JEIDA defined bit mapping will be named ``MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA``, for example. +.. raw:: latex + + \begin{adjustbox}{width=\columnwidth} .. _v4l2-mbus-pixelcode-rgb-lvds: @@ -2402,7 +2421,7 @@ JEIDA defined bit mapping will be named - 0 - - - - + - - d @@ -2417,7 +2436,7 @@ JEIDA defined bit mapping will be named - 1 - - - - + - - d @@ -2432,7 +2451,7 @@ JEIDA defined bit mapping will be named - 2 - - - - + - - d @@ -2447,7 +2466,7 @@ JEIDA defined bit mapping will be named - 3 - - - - + - - b\ :sub:`5` @@ -2462,7 +2481,7 @@ JEIDA defined bit mapping will be named - 4 - - - - + - - b\ :sub:`4` @@ -2477,7 +2496,7 @@ JEIDA defined bit mapping will be named - 5 - - - - + - - b\ :sub:`3` @@ -2492,7 +2511,7 @@ JEIDA defined bit mapping will be named - 6 - - - - + - - b\ :sub:`2` @@ -2714,6 +2733,9 @@ JEIDA defined bit mapping will be named - r\ :sub:`2` +.. raw:: latex + + \end{adjustbox}\newline\newline Bayer Formats @@ -2768,8 +2790,16 @@ The following table lists existing packed Bayer formats. The data organization is given as an example for the first pixel only. +.. raw:: latex + + \newline\newline\begin{adjustbox}{width=\columnwidth} + +.. tabularcolumns:: |p{7.6cm}|p{1.6cm}|p{0.7cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}| + .. _v4l2-mbus-pixelcode-bayer: +.. cssclass: longtable + .. flat-table:: Bayer Formats :header-rows: 2 :stub-columns: 0 @@ -2821,13 +2851,13 @@ organization is given as an example for the first pixel only. - 0x3001 - - - - + - - - - + - - - - + - - - - + - - b\ :sub:`7` @@ -2852,13 +2882,13 @@ organization is given as an example for the first pixel only. - 0x3013 - - - - + - - - - + - - - - + - - - - + - - g\ :sub:`7` @@ -2883,13 +2913,13 @@ organization is given as an example for the first pixel only. - 0x3002 - - - - + - - - - + - - - - + - - - - + - - g\ :sub:`7` @@ -2914,13 +2944,13 @@ organization is given as an example for the first pixel only. - 0x3014 - - - - + - - - - + - - - - + - - - - + - - r\ :sub:`7` @@ -2945,13 +2975,13 @@ organization is given as an example for the first pixel only. - 0x3015 - - - - + - - - - + - - - - + - - - - + - - b\ :sub:`7` @@ -2976,13 +3006,13 @@ organization is given as an example for the first pixel only. - 0x3016 - - - - + - - - - + - - - - + - - - - + - - g\ :sub:`7` @@ -3007,13 +3037,13 @@ organization is given as an example for the first pixel only. - 0x3017 - - - - + - - - - + - - - - + - - - - + - - g\ :sub:`7` @@ -3038,13 +3068,13 @@ organization is given as an example for the first pixel only. - 0x3018 - - - - + - - - - + - - - - + - - - - + - - r\ :sub:`7` @@ -3069,13 +3099,13 @@ organization is given as an example for the first pixel only. - 0x300b - - - - + - - - - + - - - - + - - - - + - - b\ :sub:`7` @@ -3100,13 +3130,13 @@ organization is given as an example for the first pixel only. - 0x300c - - - - + - - - - + - - - - + - - - - + - - g\ :sub:`7` @@ -3131,13 +3161,13 @@ organization is given as an example for the first pixel only. - 0x3009 - - - - + - - - - + - - - - + - - - - + - - g\ :sub:`7` @@ -3162,13 +3192,13 @@ organization is given as an example for the first pixel only. - 0x300d - - - - + - - - - + - - - - + - - - - + - - r\ :sub:`7` @@ -3193,13 +3223,13 @@ organization is given as an example for the first pixel only. - 0x3003 - - - - + - - - - + - - - - + - - - - + - - 0 @@ -3222,13 +3252,13 @@ organization is given as an example for the first pixel only. - - - - - - + - - - - + - - - - + - - - - + - - b\ :sub:`7` @@ -3253,13 +3283,13 @@ organization is given as an example for the first pixel only. - 0x3004 - - - - + - - - - + - - - - + - - - - + - - b\ :sub:`7` @@ -3282,13 +3312,13 @@ organization is given as an example for the first pixel only. - - - - - - + - - - - + - - - - + - - - - + - - 0 @@ -3313,13 +3343,13 @@ organization is given as an example for the first pixel only. - 0x3005 - - - - + - - - - + - - - - + - - - - + - - b\ :sub:`9` @@ -3342,13 +3372,13 @@ organization is given as an example for the first pixel only. - - - - - - + - - - - + - - - - + - - - - + - - b\ :sub:`1` @@ -3373,13 +3403,13 @@ organization is given as an example for the first pixel only. - 0x3006 - - - - + - - - - + - - - - + - - - - + - - b\ :sub:`1` @@ -3402,13 +3432,13 @@ organization is given as an example for the first pixel only. - - - - - - + - - - - + - - - - + - - - - + - - b\ :sub:`9` @@ -3433,9 +3463,9 @@ organization is given as an example for the first pixel only. - 0x3007 - - - - + - - - - + - - b\ :sub:`9` @@ -3464,9 +3494,9 @@ organization is given as an example for the first pixel only. - 0x300e - - - - + - - - - + - - g\ :sub:`9` @@ -3495,9 +3525,9 @@ organization is given as an example for the first pixel only. - 0x300a - - - - + - - - - + - - g\ :sub:`9` @@ -3526,9 +3556,9 @@ organization is given as an example for the first pixel only. - 0x300f - - - - + - - - - + - - r\ :sub:`9` @@ -3674,6 +3704,9 @@ organization is given as an example for the first pixel only. - r\ :sub:`0` +.. raw:: latex + + \end{adjustbox}\newline\newline Packed YUV Formats @@ -3726,17 +3759,31 @@ the following codes. - a\ :sub:`x` for alpha component bit number x -- - for non-available bits (for positions higher than the bus width) +- for non-available bits (for positions higher than the bus width) - d for dummy bits +.. tabularcolumns:: |p{4.0cm}|p{0.7cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}|p{0.22cm}| + .. _v4l2-mbus-pixelcode-yuv8: + +.. HACK: ideally, we would be using adjustbox here. However, this +.. will never work for this table, as, even with tiny font, it is +.. to big for a single page. So, we need to manually adjust the +.. size. + +.. raw:: latex + + \begingroup + \tiny + \setlength{\tabcolsep}{2pt} + .. flat-table:: YUV Formats :header-rows: 2 :stub-columns: 0 - + :widths: 36 7 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - .. row 1 @@ -3824,53 +3871,53 @@ the following codes. - 0x2001 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -3895,53 +3942,53 @@ the following codes. - 0x2015 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - u\ :sub:`7` @@ -3964,53 +4011,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - v\ :sub:`7` @@ -4035,53 +4082,53 @@ the following codes. - 0x2002 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - u\ :sub:`7` @@ -4104,53 +4151,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -4173,53 +4220,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -4242,53 +4289,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - v\ :sub:`7` @@ -4311,53 +4358,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -4380,53 +4427,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -4451,53 +4498,53 @@ the following codes. - 0x2003 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - v\ :sub:`7` @@ -4520,53 +4567,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -4589,53 +4636,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -4658,53 +4705,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - u\ :sub:`7` @@ -4727,53 +4774,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -4796,53 +4843,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -4867,53 +4914,53 @@ the following codes. - 0x2004 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -4936,53 +4983,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -5005,53 +5052,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - u\ :sub:`7` @@ -5074,53 +5121,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -5143,53 +5190,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -5212,53 +5259,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - v\ :sub:`7` @@ -5283,53 +5330,53 @@ the following codes. - 0x2005 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -5352,53 +5399,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -5421,53 +5468,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - v\ :sub:`7` @@ -5490,53 +5537,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -5559,53 +5606,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -5628,53 +5675,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - u\ :sub:`7` @@ -5699,53 +5746,53 @@ the following codes. - 0x2006 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - u\ :sub:`7` @@ -5768,53 +5815,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -5837,53 +5884,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - v\ :sub:`7` @@ -5906,53 +5953,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -5977,53 +6024,53 @@ the following codes. - 0x2007 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - v\ :sub:`7` @@ -6046,53 +6093,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -6115,53 +6162,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - u\ :sub:`7` @@ -6184,53 +6231,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -6255,53 +6302,53 @@ the following codes. - 0x2008 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -6324,53 +6371,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - u\ :sub:`7` @@ -6393,53 +6440,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -6462,53 +6509,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - v\ :sub:`7` @@ -6533,53 +6580,53 @@ the following codes. - 0x2009 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -6602,53 +6649,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - v\ :sub:`7` @@ -6671,53 +6718,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -6740,53 +6787,53 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - u\ :sub:`7` @@ -6811,49 +6858,49 @@ the following codes. - 0x200a - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`9` @@ -6882,49 +6929,49 @@ the following codes. - 0x2018 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - u\ :sub:`9` @@ -6951,49 +6998,49 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`9` @@ -7020,49 +7067,49 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - v\ :sub:`9` @@ -7089,49 +7136,49 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`9` @@ -7160,49 +7207,49 @@ the following codes. - 0x2019 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - v\ :sub:`9` @@ -7229,49 +7276,49 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`9` @@ -7298,49 +7345,49 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - u\ :sub:`9` @@ -7367,49 +7414,49 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`9` @@ -7438,49 +7485,49 @@ the following codes. - 0x200b - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`9` @@ -7507,49 +7554,49 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - u\ :sub:`9` @@ -7576,49 +7623,49 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`9` @@ -7645,49 +7692,49 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - v\ :sub:`9` @@ -7716,49 +7763,49 @@ the following codes. - 0x200c - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`9` @@ -7785,49 +7832,49 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - v\ :sub:`9` @@ -7854,49 +7901,49 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`9` @@ -7923,49 +7970,49 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - u\ :sub:`9` @@ -7994,45 +8041,45 @@ the following codes. - 0x2013 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`11` @@ -8065,45 +8112,45 @@ the following codes. - 0x201c - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - u\ :sub:`11` @@ -8134,45 +8181,45 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`11` @@ -8203,45 +8250,45 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - v\ :sub:`11` @@ -8272,45 +8319,45 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`11` @@ -8343,45 +8390,45 @@ the following codes. - 0x201d - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - v\ :sub:`11` @@ -8412,45 +8459,45 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`11` @@ -8481,45 +8528,45 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - u\ :sub:`11` @@ -8550,45 +8597,45 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`11` @@ -8621,45 +8668,45 @@ the following codes. - 0x201e - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`11` @@ -8690,45 +8737,45 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - u\ :sub:`11` @@ -8759,45 +8806,45 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`11` @@ -8828,45 +8875,45 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - v\ :sub:`11` @@ -8899,45 +8946,45 @@ the following codes. - 0x201f - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`11` @@ -8968,45 +9015,45 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - v\ :sub:`11` @@ -9037,45 +9084,45 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`11` @@ -9106,45 +9153,45 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - u\ :sub:`11` @@ -9177,37 +9224,37 @@ the following codes. - 0x200f - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - u\ :sub:`7` @@ -9246,37 +9293,37 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - v\ :sub:`7` @@ -9317,37 +9364,37 @@ the following codes. - 0x2010 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - v\ :sub:`7` @@ -9386,37 +9433,37 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - u\ :sub:`7` @@ -9457,37 +9504,37 @@ the following codes. - 0x2011 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -9526,37 +9573,37 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -9597,37 +9644,37 @@ the following codes. - 0x2012 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -9666,37 +9713,37 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -9737,37 +9784,37 @@ the following codes. - 0x2014 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -9806,37 +9853,37 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -9875,37 +9922,37 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -9944,37 +9991,37 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -10015,29 +10062,29 @@ the following codes. - 0x201a - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - u\ :sub:`9` @@ -10084,29 +10131,29 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - v\ :sub:`9` @@ -10155,29 +10202,29 @@ the following codes. - 0x201b - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - v\ :sub:`9` @@ -10224,29 +10271,29 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - u\ :sub:`9` @@ -10295,29 +10342,29 @@ the following codes. - 0x200d - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`9` @@ -10364,29 +10411,29 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`9` @@ -10435,29 +10482,29 @@ the following codes. - 0x200e - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`9` @@ -10504,29 +10551,29 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`9` @@ -10575,21 +10622,21 @@ the following codes. - 0x201a - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - v\ :sub:`7` @@ -10646,21 +10693,21 @@ the following codes. - 0x2025 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`7` @@ -10717,21 +10764,21 @@ the following codes. - 0x2020 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - u\ :sub:`11` @@ -10786,21 +10833,21 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - v\ :sub:`11` @@ -10857,21 +10904,21 @@ the following codes. - 0x2021 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - v\ :sub:`11` @@ -10926,21 +10973,21 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - u\ :sub:`11` @@ -10997,21 +11044,21 @@ the following codes. - 0x2022 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`11` @@ -11066,21 +11113,21 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`11` @@ -11137,21 +11184,21 @@ the following codes. - 0x2023 - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`11` @@ -11206,21 +11253,21 @@ the following codes. - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - y\ :sub:`11` @@ -11277,9 +11324,9 @@ the following codes. - 0x2016 - - - - + - - - - + - - y\ :sub:`9` @@ -11413,6 +11460,9 @@ the following codes. - v\ :sub:`0` +.. raw:: latex + + \endgroup HSV/HSL Formats ^^^^^^^^^^^^^^^ @@ -11447,13 +11497,18 @@ following information. The following table lists existing HSV/HSL formats. +.. raw:: latex + + \newline\newline\begin{adjustbox}{width=\columnwidth} + +.. tabularcolumns:: |p{6.2cm}|p{1.6cm}|p{0.7cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}|p{0.5cm}| .. _v4l2-mbus-pixelcode-hsv: .. flat-table:: HSV/HSL formats :header-rows: 2 :stub-columns: 0 - + :widths: 28 7 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - .. row 1 @@ -11605,6 +11660,9 @@ The following table lists existing HSV/HSL formats. - v\ :sub:`0` +.. raw:: latex + + \end{adjustbox}\newline\newline JPEG Compressed Formats @@ -11626,6 +11684,8 @@ The following table lists existing JPEG compressed formats. .. _v4l2-mbus-pixelcode-jpeg: +.. tabularcolumns:: |p{5.6cm}|p{1.2cm}|p{10.7cm}| + .. flat-table:: JPEG Formats :header-rows: 1 :stub-columns: 0 @@ -11665,6 +11725,8 @@ formats. .. _v4l2-mbus-pixelcode-vendor-specific: +.. tabularcolumns:: |p{6.6cm}|p{1.2cm}|p{9.7cm}| + .. flat-table:: Vendor and device specific formats :header-rows: 1 :stub-columns: 0 diff --git a/Documentation/media/uapi/v4l/tuner.rst b/Documentation/media/uapi/v4l/tuner.rst index 37eb4b9b95fb..c3df65c2e320 100644 --- a/Documentation/media/uapi/v4l/tuner.rst +++ b/Documentation/media/uapi/v4l/tuner.rst @@ -28,7 +28,9 @@ struct :ref:`v4l2_tuner <v4l2-tuner>` returned by :ref:`VIDIOC_G_TUNER <VIDIOC_G also contains signal status information applicable when the tuner of the current video or radio input is queried. -.. note:: :ref:`VIDIOC_S_TUNER <VIDIOC_G_TUNER>` does not switch the +.. note:: + + :ref:`VIDIOC_S_TUNER <VIDIOC_G_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 struct :ref:`v4l2_capability diff --git a/Documentation/media/uapi/v4l/userp.rst b/Documentation/media/uapi/v4l/userp.rst index 1d8b14bd4cdc..0371e068c50b 100644 --- a/Documentation/media/uapi/v4l/userp.rst +++ b/Documentation/media/uapi/v4l/userp.rst @@ -88,7 +88,9 @@ To start and stop capturing or output applications call the :ref:`VIDIOC_STREAMON <VIDIOC_STREAMON>` and :ref:`VIDIOC_STREAMOFF <VIDIOC_STREAMON>` ioctl. -.. note:: ref:`VIDIOC_STREAMOFF <VIDIOC_STREAMON>` removes all buffers from +.. note:: + + ref:`VIDIOC_STREAMOFF <VIDIOC_STREAMON>` 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 diff --git a/Documentation/media/uapi/v4l/v4l2-selection-flags.rst b/Documentation/media/uapi/v4l/v4l2-selection-flags.rst index 3ce3731faf5f..9ef139f8e21d 100644 --- a/Documentation/media/uapi/v4l/v4l2-selection-flags.rst +++ b/Documentation/media/uapi/v4l/v4l2-selection-flags.rst @@ -6,6 +6,7 @@ Selection flags *************** +.. tabularcolumns:: |p{5.2cm}|p{2.0cm}|p{6.5cm}|p{1.2cm}|p{1.6cm}| .. _v4l2-selection-flags-table: diff --git a/Documentation/media/uapi/v4l/v4l2-selection-targets.rst b/Documentation/media/uapi/v4l/v4l2-selection-targets.rst index 7519099a50cd..a82b58f5ebcf 100644 --- a/Documentation/media/uapi/v4l/v4l2-selection-targets.rst +++ b/Documentation/media/uapi/v4l/v4l2-selection-targets.rst @@ -12,6 +12,8 @@ of the two interfaces they are used. .. _v4l2-selection-targets-table: +.. tabularcolumns:: |p{5.8cm}|p{1.4cm}|p{6.5cm}|p{1.2cm}|p{1.6cm}| + .. flat-table:: Selection target definitions :header-rows: 1 :stub-columns: 0 diff --git a/Documentation/media/uapi/v4l/vidioc-create-bufs.rst b/Documentation/media/uapi/v4l/vidioc-create-bufs.rst index abdc0b4d83d5..b4b16aebac98 100644 --- a/Documentation/media/uapi/v4l/vidioc-create-bufs.rst +++ b/Documentation/media/uapi/v4l/vidioc-create-bufs.rst @@ -75,6 +75,8 @@ than the number requested. .. _v4l2-create-buffers: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: struct v4l2_create_buffers :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/v4l/vidioc-cropcap.rst b/Documentation/media/uapi/v4l/vidioc-cropcap.rst index 8dcbe6d26219..e3d853356438 100644 --- a/Documentation/media/uapi/v4l/vidioc-cropcap.rst +++ b/Documentation/media/uapi/v4l/vidioc-cropcap.rst @@ -54,6 +54,8 @@ overlay devices. .. _v4l2-cropcap: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: struct v4l2_cropcap :header-rows: 0 :stub-columns: 0 @@ -114,6 +116,8 @@ overlay devices. .. _v4l2-rect-crop: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: struct v4l2_rect :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/v4l/vidioc-dbg-g-chip-info.rst b/Documentation/media/uapi/v4l/vidioc-dbg-g-chip-info.rst index f7e1b80af29e..4c30b2268c70 100644 --- a/Documentation/media/uapi/v4l/vidioc-dbg-g-chip-info.rst +++ b/Documentation/media/uapi/v4l/vidioc-dbg-g-chip-info.rst @@ -78,6 +78,8 @@ is available from the LinuxTV v4l-dvb repository; see instructions. +.. tabularcolumns:: |p{3.5cm}|p{3.5cm}|p{3.5cm}|p{7.0cm}| + .. _name-v4l2-dbg-match: .. flat-table:: struct v4l2_dbg_match @@ -122,6 +124,8 @@ instructions. +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. _v4l2-dbg-chip-info: .. flat-table:: struct v4l2_dbg_chip_info @@ -167,6 +171,8 @@ instructions. +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. _name-chip-match-types: .. flat-table:: Chip Match Types diff --git a/Documentation/media/uapi/v4l/vidioc-dbg-g-register.rst b/Documentation/media/uapi/v4l/vidioc-dbg-g-register.rst index 09d2880e6170..cb6a878a60ea 100644 --- a/Documentation/media/uapi/v4l/vidioc-dbg-g-register.rst +++ b/Documentation/media/uapi/v4l/vidioc-dbg-g-register.rst @@ -86,6 +86,8 @@ It is available from the LinuxTV v4l-dvb repository; see instructions. +.. tabularcolumns:: |p{3.5cm}|p{3.5cm}|p{3.5cm}|p{7.0cm}| + .. _v4l2-dbg-match: .. flat-table:: struct v4l2_dbg_match @@ -171,6 +173,8 @@ instructions. +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. _chip-match-types: .. flat-table:: Chip Match Types diff --git a/Documentation/media/uapi/v4l/vidioc-decoder-cmd.rst b/Documentation/media/uapi/v4l/vidioc-decoder-cmd.rst index 2a36e91b57b9..63acf4e59530 100644 --- a/Documentation/media/uapi/v4l/vidioc-decoder-cmd.rst +++ b/Documentation/media/uapi/v4l/vidioc-decoder-cmd.rst @@ -56,12 +56,16 @@ These ioctls are optional, not all drivers may support them. They were introduced in Linux 3.3. +.. tabularcolumns:: |p{1.1cm}|p{2.4cm}|p{1.2cm}|p{1.6cm}|p{10.6cm}| + .. _v4l2-decoder-cmd: +.. cssclass:: longtable + .. flat-table:: struct v4l2_decoder_cmd :header-rows: 0 :stub-columns: 0 - :widths: 1 1 2 1 1 + :widths: 11 24 12 16 106 - .. row 1 @@ -185,12 +189,14 @@ introduced in Linux 3.3. +.. tabularcolumns:: |p{5.6cm}|p{0.6cm}|p{11.3cm}| + .. _decoder-cmds: .. flat-table:: Decoder Commands :header-rows: 0 :stub-columns: 0 - :widths: 3 1 4 + :widths: 56 6 113 - .. row 1 diff --git a/Documentation/media/uapi/v4l/vidioc-dqevent.rst b/Documentation/media/uapi/v4l/vidioc-dqevent.rst index 73c0d5be62ee..e5be2a5518af 100644 --- a/Documentation/media/uapi/v4l/vidioc-dqevent.rst +++ b/Documentation/media/uapi/v4l/vidioc-dqevent.rst @@ -40,8 +40,12 @@ exceptions which the application may get by e.g. using the select system call. +.. tabularcolumns:: |p{3.0cm}|p{4.3cm}|p{2.5cm}|p{7.7cm}| + .. _v4l2-event: +.. cssclass: longtable + .. flat-table:: struct v4l2_event :header-rows: 0 :stub-columns: 0 @@ -175,6 +179,10 @@ call. +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + +.. cssclass:: longtable + .. _event-type: .. flat-table:: Event Types @@ -302,6 +310,8 @@ call. +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. _v4l2-event-vsync: .. flat-table:: struct v4l2_event_vsync @@ -320,6 +330,8 @@ call. +.. tabularcolumns:: |p{3.5cm}|p{3.0cm}|p{1.8cm}|p{8.5cm}| + .. _v4l2-event-ctrl: .. flat-table:: struct v4l2_event_ctrl @@ -427,6 +439,8 @@ call. +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. _v4l2-event-frame-sync: .. flat-table:: struct v4l2_event_frame_sync @@ -445,6 +459,8 @@ call. +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. _v4l2-event-src-change: .. flat-table:: struct v4l2_event_src_change @@ -464,6 +480,8 @@ call. +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. _v4l2-event-motion-det: .. flat-table:: struct v4l2_event_motion_det @@ -507,6 +525,8 @@ call. +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. _ctrl-changes-flags: .. flat-table:: Control Changes @@ -546,6 +566,8 @@ call. +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. _src-changes-flags: .. flat-table:: Source Changes diff --git a/Documentation/media/uapi/v4l/vidioc-dv-timings-cap.rst b/Documentation/media/uapi/v4l/vidioc-dv-timings-cap.rst index 6e05957013bb..7054e36e061f 100644 --- a/Documentation/media/uapi/v4l/vidioc-dv-timings-cap.rst +++ b/Documentation/media/uapi/v4l/vidioc-dv-timings-cap.rst @@ -39,7 +39,9 @@ initialize the ``pad`` field to 0, zero the reserved array of struct ``VIDIOC_DV_TIMINGS_CAP`` ioctl on a video node and the driver will fill in the structure. -.. note:: Drivers may return different values after +.. note:: + + Drivers may return different values after switching the video input or output. When implemented by the driver DV capabilities of subdevices can be @@ -52,6 +54,8 @@ zero the ``reserved`` array. Attempts to query capabilities on a pad that doesn't support them will return an ``EINVAL`` error code. +.. tabularcolumns:: |p{1.2cm}|p{3.0cm}|p{13.3cm}| + .. _v4l2-bt-timings-cap: .. flat-table:: struct v4l2_bt_timings_cap @@ -132,10 +136,12 @@ that doesn't support them will return an ``EINVAL`` error code. - ``reserved``\ [16] - - Reserved for future extensions. Drivers must set the array to - zero. + - Reserved for future extensions. + Drivers must set the array to zero. + +.. tabularcolumns:: |p{1.0cm}|p{3.5cm}|p{3.5cm}|p{9.5cm}| .. _v4l2-dv-timings-cap: @@ -169,8 +175,9 @@ that doesn't support them will return an ``EINVAL`` error code. - ``reserved``\ [2] - - Reserved for future extensions. Drivers and applications must set - the array to zero. + - Reserved for future extensions. + + Drivers and applications must set the array to zero. - .. row 4 @@ -197,7 +204,7 @@ that doesn't support them will return an ``EINVAL`` error code. - - +.. tabularcolumns:: |p{7.0cm}|p{10.5cm}| .. _dv-bt-cap-capabilities: diff --git a/Documentation/media/uapi/v4l/vidioc-encoder-cmd.rst b/Documentation/media/uapi/v4l/vidioc-encoder-cmd.rst index 69bd9b4e0e56..795d9215017a 100644 --- a/Documentation/media/uapi/v4l/vidioc-encoder-cmd.rst +++ b/Documentation/media/uapi/v4l/vidioc-encoder-cmd.rst @@ -64,6 +64,8 @@ These ioctls are optional, not all drivers may support them. They were introduced in Linux 2.6.21. +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. _v4l2-encoder-cmd: .. flat-table:: struct v4l2_encoder_cmd @@ -101,6 +103,8 @@ introduced in Linux 2.6.21. +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. _encoder-cmds: .. flat-table:: Encoder Commands @@ -161,6 +165,7 @@ introduced in Linux 2.6.21. flags are defined for this command. +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| .. _encoder-flags: diff --git a/Documentation/media/uapi/v4l/vidioc-enum-dv-timings.rst b/Documentation/media/uapi/v4l/vidioc-enum-dv-timings.rst index 3ba75d3fb93c..c386045885f2 100644 --- a/Documentation/media/uapi/v4l/vidioc-enum-dv-timings.rst +++ b/Documentation/media/uapi/v4l/vidioc-enum-dv-timings.rst @@ -49,7 +49,9 @@ error code 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:: Drivers may enumerate a different set of DV timings after +.. note:: + + 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 @@ -64,6 +66,8 @@ return an ``EINVAL`` error code. .. _v4l2-enum-dv-timings: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: struct v4l2_enum_dv_timings :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst b/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst index 90996f69d6ae..da0b888c01cb 100644 --- a/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst +++ b/Documentation/media/uapi/v4l/vidioc-enum-fmt.rst @@ -40,10 +40,14 @@ fill the rest of the structure or return an ``EINVAL`` error code. All formats are enumerable by beginning at index zero and incrementing by one until ``EINVAL`` is returned. -.. note:: After switching input or output the list of enumerated image +.. note:: + + After switching input or output the list of enumerated image formats may be different. +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. _v4l2-fmtdesc: .. flat-table:: struct v4l2_fmtdesc @@ -51,7 +55,6 @@ one until ``EINVAL`` is returned. :stub-columns: 0 :widths: 1 1 2 - - .. row 1 - __u32 @@ -104,16 +107,18 @@ one until ``EINVAL`` is returned. - :cspan:`2` - .. _v4l2-fourcc: - .. code-block:: c - #define v4l2_fourcc(a,b,c,d) (((__u32)(a)<<0)|((__u32)(b)<<8)|((__u32)(c)<<16)|((__u32)(d)<<24)) + ``#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 :ref:`pixfmt`. - .. attention:: These codes are not the same as those used + .. attention:: + + These codes are not the same as those used in the Windows world. - .. row 7 @@ -127,6 +132,8 @@ one until ``EINVAL`` is returned. +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. _fmtdesc-flags: .. flat-table:: Image Format Description Flags diff --git a/Documentation/media/uapi/v4l/vidioc-enum-frameintervals.rst b/Documentation/media/uapi/v4l/vidioc-enum-frameintervals.rst index ceae6003039e..7541158e16d2 100644 --- a/Documentation/media/uapi/v4l/vidioc-enum-frameintervals.rst +++ b/Documentation/media/uapi/v4l/vidioc-enum-frameintervals.rst @@ -73,7 +73,9 @@ 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:: The order in which the frame intervals are returned has no +.. note:: + + 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. @@ -103,6 +105,8 @@ application should zero out all members except for the *IN* fields. .. _v4l2-frmival-stepwise: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: struct v4l2_frmival_stepwise :header-rows: 0 :stub-columns: 0 @@ -231,6 +235,8 @@ Enums .. _v4l2-frmivaltypes: +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. flat-table:: enum v4l2_frmivaltypes :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/v4l/vidioc-enum-framesizes.rst b/Documentation/media/uapi/v4l/vidioc-enum-framesizes.rst index 8b268354d442..1c23da3f26bc 100644 --- a/Documentation/media/uapi/v4l/vidioc-enum-framesizes.rst +++ b/Documentation/media/uapi/v4l/vidioc-enum-framesizes.rst @@ -72,7 +72,9 @@ 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:: The order in which the frame sizes are returned has no special +.. note:: + + 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. @@ -92,6 +94,8 @@ application should zero out all members except for the *IN* fields. .. _v4l2-frmsize-discrete: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: struct v4l2_frmsize_discrete :header-rows: 0 :stub-columns: 0 @@ -118,6 +122,8 @@ application should zero out all members except for the *IN* fields. .. _v4l2-frmsize-stepwise: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: struct v4l2_frmsize_stepwise :header-rows: 0 :stub-columns: 0 @@ -252,6 +258,8 @@ Enums .. _v4l2-frmsizetypes: +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. flat-table:: enum v4l2_frmsizetypes :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/v4l/vidioc-enum-freq-bands.rst b/Documentation/media/uapi/v4l/vidioc-enum-freq-bands.rst index 00ab5e19cc1d..8fac84d839f4 100644 --- a/Documentation/media/uapi/v4l/vidioc-enum-freq-bands.rst +++ b/Documentation/media/uapi/v4l/vidioc-enum-freq-bands.rst @@ -43,6 +43,8 @@ This ioctl is supported if the ``V4L2_TUNER_CAP_FREQ_BANDS`` capability of the corresponding tuner/modulator is set. +.. tabularcolumns:: |p{2.9cm}|p{2.9cm}|p{5.8cm}|p{2.9cm}|p{3.0cm}| + .. _v4l2-frequency-band: .. flat-table:: struct v4l2_frequency_band @@ -129,7 +131,9 @@ of the corresponding tuner/modulator is set. - :cspan:`2` The supported modulation systems of this frequency band. See :ref:`band-modulation`. - .. note:: Currently only one modulation system per frequency band + .. note:: + + 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 @@ -142,10 +146,13 @@ of the corresponding tuner/modulator is set. - ``reserved``\ [9] - - Reserved for future extensions. Applications and drivers must set - the array to zero. + - Reserved for future extensions. + + Applications and drivers must set the array to zero. + +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| .. _band-modulation: diff --git a/Documentation/media/uapi/v4l/vidioc-enumaudioout.rst b/Documentation/media/uapi/v4l/vidioc-enumaudioout.rst index cde1db55834f..3112b43242f2 100644 --- a/Documentation/media/uapi/v4l/vidioc-enumaudioout.rst +++ b/Documentation/media/uapi/v4l/vidioc-enumaudioout.rst @@ -41,7 +41,9 @@ structure or return an ``EINVAL`` error code 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 +.. 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 :ref:`VIDIOC_G_AUDIOout <VIDIOC_G_AUDOUT>` for a description of struct diff --git a/Documentation/media/uapi/v4l/vidioc-enuminput.rst b/Documentation/media/uapi/v4l/vidioc-enuminput.rst index 5060f54e3d18..f8188070335e 100644 --- a/Documentation/media/uapi/v4l/vidioc-enuminput.rst +++ b/Documentation/media/uapi/v4l/vidioc-enuminput.rst @@ -41,6 +41,8 @@ index is out of bounds. To enumerate all inputs applications shall begin at index zero, incrementing by one until the driver returns ``EINVAL``. +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. _v4l2-input: .. flat-table:: struct v4l2_input @@ -148,6 +150,8 @@ at index zero, incrementing by one until the driver returns ``EINVAL``. +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. _input-type: .. flat-table:: Input Types @@ -175,6 +179,8 @@ at index zero, incrementing by one until the driver returns ``EINVAL``. +.. tabularcolumns:: |p{4.8cm}|p{2.6cm}|p{10.1cm}| + .. _input-status: .. flat-table:: Input Status Flags @@ -318,6 +324,8 @@ at index zero, incrementing by one until the driver returns ``EINVAL``. +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. _input-capabilities: .. flat-table:: Input capabilities diff --git a/Documentation/media/uapi/v4l/vidioc-enumoutput.rst b/Documentation/media/uapi/v4l/vidioc-enumoutput.rst index 82fc9d3b237f..6d50b297b0aa 100644 --- a/Documentation/media/uapi/v4l/vidioc-enumoutput.rst +++ b/Documentation/media/uapi/v4l/vidioc-enumoutput.rst @@ -42,6 +42,8 @@ shall begin at index zero, incrementing by one until the driver returns EINVAL. +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. _v4l2-output: .. flat-table:: struct v4l2_output @@ -138,6 +140,8 @@ EINVAL. +.. tabularcolumns:: |p{7.0cm}|p{1.8cm}|p{8.7cm}| + .. _output-type: .. flat-table:: Output Type @@ -173,6 +177,8 @@ EINVAL. +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. _output-capabilities: .. flat-table:: Output capabilities diff --git a/Documentation/media/uapi/v4l/vidioc-enumstd.rst b/Documentation/media/uapi/v4l/vidioc-enumstd.rst index 6699b26cdeb4..22b4bcde7a79 100644 --- a/Documentation/media/uapi/v4l/vidioc-enumstd.rst +++ b/Documentation/media/uapi/v4l/vidioc-enumstd.rst @@ -46,6 +46,8 @@ or output. [#f1]_ .. _v4l2-standard: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: struct v4l2_standard :header-rows: 0 :stub-columns: 0 @@ -114,6 +116,8 @@ or output. [#f1]_ .. _v4l2-fract: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: struct v4l2_fract :header-rows: 0 :stub-columns: 0 @@ -137,6 +141,7 @@ or output. [#f1]_ - +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| .. _v4l2-std-id: @@ -266,10 +271,16 @@ support digital TV. See also the Linux DVB API at #define V4L2_STD_ALL (V4L2_STD_525_60 | V4L2_STD_625_50) +.. raw:: latex + + \begin{adjustbox}{width=\columnwidth} + +.. NTSC/M PAL/M /N /B /D /H /I SECAM/B /D /K1 /L +.. tabularcolumns:: |p{2.7cm}|p{2.6cm}|p{3.0cm}|p{3.2cm}|p{3.2cm}|p{2.2cm}|p{1.2cm}|p{3.2cm}|p{3.0cm}|p{2.0cm}|p{2.0cm}|p{2.0cm}| .. _video-standards: -.. flat-table:: Video Standards (based on []) +.. flat-table:: Video Standards (based on :ref:`itu470`) :header-rows: 1 :stub-columns: 0 @@ -306,7 +317,7 @@ support digital TV. See also the Linux DVB API at - :cspan:`1` 525 - - :cspan:`9` 625 + - :cspan:`8` 625 - .. row 3 @@ -314,7 +325,7 @@ support digital TV. See also the Linux DVB API at - :cspan:`1` 1001/30000 - - :cspan:`9` 1/25 + - :cspan:`8` 1/25 - .. row 4 @@ -324,14 +335,17 @@ support digital TV. See also the Linux DVB API at - 3579611.49 ± 10 - - 4433618.75 ± 5 (3582056.25 ± 5) + - 4433618.75 ± 5 + + (3582056.25 ± 5) - :cspan:`3` 4433618.75 ± 5 - 4433618.75 ± 1 - - :cspan:`3` f\ :sub:`OR` = 4406250 ± 2000, f\ :sub:`OB` = 4250000 - ± 2000 + - :cspan:`2` f\ :sub:`OR` = 4406250 ± 2000, + + f\ :sub:`OB` = 4250000 ± 2000 - .. row 5 @@ -363,27 +377,32 @@ support digital TV. See also the Linux DVB API at - Sound carrier relative to vision carrier (MHz) - - + 4.5 + - 4.5 + + - 4.5 + + - 4.5 + + - 5.5 ± 0.001 [#f4]_ [#f5]_ [#f6]_ [#f7]_ - - + 4.5 + - 6.5 ± 0.001 - - + 4.5 + - 5.5 - - + 5.5 ± 0.001 [#f4]_ [#f5]_ [#f6]_ [#f7]_ + - 5.9996 ± 0.0005 - - + 6.5 ± 0.001 + - 5.5 ± 0.001 - - + 5.5 + - 6.5 ± 0.001 - - + 5.9996 ± 0.0005 + - 6.5 - - + 5.5 ± 0.001 + - 6.5 [#f8]_ - - + 6.5 ± 0.001 +.. raw:: latex - - + 6.5 + \end{adjustbox}\newline\newline - - + 6.5 [#f8]_ Return Value diff --git a/Documentation/media/uapi/v4l/vidioc-expbuf.rst b/Documentation/media/uapi/v4l/vidioc-expbuf.rst index ded708e647fa..67f72ced2a00 100644 --- a/Documentation/media/uapi/v4l/vidioc-expbuf.rst +++ b/Documentation/media/uapi/v4l/vidioc-expbuf.rst @@ -118,6 +118,8 @@ Examples .. _v4l2-exportbuffer: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: struct v4l2_exportbuffer :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/v4l/vidioc-g-audio.rst b/Documentation/media/uapi/v4l/vidioc-g-audio.rst index cccbcdb8c463..703091ba1391 100644 --- a/Documentation/media/uapi/v4l/vidioc-g-audio.rst +++ b/Documentation/media/uapi/v4l/vidioc-g-audio.rst @@ -50,6 +50,8 @@ cannot be satisfied. However, this is a write-only ioctl, it does not return the actual new audio mode. +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. _v4l2-audio: .. flat-table:: struct v4l2_audio @@ -104,6 +106,8 @@ return the actual new audio mode. +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. _audio-capability: .. flat-table:: Audio Capability Flags @@ -133,6 +137,8 @@ return the actual new audio mode. +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. _audio-mode: .. flat-table:: Audio Mode Flags diff --git a/Documentation/media/uapi/v4l/vidioc-g-audioout.rst b/Documentation/media/uapi/v4l/vidioc-g-audioout.rst index b1c1bfeb251e..1420ddebefd0 100644 --- a/Documentation/media/uapi/v4l/vidioc-g-audioout.rst +++ b/Documentation/media/uapi/v4l/vidioc-g-audioout.rst @@ -51,12 +51,16 @@ return the ``EINVAL`` error code 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 +.. note:: + + Connectors on a TV card to loop back the received audio signal to a sound card are not audio outputs in this sense. .. _v4l2-audioout: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: struct v4l2_audioout :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/v4l/vidioc-g-crop.rst b/Documentation/media/uapi/v4l/vidioc-g-crop.rst index 6cf76497937c..08df93224a38 100644 --- a/Documentation/media/uapi/v4l/vidioc-g-crop.rst +++ b/Documentation/media/uapi/v4l/vidioc-g-crop.rst @@ -78,6 +78,8 @@ When cropping is not supported then no parameters are changed and .. _v4l2-crop: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: struct v4l2_crop :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/v4l/vidioc-g-ctrl.rst b/Documentation/media/uapi/v4l/vidioc-g-ctrl.rst index ee929f692ebe..e585b04b3f00 100644 --- a/Documentation/media/uapi/v4l/vidioc-g-ctrl.rst +++ b/Documentation/media/uapi/v4l/vidioc-g-ctrl.rst @@ -56,6 +56,8 @@ These ioctls work only with user controls. For other control classes the .. _v4l2-control: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: struct v4l2_control :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/v4l/vidioc-g-dv-timings.rst b/Documentation/media/uapi/v4l/vidioc-g-dv-timings.rst index f7bf21f49092..013f49210de9 100644 --- a/Documentation/media/uapi/v4l/vidioc-g-dv-timings.rst +++ b/Documentation/media/uapi/v4l/vidioc-g-dv-timings.rst @@ -68,6 +68,8 @@ EBUSY The device is busy and therefore can not change the timings. +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. _v4l2-bt-timings: .. flat-table:: struct v4l2_bt_timings @@ -221,6 +223,8 @@ EBUSY +.. tabularcolumns:: |p{3.5cm}|p{3.5cm}|p{7.0cm}|p{3.5cm}| + .. _v4l2-dv-timings: .. flat-table:: struct v4l2_dv_timings @@ -263,7 +267,7 @@ EBUSY - - +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| .. _dv-timing-types: @@ -310,11 +314,6 @@ EBUSY - Description - - .. row 2 - - - - - - - .. row 3 - ``V4L2_DV_BT_STD_CEA861`` @@ -340,6 +339,7 @@ EBUSY - The timings follow the VESA Generalized Timings Formula standard +.. tabularcolumns:: |p{6.0cm}|p{11.5cm}| .. _dv-bt-flags: @@ -354,11 +354,6 @@ EBUSY - Description - - .. row 2 - - - - - - - .. row 3 - ``V4L2_DV_FL_REDUCED_BLANKING`` diff --git a/Documentation/media/uapi/v4l/vidioc-g-edid.rst b/Documentation/media/uapi/v4l/vidioc-g-edid.rst index 1a982b68a72f..721d17fc829e 100644 --- a/Documentation/media/uapi/v4l/vidioc-g-edid.rst +++ b/Documentation/media/uapi/v4l/vidioc-g-edid.rst @@ -67,7 +67,9 @@ 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:: If there are no EDID blocks available at all, then +.. note:: + + 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 @@ -90,6 +92,8 @@ EDID is no longer available. .. _v4l2-edid: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: struct v4l2_edid :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/v4l/vidioc-g-enc-index.rst b/Documentation/media/uapi/v4l/vidioc-g-enc-index.rst index f0f41ac56b80..64e74786babf 100644 --- a/Documentation/media/uapi/v4l/vidioc-g-enc-index.rst +++ b/Documentation/media/uapi/v4l/vidioc-g-enc-index.rst @@ -57,12 +57,14 @@ Currently this ioctl is only defined for MPEG-2 program streams and video elementary streams. +.. tabularcolumns:: |p{3.5cm}|p{5.6cm}|p{8.4cm}| + .. _v4l2-enc-idx: .. flat-table:: struct v4l2_enc_idx :header-rows: 0 :stub-columns: 0 - :widths: 1 1 2 1 1 + :widths: 1 3 8 - .. row 1 @@ -88,7 +90,7 @@ video elementary streams. - ``reserved``\ [4] - - :cspan:`2` Reserved for future extensions. Drivers must set the + - Reserved for future extensions. Drivers must set the array to zero. - .. row 4 @@ -103,6 +105,8 @@ video elementary streams. +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. _v4l2-enc-idx-entry: .. flat-table:: struct v4l2_enc_idx_entry @@ -159,6 +163,7 @@ video elementary streams. zero. +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| .. _enc-idx-flags: diff --git a/Documentation/media/uapi/v4l/vidioc-g-ext-ctrls.rst b/Documentation/media/uapi/v4l/vidioc-g-ext-ctrls.rst index 39e24ad4b825..f0d33298f329 100644 --- a/Documentation/media/uapi/v4l/vidioc-g-ext-ctrls.rst +++ b/Documentation/media/uapi/v4l/vidioc-g-ext-ctrls.rst @@ -95,8 +95,12 @@ were set/get. Only low-level errors (e. g. a failed i2c command) can still cause this situation. +.. tabularcolumns:: |p{1.2cm}|p{3.0cm}|p{1.5cm}|p{11.8cm}| + .. _v4l2-ext-control: +.. cssclass: longtable + .. flat-table:: struct v4l2_ext_control :header-rows: 0 :stub-columns: 0 @@ -127,7 +131,9 @@ still cause this situation. to a value large enough to store the payload result and ``ENOSPC`` is returned. - .. note:: For string controls, this ``size`` field should + .. note:: + + 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. @@ -223,9 +229,12 @@ still cause this situation. ``V4L2_CTRL_FLAG_HAS_PAYLOAD`` is set for this control. +.. tabularcolumns:: |p{4.0cm}|p{2.0cm}|p{2.0cm}|p{8.5cm}| .. _v4l2-ext-controls: +.. cssclass:: longtable + .. flat-table:: struct v4l2_ext_controls :header-rows: 0 :stub-columns: 0 @@ -265,7 +274,9 @@ still cause this situation. control and ``V4L2_CTRL_WHICH_DEF_VAL`` will return the default value of the control. - .. note:: You can only get the default value of the control, + .. note:: + + 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 @@ -340,8 +351,9 @@ still cause this situation. - ``reserved``\ [2] - - Reserved for future extensions. Drivers and applications must set - the array to zero. + - Reserved for future extensions. + + Drivers and applications must set the array to zero. - .. row 7 @@ -350,9 +362,11 @@ still cause this situation. - ``controls`` - Pointer to an array of ``count`` v4l2_ext_control structures. + Ignored if ``count`` equals zero. +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| .. _ctrl-class: diff --git a/Documentation/media/uapi/v4l/vidioc-g-fbuf.rst b/Documentation/media/uapi/v4l/vidioc-g-fbuf.rst index d182d9f5a50d..562505c5db0b 100644 --- a/Documentation/media/uapi/v4l/vidioc-g-fbuf.rst +++ b/Documentation/media/uapi/v4l/vidioc-g-fbuf.rst @@ -76,8 +76,12 @@ hardware, therefore only the superuser can set the parameters for a destructive video overlay. +.. tabularcolumns:: |p{3.5cm}|p{3.5cm}|p{3.5cm}|p{7.0cm}| + .. _v4l2-framebuffer: +.. cssclass:: longtable + .. flat-table:: struct v4l2_framebuffer :header-rows: 0 :stub-columns: 0 @@ -280,6 +284,7 @@ destructive video overlay. - Reserved. Drivers and applications must set this field to zero. +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| .. _framebuffer-cap: @@ -368,9 +373,12 @@ destructive video overlay. exactly opposite of ``V4L2_FBUF_CAP_CHROMAKEY`` +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| .. _framebuffer-flags: +.. cssclass:: longtable + .. flat-table:: Frame Buffer Flags :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/v4l/vidioc-g-fmt.rst b/Documentation/media/uapi/v4l/vidioc-g-fmt.rst index ee6f11978fd6..94e42ac3d4d8 100644 --- a/Documentation/media/uapi/v4l/vidioc-g-fmt.rst +++ b/Documentation/media/uapi/v4l/vidioc-g-fmt.rst @@ -84,6 +84,8 @@ The format as returned by :ref:`VIDIOC_TRY_FMT <VIDIOC_G_FMT>` must be identical .. _v4l2-format: +.. tabularcolumns:: |p{1.2cm}|p{4.3cm}|p{3.0cm}|p{9.0cm}| + .. flat-table:: struct v4l2_format :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/v4l/vidioc-g-frequency.rst b/Documentation/media/uapi/v4l/vidioc-g-frequency.rst index a1fd2a870de4..c0468ff3546e 100644 --- a/Documentation/media/uapi/v4l/vidioc-g-frequency.rst +++ b/Documentation/media/uapi/v4l/vidioc-g-frequency.rst @@ -52,6 +52,8 @@ assumes the closest possible value. However :ref:`VIDIOC_S_FREQUENCY <VIDIOC_G_F write-only ioctl, it does not return the actual new frequency. +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. _v4l2-frequency: .. flat-table:: struct v4l2_frequency diff --git a/Documentation/media/uapi/v4l/vidioc-g-jpegcomp.rst b/Documentation/media/uapi/v4l/vidioc-g-jpegcomp.rst index f5bf8b7915ed..a5a997db7a33 100644 --- a/Documentation/media/uapi/v4l/vidioc-g-jpegcomp.rst +++ b/Documentation/media/uapi/v4l/vidioc-g-jpegcomp.rst @@ -55,6 +55,8 @@ encoded. If you omit them, applications assume you've used standard encoding. You usually do want to add them. +.. tabularcolumns:: |p{1.2cm}|p{3.0cm}|p{13.3cm}| + .. _v4l2-jpegcompression: .. flat-table:: struct v4l2_jpegcompression @@ -126,6 +128,7 @@ encoding. You usually do want to add them. and ignore this field. +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| .. _jpeg-markers: diff --git a/Documentation/media/uapi/v4l/vidioc-g-modulator.rst b/Documentation/media/uapi/v4l/vidioc-g-modulator.rst index a2e8c73f0678..0b362fc8ec29 100644 --- a/Documentation/media/uapi/v4l/vidioc-g-modulator.rst +++ b/Documentation/media/uapi/v4l/vidioc-g-modulator.rst @@ -61,6 +61,8 @@ To change the radio frequency the :ref:`VIDIOC_S_FREQUENCY <VIDIOC_G_FREQUENCY>` ioctl is available. +.. tabularcolumns:: |p{2.9cm}|p{2.9cm}|p{5.8cm}|p{2.9cm}|p{3.0cm}| + .. _v4l2-modulator: .. flat-table:: struct v4l2_modulator @@ -83,8 +85,9 @@ To change the radio frequency the - ``name``\ [32] - - Name of the modulator, a NUL-terminated ASCII string. This - information is intended for the user. + - Name of the modulator, a NUL-terminated ASCII string. + + This information is intended for the user. - .. row 3 @@ -130,7 +133,9 @@ To change the radio frequency the shall be modulated. It contains a set of flags as defined in :ref:`modulator-txsubchans`. - .. note:: The tuner ``rxsubchans`` flags are reused, but the + .. 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 @@ -151,10 +156,13 @@ To change the radio frequency the - ``reserved``\ [3] - - Reserved for future extensions. Drivers and applications must set - the array to zero. + - Reserved for future extensions. + + Drivers and applications must set the array to zero. + +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| .. _modulator-txsubchans: diff --git a/Documentation/media/uapi/v4l/vidioc-g-parm.rst b/Documentation/media/uapi/v4l/vidioc-g-parm.rst index 7116e0decddc..1b044613ab68 100644 --- a/Documentation/media/uapi/v4l/vidioc-g-parm.rst +++ b/Documentation/media/uapi/v4l/vidioc-g-parm.rst @@ -50,6 +50,8 @@ pointer to a struct :ref:`struct v4l2_streamparm <v4l2-streamparm>` which contai union holding separate parameters for input and output devices. +.. tabularcolumns:: |p{3.5cm}|p{3.5cm}|p{3.5cm}|p{7.0cm}| + .. _v4l2-streamparm: .. flat-table:: struct v4l2_streamparm @@ -109,6 +111,8 @@ union holding separate parameters for input and output devices. +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. _v4l2-captureparm: .. flat-table:: struct v4l2_captureparm @@ -190,6 +194,8 @@ union holding separate parameters for input and output devices. +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. _v4l2-outputparm: .. flat-table:: struct v4l2_outputparm @@ -278,6 +284,8 @@ union holding separate parameters for input and output devices. +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. _parm-caps: .. flat-table:: Streaming Parameters Capabilites @@ -297,6 +305,8 @@ union holding separate parameters for input and output devices. +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. _parm-flags: .. flat-table:: Capture Parameters Flags diff --git a/Documentation/media/uapi/v4l/vidioc-g-priority.rst b/Documentation/media/uapi/v4l/vidioc-g-priority.rst index 9f774ce400a4..3f021e6b9d0d 100644 --- a/Documentation/media/uapi/v4l/vidioc-g-priority.rst +++ b/Documentation/media/uapi/v4l/vidioc-g-priority.rst @@ -47,6 +47,8 @@ with a pointer to this variable. .. _v4l2-priority: +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. flat-table:: enum v4l2_priority :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/v4l/vidioc-g-selection.rst b/Documentation/media/uapi/v4l/vidioc-g-selection.rst index 953931fabd00..8e72f93a358e 100644 --- a/Documentation/media/uapi/v4l/vidioc-g-selection.rst +++ b/Documentation/media/uapi/v4l/vidioc-g-selection.rst @@ -137,6 +137,8 @@ Selection targets and flags are documented in .. _v4l2-selection: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: struct v4l2_selection :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/v4l/vidioc-g-sliced-vbi-cap.rst b/Documentation/media/uapi/v4l/vidioc-g-sliced-vbi-cap.rst index f1f661d0200c..87c23f289fb4 100644 --- a/Documentation/media/uapi/v4l/vidioc-g-sliced-vbi-cap.rst +++ b/Documentation/media/uapi/v4l/vidioc-g-sliced-vbi-cap.rst @@ -40,12 +40,16 @@ output device, applications initialize the ``type`` field of a struct driver fills in the remaining fields or returns an ``EINVAL`` error code if the sliced VBI API is unsupported or ``type`` is invalid. -.. note:: The ``type`` field was added, and the ioctl changed from read-only +.. note:: + + The ``type`` field was added, and the ioctl changed from read-only to write-read, in Linux 2.6.19. .. _v4l2-sliced-vbi-cap: +.. tabularcolumns:: |p{1.2cm}|p{4.2cm}|p{4.1cm}|p{4.0cm}|p{4.0cm}| + .. flat-table:: struct v4l2_sliced_vbi_cap :header-rows: 0 :stub-columns: 0 @@ -59,6 +63,7 @@ the sliced VBI API is unsupported or ``type`` is invalid. - ``service_set`` - :cspan:`2` A set of all data services supported by the driver. + Equal to the union of all elements of the ``service_lines`` array. - .. row 2 @@ -70,8 +75,7 @@ the sliced VBI API is unsupported or ``type`` is invalid. - :cspan:`2` 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 :ref:`vbi-services`. - Array indices map to ITU-R line numbers (see also :ref:`vbi-525` - and :ref:`vbi-625`) as follows: + Array indices map to ITU-R line numbers\ [#f1]_ as follows: - .. row 3 @@ -167,9 +171,19 @@ the sliced VBI API is unsupported or ``type`` is invalid. - ``reserved``\ [3] - :cspan:`2` This array is reserved for future extensions. + Applications and drivers must set it to zero. +.. [#f1] + + See also :ref:`vbi-525` and :ref:`vbi-625`. + +.. raw:: latex + + \begin{adjustbox}{width=\columnwidth} + +.. tabularcolumns:: |p{5.0cm}|p{1.4cm}|p{3.0cm}|p{2.5cm}|p{9.0cm}| .. _vbi-services: @@ -197,7 +211,9 @@ the sliced VBI API is unsupported or ``type`` is invalid. - 0x0001 - - :ref:`ets300706`, :ref:`itu653` + - :ref:`ets300706`, + + :ref:`itu653` - PAL/SECAM line 7-22, 320-335 (second field 7-22) @@ -236,7 +252,9 @@ the sliced VBI API is unsupported or ``type`` is invalid. - 0x4000 - - :ref:`en300294`, :ref:`itu1119` + - :ref:`en300294`, + + :ref:`itu1119` - PAL/SECAM line 23 @@ -264,6 +282,10 @@ the sliced VBI API is unsupported or ``type`` is invalid. - :cspan:`2` Set of services applicable to 625 line systems. +.. raw:: latex + + \end{adjustbox}\newline\newline + Return Value ============ diff --git a/Documentation/media/uapi/v4l/vidioc-g-tuner.rst b/Documentation/media/uapi/v4l/vidioc-g-tuner.rst index 614db06b8b4b..e53abcbe9ea1 100644 --- a/Documentation/media/uapi/v4l/vidioc-g-tuner.rst +++ b/Documentation/media/uapi/v4l/vidioc-g-tuner.rst @@ -60,8 +60,12 @@ To change the radio frequency the :ref:`VIDIOC_S_FREQUENCY <VIDIOC_G_FREQUENCY>` ioctl is available. + .. tabularcolumns:: |p{1.3cm}|p{3.0cm}|p{6.6cm}|p{6.6cm}| + .. _v4l2-tuner: +.. cssclass:: longtable + .. flat-table:: struct v4l2_tuner :header-rows: 0 :stub-columns: 0 @@ -83,8 +87,9 @@ To change the radio frequency the - :cspan:`1` - Name of the tuner, a NUL-terminated ASCII string. This information - is intended for the user. + Name of the tuner, a NUL-terminated ASCII string. + + This information is intended for the user. - .. row 3 @@ -230,8 +235,9 @@ To change the radio frequency the - ``signal`` - - :cspan:`1` The signal strength if known, ranging from 0 to - 65535. Higher values indicate a better signal. + - :cspan:`1` The signal strength if known. + + Ranging from 0 to 65535. Higher values indicate a better signal. - .. row 16 @@ -239,8 +245,10 @@ To change the radio frequency the - ``afc`` - - :cspan:`1` Automatic frequency control: When the ``afc`` value - is negative, the frequency is too low, when positive too high. + - :cspan:`1` Automatic frequency control. + + When the ``afc`` value is negative, the frequency is too + low, when positive too high. - .. row 17 @@ -248,17 +256,20 @@ To change the radio frequency the - ``reserved``\ [4] - - :cspan:`1` Reserved for future extensions. Drivers and - applications must set the array to zero. + - :cspan:`1` Reserved for future extensions. + Drivers and applications must set the array to zero. + +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. _v4l2-tuner-type: .. flat-table:: enum v4l2_tuner_type :header-rows: 0 :stub-columns: 0 - :widths: 3 1 4 + :widths: 3 1 6 - .. row 1 @@ -267,7 +278,7 @@ To change the radio frequency the - 1 - - + - Tuner supports radio - .. row 2 @@ -275,7 +286,7 @@ To change the radio frequency the - 2 - - + - Tuner supports analog TV - .. row 3 @@ -283,7 +294,8 @@ To change the radio frequency the - 4 - - + - Tuner controls the A/D and/or D/A block of a + Sofware Digital Radio (SDR) - .. row 4 @@ -291,12 +303,15 @@ To change the radio frequency the - 5 - - + - Tuner controls the RF part of a Sofware Digital Radio (SDR) +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| .. _tuner-capability: +.. cssclass:: longtable + .. flat-table:: Tuner and Modulator Capability Flags :header-rows: 0 :stub-columns: 0 @@ -391,7 +406,9 @@ To change the radio frequency the 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`` + .. 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. @@ -451,6 +468,8 @@ To change the radio frequency the +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. _tuner-rxsubchans: .. flat-table:: Tuner Audio Reception Flags @@ -502,7 +521,9 @@ To change the radio frequency the - The tuner receives a Second Audio Program. - .. note:: The ``V4L2_TUNER_SUB_LANG2`` and ``V4L2_TUNER_SUB_SAP`` + .. 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``. @@ -516,6 +537,8 @@ To change the radio frequency the +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. _tuner-audmode: .. flat-table:: Tuner Audio Modes @@ -596,7 +619,9 @@ To change the radio frequency the ``MODE_MONO``. Only ``V4L2_TUNER_ANALOG_TV`` tuners support this mode. +.. raw:: latex + \begin{adjustbox}{width=\columnwidth} .. _tuner-matrix: @@ -694,6 +719,9 @@ To change the radio frequency the - Lang1/Lang2 (preferred) or Lang1/Lang1 +.. raw:: latex + + \end{adjustbox}\newline\newline Return Value ============ diff --git a/Documentation/media/uapi/v4l/vidioc-qbuf.rst b/Documentation/media/uapi/v4l/vidioc-qbuf.rst index 3b927f36fb5b..31c360d7d1a6 100644 --- a/Documentation/media/uapi/v4l/vidioc-qbuf.rst +++ b/Documentation/media/uapi/v4l/vidioc-qbuf.rst @@ -137,7 +137,9 @@ 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 + .. 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 diff --git a/Documentation/media/uapi/v4l/vidioc-query-dv-timings.rst b/Documentation/media/uapi/v4l/vidioc-query-dv-timings.rst index 416d8d604af4..6a87f44cdf3f 100644 --- a/Documentation/media/uapi/v4l/vidioc-query-dv-timings.rst +++ b/Documentation/media/uapi/v4l/vidioc-query-dv-timings.rst @@ -39,7 +39,9 @@ similar to sensing the video standard. To do so, applications call :ref:`v4l2_dv_timings <v4l2-dv-timings>`. Once the hardware detects the timings, it will fill in the timings structure. -.. note:: Drivers shall *not* switch timings automatically if new +.. note:: + + 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 :ref:`VIDIOC_QUERY_DV_TIMINGS`. diff --git a/Documentation/media/uapi/v4l/vidioc-querycap.rst b/Documentation/media/uapi/v4l/vidioc-querycap.rst index b10fed313f99..5b9922e83c58 100644 --- a/Documentation/media/uapi/v4l/vidioc-querycap.rst +++ b/Documentation/media/uapi/v4l/vidioc-querycap.rst @@ -41,13 +41,14 @@ filled by the driver. When the driver is not compatible with this specification the ioctl returns an ``EINVAL`` error code. +.. tabularcolumns:: |p{1.5cm}|p{2.5cm}|p{13cm}| + .. _v4l2-capability: .. flat-table:: struct v4l2_capability :header-rows: 0 :stub-columns: 0 - :widths: 1 1 2 - + :widths: 3 4 20 - .. row 1 @@ -117,17 +118,13 @@ specification the ioctl returns an ``EINVAL`` error code. - :cspan:`2` + ``#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))`` - .. code-block:: c - - #define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) + ``__u32 version = KERNEL_VERSION(0, 8, 1);`` - __u32 version = KERNEL_VERSION(0, 8, 1); + ``printf ("Version: %u.%u.%u\\n",`` - printf ("Version: %u.%u.%u\\n", - (version >> 16) & 0xFF, - (version >> 8) & 0xFF, - version & 0xFF); + ``(version >> 16) & 0xFF, (version >> 8) & 0xFF, version & 0xFF);`` - .. row 6 @@ -173,14 +170,17 @@ specification the ioctl returns an ``EINVAL`` error code. +.. tabularcolumns:: |p{6cm}|p{2.2cm}|p{8.8cm}| + .. _device-capabilities: +.. cssclass:: longtable + .. flat-table:: Device Capabilities Flags :header-rows: 0 :stub-columns: 0 :widths: 3 1 4 - - .. row 1 - ``V4L2_CAP_VIDEO_CAPTURE`` diff --git a/Documentation/media/uapi/v4l/vidioc-queryctrl.rst b/Documentation/media/uapi/v4l/vidioc-queryctrl.rst index 8d6e61a7284d..6e4912f2e3a4 100644 --- a/Documentation/media/uapi/v4l/vidioc-queryctrl.rst +++ b/Documentation/media/uapi/v4l/vidioc-queryctrl.rst @@ -84,7 +84,9 @@ fills the rest of the structure or returns an ``EINVAL`` error code when the :ref:`v4l2_queryctrl <v4l2-queryctrl>` ``minimum`` to ``maximum``, inclusive. -.. note:: It is possible for ``VIDIOC_QUERYMENU`` to return +.. note:: + + It is possible for ``VIDIOC_QUERYMENU`` to return an ``EINVAL`` error code 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. @@ -92,8 +94,12 @@ inclusive. See also the examples in :ref:`control`. +.. tabularcolumns:: |p{1.2cm}|p{3.6cm}|p{12.7cm}| + .. _v4l2-queryctrl: +.. cssclass:: longtable + .. flat-table:: struct v4l2_queryctrl :header-rows: 0 :stub-columns: 0 @@ -188,7 +194,9 @@ See also the examples in :ref:`control`. ``_BITMASK``, ``_MENU`` or ``_INTEGER_MENU`` control. Not valid for other types of controls. - .. note:: Drivers reset controls to their default value only when + .. note:: + + Drivers reset controls to their default value only when the driver is first loaded, never afterwards. - .. row 8 @@ -210,8 +218,12 @@ See also the examples in :ref:`control`. +.. tabularcolumns:: |p{1.2cm}|p{5.0cm}|p{11.3cm}| + .. _v4l2-query-ext-ctrl: +.. cssclass:: longtable + .. flat-table:: struct v4l2_query_ext_ctrl :header-rows: 0 :stub-columns: 0 @@ -306,7 +318,9 @@ See also the examples in :ref:`control`. ``_BOOLEAN``, ``_BITMASK``, ``_MENU``, ``_INTEGER_MENU``, ``_U8`` or ``_U16`` control. Not valid for other types of controls. - .. note:: Drivers reset controls to their default value only when + .. note:: + + Drivers reset controls to their default value only when the driver is first loaded, never afterwards. - .. row 8 @@ -370,6 +384,8 @@ See also the examples in :ref:`control`. +.. tabularcolumns:: |p{1.2cm}|p{0.6cm}|p{1.6cm}|p{13.5cm}| + .. _v4l2-querymenu: .. flat-table:: struct v4l2_querymenu @@ -438,8 +454,12 @@ See also the examples in :ref:`control`. +.. tabularcolumns:: |p{5.8cm}|p{1.4cm}|p{1.0cm}|p{1.4cm}|p{6.9cm}| + .. _v4l2-ctrl-type: +.. cssclass:: longtable + .. flat-table:: enum v4l2_ctrl_type :header-rows: 1 :stub-columns: 0 @@ -635,8 +655,12 @@ See also the examples in :ref:`control`. +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. _control-flags: +.. cssclass:: longtable + .. flat-table:: Control Flags :header-rows: 0 :stub-columns: 0 @@ -728,7 +752,9 @@ See also the examples in :ref:`control`. case the hardware calculates the gain value based on the lighting conditions which can change over time. - .. note:: Setting a new value for a volatile control will have no + .. note:: + + 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. diff --git a/Documentation/media/uapi/v4l/vidioc-querystd.rst b/Documentation/media/uapi/v4l/vidioc-querystd.rst index b4a4e222c7b0..cb03d249417c 100644 --- a/Documentation/media/uapi/v4l/vidioc-querystd.rst +++ b/Documentation/media/uapi/v4l/vidioc-querystd.rst @@ -43,7 +43,9 @@ 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. -.. note:: Drivers shall *not* switch the video standard +.. note:: + + 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 diff --git a/Documentation/media/uapi/v4l/vidioc-reqbufs.rst b/Documentation/media/uapi/v4l/vidioc-reqbufs.rst index 5d0bc6d31c07..8be9343802dc 100644 --- a/Documentation/media/uapi/v4l/vidioc-reqbufs.rst +++ b/Documentation/media/uapi/v4l/vidioc-reqbufs.rst @@ -69,6 +69,8 @@ any DMA in progress, an implicit .. _v4l2-requestbuffers: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: struct v4l2_requestbuffers :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/v4l/vidioc-s-hw-freq-seek.rst b/Documentation/media/uapi/v4l/vidioc-s-hw-freq-seek.rst index 5fd332a5bfee..2bc10ebb12a4 100644 --- a/Documentation/media/uapi/v4l/vidioc-s-hw-freq-seek.rst +++ b/Documentation/media/uapi/v4l/vidioc-s-hw-freq-seek.rst @@ -61,6 +61,8 @@ If this ioctl is called from a non-blocking filehandle, then ``EAGAIN`` error code is returned and no seek takes place. +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. _v4l2-hw-freq-seek: .. flat-table:: struct v4l2_hw_freq_seek diff --git a/Documentation/media/uapi/v4l/vidioc-streamon.rst b/Documentation/media/uapi/v4l/vidioc-streamon.rst index bb23745ebcaf..7fa4362f9a81 100644 --- a/Documentation/media/uapi/v4l/vidioc-streamon.rst +++ b/Documentation/media/uapi/v4l/vidioc-streamon.rst @@ -76,7 +76,9 @@ 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:: Applications can be preempted for unknown periods right before +.. note:: + + 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. diff --git a/Documentation/media/uapi/v4l/vidioc-subdev-enum-frame-interval.rst b/Documentation/media/uapi/v4l/vidioc-subdev-enum-frame-interval.rst index 0aa6482a91a6..1c853f3f5676 100644 --- a/Documentation/media/uapi/v4l/vidioc-subdev-enum-frame-interval.rst +++ b/Documentation/media/uapi/v4l/vidioc-subdev-enum-frame-interval.rst @@ -64,6 +64,8 @@ multiple pads of the same sub-device is not defined. .. _v4l2-subdev-frame-interval-enum: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: struct v4l2_subdev_frame_interval_enum :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/v4l/vidioc-subdev-enum-frame-size.rst b/Documentation/media/uapi/v4l/vidioc-subdev-enum-frame-size.rst index 7a5811b71b68..e1bcc69f67db 100644 --- a/Documentation/media/uapi/v4l/vidioc-subdev-enum-frame-size.rst +++ b/Documentation/media/uapi/v4l/vidioc-subdev-enum-frame-size.rst @@ -66,6 +66,8 @@ information about try formats. .. _v4l2-subdev-frame-size-enum: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: struct v4l2_subdev_frame_size_enum :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/v4l/vidioc-subdev-enum-mbus-code.rst b/Documentation/media/uapi/v4l/vidioc-subdev-enum-mbus-code.rst index bc0531eb56fa..418d543ebbbf 100644 --- a/Documentation/media/uapi/v4l/vidioc-subdev-enum-mbus-code.rst +++ b/Documentation/media/uapi/v4l/vidioc-subdev-enum-mbus-code.rst @@ -51,6 +51,8 @@ information about the try formats. .. _v4l2-subdev-mbus-code-enum: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: struct v4l2_subdev_mbus_code_enum :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/v4l/vidioc-subdev-g-crop.rst b/Documentation/media/uapi/v4l/vidioc-subdev-g-crop.rst index ae802f1594e7..7caa04e1c2a8 100644 --- a/Documentation/media/uapi/v4l/vidioc-subdev-g-crop.rst +++ b/Documentation/media/uapi/v4l/vidioc-subdev-g-crop.rst @@ -74,6 +74,8 @@ modified format should be as close as possible to the original request. .. _v4l2-subdev-crop: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: struct v4l2_subdev_crop :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/v4l/vidioc-subdev-g-fmt.rst b/Documentation/media/uapi/v4l/vidioc-subdev-g-fmt.rst index 90e2a6635ebc..f5e9b40b22f4 100644 --- a/Documentation/media/uapi/v4l/vidioc-subdev-g-fmt.rst +++ b/Documentation/media/uapi/v4l/vidioc-subdev-g-fmt.rst @@ -75,6 +75,8 @@ format to match what the hardware can provide. The modified format should be as close as possible to the original request. +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. _v4l2-subdev-format: .. flat-table:: struct v4l2_subdev_format @@ -120,6 +122,8 @@ should be as close as possible to the original request. +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. _v4l2-subdev-format-whence: .. flat-table:: enum v4l2_subdev_format_whence diff --git a/Documentation/media/uapi/v4l/vidioc-subdev-g-frame-interval.rst b/Documentation/media/uapi/v4l/vidioc-subdev-g-frame-interval.rst index d8a1cabbd272..2df2d8635f2b 100644 --- a/Documentation/media/uapi/v4l/vidioc-subdev-g-frame-interval.rst +++ b/Documentation/media/uapi/v4l/vidioc-subdev-g-frame-interval.rst @@ -69,6 +69,8 @@ the same sub-device is not defined. .. _v4l2-subdev-frame-interval: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: struct v4l2_subdev_frame_interval :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/v4l/vidioc-subdev-g-selection.rst b/Documentation/media/uapi/v4l/vidioc-subdev-g-selection.rst index 50838a4a429e..c59a32e0cc20 100644 --- a/Documentation/media/uapi/v4l/vidioc-subdev-g-selection.rst +++ b/Documentation/media/uapi/v4l/vidioc-subdev-g-selection.rst @@ -66,6 +66,8 @@ Selection targets and flags are documented in .. _v4l2-subdev-selection: +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. flat-table:: struct v4l2_subdev_selection :header-rows: 0 :stub-columns: 0 diff --git a/Documentation/media/uapi/v4l/vidioc-subscribe-event.rst b/Documentation/media/uapi/v4l/vidioc-subscribe-event.rst index 3f28e8c47960..71079746ddac 100644 --- a/Documentation/media/uapi/v4l/vidioc-subscribe-event.rst +++ b/Documentation/media/uapi/v4l/vidioc-subscribe-event.rst @@ -38,6 +38,8 @@ Subscribe or unsubscribe V4L2 event. Subscribed events are dequeued by using the :ref:`VIDIOC_DQEVENT` ioctl. +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| + .. _v4l2-event-subscription: .. flat-table:: struct v4l2_event_subscription @@ -54,7 +56,9 @@ using the :ref:`VIDIOC_DQEVENT` ioctl. - Type of the event, see :ref:`event-type`. - .. note:: ``V4L2_EVENT_ALL`` can be used with + .. note:: + + ``V4L2_EVENT_ALL`` can be used with :ref:`VIDIOC_UNSUBSCRIBE_EVENT <VIDIOC_SUBSCRIBE_EVENT>` for unsubscribing all events at once. @@ -87,6 +91,8 @@ using the :ref:`VIDIOC_DQEVENT` ioctl. +.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| + .. _event-flags: .. flat-table:: Event Flags diff --git a/Documentation/media/v4l-drivers/bttv.rst b/Documentation/media/v4l-drivers/bttv.rst index f78c135b40e7..7abc1c9a261b 100644 --- a/Documentation/media/v4l-drivers/bttv.rst +++ b/Documentation/media/v4l-drivers/bttv.rst @@ -586,6 +586,7 @@ Cards ----- .. note:: + For a more updated list, please check https://linuxtv.org/wiki/index.php/Hardware_Device_Information diff --git a/Documentation/media/v4l-drivers/cpia2.rst b/Documentation/media/v4l-drivers/cpia2.rst index 763705c1f50f..b5125016cfcb 100644 --- a/Documentation/media/v4l-drivers/cpia2.rst +++ b/Documentation/media/v4l-drivers/cpia2.rst @@ -55,6 +55,9 @@ may be done automatically by your distribution. Driver options ~~~~~~~~~~~~~~ +.. tabularcolumns:: |p{13ex}|L| + + ============== ======================================================== Option Description ============== ======================================================== diff --git a/Documentation/media/v4l-drivers/si476x.rst b/Documentation/media/v4l-drivers/si476x.rst index d5c07bb7524d..677512566f15 100644 --- a/Documentation/media/v4l-drivers/si476x.rst +++ b/Documentation/media/v4l-drivers/si476x.rst @@ -31,31 +31,33 @@ The drivers exposes following files: information. The contents of the file is binary data of the following layout: + .. tabularcolumns:: |p{7ex}|p{12ex}|L| + ============= ============== ==================================== - Offset Name Description + Offset Name Description ============= ============== ==================================== - 0x00 blend_int Flag, set when stereo separation has + 0x00 blend_int Flag, set when stereo separation has crossed below the blend threshold - 0x01 hblend_int Flag, set when HiBlend cutoff + 0x01 hblend_int Flag, set when HiBlend cutoff frequency is lower than threshold - 0x02 hicut_int Flag, set when HiCut cutoff + 0x02 hicut_int Flag, set when HiCut cutoff frequency is lower than threshold - 0x03 chbw_int Flag, set when channel filter + 0x03 chbw_int Flag, set when channel filter bandwidth is less than threshold - 0x04 softmute_int Flag indicating that softmute + 0x04 softmute_int Flag indicating that softmute attenuation has increased above softmute threshold 0x05 smute 0 - Audio is not soft muted 1 - Audio is soft muted - 0x06 smattn Soft mute attenuation level in dB - 0x07 chbw Channel filter bandwidth in kHz - 0x08 hicut HiCut cutoff frequency in units of + 0x06 smattn Soft mute attenuation level in dB + 0x07 chbw Channel filter bandwidth in kHz + 0x08 hicut HiCut cutoff frequency in units of 100Hz - 0x09 hiblend HiBlend cutoff frequency in units + 0x09 hiblend HiBlend cutoff frequency in units of 100 Hz - 0x10 pilot 0 - Stereo pilot is not present + 0x10 pilot 0 - Stereo pilot is not present 1 - Stereo pilot is present - 0x11 stblend Stereo blend in % + 0x11 stblend Stereo blend in % ============= ============== ==================================== @@ -63,12 +65,14 @@ The drivers exposes following files: This file contains statistics about RDS receptions. It's binary data has the following layout: + .. tabularcolumns:: |p{7ex}|p{12ex}|L| + ============= ============== ==================================== - Offset Name Description + Offset Name Description ============= ============== ==================================== - 0x00 expected Number of expected RDS blocks - 0x02 received Number of received RDS blocks - 0x04 uncorrectable Number of uncorrectable RDS blocks + 0x00 expected Number of expected RDS blocks + 0x02 received Number of received RDS blocks + 0x04 uncorrectable Number of uncorrectable RDS blocks ============= ============== ==================================== * /sys/kernel/debug/<device-name>/agc @@ -77,21 +81,23 @@ The drivers exposes following files: The layout is: + .. tabularcolumns:: |p{7ex}|p{12ex}|L| + ============= ============== ==================================== - Offset Name Description + Offset Name Description ============= ============== ==================================== - 0x00 mxhi 0 - FM Mixer PD high threshold is + 0x00 mxhi 0 - FM Mixer PD high threshold is not tripped 1 - FM Mixer PD high threshold is tripped - 0x01 mxlo ditto for FM Mixer PD low - 0x02 lnahi ditto for FM LNA PD high - 0x03 lnalo ditto for FM LNA PD low - 0x04 fmagc1 FMAGC1 attenuator resistance + 0x01 mxlo ditto for FM Mixer PD low + 0x02 lnahi ditto for FM LNA PD high + 0x03 lnalo ditto for FM LNA PD low + 0x04 fmagc1 FMAGC1 attenuator resistance (see datasheet for more detail) - 0x05 fmagc2 ditto for FMAGC2 - 0x06 pgagain PGA gain in dB - 0x07 fmwblang FM/WB LNA Gain in dB + 0x05 fmagc2 ditto for FMAGC2 + 0x06 pgagain PGA gain in dB + 0x07 fmwblang FM/WB LNA Gain in dB ============= ============== ==================================== * /sys/kernel/debug/<device-name>/rsq @@ -100,48 +106,50 @@ The drivers exposes following files: The layout is: + .. tabularcolumns:: |p{7ex}|p{12ex}|p{60ex}| + ============= ============== ==================================== - Offset Name Description + Offset Name Description ============= ============== ==================================== - 0x00 multhint 0 - multipath value has not crossed + 0x00 multhint 0 - multipath value has not crossed the Multipath high threshold 1 - multipath value has crossed the Multipath high threshold - 0x01 multlint ditto for Multipath low threshold - 0x02 snrhint 0 - received signal's SNR has not + 0x01 multlint ditto for Multipath low threshold + 0x02 snrhint 0 - received signal's SNR has not crossed high threshold 1 - received signal's SNR has crossed high threshold - 0x03 snrlint ditto for low threshold - 0x04 rssihint ditto for RSSI high threshold - 0x05 rssilint ditto for RSSI low threshold - 0x06 bltf Flag indicating if seek command + 0x03 snrlint ditto for low threshold + 0x04 rssihint ditto for RSSI high threshold + 0x05 rssilint ditto for RSSI low threshold + 0x06 bltf Flag indicating if seek command reached/wrapped seek band limit - 0x07 snr_ready Indicates that SNR metrics is ready - 0x08 rssiready ditto for RSSI metrics - 0x09 injside 0 - Low-side injection is being used + 0x07 snr_ready Indicates that SNR metrics is ready + 0x08 rssiready ditto for RSSI metrics + 0x09 injside 0 - Low-side injection is being used 1 - High-side injection is used - 0x10 afcrl Flag indicating if AFC rails - 0x11 valid Flag indicating if channel is valid - 0x12 readfreq Current tuned frequency - 0x14 freqoff Signed frequency offset in units of + 0x10 afcrl Flag indicating if AFC rails + 0x11 valid Flag indicating if channel is valid + 0x12 readfreq Current tuned frequency + 0x14 freqoff Signed frequency offset in units of 2ppm - 0x15 rssi Signed value of RSSI in dBuV - 0x16 snr Signed RF SNR in dB - 0x17 issi Signed Image Strength Signal + 0x15 rssi Signed value of RSSI in dBuV + 0x16 snr Signed RF SNR in dB + 0x17 issi Signed Image Strength Signal indicator - 0x18 lassi Signed Low side adjacent Channel + 0x18 lassi Signed Low side adjacent Channel Strength indicator - 0x19 hassi ditto fpr High side - 0x20 mult Multipath indicator - 0x21 dev Frequency deviation - 0x24 assi Adjacent channel SSI - 0x25 usn Ultrasonic noise indicator - 0x26 pilotdev Pilot deviation in units of 100 Hz - 0x27 rdsdev ditto for RDS - 0x28 assidev ditto for ASSI - 0x29 strongdev Frequency deviation - 0x30 rdspi RDS PI code + 0x19 hassi ditto fpr High side + 0x20 mult Multipath indicator + 0x21 dev Frequency deviation + 0x24 assi Adjacent channel SSI + 0x25 usn Ultrasonic noise indicator + 0x26 pilotdev Pilot deviation in units of 100 Hz + 0x27 rdsdev ditto for RDS + 0x28 assidev ditto for ASSI + 0x29 strongdev Frequency deviation + 0x30 rdspi RDS PI code ============= ============== ==================================== * /sys/kernel/debug/<device-name>/rsq_primary diff --git a/Documentation/media/v4l-drivers/zr364xx.rst b/Documentation/media/v4l-drivers/zr364xx.rst index d8d1171887cd..f5280e366826 100644 --- a/Documentation/media/v4l-drivers/zr364xx.rst +++ b/Documentation/media/v4l-drivers/zr364xx.rst @@ -5,7 +5,7 @@ site: http://royale.zerezo.com/zr364xx/ mail: [email protected] -.. note: +.. note:: This documentation is outdated diff --git a/MAINTAINERS b/MAINTAINERS index 810723537aa5..7e09a5169a5f 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -7733,6 +7733,14 @@ T: git git://git.monstr.eu/linux-2.6-microblaze.git S: Supported F: arch/microblaze/ +MICROCHIP / ATMEL ISC DRIVER +M: Songjun Wu <[email protected]> +S: Supported +F: drivers/media/platform/atmel/atmel-isc.c +F: drivers/media/platform/atmel/atmel-isc-regs.h +F: devicetree/bindings/media/atmel-isc.txt + MICROSOFT SURFACE PRO 3 BUTTON DRIVER M: Chen Yu <[email protected]> diff --git a/drivers/media/platform/Kconfig b/drivers/media/platform/Kconfig index f25344bc7912..b23db1779808 100644 --- a/drivers/media/platform/Kconfig +++ b/drivers/media/platform/Kconfig @@ -111,6 +111,7 @@ source "drivers/media/platform/s5p-tv/Kconfig" source "drivers/media/platform/am437x/Kconfig" source "drivers/media/platform/xilinx/Kconfig" source "drivers/media/platform/rcar-vin/Kconfig" +source "drivers/media/platform/atmel/Kconfig" config VIDEO_TI_CAL tristate "TI CAL (Camera Adaptation Layer) driver" diff --git a/drivers/media/platform/Makefile b/drivers/media/platform/Makefile index 21771c1a13fb..37b6c75f0b15 100644 --- a/drivers/media/platform/Makefile +++ b/drivers/media/platform/Makefile @@ -58,6 +58,8 @@ obj-$(CONFIG_VIDEO_XILINX) += xilinx/ obj-$(CONFIG_VIDEO_RCAR_VIN) += rcar-vin/ +obj-$(CONFIG_VIDEO_ATMEL_ISC) += atmel/ + ccflags-y += -I$(srctree)/drivers/media/i2c obj-$(CONFIG_VIDEO_MEDIATEK_VPU) += mtk-vpu/ diff --git a/drivers/media/platform/atmel/Kconfig b/drivers/media/platform/atmel/Kconfig new file mode 100644 index 000000000000..867dca22a473 --- /dev/null +++ b/drivers/media/platform/atmel/Kconfig @@ -0,0 +1,9 @@ +config VIDEO_ATMEL_ISC + tristate "ATMEL Image Sensor Controller (ISC) support" + depends on VIDEO_V4L2 && COMMON_CLK && VIDEO_V4L2_SUBDEV_API && HAS_DMA + depends on ARCH_AT91 || COMPILE_TEST + select VIDEOBUF2_DMA_CONTIG + select REGMAP_MMIO + help + This module makes the ATMEL Image Sensor Controller available + as a v4l2 device.
\ No newline at end of file diff --git a/drivers/media/platform/atmel/Makefile b/drivers/media/platform/atmel/Makefile new file mode 100644 index 000000000000..9d7c999d434d --- /dev/null +++ b/drivers/media/platform/atmel/Makefile @@ -0,0 +1 @@ +obj-$(CONFIG_VIDEO_ATMEL_ISC) += atmel-isc.o diff --git a/drivers/media/platform/atmel/atmel-isc-regs.h b/drivers/media/platform/atmel/atmel-isc-regs.h new file mode 100644 index 000000000000..00c449717cde --- /dev/null +++ b/drivers/media/platform/atmel/atmel-isc-regs.h @@ -0,0 +1,165 @@ +#ifndef __ATMEL_ISC_REGS_H +#define __ATMEL_ISC_REGS_H + +#include <linux/bitops.h> + +/* ISC Control Enable Register 0 */ +#define ISC_CTRLEN 0x00000000 + +/* ISC Control Disable Register 0 */ +#define ISC_CTRLDIS 0x00000004 + +/* ISC Control Status Register 0 */ +#define ISC_CTRLSR 0x00000008 + +#define ISC_CTRL_CAPTURE BIT(0) +#define ISC_CTRL_UPPRO BIT(1) +#define ISC_CTRL_HISREQ BIT(2) +#define ISC_CTRL_HISCLR BIT(3) + +/* ISC Parallel Front End Configuration 0 Register */ +#define ISC_PFE_CFG0 0x0000000c + +#define ISC_PFE_CFG0_HPOL_LOW BIT(0) +#define ISC_PFE_CFG0_VPOL_LOW BIT(1) +#define ISC_PFE_CFG0_PPOL_LOW BIT(2) + +#define ISC_PFE_CFG0_MODE_PROGRESSIVE (0x0 << 4) +#define ISC_PFE_CFG0_MODE_MASK GENMASK(6, 4) + +#define ISC_PFE_CFG0_BPS_EIGHT (0x4 << 28) +#define ISC_PFG_CFG0_BPS_NINE (0x3 << 28) +#define ISC_PFG_CFG0_BPS_TEN (0x2 << 28) +#define ISC_PFG_CFG0_BPS_ELEVEN (0x1 << 28) +#define ISC_PFG_CFG0_BPS_TWELVE (0x0 << 28) +#define ISC_PFE_CFG0_BPS_MASK GENMASK(30, 28) + +/* ISC Clock Enable Register */ +#define ISC_CLKEN 0x00000018 + +/* ISC Clock Disable Register */ +#define ISC_CLKDIS 0x0000001c + +/* ISC Clock Status Register */ +#define ISC_CLKSR 0x00000020 + +#define ISC_CLK(n) BIT(n) + +/* ISC Clock Configuration Register */ +#define ISC_CLKCFG 0x00000024 +#define ISC_CLKCFG_DIV_SHIFT(n) ((n)*16) +#define ISC_CLKCFG_DIV_MASK(n) GENMASK(((n)*16 + 7), (n)*16) +#define ISC_CLKCFG_SEL_SHIFT(n) ((n)*16 + 8) +#define ISC_CLKCFG_SEL_MASK(n) GENMASK(((n)*17 + 8), ((n)*16 + 8)) + +/* ISC Interrupt Enable Register */ +#define ISC_INTEN 0x00000028 + +/* ISC Interrupt Disable Register */ +#define ISC_INTDIS 0x0000002c + +/* ISC Interrupt Mask Register */ +#define ISC_INTMASK 0x00000030 + +/* ISC Interrupt Status Register */ +#define ISC_INTSR 0x00000034 + +#define ISC_INT_DDONE BIT(8) + +/* ISC White Balance Control Register */ +#define ISC_WB_CTRL 0x00000058 + +/* ISC White Balance Configuration Register */ +#define ISC_WB_CFG 0x0000005c + +/* ISC Color Filter Array Control Register */ +#define ISC_CFA_CTRL 0x00000070 + +/* ISC Color Filter Array Configuration Register */ +#define ISC_CFA_CFG 0x00000074 + +#define ISC_BAY_CFG_GRGR 0x0 +#define ISC_BAY_CFG_RGRG 0x1 +#define ISC_BAY_CFG_GBGB 0x2 +#define ISC_BAY_CFG_BGBG 0x3 +#define ISC_BAY_CFG_MASK GENMASK(1, 0) + +/* ISC Color Correction Control Register */ +#define ISC_CC_CTRL 0x00000078 + +/* ISC Gamma Correction Control Register */ +#define ISC_GAM_CTRL 0x00000094 + +/* Color Space Conversion Control Register */ +#define ISC_CSC_CTRL 0x00000398 + +/* Contrast And Brightness Control Register */ +#define ISC_CBC_CTRL 0x000003b4 + +/* Subsampling 4:4:4 to 4:2:2 Control Register */ +#define ISC_SUB422_CTRL 0x000003c4 + +/* Subsampling 4:2:2 to 4:2:0 Control Register */ +#define ISC_SUB420_CTRL 0x000003cc + +/* Rounding, Limiting and Packing Configuration Register */ +#define ISC_RLP_CFG 0x000003d0 + +#define ISC_RLP_CFG_MODE_DAT8 0x0 +#define ISC_RLP_CFG_MODE_DAT9 0x1 +#define ISC_RLP_CFG_MODE_DAT10 0x2 +#define ISC_RLP_CFG_MODE_DAT11 0x3 +#define ISC_RLP_CFG_MODE_DAT12 0x4 +#define ISC_RLP_CFG_MODE_DATY8 0x5 +#define ISC_RLP_CFG_MODE_DATY10 0x6 +#define ISC_RLP_CFG_MODE_ARGB444 0x7 +#define ISC_RLP_CFG_MODE_ARGB555 0x8 +#define ISC_RLP_CFG_MODE_RGB565 0x9 +#define ISC_RLP_CFG_MODE_ARGB32 0xa +#define ISC_RLP_CFG_MODE_YYCC 0xb +#define ISC_RLP_CFG_MODE_YYCC_LIMITED 0xc +#define ISC_RLP_CFG_MODE_MASK GENMASK(3, 0) + +/* DMA Configuration Register */ +#define ISC_DCFG 0x000003e0 +#define ISC_DCFG_IMODE_PACKED8 0x0 +#define ISC_DCFG_IMODE_PACKED16 0x1 +#define ISC_DCFG_IMODE_PACKED32 0x2 +#define ISC_DCFG_IMODE_YC422SP 0x3 +#define ISC_DCFG_IMODE_YC422P 0x4 +#define ISC_DCFG_IMODE_YC420SP 0x5 +#define ISC_DCFG_IMODE_YC420P 0x6 +#define ISC_DCFG_IMODE_MASK GENMASK(2, 0) + +#define ISC_DCFG_YMBSIZE_SINGLE (0x0 << 4) +#define ISC_DCFG_YMBSIZE_BEATS4 (0x1 << 4) +#define ISC_DCFG_YMBSIZE_BEATS8 (0x2 << 4) +#define ISC_DCFG_YMBSIZE_BEATS16 (0x3 << 4) +#define ISC_DCFG_YMBSIZE_MASK GENMASK(5, 4) + +#define ISC_DCFG_CMBSIZE_SINGLE (0x0 << 8) +#define ISC_DCFG_CMBSIZE_BEATS4 (0x1 << 8) +#define ISC_DCFG_CMBSIZE_BEATS8 (0x2 << 8) +#define ISC_DCFG_CMBSIZE_BEATS16 (0x3 << 8) +#define ISC_DCFG_CMBSIZE_MASK GENMASK(9, 8) + +/* DMA Control Register */ +#define ISC_DCTRL 0x000003e4 + +#define ISC_DCTRL_DVIEW_PACKED (0x0 << 1) +#define ISC_DCTRL_DVIEW_SEMIPLANAR (0x1 << 1) +#define ISC_DCTRL_DVIEW_PLANAR (0x2 << 1) +#define ISC_DCTRL_DVIEW_MASK GENMASK(2, 1) + +#define ISC_DCTRL_IE_IS (0x0 << 4) + +/* DMA Descriptor Address Register */ +#define ISC_DNDA 0x000003e8 + +/* DMA Address 0 Register */ +#define ISC_DAD0 0x000003ec + +/* DMA Stride 0 Register */ +#define ISC_DST0 0x000003f0 + +#endif diff --git a/drivers/media/platform/atmel/atmel-isc.c b/drivers/media/platform/atmel/atmel-isc.c new file mode 100644 index 000000000000..f0c2512d27f0 --- /dev/null +++ b/drivers/media/platform/atmel/atmel-isc.c @@ -0,0 +1,1514 @@ +/* + * Atmel Image Sensor Controller (ISC) driver + * + * Copyright (C) 2016 Atmel + * + * Author: Songjun Wu <[email protected]> + * + * This program is free software; you may 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. + * + * Sensor-->PFE-->WB-->CFA-->CC-->GAM-->CSC-->CBC-->SUB-->RLP-->DMA + * + * ISC video pipeline integrates the following submodules: + * PFE: Parallel Front End to sample the camera sensor input stream + * WB: Programmable white balance in the Bayer domain + * CFA: Color filter array interpolation module + * CC: Programmable color correction + * GAM: Gamma correction + * CSC: Programmable color space conversion + * CBC: Contrast and Brightness control + * SUB: This module performs YCbCr444 to YCbCr420 chrominance subsampling + * RLP: This module performs rounding, range limiting + * and packing of the incoming data + */ + +#include <linux/clk.h> +#include <linux/clkdev.h> +#include <linux/clk-provider.h> +#include <linux/delay.h> +#include <linux/interrupt.h> +#include <linux/module.h> +#include <linux/of.h> +#include <linux/platform_device.h> +#include <linux/pm_runtime.h> +#include <linux/regmap.h> +#include <linux/videodev2.h> + +#include <media/v4l2-device.h> +#include <media/v4l2-image-sizes.h> +#include <media/v4l2-ioctl.h> +#include <media/v4l2-of.h> +#include <media/v4l2-subdev.h> +#include <media/videobuf2-dma-contig.h> + +#include "atmel-isc-regs.h" + +#define ATMEL_ISC_NAME "atmel_isc" + +#define ISC_MAX_SUPPORT_WIDTH 2592 +#define ISC_MAX_SUPPORT_HEIGHT 1944 + +#define ISC_CLK_MAX_DIV 255 + +enum isc_clk_id { + ISC_ISPCK = 0, + ISC_MCK = 1, +}; + +struct isc_clk { + struct clk_hw hw; + struct clk *clk; + struct regmap *regmap; + u8 id; + u8 parent_id; + u32 div; + struct device *dev; +}; + +#define to_isc_clk(hw) container_of(hw, struct isc_clk, hw) + +struct isc_buffer { + struct vb2_v4l2_buffer vb; + struct list_head list; +}; + +struct isc_subdev_entity { + struct v4l2_subdev *sd; + struct v4l2_async_subdev *asd; + struct v4l2_async_notifier notifier; + struct v4l2_subdev_pad_config *config; + + u32 pfe_cfg0; + + struct list_head list; +}; + +/* + * struct isc_format - ISC media bus format information + * @fourcc: Fourcc code for this format + * @mbus_code: V4L2 media bus format code. + * @bpp: Bytes per pixel (when stored in memory) + * @reg_bps: reg value for bits per sample + * (when transferred over a bus) + * @support: Indicates format supported by subdev + */ +struct isc_format { + u32 fourcc; + u32 mbus_code; + u8 bpp; + + u32 reg_bps; + u32 reg_rlp_mode; + u32 reg_dcfg_imode; + u32 reg_dctrl_dview; + + bool support; +}; + +#define ISC_PIPE_LINE_NODE_NUM 11 + +struct isc_device { + struct regmap *regmap; + struct clk *hclock; + struct clk *ispck; + struct isc_clk isc_clks[2]; + + struct device *dev; + struct v4l2_device v4l2_dev; + struct video_device video_dev; + + struct vb2_queue vb2_vidq; + spinlock_t dma_queue_lock; + struct list_head dma_queue; + struct isc_buffer *cur_frm; + unsigned int sequence; + bool stop; + struct completion comp; + + struct v4l2_format fmt; + struct isc_format **user_formats; + unsigned int num_user_formats; + const struct isc_format *current_fmt; + + struct mutex lock; + + struct regmap_field *pipeline[ISC_PIPE_LINE_NODE_NUM]; + + struct isc_subdev_entity *current_subdev; + struct list_head subdev_entities; +}; + +static struct isc_format isc_formats[] = { + { V4L2_PIX_FMT_SBGGR8, MEDIA_BUS_FMT_SBGGR8_1X8, + 1, ISC_PFE_CFG0_BPS_EIGHT, ISC_RLP_CFG_MODE_DAT8, + ISC_DCFG_IMODE_PACKED8, ISC_DCTRL_DVIEW_PACKED, false }, + { V4L2_PIX_FMT_SGBRG8, MEDIA_BUS_FMT_SGBRG8_1X8, + 1, ISC_PFE_CFG0_BPS_EIGHT, ISC_RLP_CFG_MODE_DAT8, + ISC_DCFG_IMODE_PACKED8, ISC_DCTRL_DVIEW_PACKED, false }, + { V4L2_PIX_FMT_SGRBG8, MEDIA_BUS_FMT_SGRBG8_1X8, + 1, ISC_PFE_CFG0_BPS_EIGHT, ISC_RLP_CFG_MODE_DAT8, + ISC_DCFG_IMODE_PACKED8, ISC_DCTRL_DVIEW_PACKED, false }, + { V4L2_PIX_FMT_SRGGB8, MEDIA_BUS_FMT_SRGGB8_1X8, + 1, ISC_PFE_CFG0_BPS_EIGHT, ISC_RLP_CFG_MODE_DAT8, + ISC_DCFG_IMODE_PACKED8, ISC_DCTRL_DVIEW_PACKED, false }, + + { V4L2_PIX_FMT_SBGGR10, MEDIA_BUS_FMT_SBGGR10_1X10, + 2, ISC_PFG_CFG0_BPS_TEN, ISC_RLP_CFG_MODE_DAT10, + ISC_DCFG_IMODE_PACKED16, ISC_DCTRL_DVIEW_PACKED, false }, + { V4L2_PIX_FMT_SGBRG10, MEDIA_BUS_FMT_SGBRG10_1X10, + 2, ISC_PFG_CFG0_BPS_TEN, ISC_RLP_CFG_MODE_DAT10, + ISC_DCFG_IMODE_PACKED16, ISC_DCTRL_DVIEW_PACKED, false }, + { V4L2_PIX_FMT_SGRBG10, MEDIA_BUS_FMT_SGRBG10_1X10, + 2, ISC_PFG_CFG0_BPS_TEN, ISC_RLP_CFG_MODE_DAT10, + ISC_DCFG_IMODE_PACKED16, ISC_DCTRL_DVIEW_PACKED, false }, + { V4L2_PIX_FMT_SRGGB10, MEDIA_BUS_FMT_SRGGB10_1X10, + 2, ISC_PFG_CFG0_BPS_TEN, ISC_RLP_CFG_MODE_DAT10, + ISC_DCFG_IMODE_PACKED16, ISC_DCTRL_DVIEW_PACKED, false }, + + { V4L2_PIX_FMT_SBGGR12, MEDIA_BUS_FMT_SBGGR12_1X12, + 2, ISC_PFG_CFG0_BPS_TWELVE, ISC_RLP_CFG_MODE_DAT12, + ISC_DCFG_IMODE_PACKED16, ISC_DCTRL_DVIEW_PACKED, false }, + { V4L2_PIX_FMT_SGBRG12, MEDIA_BUS_FMT_SGBRG12_1X12, + 2, ISC_PFG_CFG0_BPS_TWELVE, ISC_RLP_CFG_MODE_DAT12, + ISC_DCFG_IMODE_PACKED16, ISC_DCTRL_DVIEW_PACKED, false }, + { V4L2_PIX_FMT_SGRBG12, MEDIA_BUS_FMT_SGRBG12_1X12, + 2, ISC_PFG_CFG0_BPS_TWELVE, ISC_RLP_CFG_MODE_DAT12, + ISC_DCFG_IMODE_PACKED16, ISC_DCTRL_DVIEW_PACKED, false }, + { V4L2_PIX_FMT_SRGGB12, MEDIA_BUS_FMT_SRGGB12_1X12, + 2, ISC_PFG_CFG0_BPS_TWELVE, ISC_RLP_CFG_MODE_DAT12, + ISC_DCFG_IMODE_PACKED16, ISC_DCTRL_DVIEW_PACKED, false }, + + { V4L2_PIX_FMT_YUYV, MEDIA_BUS_FMT_YUYV8_2X8, + 2, ISC_PFE_CFG0_BPS_EIGHT, ISC_RLP_CFG_MODE_DAT8, + ISC_DCFG_IMODE_PACKED8, ISC_DCTRL_DVIEW_PACKED, false }, +}; + +static int isc_clk_enable(struct clk_hw *hw) +{ + struct isc_clk *isc_clk = to_isc_clk(hw); + u32 id = isc_clk->id; + struct regmap *regmap = isc_clk->regmap; + + dev_dbg(isc_clk->dev, "ISC CLK: %s, div = %d, parent id = %d\n", + __func__, isc_clk->div, isc_clk->parent_id); + + regmap_update_bits(regmap, ISC_CLKCFG, + ISC_CLKCFG_DIV_MASK(id) | ISC_CLKCFG_SEL_MASK(id), + (isc_clk->div << ISC_CLKCFG_DIV_SHIFT(id)) | + (isc_clk->parent_id << ISC_CLKCFG_SEL_SHIFT(id))); + + regmap_write(regmap, ISC_CLKEN, ISC_CLK(id)); + + return 0; +} + +static void isc_clk_disable(struct clk_hw *hw) +{ + struct isc_clk *isc_clk = to_isc_clk(hw); + u32 id = isc_clk->id; + + regmap_write(isc_clk->regmap, ISC_CLKDIS, ISC_CLK(id)); +} + +static int isc_clk_is_enabled(struct clk_hw *hw) +{ + struct isc_clk *isc_clk = to_isc_clk(hw); + u32 status; + + regmap_read(isc_clk->regmap, ISC_CLKSR, &status); + + return status & ISC_CLK(isc_clk->id) ? 1 : 0; +} + +static unsigned long +isc_clk_recalc_rate(struct clk_hw *hw, unsigned long parent_rate) +{ + struct isc_clk *isc_clk = to_isc_clk(hw); + + return DIV_ROUND_CLOSEST(parent_rate, isc_clk->div + 1); +} + +static int isc_clk_determine_rate(struct clk_hw *hw, + struct clk_rate_request *req) +{ + struct isc_clk *isc_clk = to_isc_clk(hw); + long best_rate = -EINVAL; + int best_diff = -1; + unsigned int i, div; + + for (i = 0; i < clk_hw_get_num_parents(hw); i++) { + struct clk_hw *parent; + unsigned long parent_rate; + + parent = clk_hw_get_parent_by_index(hw, i); + if (!parent) + continue; + + parent_rate = clk_hw_get_rate(parent); + if (!parent_rate) + continue; + + for (div = 1; div < ISC_CLK_MAX_DIV + 2; div++) { + unsigned long rate; + int diff; + + rate = DIV_ROUND_CLOSEST(parent_rate, div); + diff = abs(req->rate - rate); + + if (best_diff < 0 || best_diff > diff) { + best_rate = rate; + best_diff = diff; + req->best_parent_rate = parent_rate; + req->best_parent_hw = parent; + } + + if (!best_diff || rate < req->rate) + break; + } + + if (!best_diff) + break; + } + + dev_dbg(isc_clk->dev, + "ISC CLK: %s, best_rate = %ld, parent clk: %s @ %ld\n", + __func__, best_rate, + __clk_get_name((req->best_parent_hw)->clk), + req->best_parent_rate); + + if (best_rate < 0) + return best_rate; + + req->rate = best_rate; + + return 0; +} + +static int isc_clk_set_parent(struct clk_hw *hw, u8 index) +{ + struct isc_clk *isc_clk = to_isc_clk(hw); + + if (index >= clk_hw_get_num_parents(hw)) + return -EINVAL; + + isc_clk->parent_id = index; + + return 0; +} + +static u8 isc_clk_get_parent(struct clk_hw *hw) +{ + struct isc_clk *isc_clk = to_isc_clk(hw); + + return isc_clk->parent_id; +} + +static int isc_clk_set_rate(struct clk_hw *hw, + unsigned long rate, + unsigned long parent_rate) +{ + struct isc_clk *isc_clk = to_isc_clk(hw); + u32 div; + + if (!rate) + return -EINVAL; + + div = DIV_ROUND_CLOSEST(parent_rate, rate); + if (div > (ISC_CLK_MAX_DIV + 1) || !div) + return -EINVAL; + + isc_clk->div = div - 1; + + return 0; +} + +static const struct clk_ops isc_clk_ops = { + .enable = isc_clk_enable, + .disable = isc_clk_disable, + .is_enabled = isc_clk_is_enabled, + .recalc_rate = isc_clk_recalc_rate, + .determine_rate = isc_clk_determine_rate, + .set_parent = isc_clk_set_parent, + .get_parent = isc_clk_get_parent, + .set_rate = isc_clk_set_rate, +}; + +static int isc_clk_register(struct isc_device *isc, unsigned int id) +{ + struct regmap *regmap = isc->regmap; + struct device_node *np = isc->dev->of_node; + struct isc_clk *isc_clk; + struct clk_init_data init; + const char *clk_name = np->name; + const char *parent_names[3]; + int num_parents; + + num_parents = of_clk_get_parent_count(np); + if (num_parents < 1 || num_parents > 3) + return -EINVAL; + + if (num_parents > 2 && id == ISC_ISPCK) + num_parents = 2; + + of_clk_parent_fill(np, parent_names, num_parents); + + if (id == ISC_MCK) + of_property_read_string(np, "clock-output-names", &clk_name); + else + clk_name = "isc-ispck"; + + init.parent_names = parent_names; + init.num_parents = num_parents; + init.name = clk_name; + init.ops = &isc_clk_ops; + init.flags = CLK_SET_RATE_GATE | CLK_SET_PARENT_GATE; + + isc_clk = &isc->isc_clks[id]; + isc_clk->hw.init = &init; + isc_clk->regmap = regmap; + isc_clk->id = id; + isc_clk->dev = isc->dev; + + isc_clk->clk = clk_register(isc->dev, &isc_clk->hw); + if (IS_ERR(isc_clk->clk)) { + dev_err(isc->dev, "%s: clock register fail\n", clk_name); + return PTR_ERR(isc_clk->clk); + } else if (id == ISC_MCK) + of_clk_add_provider(np, of_clk_src_simple_get, isc_clk->clk); + + return 0; +} + +static int isc_clk_init(struct isc_device *isc) +{ + unsigned int i; + int ret; + + for (i = 0; i < ARRAY_SIZE(isc->isc_clks); i++) + isc->isc_clks[i].clk = ERR_PTR(-EINVAL); + + for (i = 0; i < ARRAY_SIZE(isc->isc_clks); i++) { + ret = isc_clk_register(isc, i); + if (ret) + return ret; + } + + return 0; +} + +static void isc_clk_cleanup(struct isc_device *isc) +{ + unsigned int i; + + of_clk_del_provider(isc->dev->of_node); + + for (i = 0; i < ARRAY_SIZE(isc->isc_clks); i++) { + struct isc_clk *isc_clk = &isc->isc_clks[i]; + + if (!IS_ERR(isc_clk->clk)) + clk_unregister(isc_clk->clk); + } +} + +static int isc_queue_setup(struct vb2_queue *vq, + unsigned int *nbuffers, unsigned int *nplanes, + unsigned int sizes[], struct device *alloc_devs[]) +{ + struct isc_device *isc = vb2_get_drv_priv(vq); + unsigned int size = isc->fmt.fmt.pix.sizeimage; + + if (*nplanes) + return sizes[0] < size ? -EINVAL : 0; + + *nplanes = 1; + sizes[0] = size; + + return 0; +} + +static int isc_buffer_prepare(struct vb2_buffer *vb) +{ + struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb); + struct isc_device *isc = vb2_get_drv_priv(vb->vb2_queue); + unsigned long size = isc->fmt.fmt.pix.sizeimage; + + if (vb2_plane_size(vb, 0) < size) { + v4l2_err(&isc->v4l2_dev, "buffer too small (%lu < %lu)\n", + vb2_plane_size(vb, 0), size); + return -EINVAL; + } + + vb2_set_plane_payload(vb, 0, size); + + vbuf->field = isc->fmt.fmt.pix.field; + + return 0; +} + +static inline void isc_start_dma(struct regmap *regmap, + struct isc_buffer *frm, u32 dview) +{ + dma_addr_t addr; + + addr = vb2_dma_contig_plane_dma_addr(&frm->vb.vb2_buf, 0); + + regmap_write(regmap, ISC_DCTRL, dview | ISC_DCTRL_IE_IS); + regmap_write(regmap, ISC_DAD0, addr); + regmap_write(regmap, ISC_CTRLEN, ISC_CTRL_CAPTURE); +} + +static void isc_set_pipeline(struct isc_device *isc, u32 pipeline) +{ + u32 val; + unsigned int i; + + for (i = 0; i < ISC_PIPE_LINE_NODE_NUM; i++) { + val = pipeline & BIT(i) ? 1 : 0; + regmap_field_write(isc->pipeline[i], val); + } +} + +static int isc_configure(struct isc_device *isc) +{ + struct regmap *regmap = isc->regmap; + const struct isc_format *current_fmt = isc->current_fmt; + struct isc_subdev_entity *subdev = isc->current_subdev; + u32 val, mask; + int counter = 10; + + val = current_fmt->reg_bps | subdev->pfe_cfg0 | + ISC_PFE_CFG0_MODE_PROGRESSIVE; + mask = ISC_PFE_CFG0_BPS_MASK | ISC_PFE_CFG0_HPOL_LOW | + ISC_PFE_CFG0_VPOL_LOW | ISC_PFE_CFG0_PPOL_LOW | + ISC_PFE_CFG0_MODE_MASK; + + regmap_update_bits(regmap, ISC_PFE_CFG0, mask, val); + + regmap_update_bits(regmap, ISC_RLP_CFG, ISC_RLP_CFG_MODE_MASK, + current_fmt->reg_rlp_mode); + + regmap_update_bits(regmap, ISC_DCFG, ISC_DCFG_IMODE_MASK, + current_fmt->reg_dcfg_imode); + + /* Disable the pipeline */ + isc_set_pipeline(isc, 0x0); + + /* Update profile */ + regmap_write(regmap, ISC_CTRLEN, ISC_CTRL_UPPRO); + + regmap_read(regmap, ISC_CTRLSR, &val); + while ((val & ISC_CTRL_UPPRO) && counter--) { + usleep_range(1000, 2000); + regmap_read(regmap, ISC_CTRLSR, &val); + } + + if (counter < 0) + return -ETIMEDOUT; + + return 0; +} + +static int isc_start_streaming(struct vb2_queue *vq, unsigned int count) +{ + struct isc_device *isc = vb2_get_drv_priv(vq); + struct regmap *regmap = isc->regmap; + struct isc_buffer *buf; + unsigned long flags; + int ret; + u32 val; + + /* Enable stream on the sub device */ + ret = v4l2_subdev_call(isc->current_subdev->sd, video, s_stream, 1); + if (ret && ret != -ENOIOCTLCMD) { + v4l2_err(&isc->v4l2_dev, "stream on failed in subdev\n"); + goto err_start_stream; + } + + pm_runtime_get_sync(isc->dev); + + /* Disable all the interrupts */ + regmap_write(isc->regmap, ISC_INTDIS, (u32)~0UL); + + /* Clean the interrupt status register */ + regmap_read(regmap, ISC_INTSR, &val); + + ret = isc_configure(isc); + if (unlikely(ret)) + goto err_configure; + + /* Enable DMA interrupt */ + regmap_write(regmap, ISC_INTEN, ISC_INT_DDONE); + + spin_lock_irqsave(&isc->dma_queue_lock, flags); + + isc->sequence = 0; + isc->stop = false; + reinit_completion(&isc->comp); + + isc->cur_frm = list_first_entry(&isc->dma_queue, + struct isc_buffer, list); + list_del(&isc->cur_frm->list); + + isc_start_dma(regmap, isc->cur_frm, isc->current_fmt->reg_dctrl_dview); + + spin_unlock_irqrestore(&isc->dma_queue_lock, flags); + + return 0; + +err_configure: + pm_runtime_put_sync(isc->dev); + + v4l2_subdev_call(isc->current_subdev->sd, video, s_stream, 0); + +err_start_stream: + spin_lock_irqsave(&isc->dma_queue_lock, flags); + list_for_each_entry(buf, &isc->dma_queue, list) + vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_QUEUED); + INIT_LIST_HEAD(&isc->dma_queue); + spin_unlock_irqrestore(&isc->dma_queue_lock, flags); + + return ret; +} + +static void isc_stop_streaming(struct vb2_queue *vq) +{ + struct isc_device *isc = vb2_get_drv_priv(vq); + unsigned long flags; + struct isc_buffer *buf; + int ret; + + isc->stop = true; + + /* Wait until the end of the current frame */ + if (isc->cur_frm && !wait_for_completion_timeout(&isc->comp, 5 * HZ)) + v4l2_err(&isc->v4l2_dev, + "Timeout waiting for end of the capture\n"); + + /* Disable DMA interrupt */ + regmap_write(isc->regmap, ISC_INTDIS, ISC_INT_DDONE); + + pm_runtime_put_sync(isc->dev); + + /* Disable stream on the sub device */ + ret = v4l2_subdev_call(isc->current_subdev->sd, video, s_stream, 0); + if (ret && ret != -ENOIOCTLCMD) + v4l2_err(&isc->v4l2_dev, "stream off failed in subdev\n"); + + /* Release all active buffers */ + spin_lock_irqsave(&isc->dma_queue_lock, flags); + if (unlikely(isc->cur_frm)) { + vb2_buffer_done(&isc->cur_frm->vb.vb2_buf, + VB2_BUF_STATE_ERROR); + isc->cur_frm = NULL; + } + list_for_each_entry(buf, &isc->dma_queue, list) + vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR); + INIT_LIST_HEAD(&isc->dma_queue); + spin_unlock_irqrestore(&isc->dma_queue_lock, flags); +} + +static void isc_buffer_queue(struct vb2_buffer *vb) +{ + struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb); + struct isc_buffer *buf = container_of(vbuf, struct isc_buffer, vb); + struct isc_device *isc = vb2_get_drv_priv(vb->vb2_queue); + unsigned long flags; + + spin_lock_irqsave(&isc->dma_queue_lock, flags); + list_add_tail(&buf->list, &isc->dma_queue); + spin_unlock_irqrestore(&isc->dma_queue_lock, flags); +} + +static struct vb2_ops isc_vb2_ops = { + .queue_setup = isc_queue_setup, + .wait_prepare = vb2_ops_wait_prepare, + .wait_finish = vb2_ops_wait_finish, + .buf_prepare = isc_buffer_prepare, + .start_streaming = isc_start_streaming, + .stop_streaming = isc_stop_streaming, + .buf_queue = isc_buffer_queue, +}; + +static int isc_querycap(struct file *file, void *priv, + struct v4l2_capability *cap) +{ + struct isc_device *isc = video_drvdata(file); + + strcpy(cap->driver, ATMEL_ISC_NAME); + strcpy(cap->card, "Atmel Image Sensor Controller"); + snprintf(cap->bus_info, sizeof(cap->bus_info), + "platform:%s", isc->v4l2_dev.name); + + return 0; +} + +static int isc_enum_fmt_vid_cap(struct file *file, void *priv, + struct v4l2_fmtdesc *f) +{ + struct isc_device *isc = video_drvdata(file); + u32 index = f->index; + + if (index >= isc->num_user_formats) + return -EINVAL; + + f->pixelformat = isc->user_formats[index]->fourcc; + + return 0; +} + +static int isc_g_fmt_vid_cap(struct file *file, void *priv, + struct v4l2_format *fmt) +{ + struct isc_device *isc = video_drvdata(file); + + *fmt = isc->fmt; + + return 0; +} + +static struct isc_format *find_format_by_fourcc(struct isc_device *isc, + unsigned int fourcc) +{ + unsigned int num_formats = isc->num_user_formats; + struct isc_format *fmt; + unsigned int i; + + for (i = 0; i < num_formats; i++) { + fmt = isc->user_formats[i]; + if (fmt->fourcc == fourcc) + return fmt; + } + + return NULL; +} + +static int isc_try_fmt(struct isc_device *isc, struct v4l2_format *f, + struct isc_format **current_fmt) +{ + struct isc_format *isc_fmt; + struct v4l2_pix_format *pixfmt = &f->fmt.pix; + struct v4l2_subdev_format format = { + .which = V4L2_SUBDEV_FORMAT_TRY, + }; + int ret; + + if (f->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) + return -EINVAL; + + isc_fmt = find_format_by_fourcc(isc, pixfmt->pixelformat); + if (!isc_fmt) { + v4l2_warn(&isc->v4l2_dev, "Format 0x%x not found\n", + pixfmt->pixelformat); + isc_fmt = isc->user_formats[isc->num_user_formats - 1]; + pixfmt->pixelformat = isc_fmt->fourcc; + } + + /* Limit to Atmel ISC hardware capabilities */ + if (pixfmt->width > ISC_MAX_SUPPORT_WIDTH) + pixfmt->width = ISC_MAX_SUPPORT_WIDTH; + if (pixfmt->height > ISC_MAX_SUPPORT_HEIGHT) + pixfmt->height = ISC_MAX_SUPPORT_HEIGHT; + + v4l2_fill_mbus_format(&format.format, pixfmt, isc_fmt->mbus_code); + ret = v4l2_subdev_call(isc->current_subdev->sd, pad, set_fmt, + isc->current_subdev->config, &format); + if (ret < 0) + return ret; + + v4l2_fill_pix_format(pixfmt, &format.format); + + pixfmt->field = V4L2_FIELD_NONE; + pixfmt->bytesperline = pixfmt->width * isc_fmt->bpp; + pixfmt->sizeimage = pixfmt->bytesperline * pixfmt->height; + + if (current_fmt) + *current_fmt = isc_fmt; + + return 0; +} + +static int isc_set_fmt(struct isc_device *isc, struct v4l2_format *f) +{ + struct v4l2_subdev_format format = { + .which = V4L2_SUBDEV_FORMAT_ACTIVE, + }; + struct isc_format *current_fmt; + int ret; + + ret = isc_try_fmt(isc, f, ¤t_fmt); + if (ret) + return ret; + + v4l2_fill_mbus_format(&format.format, &f->fmt.pix, + current_fmt->mbus_code); + ret = v4l2_subdev_call(isc->current_subdev->sd, pad, + set_fmt, NULL, &format); + if (ret < 0) + return ret; + + isc->fmt = *f; + isc->current_fmt = current_fmt; + + return 0; +} + +static int isc_s_fmt_vid_cap(struct file *file, void *priv, + struct v4l2_format *f) +{ + struct isc_device *isc = video_drvdata(file); + + if (vb2_is_streaming(&isc->vb2_vidq)) + return -EBUSY; + + return isc_set_fmt(isc, f); +} + +static int isc_try_fmt_vid_cap(struct file *file, void *priv, + struct v4l2_format *f) +{ + struct isc_device *isc = video_drvdata(file); + + return isc_try_fmt(isc, f, NULL); +} + +static int isc_enum_input(struct file *file, void *priv, + struct v4l2_input *inp) +{ + if (inp->index != 0) + return -EINVAL; + + inp->type = V4L2_INPUT_TYPE_CAMERA; + inp->std = 0; + strcpy(inp->name, "Camera"); + + return 0; +} + +static int isc_g_input(struct file *file, void *priv, unsigned int *i) +{ + *i = 0; + + return 0; +} + +static int isc_s_input(struct file *file, void *priv, unsigned int i) +{ + if (i > 0) + return -EINVAL; + + return 0; +} + +static int isc_g_parm(struct file *file, void *fh, struct v4l2_streamparm *a) +{ + struct isc_device *isc = video_drvdata(file); + + if (a->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) + return -EINVAL; + + return v4l2_subdev_call(isc->current_subdev->sd, video, g_parm, a); +} + +static int isc_s_parm(struct file *file, void *fh, struct v4l2_streamparm *a) +{ + struct isc_device *isc = video_drvdata(file); + + if (a->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) + return -EINVAL; + + return v4l2_subdev_call(isc->current_subdev->sd, video, s_parm, a); +} + +static int isc_enum_framesizes(struct file *file, void *fh, + struct v4l2_frmsizeenum *fsize) +{ + struct isc_device *isc = video_drvdata(file); + const struct isc_format *isc_fmt; + struct v4l2_subdev_frame_size_enum fse = { + .index = fsize->index, + .which = V4L2_SUBDEV_FORMAT_ACTIVE, + }; + int ret; + + isc_fmt = find_format_by_fourcc(isc, fsize->pixel_format); + if (!isc_fmt) + return -EINVAL; + + fse.code = isc_fmt->mbus_code; + + ret = v4l2_subdev_call(isc->current_subdev->sd, pad, enum_frame_size, + NULL, &fse); + if (ret) + return ret; + + fsize->type = V4L2_FRMSIZE_TYPE_DISCRETE; + fsize->discrete.width = fse.max_width; + fsize->discrete.height = fse.max_height; + + return 0; +} + +static int isc_enum_frameintervals(struct file *file, void *fh, + struct v4l2_frmivalenum *fival) +{ + struct isc_device *isc = video_drvdata(file); + const struct isc_format *isc_fmt; + struct v4l2_subdev_frame_interval_enum fie = { + .index = fival->index, + .width = fival->width, + .height = fival->height, + .which = V4L2_SUBDEV_FORMAT_ACTIVE, + }; + int ret; + + isc_fmt = find_format_by_fourcc(isc, fival->pixel_format); + if (!isc_fmt) + return -EINVAL; + + fie.code = isc_fmt->mbus_code; + + ret = v4l2_subdev_call(isc->current_subdev->sd, pad, + enum_frame_interval, NULL, &fie); + if (ret) + return ret; + + fival->type = V4L2_FRMIVAL_TYPE_DISCRETE; + fival->discrete = fie.interval; + + return 0; +} + +static const struct v4l2_ioctl_ops isc_ioctl_ops = { + .vidioc_querycap = isc_querycap, + .vidioc_enum_fmt_vid_cap = isc_enum_fmt_vid_cap, + .vidioc_g_fmt_vid_cap = isc_g_fmt_vid_cap, + .vidioc_s_fmt_vid_cap = isc_s_fmt_vid_cap, + .vidioc_try_fmt_vid_cap = isc_try_fmt_vid_cap, + + .vidioc_enum_input = isc_enum_input, + .vidioc_g_input = isc_g_input, + .vidioc_s_input = isc_s_input, + + .vidioc_reqbufs = vb2_ioctl_reqbufs, + .vidioc_querybuf = vb2_ioctl_querybuf, + .vidioc_qbuf = vb2_ioctl_qbuf, + .vidioc_expbuf = vb2_ioctl_expbuf, + .vidioc_dqbuf = vb2_ioctl_dqbuf, + .vidioc_create_bufs = vb2_ioctl_create_bufs, + .vidioc_prepare_buf = vb2_ioctl_prepare_buf, + .vidioc_streamon = vb2_ioctl_streamon, + .vidioc_streamoff = vb2_ioctl_streamoff, + + .vidioc_g_parm = isc_g_parm, + .vidioc_s_parm = isc_s_parm, + .vidioc_enum_framesizes = isc_enum_framesizes, + .vidioc_enum_frameintervals = isc_enum_frameintervals, +}; + +static int isc_open(struct file *file) +{ + struct isc_device *isc = video_drvdata(file); + struct v4l2_subdev *sd = isc->current_subdev->sd; + int ret; + + if (mutex_lock_interruptible(&isc->lock)) + return -ERESTARTSYS; + + ret = v4l2_fh_open(file); + if (ret < 0) + goto unlock; + + if (!v4l2_fh_is_singular_file(file)) + goto unlock; + + ret = v4l2_subdev_call(sd, core, s_power, 1); + if (ret < 0 && ret != -ENOIOCTLCMD) + v4l2_fh_release(file); + else + ret = 0; + +unlock: + mutex_unlock(&isc->lock); + return ret; +} + +static int isc_release(struct file *file) +{ + struct isc_device *isc = video_drvdata(file); + struct v4l2_subdev *sd = isc->current_subdev->sd; + bool fh_singular; + int ret; + + mutex_lock(&isc->lock); + + fh_singular = v4l2_fh_is_singular_file(file); + + ret = _vb2_fop_release(file, NULL); + + if (fh_singular) + v4l2_subdev_call(sd, core, s_power, 0); + + mutex_unlock(&isc->lock); + + return ret; +} + +static const struct v4l2_file_operations isc_fops = { + .owner = THIS_MODULE, + .open = isc_open, + .release = isc_release, + .unlocked_ioctl = video_ioctl2, + .read = vb2_fop_read, + .mmap = vb2_fop_mmap, + .poll = vb2_fop_poll, +}; + +static irqreturn_t isc_interrupt(int irq, void *dev_id) +{ + struct isc_device *isc = (struct isc_device *)dev_id; + struct regmap *regmap = isc->regmap; + u32 isc_intsr, isc_intmask, pending; + irqreturn_t ret = IRQ_NONE; + + spin_lock(&isc->dma_queue_lock); + + regmap_read(regmap, ISC_INTSR, &isc_intsr); + regmap_read(regmap, ISC_INTMASK, &isc_intmask); + + pending = isc_intsr & isc_intmask; + + if (likely(pending & ISC_INT_DDONE)) { + if (isc->cur_frm) { + struct vb2_v4l2_buffer *vbuf = &isc->cur_frm->vb; + struct vb2_buffer *vb = &vbuf->vb2_buf; + + vb->timestamp = ktime_get_ns(); + vbuf->sequence = isc->sequence++; + vb2_buffer_done(vb, VB2_BUF_STATE_DONE); + isc->cur_frm = NULL; + } + + if (!list_empty(&isc->dma_queue) && !isc->stop) { + isc->cur_frm = list_first_entry(&isc->dma_queue, + struct isc_buffer, list); + list_del(&isc->cur_frm->list); + + isc_start_dma(regmap, isc->cur_frm, + isc->current_fmt->reg_dctrl_dview); + } + + if (isc->stop) + complete(&isc->comp); + + ret = IRQ_HANDLED; + } + + spin_unlock(&isc->dma_queue_lock); + + return ret; +} + +static int isc_async_bound(struct v4l2_async_notifier *notifier, + struct v4l2_subdev *subdev, + struct v4l2_async_subdev *asd) +{ + struct isc_device *isc = container_of(notifier->v4l2_dev, + struct isc_device, v4l2_dev); + struct isc_subdev_entity *subdev_entity = + container_of(notifier, struct isc_subdev_entity, notifier); + + if (video_is_registered(&isc->video_dev)) { + v4l2_err(&isc->v4l2_dev, "only supports one sub-device.\n"); + return -EBUSY; + } + + subdev_entity->sd = subdev; + + return 0; +} + +static void isc_async_unbind(struct v4l2_async_notifier *notifier, + struct v4l2_subdev *subdev, + struct v4l2_async_subdev *asd) +{ + struct isc_device *isc = container_of(notifier->v4l2_dev, + struct isc_device, v4l2_dev); + + video_unregister_device(&isc->video_dev); + if (isc->current_subdev->config) + v4l2_subdev_free_pad_config(isc->current_subdev->config); +} + +static struct isc_format *find_format_by_code(unsigned int code, int *index) +{ + struct isc_format *fmt = &isc_formats[0]; + unsigned int i; + + for (i = 0; i < ARRAY_SIZE(isc_formats); i++) { + if (fmt->mbus_code == code) { + *index = i; + return fmt; + } + + fmt++; + } + + return NULL; +} + +static int isc_formats_init(struct isc_device *isc) +{ + struct isc_format *fmt; + struct v4l2_subdev *subdev = isc->current_subdev->sd; + int num_fmts = 0, i, j; + struct v4l2_subdev_mbus_code_enum mbus_code = { + .which = V4L2_SUBDEV_FORMAT_ACTIVE, + }; + + fmt = &isc_formats[0]; + for (i = 0; i < ARRAY_SIZE(isc_formats); i++) { + fmt->support = false; + fmt++; + } + + while (!v4l2_subdev_call(subdev, pad, enum_mbus_code, + NULL, &mbus_code)) { + mbus_code.index++; + fmt = find_format_by_code(mbus_code.code, &i); + if (!fmt) + continue; + + fmt->support = true; + num_fmts++; + } + + if (!num_fmts) + return -ENXIO; + + isc->num_user_formats = num_fmts; + isc->user_formats = devm_kcalloc(isc->dev, + num_fmts, sizeof(struct isc_format *), + GFP_KERNEL); + if (!isc->user_formats) { + v4l2_err(&isc->v4l2_dev, "could not allocate memory\n"); + return -ENOMEM; + } + + fmt = &isc_formats[0]; + for (i = 0, j = 0; i < ARRAY_SIZE(isc_formats); i++) { + if (fmt->support) + isc->user_formats[j++] = fmt; + + fmt++; + } + + return 0; +} + +static int isc_set_default_fmt(struct isc_device *isc) +{ + struct v4l2_format f = { + .type = V4L2_BUF_TYPE_VIDEO_CAPTURE, + .fmt.pix = { + .width = VGA_WIDTH, + .height = VGA_HEIGHT, + .field = V4L2_FIELD_NONE, + .pixelformat = isc->user_formats[0]->fourcc, + }, + }; + + return isc_set_fmt(isc, &f); +} + +static int isc_async_complete(struct v4l2_async_notifier *notifier) +{ + struct isc_device *isc = container_of(notifier->v4l2_dev, + struct isc_device, v4l2_dev); + struct isc_subdev_entity *sd_entity; + struct video_device *vdev = &isc->video_dev; + struct vb2_queue *q = &isc->vb2_vidq; + int ret; + + isc->current_subdev = container_of(notifier, + struct isc_subdev_entity, notifier); + sd_entity = isc->current_subdev; + + mutex_init(&isc->lock); + init_completion(&isc->comp); + + /* Initialize videobuf2 queue */ + q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE; + q->io_modes = VB2_MMAP | VB2_DMABUF | VB2_READ; + q->drv_priv = isc; + q->buf_struct_size = sizeof(struct isc_buffer); + q->ops = &isc_vb2_ops; + q->mem_ops = &vb2_dma_contig_memops; + q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; + q->lock = &isc->lock; + q->min_buffers_needed = 1; + q->dev = isc->dev; + + ret = vb2_queue_init(q); + if (ret < 0) { + v4l2_err(&isc->v4l2_dev, + "vb2_queue_init() failed: %d\n", ret); + return ret; + } + + /* Init video dma queues */ + INIT_LIST_HEAD(&isc->dma_queue); + spin_lock_init(&isc->dma_queue_lock); + + sd_entity->config = v4l2_subdev_alloc_pad_config(sd_entity->sd); + if (sd_entity->config == NULL) + return -ENOMEM; + + ret = isc_formats_init(isc); + if (ret < 0) { + v4l2_err(&isc->v4l2_dev, + "Init format failed: %d\n", ret); + return ret; + } + + ret = v4l2_subdev_call(sd_entity->sd, core, s_power, 1); + if (ret < 0 && ret != -ENOIOCTLCMD) + return ret; + + ret = isc_set_default_fmt(isc); + if (ret) { + v4l2_err(&isc->v4l2_dev, "Could not set default format\n"); + return ret; + } + + ret = v4l2_subdev_call(sd_entity->sd, core, s_power, 0); + if (ret < 0 && ret != -ENOIOCTLCMD) + return ret; + + /* Register video device */ + strlcpy(vdev->name, ATMEL_ISC_NAME, sizeof(vdev->name)); + vdev->release = video_device_release_empty; + vdev->fops = &isc_fops; + vdev->ioctl_ops = &isc_ioctl_ops; + vdev->v4l2_dev = &isc->v4l2_dev; + vdev->vfl_dir = VFL_DIR_RX; + vdev->queue = q; + vdev->lock = &isc->lock; + vdev->ctrl_handler = isc->current_subdev->sd->ctrl_handler; + vdev->device_caps = V4L2_CAP_STREAMING | V4L2_CAP_VIDEO_CAPTURE; + video_set_drvdata(vdev, isc); + + ret = video_register_device(vdev, VFL_TYPE_GRABBER, -1); + if (ret < 0) { + v4l2_err(&isc->v4l2_dev, + "video_register_device failed: %d\n", ret); + return ret; + } + + return 0; +} + +static void isc_subdev_cleanup(struct isc_device *isc) +{ + struct isc_subdev_entity *subdev_entity; + + list_for_each_entry(subdev_entity, &isc->subdev_entities, list) + v4l2_async_notifier_unregister(&subdev_entity->notifier); + + INIT_LIST_HEAD(&isc->subdev_entities); +} + +static int isc_pipeline_init(struct isc_device *isc) +{ + struct device *dev = isc->dev; + struct regmap *regmap = isc->regmap; + struct regmap_field *regs; + unsigned int i; + + /* WB-->CFA-->CC-->GAM-->CSC-->CBC-->SUB422-->SUB420 */ + const struct reg_field regfields[ISC_PIPE_LINE_NODE_NUM] = { + REG_FIELD(ISC_WB_CTRL, 0, 0), + REG_FIELD(ISC_CFA_CTRL, 0, 0), + REG_FIELD(ISC_CC_CTRL, 0, 0), + REG_FIELD(ISC_GAM_CTRL, 0, 0), + REG_FIELD(ISC_GAM_CTRL, 1, 1), + REG_FIELD(ISC_GAM_CTRL, 2, 2), + REG_FIELD(ISC_GAM_CTRL, 3, 3), + REG_FIELD(ISC_CSC_CTRL, 0, 0), + REG_FIELD(ISC_CBC_CTRL, 0, 0), + REG_FIELD(ISC_SUB422_CTRL, 0, 0), + REG_FIELD(ISC_SUB420_CTRL, 0, 0), + }; + + for (i = 0; i < ISC_PIPE_LINE_NODE_NUM; i++) { + regs = devm_regmap_field_alloc(dev, regmap, regfields[i]); + if (IS_ERR(regs)) + return PTR_ERR(regs); + + isc->pipeline[i] = regs; + } + + return 0; +} + +static int isc_parse_dt(struct device *dev, struct isc_device *isc) +{ + struct device_node *np = dev->of_node; + struct device_node *epn = NULL, *rem; + struct v4l2_of_endpoint v4l2_epn; + struct isc_subdev_entity *subdev_entity; + unsigned int flags; + int ret; + + INIT_LIST_HEAD(&isc->subdev_entities); + + for (; ;) { + epn = of_graph_get_next_endpoint(np, epn); + if (!epn) + break; + + rem = of_graph_get_remote_port_parent(epn); + if (!rem) { + dev_notice(dev, "Remote device at %s not found\n", + of_node_full_name(epn)); + continue; + } + + ret = v4l2_of_parse_endpoint(epn, &v4l2_epn); + if (ret) { + of_node_put(rem); + ret = -EINVAL; + dev_err(dev, "Could not parse the endpoint\n"); + break; + } + + subdev_entity = devm_kzalloc(dev, + sizeof(*subdev_entity), GFP_KERNEL); + if (subdev_entity == NULL) { + of_node_put(rem); + ret = -ENOMEM; + break; + } + + subdev_entity->asd = devm_kzalloc(dev, + sizeof(*subdev_entity->asd), GFP_KERNEL); + if (subdev_entity->asd == NULL) { + of_node_put(rem); + ret = -ENOMEM; + break; + } + + flags = v4l2_epn.bus.parallel.flags; + + if (flags & V4L2_MBUS_HSYNC_ACTIVE_LOW) + subdev_entity->pfe_cfg0 = ISC_PFE_CFG0_HPOL_LOW; + + if (flags & V4L2_MBUS_VSYNC_ACTIVE_LOW) + subdev_entity->pfe_cfg0 |= ISC_PFE_CFG0_VPOL_LOW; + + if (flags & V4L2_MBUS_PCLK_SAMPLE_FALLING) + subdev_entity->pfe_cfg0 |= ISC_PFE_CFG0_PPOL_LOW; + + subdev_entity->asd->match_type = V4L2_ASYNC_MATCH_OF; + subdev_entity->asd->match.of.node = rem; + list_add_tail(&subdev_entity->list, &isc->subdev_entities); + } + + of_node_put(epn); + return ret; +} + +/* regmap configuration */ +#define ATMEL_ISC_REG_MAX 0xbfc +static const struct regmap_config isc_regmap_config = { + .reg_bits = 32, + .reg_stride = 4, + .val_bits = 32, + .max_register = ATMEL_ISC_REG_MAX, +}; + +static int atmel_isc_probe(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct isc_device *isc; + struct resource *res; + void __iomem *io_base; + struct isc_subdev_entity *subdev_entity; + int irq; + int ret; + + isc = devm_kzalloc(dev, sizeof(*isc), GFP_KERNEL); + if (!isc) + return -ENOMEM; + + platform_set_drvdata(pdev, isc); + isc->dev = dev; + + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + io_base = devm_ioremap_resource(dev, res); + if (IS_ERR(io_base)) + return PTR_ERR(io_base); + + isc->regmap = devm_regmap_init_mmio(dev, io_base, &isc_regmap_config); + if (IS_ERR(isc->regmap)) { + ret = PTR_ERR(isc->regmap); + dev_err(dev, "failed to init register map: %d\n", ret); + return ret; + } + + irq = platform_get_irq(pdev, 0); + if (IS_ERR_VALUE(irq)) { + ret = irq; + dev_err(dev, "failed to get irq: %d\n", ret); + return ret; + } + + ret = devm_request_irq(dev, irq, isc_interrupt, 0, + ATMEL_ISC_NAME, isc); + if (ret < 0) { + dev_err(dev, "can't register ISR for IRQ %u (ret=%i)\n", + irq, ret); + return ret; + } + + ret = isc_pipeline_init(isc); + if (ret) + return ret; + + isc->hclock = devm_clk_get(dev, "hclock"); + if (IS_ERR(isc->hclock)) { + ret = PTR_ERR(isc->hclock); + dev_err(dev, "failed to get hclock: %d\n", ret); + return ret; + } + + ret = isc_clk_init(isc); + if (ret) { + dev_err(dev, "failed to init isc clock: %d\n", ret); + goto clean_isc_clk; + } + + isc->ispck = isc->isc_clks[ISC_ISPCK].clk; + + /* ispck should be greater or equal to hclock */ + ret = clk_set_rate(isc->ispck, clk_get_rate(isc->hclock)); + if (ret) { + dev_err(dev, "failed to set ispck rate: %d\n", ret); + goto clean_isc_clk; + } + + ret = v4l2_device_register(dev, &isc->v4l2_dev); + if (ret) { + dev_err(dev, "unable to register v4l2 device.\n"); + goto clean_isc_clk; + } + + ret = isc_parse_dt(dev, isc); + if (ret) { + dev_err(dev, "fail to parse device tree\n"); + goto unregister_v4l2_device; + } + + if (list_empty(&isc->subdev_entities)) { + dev_err(dev, "no subdev found\n"); + goto unregister_v4l2_device; + } + + list_for_each_entry(subdev_entity, &isc->subdev_entities, list) { + subdev_entity->notifier.subdevs = &subdev_entity->asd; + subdev_entity->notifier.num_subdevs = 1; + subdev_entity->notifier.bound = isc_async_bound; + subdev_entity->notifier.unbind = isc_async_unbind; + subdev_entity->notifier.complete = isc_async_complete; + + ret = v4l2_async_notifier_register(&isc->v4l2_dev, + &subdev_entity->notifier); + if (ret) { + dev_err(dev, "fail to register async notifier\n"); + goto cleanup_subdev; + } + + if (video_is_registered(&isc->video_dev)) + break; + } + + pm_runtime_enable(dev); + + return 0; + +cleanup_subdev: + isc_subdev_cleanup(isc); + +unregister_v4l2_device: + v4l2_device_unregister(&isc->v4l2_dev); + +clean_isc_clk: + isc_clk_cleanup(isc); + + return ret; +} + +static int atmel_isc_remove(struct platform_device *pdev) +{ + struct isc_device *isc = platform_get_drvdata(pdev); + + pm_runtime_disable(&pdev->dev); + + isc_subdev_cleanup(isc); + + v4l2_device_unregister(&isc->v4l2_dev); + + isc_clk_cleanup(isc); + + return 0; +} + +static int isc_runtime_suspend(struct device *dev) +{ + struct isc_device *isc = dev_get_drvdata(dev); + + clk_disable_unprepare(isc->ispck); + clk_disable_unprepare(isc->hclock); + + return 0; +} + +static int isc_runtime_resume(struct device *dev) +{ + struct isc_device *isc = dev_get_drvdata(dev); + int ret; + + ret = clk_prepare_enable(isc->hclock); + if (ret) + return ret; + + return clk_prepare_enable(isc->ispck); +} + +static const struct dev_pm_ops atmel_isc_dev_pm_ops = { + SET_RUNTIME_PM_OPS(isc_runtime_suspend, isc_runtime_resume, NULL) +}; + +static const struct of_device_id atmel_isc_of_match[] = { + { .compatible = "atmel,sama5d2-isc" }, + { } +}; +MODULE_DEVICE_TABLE(of, atmel_isc_of_match); + +static struct platform_driver atmel_isc_driver = { + .probe = atmel_isc_probe, + .remove = atmel_isc_remove, + .driver = { + .name = ATMEL_ISC_NAME, + .pm = &atmel_isc_dev_pm_ops, + .of_match_table = of_match_ptr(atmel_isc_of_match), + }, +}; + +module_platform_driver(atmel_isc_driver); + +MODULE_AUTHOR("Songjun Wu <[email protected]>"); +MODULE_DESCRIPTION("The V4L2 driver for Atmel-ISC"); +MODULE_LICENSE("GPL v2"); +MODULE_SUPPORTED_DEVICE("video"); diff --git a/drivers/media/usb/cx231xx/cx231xx-core.c b/drivers/media/usb/cx231xx/cx231xx-core.c index 630f4fc5155f..3e304bac3a70 100644 --- a/drivers/media/usb/cx231xx/cx231xx-core.c +++ b/drivers/media/usb/cx231xx/cx231xx-core.c @@ -799,7 +799,7 @@ static void cx231xx_isoc_irq_callback(struct urb *urb) case -ESHUTDOWN: return; default: /* error */ - cx231xx_isocdbg("urb completition error %d.\n", urb->status); + cx231xx_isocdbg("urb completion error %d.\n", urb->status); break; } @@ -842,8 +842,11 @@ static void cx231xx_bulk_irq_callback(struct urb *urb) case -ENOENT: case -ESHUTDOWN: return; + case -EPIPE: /* stall */ + cx231xx_isocdbg("urb completion error - device is stalled.\n"); + return; default: /* error */ - cx231xx_isocdbg("urb completition error %d.\n", urb->status); + cx231xx_isocdbg("urb completion error %d.\n", urb->status); break; } @@ -867,6 +870,7 @@ void cx231xx_uninit_isoc(struct cx231xx *dev) struct cx231xx_dmaqueue *dma_q = &dev->video_mode.vidq; struct urb *urb; int i; + bool broken_pipe = false; cx231xx_isocdbg("cx231xx: called cx231xx_uninit_isoc\n"); @@ -886,12 +890,19 @@ void cx231xx_uninit_isoc(struct cx231xx *dev) transfer_buffer[i], urb->transfer_dma); } + if (urb->status == -EPIPE) { + broken_pipe = true; + } usb_free_urb(urb); dev->video_mode.isoc_ctl.urb[i] = NULL; } dev->video_mode.isoc_ctl.transfer_buffer[i] = NULL; } + if (broken_pipe) { + cx231xx_isocdbg("Reset endpoint to recover broken pipe."); + usb_reset_endpoint(dev->udev, dev->video_mode.end_point_addr); + } kfree(dev->video_mode.isoc_ctl.urb); kfree(dev->video_mode.isoc_ctl.transfer_buffer); kfree(dma_q->p_left_data); @@ -918,6 +929,7 @@ void cx231xx_uninit_bulk(struct cx231xx *dev) struct cx231xx_dmaqueue *dma_q = &dev->video_mode.vidq; struct urb *urb; int i; + bool broken_pipe = false; cx231xx_isocdbg("cx231xx: called cx231xx_uninit_bulk\n"); @@ -937,12 +949,19 @@ void cx231xx_uninit_bulk(struct cx231xx *dev) transfer_buffer[i], urb->transfer_dma); } + if (urb->status == -EPIPE) { + broken_pipe = true; + } usb_free_urb(urb); dev->video_mode.bulk_ctl.urb[i] = NULL; } dev->video_mode.bulk_ctl.transfer_buffer[i] = NULL; } + if (broken_pipe) { + cx231xx_isocdbg("Reset endpoint to recover broken pipe."); + usb_reset_endpoint(dev->udev, dev->video_mode.end_point_addr); + } kfree(dev->video_mode.bulk_ctl.urb); kfree(dev->video_mode.bulk_ctl.transfer_buffer); kfree(dma_q->p_left_data); |