You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge tag 'media/v4.17-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media
Pull media updates from Mauro Carvalho Chehab: - new CEC pin injection code for testing purposes - DVB frontend cxd2099 promoted from staging - new platform driver for Sony cxd2880 DVB devices - new sensor drivers: mt9t112, ov2685, ov5695, ov772x, tda1997x, tw9910.c - removal of unused cx18 and ivtv alsa mixers - the reneseas-ceu driver doesn't depend on soc_camera anymore and moved from staging - removed the mantis_vp3028 driver, unused since 2009 - s5p-mfc: add support for version 10 of the MSP - added a decoder for imon protocol - atomisp: lots of cleanups - imx074 and mt9t031: don't depend on soc_camera anymore, being promoted from staging - added helper functions to better support DVB I2C binding - lots of driver improvements and cleanups * tag 'media/v4.17-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: (438 commits) media: v4l2-ioctl: rename a temp var that stores _IOC_SIZE(cmd) media: fimc-capture: get rid of two warnings media: dvb-usb-v2: fix a missing dependency of I2C_MUX media: uvc: to the right check at uvc_ioctl_enum_framesizes() media: cec-core: fix a bug at cec_error_inj_write() media: tda9840: cleanup a warning media: tm6000: avoid casting just to print pointer address media: em28xx-input: improve error handling code media: zr364xx: avoid casting just to print pointer address media: vivid-radio-rx: add a cast to avoid a warning media: saa7134-alsa: don't use casts to print a buffer address media: solo6x10: get rid of an address space warning media: zoran: don't cast pointers to print them media: ir-kbd-i2c: change the if logic to avoid a warning media: ir-kbd-i2c: improve error handling code media: saa7134-input: improve error handling media: s2255drv: fix a casting warning media: ivtvfb: Cleanup some warnings media: videobuf-dma-sg: Fix a weird cast soc_camera: fix a weird cast on printk ...
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
What: /sys/kernel/debug/cec/*/error-inj
|
||||
Date: March 2018
|
||||
Contact: Hans Verkuil <hans.verkuil@cisco.com>
|
||||
Description:
|
||||
|
||||
The CEC Framework allows for CEC error injection commands through
|
||||
debugfs. Drivers that support this will create an error-inj file
|
||||
through which the error injection commands can be given.
|
||||
|
||||
The basic syntax is as follows:
|
||||
|
||||
Leading spaces/tabs are ignored. If the next character is a '#' or the
|
||||
end of the line was reached, then the whole line is ignored. Otherwise
|
||||
a command is expected.
|
||||
|
||||
It is up to the driver to decide what commands to implement. The only
|
||||
exception is that the command 'clear' without any arguments must be
|
||||
implemented and that it will remove all current error injection
|
||||
commands.
|
||||
|
||||
This ensures that you can always do 'echo clear >error-inj' to clear any
|
||||
error injections without having to know the details of the driver-specific
|
||||
commands.
|
||||
|
||||
Note that the output of 'error-inj' shall be valid as input to 'error-inj'.
|
||||
So this must work:
|
||||
|
||||
$ cat error-inj >einj.txt
|
||||
$ cat einj.txt >error-inj
|
||||
|
||||
Other than these basic rules described above this ABI is not considered
|
||||
stable and may change in the future.
|
||||
|
||||
Drivers that implement this functionality must document the commands as
|
||||
part of the CEC documentation and must keep that documentation up to date
|
||||
when changes are made.
|
||||
|
||||
The following CEC error injection implementations exist:
|
||||
|
||||
- Documentation/media/uapi/cec/cec-pin-error-inj.rst
|
||||
@@ -7,8 +7,9 @@ called VPU (Video Processing Unit).
|
||||
Required properties:
|
||||
- compatible : should be "fsl,<chip>-src" for i.MX SoCs:
|
||||
(a) "fsl,imx27-vpu" for CodaDx6 present in i.MX27
|
||||
(b) "fsl,imx53-vpu" for CODA7541 present in i.MX53
|
||||
(c) "fsl,imx6q-vpu" for CODA960 present in i.MX6q
|
||||
(b) "fsl,imx51-vpu" for CodaHx4 present in i.MX51
|
||||
(c) "fsl,imx53-vpu" for CODA7541 present in i.MX53
|
||||
(d) "fsl,imx6q-vpu" for CODA960 present in i.MX6q
|
||||
- reg: should be register base and length as documented in the
|
||||
SoC reference manual
|
||||
- interrupts : Should contain the VPU interrupt. For CODA960,
|
||||
|
||||
@@ -13,7 +13,11 @@ Required Properties:
|
||||
- "adi,adv7611" for the ADV7611
|
||||
- "adi,adv7612" for the ADV7612
|
||||
|
||||
- reg: I2C slave address
|
||||
- reg: I2C slave addresses
|
||||
The ADV76xx has up to thirteen 256-byte maps that can be accessed via the
|
||||
main I2C ports. Each map has it own I2C address and acts as a standard
|
||||
slave device on the I2C bus. The main address is mandatory, others are
|
||||
optional and revert to defaults if not specified.
|
||||
|
||||
- hpd-gpios: References to the GPIOs that control the HDMI hot-plug
|
||||
detection pins, one per HDMI input. The active flag indicates the GPIO
|
||||
@@ -35,6 +39,11 @@ Optional Properties:
|
||||
|
||||
- reset-gpios: Reference to the GPIO connected to the device's reset pin.
|
||||
- default-input: Select which input is selected after reset.
|
||||
- reg-names : Names of maps with programmable addresses.
|
||||
It can contain any map needing a non-default address.
|
||||
Possible maps names are :
|
||||
"main", "avlink", "cec", "infoframe", "esdp", "dpp", "afe",
|
||||
"rep", "edid", "hdmi", "test", "cp", "vdp"
|
||||
|
||||
Optional Endpoint Properties:
|
||||
|
||||
@@ -52,7 +61,12 @@ Example:
|
||||
|
||||
hdmi_receiver@4c {
|
||||
compatible = "adi,adv7611";
|
||||
reg = <0x4c>;
|
||||
/*
|
||||
* The edid page will be accessible @ 0x66 on the I2C bus. All
|
||||
* other maps will retain their default addresses.
|
||||
*/
|
||||
reg = <0x4c>, <0x66>;
|
||||
reg-names "main", "edid";
|
||||
|
||||
reset-gpios = <&ioexp 0 GPIO_ACTIVE_LOW>;
|
||||
hpd-gpios = <&ioexp 2 GPIO_ACTIVE_HIGH>;
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
* Omnivision OV2685 MIPI CSI-2 sensor
|
||||
|
||||
Required Properties:
|
||||
- compatible: shall be "ovti,ov2685"
|
||||
- clocks: reference to the xvclk input clock
|
||||
- clock-names: shall be "xvclk"
|
||||
- avdd-supply: Analog voltage supply, 2.8 volts
|
||||
- dovdd-supply: Digital I/O voltage supply, 1.8 volts
|
||||
- dvdd-supply: Digital core voltage supply, 1.8 volts
|
||||
- reset-gpios: Low active reset gpio
|
||||
|
||||
The device node shall contain one 'port' child node with an
|
||||
'endpoint' subnode for its digital output video port,
|
||||
in accordance with the video interface bindings defined in
|
||||
Documentation/devicetree/bindings/media/video-interfaces.txt.
|
||||
The endpoint optional property 'data-lanes' shall be "<1>".
|
||||
|
||||
Example:
|
||||
&i2c7 {
|
||||
ov2685: camera-sensor@3c {
|
||||
compatible = "ovti,ov2685";
|
||||
reg = <0x3c>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&clk_24m_cam>;
|
||||
|
||||
clocks = <&cru SCLK_TESTCLKOUT1>;
|
||||
clock-names = "xvclk";
|
||||
|
||||
avdd-supply = <&pp2800_cam>;
|
||||
dovdd-supply = <&pp1800>;
|
||||
dvdd-supply = <&pp1800>;
|
||||
reset-gpios = <&gpio2 3 GPIO_ACTIVE_LOW>;
|
||||
|
||||
port {
|
||||
ucam_out: endpoint {
|
||||
remote-endpoint = <&mipi_in_ucam>;
|
||||
data-lanes = <1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,41 @@
|
||||
* Omnivision OV5695 MIPI CSI-2 sensor
|
||||
|
||||
Required Properties:
|
||||
- compatible: shall be "ovti,ov5695"
|
||||
- clocks: reference to the xvclk input clock
|
||||
- clock-names: shall be "xvclk"
|
||||
- avdd-supply: Analog voltage supply, 2.8 volts
|
||||
- dovdd-supply: Digital I/O voltage supply, 1.8 volts
|
||||
- dvdd-supply: Digital core voltage supply, 1.2 volts
|
||||
- reset-gpios: Low active reset gpio
|
||||
|
||||
The device node shall contain one 'port' child node with an
|
||||
'endpoint' subnode for its digital output video port,
|
||||
in accordance with the video interface bindings defined in
|
||||
Documentation/devicetree/bindings/media/video-interfaces.txt.
|
||||
The endpoint optional property 'data-lanes' shall be "<1 2>".
|
||||
|
||||
Example:
|
||||
&i2c7 {
|
||||
ov5695: camera-sensor@36 {
|
||||
compatible = "ovti,ov5695";
|
||||
reg = <0x36>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&clk_24m_cam>;
|
||||
|
||||
clocks = <&cru SCLK_TESTCLKOUT1>;
|
||||
clock-names = "xvclk";
|
||||
|
||||
avdd-supply = <&pp2800_cam>;
|
||||
dovdd-supply = <&pp1800>;
|
||||
dvdd-supply = <&pp1250_cam>;
|
||||
reset-gpios = <&gpio2 5 GPIO_ACTIVE_LOW>;
|
||||
|
||||
port {
|
||||
wcam_out: endpoint {
|
||||
remote-endpoint = <&mipi_in_wcam>;
|
||||
data-lanes = <1 2>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
@@ -9,14 +9,21 @@ Required Properties:
|
||||
- clocks: reference to the xclk input clock.
|
||||
- clock-names: should be "xclk".
|
||||
|
||||
Required Endpoint Properties:
|
||||
- hsync-active: active state of the HSYNC signal, 0/1 for LOW/HIGH respectively.
|
||||
- vsync-active: active state of the VSYNC signal, 0/1 for LOW/HIGH respectively.
|
||||
|
||||
Optional Properties:
|
||||
- reset-gpios: reference to the GPIO connected to the resetb pin, if any.
|
||||
Active is low.
|
||||
- powerdown-gpios: reference to the GPIO connected to the pwdn pin, if any.
|
||||
Active is high.
|
||||
- ov7670,pclk-hb-disable: a boolean property to suppress pixel clock output
|
||||
signal during horizontal blankings.
|
||||
|
||||
The device node must contain one 'port' child node for its digital output
|
||||
video port, in accordance with the video interface bindings defined in
|
||||
The device node must contain one 'port' child node with one 'endpoint' child
|
||||
sub-node for its digital output video port, in accordance with the video
|
||||
interface bindings defined in:
|
||||
Documentation/devicetree/bindings/media/video-interfaces.txt.
|
||||
|
||||
Example:
|
||||
@@ -34,8 +41,13 @@ Example:
|
||||
assigned-clocks = <&pck0>;
|
||||
assigned-clock-rates = <25000000>;
|
||||
|
||||
ov7670,pclk-hb-disable;
|
||||
|
||||
port {
|
||||
ov7670_0: endpoint {
|
||||
hsync-active = <0>;
|
||||
vsync-active = <0>;
|
||||
|
||||
remote-endpoint = <&isi_0>;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
* Omnivision OV9650/OV9652 CMOS sensor
|
||||
|
||||
Required Properties:
|
||||
- compatible: shall be one of
|
||||
"ovti,ov9650"
|
||||
"ovti,ov9652"
|
||||
- clocks: reference to the xvclk input clock.
|
||||
|
||||
Optional Properties:
|
||||
- reset-gpios: reference to the GPIO connected to the resetb pin, if any.
|
||||
Active is high.
|
||||
- powerdown-gpios: reference to the GPIO connected to the pwdn pin, if any.
|
||||
Active is high.
|
||||
|
||||
The device node shall contain one 'port' child node with one child 'endpoint'
|
||||
subnode for its digital output video port, in accordance with the video
|
||||
interface bindings defined in Documentation/devicetree/bindings/media/
|
||||
video-interfaces.txt.
|
||||
|
||||
Example:
|
||||
|
||||
&i2c0 {
|
||||
ov9650: camera@30 {
|
||||
compatible = "ovti,ov9650";
|
||||
reg = <0x30>;
|
||||
reset-gpios = <&axi_gpio_0 0 GPIO_ACTIVE_HIGH>;
|
||||
powerdown-gpios = <&axi_gpio_0 1 GPIO_ACTIVE_HIGH>;
|
||||
clocks = <&xclk>;
|
||||
|
||||
port {
|
||||
ov9650_0: endpoint {
|
||||
remote-endpoint = <&vcap1_in0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,178 @@
|
||||
Device-Tree bindings for the NXP TDA1997x HDMI receiver
|
||||
|
||||
The TDA19971/73 are HDMI video receivers.
|
||||
|
||||
The TDA19971 Video port output pins can be used as follows:
|
||||
- RGB 8bit per color (24 bits total): R[11:4] B[11:4] G[11:4]
|
||||
- YUV444 8bit per color (24 bits total): Y[11:4] Cr[11:4] Cb[11:4]
|
||||
- YUV422 semi-planar 8bit per component (16 bits total): Y[11:4] CbCr[11:4]
|
||||
- YUV422 semi-planar 10bit per component (20 bits total): Y[11:2] CbCr[11:2]
|
||||
- YUV422 semi-planar 12bit per component (24 bits total): - Y[11:0] CbCr[11:0]
|
||||
- YUV422 BT656 8bit per component (8 bits total): YCbCr[11:4] (2-cycles)
|
||||
- YUV422 BT656 10bit per component (10 bits total): YCbCr[11:2] (2-cycles)
|
||||
- YUV422 BT656 12bit per component (12 bits total): YCbCr[11:0] (2-cycles)
|
||||
|
||||
The TDA19973 Video port output pins can be used as follows:
|
||||
- RGB 12bit per color (36 bits total): R[11:0] B[11:0] G[11:0]
|
||||
- YUV444 12bit per color (36 bits total): Y[11:0] Cb[11:0] Cr[11:0]
|
||||
- YUV422 semi-planar 12bit per component (24 bits total): Y[11:0] CbCr[11:0]
|
||||
- YUV422 BT656 12bit per component (12 bits total): YCbCr[11:0] (2-cycles)
|
||||
|
||||
The Video port output pins are mapped via 4-bit 'pin groups' allowing
|
||||
for a variety of connection possibilities including swapping pin order within
|
||||
pin groups. The video_portcfg device-tree property consists of register mapping
|
||||
pairs which map a chip-specific VP output register to a 4-bit pin group. If
|
||||
the pin group needs to be bit-swapped you can use the *_S pin-group defines.
|
||||
|
||||
Required Properties:
|
||||
- compatible :
|
||||
- "nxp,tda19971" for the TDA19971
|
||||
- "nxp,tda19973" for the TDA19973
|
||||
- reg : I2C slave address
|
||||
- interrupts : The interrupt number
|
||||
- DOVDD-supply : Digital I/O supply
|
||||
- DVDD-supply : Digital Core supply
|
||||
- AVDD-supply : Analog supply
|
||||
- nxp,vidout-portcfg : array of pairs mapping VP output pins to pin groups.
|
||||
|
||||
Optional Properties:
|
||||
- nxp,audout-format : DAI bus format: "i2s" or "spdif".
|
||||
- nxp,audout-width : width of audio output data bus (1-4).
|
||||
- nxp,audout-layout : data layout (0=AP0 used, 1=AP0/AP1/AP2/AP3 used).
|
||||
- nxp,audout-mclk-fs : Multiplication factor between stream rate and codec
|
||||
mclk.
|
||||
|
||||
The port node shall contain one endpoint child node for its digital
|
||||
output video port, in accordance with the video interface bindings defined in
|
||||
Documentation/devicetree/bindings/media/video-interfaces.txt.
|
||||
|
||||
Optional Endpoint Properties:
|
||||
The following three properties are defined in video-interfaces.txt and
|
||||
are valid for the output parallel bus endpoint:
|
||||
- hsync-active: Horizontal synchronization polarity. Defaults to active high.
|
||||
- vsync-active: Vertical synchronization polarity. Defaults to active high.
|
||||
- data-active: Data polarity. Defaults to active high.
|
||||
|
||||
Examples:
|
||||
- VP[15:0] connected to IMX6 CSI_DATA[19:4] for 16bit YUV422
|
||||
16bit I2S layout0 with a 128*fs clock (A_WS, AP0, A_CLK pins)
|
||||
hdmi-receiver@48 {
|
||||
compatible = "nxp,tda19971";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_tda1997x>;
|
||||
reg = <0x48>;
|
||||
interrupt-parent = <&gpio1>;
|
||||
interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
|
||||
DOVDD-supply = <®_3p3v>;
|
||||
AVDD-supply = <®_1p8v>;
|
||||
DVDD-supply = <®_1p8v>;
|
||||
/* audio */
|
||||
#sound-dai-cells = <0>;
|
||||
nxp,audout-format = "i2s";
|
||||
nxp,audout-layout = <0>;
|
||||
nxp,audout-width = <16>;
|
||||
nxp,audout-mclk-fs = <128>;
|
||||
/*
|
||||
* The 8bpp YUV422 semi-planar mode outputs CbCr[11:4]
|
||||
* and Y[11:4] across 16bits in the same pixclk cycle.
|
||||
*/
|
||||
nxp,vidout-portcfg =
|
||||
/* Y[11:8]<->VP[15:12]<->CSI_DATA[19:16] */
|
||||
< TDA1997X_VP24_V15_12 TDA1997X_G_Y_11_8 >,
|
||||
/* Y[7:4]<->VP[11:08]<->CSI_DATA[15:12] */
|
||||
< TDA1997X_VP24_V11_08 TDA1997X_G_Y_7_4 >,
|
||||
/* CbCc[11:8]<->VP[07:04]<->CSI_DATA[11:8] */
|
||||
< TDA1997X_VP24_V07_04 TDA1997X_R_CR_CBCR_11_8 >,
|
||||
/* CbCr[7:4]<->VP[03:00]<->CSI_DATA[7:4] */
|
||||
< TDA1997X_VP24_V03_00 TDA1997X_R_CR_CBCR_7_4 >;
|
||||
|
||||
port {
|
||||
tda1997x_to_ipu1_csi0_mux: endpoint {
|
||||
remote-endpoint = <&ipu1_csi0_mux_from_parallel_sensor>;
|
||||
bus-width = <16>;
|
||||
hsync-active = <1>;
|
||||
vsync-active = <1>;
|
||||
data-active = <1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
- VP[15:8] connected to IMX6 CSI_DATA[19:12] for 8bit BT656
|
||||
16bit I2S layout0 with a 128*fs clock (A_WS, AP0, A_CLK pins)
|
||||
hdmi-receiver@48 {
|
||||
compatible = "nxp,tda19971";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_tda1997x>;
|
||||
reg = <0x48>;
|
||||
interrupt-parent = <&gpio1>;
|
||||
interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
|
||||
DOVDD-supply = <®_3p3v>;
|
||||
AVDD-supply = <®_1p8v>;
|
||||
DVDD-supply = <®_1p8v>;
|
||||
/* audio */
|
||||
#sound-dai-cells = <0>;
|
||||
nxp,audout-format = "i2s";
|
||||
nxp,audout-layout = <0>;
|
||||
nxp,audout-width = <16>;
|
||||
nxp,audout-mclk-fs = <128>;
|
||||
/*
|
||||
* The 8bpp YUV422 semi-planar mode outputs CbCr[11:4]
|
||||
* and Y[11:4] across 16bits in the same pixclk cycle.
|
||||
*/
|
||||
nxp,vidout-portcfg =
|
||||
/* Y[11:8]<->VP[15:12]<->CSI_DATA[19:16] */
|
||||
< TDA1997X_VP24_V15_12 TDA1997X_G_Y_11_8 >,
|
||||
/* Y[7:4]<->VP[11:08]<->CSI_DATA[15:12] */
|
||||
< TDA1997X_VP24_V11_08 TDA1997X_G_Y_7_4 >,
|
||||
/* CbCc[11:8]<->VP[07:04]<->CSI_DATA[11:8] */
|
||||
< TDA1997X_VP24_V07_04 TDA1997X_R_CR_CBCR_11_8 >,
|
||||
/* CbCr[7:4]<->VP[03:00]<->CSI_DATA[7:4] */
|
||||
< TDA1997X_VP24_V03_00 TDA1997X_R_CR_CBCR_7_4 >;
|
||||
|
||||
port {
|
||||
tda1997x_to_ipu1_csi0_mux: endpoint {
|
||||
remote-endpoint = <&ipu1_csi0_mux_from_parallel_sensor>;
|
||||
bus-width = <16>;
|
||||
hsync-active = <1>;
|
||||
vsync-active = <1>;
|
||||
data-active = <1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
- VP[15:8] connected to IMX6 CSI_DATA[19:12] for 8bit BT656
|
||||
16bit I2S layout0 with a 128*fs clock (A_WS, AP0, A_CLK pins)
|
||||
hdmi-receiver@48 {
|
||||
compatible = "nxp,tda19971";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_tda1997x>;
|
||||
reg = <0x48>;
|
||||
interrupt-parent = <&gpio1>;
|
||||
interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
|
||||
DOVDD-supply = <®_3p3v>;
|
||||
AVDD-supply = <®_1p8v>;
|
||||
DVDD-supply = <®_1p8v>;
|
||||
/* audio */
|
||||
#sound-dai-cells = <0>;
|
||||
nxp,audout-format = "i2s";
|
||||
nxp,audout-layout = <0>;
|
||||
nxp,audout-width = <16>;
|
||||
nxp,audout-mclk-fs = <128>;
|
||||
/*
|
||||
* The 8bpp BT656 mode outputs YCbCr[11:4] across 8bits over
|
||||
* 2 pixclk cycles.
|
||||
*/
|
||||
nxp,vidout-portcfg =
|
||||
/* YCbCr[11:8]<->VP[15:12]<->CSI_DATA[19:16] */
|
||||
< TDA1997X_VP24_V15_12 TDA1997X_R_CR_CBCR_11_8 >,
|
||||
/* YCbCr[7:4]<->VP[11:08]<->CSI_DATA[15:12] */
|
||||
< TDA1997X_VP24_V11_08 TDA1997X_R_CR_CBCR_7_4 >,
|
||||
|
||||
port {
|
||||
tda1997x_to_ipu1_csi0_mux: endpoint {
|
||||
remote-endpoint = <&ipu1_csi0_mux_from_parallel_sensor>;
|
||||
bus-width = <16>;
|
||||
hsync-active = <1>;
|
||||
vsync-active = <1>;
|
||||
data-active = <1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
@@ -56,7 +56,7 @@ Board setup example (vin1 composite video input)
|
||||
------------------------------------------------
|
||||
|
||||
&i2c2 {
|
||||
status = "ok";
|
||||
status = "okay";
|
||||
pinctrl-0 = <&i2c2_pins>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
@@ -79,7 +79,7 @@ Board setup example (vin1 composite video input)
|
||||
pinctrl-0 = <&vin1_pins>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
status = "ok";
|
||||
status = "okay";
|
||||
|
||||
port {
|
||||
#address-cells = <1>;
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
Renesas Capture Engine Unit (CEU)
|
||||
----------------------------------------------
|
||||
|
||||
The Capture Engine Unit is the image capture interface found in the Renesas
|
||||
SH Mobile and RZ SoCs.
|
||||
|
||||
The interface supports a single parallel input with data bus width of 8 or 16
|
||||
bits.
|
||||
|
||||
Required properties:
|
||||
- compatible: Shall be "renesas,r7s72100-ceu" for CEU units found in RZ/A1H
|
||||
and RZ/A1M SoCs.
|
||||
- reg: Registers address base and size.
|
||||
- interrupts: The interrupt specifier.
|
||||
|
||||
The CEU supports a single parallel input and should contain a single 'port'
|
||||
subnode with a single 'endpoint'. Connection to input devices are modeled
|
||||
according to the video interfaces OF bindings specified in:
|
||||
Documentation/devicetree/bindings/media/video-interfaces.txt
|
||||
|
||||
Optional endpoint properties applicable to parallel input bus described in
|
||||
the above mentioned "video-interfaces.txt" file are supported.
|
||||
|
||||
- hsync-active: Active state of the HSYNC signal, 0/1 for LOW/HIGH respectively.
|
||||
If property is not present, default is active high.
|
||||
- vsync-active: Active state of the VSYNC signal, 0/1 for LOW/HIGH respectively.
|
||||
If property is not present, default is active high.
|
||||
|
||||
Example:
|
||||
|
||||
The example describes the connection between the Capture Engine Unit and an
|
||||
OV7670 image sensor connected to i2c1 interface.
|
||||
|
||||
ceu: ceu@e8210000 {
|
||||
reg = <0xe8210000 0x209c>;
|
||||
compatible = "renesas,r7s72100-ceu";
|
||||
interrupts = <GIC_SPI 332 IRQ_TYPE_LEVEL_HIGH>;
|
||||
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&vio_pins>;
|
||||
|
||||
status = "okay";
|
||||
|
||||
port {
|
||||
ceu_in: endpoint {
|
||||
remote-endpoint = <&ov7670_out>;
|
||||
|
||||
hsync-active = <1>;
|
||||
vsync-active = <0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
i2c1: i2c@fcfee400 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2c1_pins>;
|
||||
|
||||
status = "okay";
|
||||
|
||||
clock-frequency = <100000>;
|
||||
|
||||
ov7670: camera@21 {
|
||||
compatible = "ovti,ov7670";
|
||||
reg = <0x21>;
|
||||
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&vio_pins>;
|
||||
|
||||
reset-gpios = <&port3 11 GPIO_ACTIVE_LOW>;
|
||||
powerdown-gpios = <&port3 12 GPIO_ACTIVE_HIGH>;
|
||||
|
||||
port {
|
||||
ov7670_out: endpoint {
|
||||
remote-endpoint = <&ceu_in>;
|
||||
|
||||
hsync-active = <1>;
|
||||
vsync-active = <0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
@@ -13,6 +13,7 @@ Required properties:
|
||||
(c) "samsung,mfc-v7" for MFC v7 present in Exynos5420 SoC
|
||||
(d) "samsung,mfc-v8" for MFC v8 present in Exynos5800 SoC
|
||||
(e) "samsung,exynos5433-mfc" for MFC v8 present in Exynos5433 SoC
|
||||
(f) "samsung,mfc-v10" for MFC v10 present in Exynos7880 SoC
|
||||
|
||||
- reg : Physical base address of the IP registers and length of memory
|
||||
mapped region.
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
Sony CXD2880 DVB-T2/T tuner + demodulator driver SPI adapter
|
||||
|
||||
Required properties:
|
||||
- compatible: Should be "sony,cxd2880".
|
||||
- reg: SPI chip select number for the device.
|
||||
- spi-max-frequency: Maximum bus speed, should be set to <55000000> (55MHz).
|
||||
|
||||
Example:
|
||||
|
||||
cxd2880@0 {
|
||||
compatible = "sony,cxd2880";
|
||||
reg = <0>; /* CE0 */
|
||||
spi-max-frequency = <55000000>; /* 55MHz */
|
||||
};
|
||||
@@ -11,6 +11,8 @@ Required properties:
|
||||
Optional properties:
|
||||
- linux,rc-map-name: see rc.txt file in the same directory.
|
||||
- resets : phandle + reset specifier pair
|
||||
- clock-frequency : IR Receiver clock frequency, in Hertz. Defaults to 8 MHz
|
||||
if missing.
|
||||
|
||||
Example:
|
||||
|
||||
@@ -18,6 +20,7 @@ ir0: ir@1c21800 {
|
||||
compatible = "allwinner,sun4i-a10-ir";
|
||||
clocks = <&apb0_gates 6>, <&ir0_clk>;
|
||||
clock-names = "apb", "ir";
|
||||
clock-frequency = <3000000>;
|
||||
resets = <&apb0_rst 1>;
|
||||
interrupts = <0 5 1>;
|
||||
reg = <0x01C21800 0x40>;
|
||||
|
||||
@@ -110,11 +110,14 @@ your driver:
|
||||
void (*adap_status)(struct cec_adapter *adap, struct seq_file *file);
|
||||
void (*adap_free)(struct cec_adapter *adap);
|
||||
|
||||
/* Error injection callbacks */
|
||||
...
|
||||
|
||||
/* High-level callbacks */
|
||||
...
|
||||
};
|
||||
|
||||
The five low-level ops deal with various aspects of controlling the CEC adapter
|
||||
The seven low-level ops deal with various aspects of controlling the CEC adapter
|
||||
hardware:
|
||||
|
||||
|
||||
@@ -286,6 +289,70 @@ handling the receive interrupt. The framework expects to see the cec_transmit_do
|
||||
call before the cec_received_msg call, otherwise it can get confused if the
|
||||
received message was in reply to the transmitted message.
|
||||
|
||||
Optional: Implementing Error Injection Support
|
||||
----------------------------------------------
|
||||
|
||||
If the CEC adapter supports Error Injection functionality, then that can
|
||||
be exposed through the Error Injection callbacks:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
struct cec_adap_ops {
|
||||
/* Low-level callbacks */
|
||||
...
|
||||
|
||||
/* Error injection callbacks */
|
||||
int (*error_inj_show)(struct cec_adapter *adap, struct seq_file *sf);
|
||||
bool (*error_inj_parse_line)(struct cec_adapter *adap, char *line);
|
||||
|
||||
/* High-level CEC message callback */
|
||||
...
|
||||
};
|
||||
|
||||
If both callbacks are set, then an ``error-inj`` file will appear in debugfs.
|
||||
The basic syntax is as follows:
|
||||
|
||||
Leading spaces/tabs are ignored. If the next character is a ``#`` or the end of the
|
||||
line was reached, then the whole line is ignored. Otherwise a command is expected.
|
||||
|
||||
This basic parsing is done in the CEC Framework. It is up to the driver to decide
|
||||
what commands to implement. The only requirement is that the command ``clear`` without
|
||||
any arguments must be implemented and that it will remove all current error injection
|
||||
commands.
|
||||
|
||||
This ensures that you can always do ``echo clear >error-inj`` to clear any error
|
||||
injections without having to know the details of the driver-specific commands.
|
||||
|
||||
Note that the output of ``error-inj`` shall be valid as input to ``error-inj``.
|
||||
So this must work:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
$ cat error-inj >einj.txt
|
||||
$ cat einj.txt >error-inj
|
||||
|
||||
The first callback is called when this file is read and it should show the
|
||||
the current error injection state:
|
||||
|
||||
.. c:function::
|
||||
int (*error_inj_show)(struct cec_adapter *adap, struct seq_file *sf);
|
||||
|
||||
It is recommended that it starts with a comment block with basic usage
|
||||
information. It returns 0 for success and an error otherwise.
|
||||
|
||||
The second callback will parse commands written to the ``error-inj`` file:
|
||||
|
||||
.. c:function::
|
||||
bool (*error_inj_parse_line)(struct cec_adapter *adap, char *line);
|
||||
|
||||
The ``line`` argument points to the start of the command. Any leading
|
||||
spaces or tabs have already been skipped. It is a single line only (so there
|
||||
are no embedded newlines) and it is 0-terminated. The callback is free to
|
||||
modify the contents of the buffer. It is only called for lines containing a
|
||||
command, so this callback is never called for empty lines or comment lines.
|
||||
|
||||
Return true if the command was valid or false if there were syntax errors.
|
||||
|
||||
Implementing the High-Level CEC Adapter
|
||||
---------------------------------------
|
||||
|
||||
@@ -298,6 +365,9 @@ CEC protocol driven. The following high-level callbacks are available:
|
||||
/* Low-level callbacks */
|
||||
...
|
||||
|
||||
/* Error injection callbacks */
|
||||
...
|
||||
|
||||
/* High-level CEC message callback */
|
||||
int (*received)(struct cec_adapter *adap, struct cec_msg *msg);
|
||||
};
|
||||
|
||||
@@ -57,6 +57,7 @@ ignore symbol RC_PROTO_RC6_MCE
|
||||
ignore symbol RC_PROTO_SHARP
|
||||
ignore symbol RC_PROTO_XMP
|
||||
ignore symbol RC_PROTO_CEC
|
||||
ignore symbol RC_PROTO_IMON
|
||||
|
||||
# Undocumented macros
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ This part describes the CEC: Consumer Electronics Control
|
||||
|
||||
cec-intro
|
||||
cec-funcs
|
||||
cec-pin-error-inj
|
||||
cec-header
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,325 @@
|
||||
CEC Pin Framework Error Injection
|
||||
=================================
|
||||
|
||||
The CEC Pin Framework is a core CEC framework for CEC hardware that only
|
||||
has low-level support for the CEC bus. Most hardware today will have
|
||||
high-level CEC support where the hardware deals with driving the CEC bus,
|
||||
but some older devices aren't that fancy. However, this framework also
|
||||
allows you to connect the CEC pin to a GPIO on e.g. a Raspberry Pi and
|
||||
you have now made a CEC adapter.
|
||||
|
||||
What makes doing this so interesting is that since we have full control
|
||||
over the bus it is easy to support error injection. This is ideal to
|
||||
test how well CEC adapters can handle error conditions.
|
||||
|
||||
Currently only the cec-gpio driver (when the CEC line is directly
|
||||
connected to a pull-up GPIO line) and the AllWinner A10/A20 drm driver
|
||||
support this framework.
|
||||
|
||||
If ``CONFIG_CEC_PIN_ERROR_INJ`` is enabled, then error injection is available
|
||||
through debugfs. Specifically, in ``/sys/kernel/debug/cec/cecX/`` there is
|
||||
now an ``error-inj`` file.
|
||||
|
||||
.. note::
|
||||
|
||||
The error injection commands are not a stable ABI and may change in the
|
||||
future.
|
||||
|
||||
With ``cat error-inj`` you can see both the possible commands and the current
|
||||
error injection status::
|
||||
|
||||
$ cat /sys/kernel/debug/cec/cec0/error-inj
|
||||
# Clear error injections:
|
||||
# clear clear all rx and tx error injections
|
||||
# rx-clear clear all rx error injections
|
||||
# tx-clear clear all tx error injections
|
||||
# <op> clear clear all rx and tx error injections for <op>
|
||||
# <op> rx-clear clear all rx error injections for <op>
|
||||
# <op> tx-clear clear all tx error injections for <op>
|
||||
#
|
||||
# RX error injection:
|
||||
# <op>[,<mode>] rx-nack NACK the message instead of sending an ACK
|
||||
# <op>[,<mode>] rx-low-drive <bit> force a low-drive condition at this bit position
|
||||
# <op>[,<mode>] rx-add-byte add a spurious byte to the received CEC message
|
||||
# <op>[,<mode>] rx-remove-byte remove the last byte from the received CEC message
|
||||
# <op>[,<mode>] rx-arb-lost <poll> generate a POLL message to trigger an arbitration lost
|
||||
#
|
||||
# TX error injection settings:
|
||||
# tx-ignore-nack-until-eom ignore early NACKs until EOM
|
||||
# tx-custom-low-usecs <usecs> define the 'low' time for the custom pulse
|
||||
# tx-custom-high-usecs <usecs> define the 'high' time for the custom pulse
|
||||
# tx-custom-pulse transmit the custom pulse once the bus is idle
|
||||
#
|
||||
# TX error injection:
|
||||
# <op>[,<mode>] tx-no-eom don't set the EOM bit
|
||||
# <op>[,<mode>] tx-early-eom set the EOM bit one byte too soon
|
||||
# <op>[,<mode>] tx-add-bytes <num> append <num> (1-255) spurious bytes to the message
|
||||
# <op>[,<mode>] tx-remove-byte drop the last byte from the message
|
||||
# <op>[,<mode>] tx-short-bit <bit> make this bit shorter than allowed
|
||||
# <op>[,<mode>] tx-long-bit <bit> make this bit longer than allowed
|
||||
# <op>[,<mode>] tx-custom-bit <bit> send the custom pulse instead of this bit
|
||||
# <op>[,<mode>] tx-short-start send a start pulse that's too short
|
||||
# <op>[,<mode>] tx-long-start send a start pulse that's too long
|
||||
# <op>[,<mode>] tx-custom-start send the custom pulse instead of the start pulse
|
||||
# <op>[,<mode>] tx-last-bit <bit> stop sending after this bit
|
||||
# <op>[,<mode>] tx-low-drive <bit> force a low-drive condition at this bit position
|
||||
#
|
||||
# <op> CEC message opcode (0-255) or 'any'
|
||||
# <mode> 'once' (default), 'always', 'toggle' or 'off'
|
||||
# <bit> CEC message bit (0-159)
|
||||
# 10 bits per 'byte': bits 0-7: data, bit 8: EOM, bit 9: ACK
|
||||
# <poll> CEC poll message used to test arbitration lost (0x00-0xff, default 0x0f)
|
||||
# <usecs> microseconds (0-10000000, default 1000)
|
||||
|
||||
clear
|
||||
|
||||
You can write error injection commands to ``error-inj`` using
|
||||
``echo 'cmd' >error-inj`` or ``cat cmd.txt >error-inj``. The ``cat error-inj``
|
||||
output contains the current error commands. You can save the output to a file
|
||||
and use it as an input to ``error-inj`` later.
|
||||
|
||||
Basic Syntax
|
||||
------------
|
||||
|
||||
Leading spaces/tabs are ignored. If the next character is a ``#`` or the end
|
||||
of the line was reached, then the whole line is ignored. Otherwise a command
|
||||
is expected.
|
||||
|
||||
The error injection commands fall in two main groups: those relating to
|
||||
receiving CEC messages and those relating to transmitting CEC messages. In
|
||||
addition, there are commands to clear existing error injection commands and
|
||||
to create custom pulses on the CEC bus.
|
||||
|
||||
Most error injection commands can be executed for specific CEC opcodes or for
|
||||
all opcodes (``any``). Each command also has a 'mode' which can be ``off``
|
||||
(can be used to turn off an existing error injection command), ``once``
|
||||
(the default) which will trigger the error injection only once for the next
|
||||
received or transmitted message, ``always`` to always trigger the error
|
||||
injection and ``toggle`` to toggle the error injection on or off for every
|
||||
transmit or receive.
|
||||
|
||||
So '``any rx-nack``' will NACK the next received CEC message,
|
||||
'``any,always rx-nack``' will NACK all received CEC messages and
|
||||
'``0x82,toggle rx-nack``' will only NACK if an Active Source message was
|
||||
received and do that only for every other received message.
|
||||
|
||||
After an error was injected with mode ``once`` the error injection command
|
||||
is cleared automatically, so ``once`` is a one-time deal.
|
||||
|
||||
All combinations of ``<op>`` and error injection commands can co-exist. So
|
||||
this is fine::
|
||||
|
||||
0x9e tx-add-bytes 1
|
||||
0x9e tx-early-eom
|
||||
0x9f tx-add-bytes 2
|
||||
any rx-nack
|
||||
|
||||
All four error injection commands will be active simultaneously.
|
||||
|
||||
However, if the same ``<op>`` and command combination is specified,
|
||||
but with different arguments::
|
||||
|
||||
0x9e tx-add-bytes 1
|
||||
0x9e tx-add-bytes 2
|
||||
|
||||
Then the second will overwrite the first.
|
||||
|
||||
Clear Error Injections
|
||||
----------------------
|
||||
|
||||
``clear``
|
||||
Clear all error injections.
|
||||
|
||||
``rx-clear``
|
||||
Clear all receive error injections
|
||||
|
||||
``tx-clear``
|
||||
Clear all transmit error injections
|
||||
|
||||
``<op> clear``
|
||||
Clear all error injections for the given opcode.
|
||||
|
||||
``<op> rx-clear``
|
||||
Clear all receive error injections for the given opcode.
|
||||
|
||||
``<op> tx-clear``
|
||||
Clear all transmit error injections for the given opcode.
|
||||
|
||||
Receive Messages
|
||||
----------------
|
||||
|
||||
``<op>[,<mode>] rx-nack``
|
||||
NACK broadcast messages and messages directed to this CEC adapter.
|
||||
Every byte of the message will be NACKed in case the transmitter
|
||||
keeps transmitting after the first byte was NACKed.
|
||||
|
||||
``<op>[,<mode>] rx-low-drive <bit>``
|
||||
Force a Low Drive condition at this bit position. If <op> specifies
|
||||
a specific CEC opcode then the bit position must be at least 18,
|
||||
otherwise the opcode hasn't been received yet. This tests if the
|
||||
transmitter can handle the Low Drive condition correctly and reports
|
||||
the error correctly. Note that a Low Drive in the first 4 bits can also
|
||||
be interpreted as an Arbitration Lost condition by the transmitter.
|
||||
This is implementation dependent.
|
||||
|
||||
``<op>[,<mode>] rx-add-byte``
|
||||
Add a spurious 0x55 byte to the received CEC message, provided
|
||||
the message was 15 bytes long or less. This is useful to test
|
||||
the high-level protocol since spurious bytes should be ignored.
|
||||
|
||||
``<op>[,<mode>] rx-remove-byte``
|
||||
Remove the last byte from the received CEC message, provided it
|
||||
was at least 2 bytes long. This is useful to test the high-level
|
||||
protocol since messages that are too short should be ignored.
|
||||
|
||||
``<op>[,<mode>] rx-arb-lost <poll>``
|
||||
Generate a POLL message to trigger an Arbitration Lost condition.
|
||||
This command is only allowed for ``<op>`` values of ``next`` or ``all``.
|
||||
As soon as a start bit has been received the CEC adapter will switch
|
||||
to transmit mode and it will transmit a POLL message. By default this is
|
||||
0x0f, but it can also be specified explicitly via the ``<poll>`` argument.
|
||||
|
||||
This command can be used to test the Arbitration Lost condition in
|
||||
the remote CEC transmitter. Arbitration happens when two CEC adapters
|
||||
start sending a message at the same time. In that case the initiator
|
||||
with the most leading zeroes wins and the other transmitter has to
|
||||
stop transmitting ('Arbitration Lost'). This is very hard to test,
|
||||
except by using this error injection command.
|
||||
|
||||
This does not work if the remote CEC transmitter has logical address
|
||||
0 ('TV') since that will always win.
|
||||
|
||||
Transmit Messages
|
||||
-----------------
|
||||
|
||||
``tx-ignore-nack-until-eom``
|
||||
This setting changes the behavior of transmitting CEC messages. Normally
|
||||
as soon as the receiver NACKs a byte the transmit will stop, but the
|
||||
specification also allows that the full message is transmitted and only
|
||||
at the end will the transmitter look at the ACK bit. This is not
|
||||
recommended behavior since there is no point in keeping the CEC bus busy
|
||||
for longer than is strictly needed. Especially given how slow the bus is.
|
||||
|
||||
This setting can be used to test how well a receiver deals with
|
||||
transmitters that ignore NACKs until the very end of the message.
|
||||
|
||||
``<op>[,<mode>] tx-no-eom``
|
||||
Don't set the EOM bit. Normally the last byte of the message has the EOM
|
||||
(End-Of-Message) bit set. With this command the transmit will just stop
|
||||
without ever sending an EOM. This can be used to test how a receiver
|
||||
handles this case. Normally receivers have a time-out after which
|
||||
they will go back to the Idle state.
|
||||
|
||||
``<op>[,<mode>] tx-early-eom``
|
||||
Set the EOM bit one byte too soon. This obviously only works for messages
|
||||
of two bytes or more. The EOM bit will be set for the second-to-last byte
|
||||
and not for the final byte. The receiver should ignore the last byte in
|
||||
this case. Since the resulting message is likely to be too short for this
|
||||
same reason the whole message is typically ignored. The receiver should be
|
||||
in Idle state after the last byte was transmitted.
|
||||
|
||||
``<op>[,<mode>] tx-add-bytes <num>``
|
||||
Append ``<num>`` (1-255) spurious bytes to the message. The extra bytes
|
||||
have the value of the byte position in the message. So if you transmit a
|
||||
two byte message (e.g. a Get CEC Version message) and add 2 bytes, then
|
||||
the full message received by the remote CEC adapter is
|
||||
``0x40 0x9f 0x02 0x03``.
|
||||
|
||||
This command can be used to test buffer overflows in the receiver. E.g.
|
||||
what does it do when it receives more than the maximum message size of 16
|
||||
bytes.
|
||||
|
||||
``<op>[,<mode>] tx-remove-byte``
|
||||
Drop the last byte from the message, provided the message is at least
|
||||
two bytes long. The receiver should ignore messages that are too short.
|
||||
|
||||
``<op>[,<mode>] tx-short-bit <bit>``
|
||||
Make this bit period shorter than allowed. The bit position cannot be
|
||||
an Ack bit. If <op> specifies a specific CEC opcode then the bit position
|
||||
must be at least 18, otherwise the opcode hasn't been received yet.
|
||||
Normally the period of a data bit is between 2.05 and 2.75 milliseconds.
|
||||
With this command the period of this bit is 1.8 milliseconds, this is
|
||||
done by reducing the time the CEC bus is high. This bit period is less
|
||||
than is allowed and the receiver should respond with a Low Drive
|
||||
condition.
|
||||
|
||||
This command is ignored for 0 bits in bit positions 0 to 3. This is
|
||||
because the receiver also looks for an Arbitration Lost condition in
|
||||
those first four bits and it is undefined what will happen if it
|
||||
sees a too-short 0 bit.
|
||||
|
||||
``<op>[,<mode>] tx-long-bit <bit>``
|
||||
Make this bit period longer than is valid. The bit position cannot be
|
||||
an Ack bit. If <op> specifies a specific CEC opcode then the bit position
|
||||
must be at least 18, otherwise the opcode hasn't been received yet.
|
||||
Normally the period of a data bit is between 2.05 and 2.75 milliseconds.
|
||||
With this command the period of this bit is 2.9 milliseconds, this is
|
||||
done by increasing the time the CEC bus is high.
|
||||
|
||||
Even though this bit period is longer than is valid it is undefined what
|
||||
a receiver will do. It might just accept it, or it might time out and
|
||||
return to Idle state. Unfortunately the CEC specification is silent about
|
||||
this.
|
||||
|
||||
This command is ignored for 0 bits in bit positions 0 to 3. This is
|
||||
because the receiver also looks for an Arbitration Lost condition in
|
||||
those first four bits and it is undefined what will happen if it
|
||||
sees a too-long 0 bit.
|
||||
|
||||
``<op>[,<mode>] tx-short-start``
|
||||
Make this start bit period shorter than allowed. Normally the period of
|
||||
a start bit is between 4.3 and 4.7 milliseconds. With this command the
|
||||
period of the start bit is 4.1 milliseconds, this is done by reducing
|
||||
the time the CEC bus is high. This start bit period is less than is
|
||||
allowed and the receiver should return to Idle state when this is detected.
|
||||
|
||||
``<op>[,<mode>] tx-long-start``
|
||||
Make this start bit period longer than is valid. Normally the period of
|
||||
a start bit is between 4.3 and 4.7 milliseconds. With this command the
|
||||
period of the start bit is 5 milliseconds, this is done by increasing
|
||||
the time the CEC bus is high. This start bit period is more than is
|
||||
valid and the receiver should return to Idle state when this is detected.
|
||||
|
||||
Even though this start bit period is longer than is valid it is undefined
|
||||
what a receiver will do. It might just accept it, or it might time out and
|
||||
return to Idle state. Unfortunately the CEC specification is silent about
|
||||
this.
|
||||
|
||||
``<op>[,<mode>] tx-last-bit <bit>``
|
||||
Just stop transmitting after this bit. If <op> specifies a specific CEC
|
||||
opcode then the bit position must be at least 18, otherwise the opcode
|
||||
hasn't been received yet. This command can be used to test how the receiver
|
||||
reacts when a message just suddenly stops. It should time out and go back
|
||||
to Idle state.
|
||||
|
||||
``<op>[,<mode>] tx-low-drive <bit>``
|
||||
Force a Low Drive condition at this bit position. If <op> specifies a
|
||||
specific CEC opcode then the bit position must be at least 18, otherwise
|
||||
the opcode hasn't been received yet. This can be used to test how the
|
||||
receiver handles Low Drive conditions. Note that if this happens at bit
|
||||
positions 0-3 the receiver can interpret this as an Arbitration Lost
|
||||
condition. This is implementation dependent.
|
||||
|
||||
Custom Pulses
|
||||
-------------
|
||||
|
||||
``tx-custom-low-usecs <usecs>``
|
||||
This defines the duration in microseconds that the custom pulse pulls
|
||||
the CEC line low. The default is 1000 microseconds.
|
||||
|
||||
``tx-custom-high-usecs <usecs>``
|
||||
This defines the duration in microseconds that the custom pulse keeps the
|
||||
CEC line high (unless another CEC adapter pulls it low in that time).
|
||||
The default is 1000 microseconds. The total period of the custom pulse is
|
||||
``tx-custom-low-usecs + tx-custom-high-usecs``.
|
||||
|
||||
``<op>[,<mode>] tx-custom-bit <bit>``
|
||||
Send the custom bit instead of a regular data bit. The bit position cannot
|
||||
be an Ack bit. If <op> specifies a specific CEC opcode then the bit
|
||||
position must be at least 18, otherwise the opcode hasn't been received yet.
|
||||
|
||||
``<op>[,<mode>] tx-custom-start``
|
||||
Send the custom bit instead of a regular start bit.
|
||||
|
||||
``tx-custom-pulse``
|
||||
Transmit a single custom pulse as soon as the CEC bus is idle.
|
||||
@@ -144,10 +144,21 @@ id's until they get an error.
|
||||
|
||||
- .. row 9
|
||||
|
||||
- union
|
||||
- __u32
|
||||
|
||||
- ``reserved[4]``
|
||||
|
||||
-
|
||||
-
|
||||
- Reserved for future extensions. Drivers and applications must set
|
||||
the array to zero.
|
||||
|
||||
- .. row 10
|
||||
|
||||
- union
|
||||
|
||||
- .. row 11
|
||||
|
||||
-
|
||||
- struct
|
||||
|
||||
@@ -156,7 +167,7 @@ id's until they get an error.
|
||||
-
|
||||
- Valid for (sub-)devices that create a single device node.
|
||||
|
||||
- .. row 11
|
||||
- .. row 12
|
||||
|
||||
-
|
||||
-
|
||||
@@ -166,7 +177,7 @@ id's until they get an error.
|
||||
|
||||
- Device node major number.
|
||||
|
||||
- .. row 12
|
||||
- .. row 13
|
||||
|
||||
-
|
||||
-
|
||||
@@ -176,7 +187,7 @@ id's until they get an error.
|
||||
|
||||
- Device node minor number.
|
||||
|
||||
- .. row 13
|
||||
- .. row 14
|
||||
|
||||
-
|
||||
- __u8
|
||||
|
||||
@@ -125,6 +125,15 @@ returned during the enumeration process.
|
||||
|
||||
- Pad flags, see :ref:`media-pad-flag` for more details.
|
||||
|
||||
- .. row 4
|
||||
|
||||
- __u32
|
||||
|
||||
- ``reserved[2]``
|
||||
|
||||
- Reserved for future extensions. Drivers and applications must set
|
||||
the array to zero.
|
||||
|
||||
|
||||
|
||||
.. c:type:: media_link_desc
|
||||
@@ -161,6 +170,15 @@ returned during the enumeration process.
|
||||
|
||||
- Link flags, see :ref:`media-link-flag` for more details.
|
||||
|
||||
- .. row 4
|
||||
|
||||
- __u32
|
||||
|
||||
- ``reserved[4]``
|
||||
|
||||
- Reserved for future extensions. Drivers and applications must set
|
||||
the array to zero.
|
||||
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
@@ -68,7 +68,7 @@ desired arrays with the media graph elements.
|
||||
|
||||
- .. row 2
|
||||
|
||||
- __u64
|
||||
- __u32
|
||||
|
||||
- ``num_entities``
|
||||
|
||||
@@ -76,6 +76,14 @@ desired arrays with the media graph elements.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- __u32
|
||||
|
||||
- ``reserved1``
|
||||
|
||||
- Applications and drivers shall set this to 0.
|
||||
|
||||
- .. row 4
|
||||
|
||||
- __u64
|
||||
|
||||
- ``ptr_entities``
|
||||
@@ -85,15 +93,23 @@ desired arrays with the media graph elements.
|
||||
the ioctl won't store the entities. It will just update
|
||||
``num_entities``
|
||||
|
||||
- .. row 4
|
||||
- .. row 5
|
||||
|
||||
- __u64
|
||||
- __u32
|
||||
|
||||
- ``num_interfaces``
|
||||
|
||||
- Number of interfaces in the graph
|
||||
|
||||
- .. row 5
|
||||
- .. row 6
|
||||
|
||||
- __u32
|
||||
|
||||
- ``reserved2``
|
||||
|
||||
- Applications and drivers shall set this to 0.
|
||||
|
||||
- .. row 7
|
||||
|
||||
- __u64
|
||||
|
||||
@@ -104,15 +120,23 @@ desired arrays with the media graph elements.
|
||||
the ioctl won't store the interfaces. It will just update
|
||||
``num_interfaces``
|
||||
|
||||
- .. row 6
|
||||
- .. row 8
|
||||
|
||||
- __u64
|
||||
- __u32
|
||||
|
||||
- ``num_pads``
|
||||
|
||||
- Total number of pads in the graph
|
||||
|
||||
- .. row 7
|
||||
- .. row 9
|
||||
|
||||
- __u32
|
||||
|
||||
- ``reserved3``
|
||||
|
||||
- Applications and drivers shall set this to 0.
|
||||
|
||||
- .. row 10
|
||||
|
||||
- __u64
|
||||
|
||||
@@ -122,15 +146,23 @@ desired arrays with the media graph elements.
|
||||
converted to a 64-bits integer. It can be zero. if zero, the ioctl
|
||||
won't store the pads. It will just update ``num_pads``
|
||||
|
||||
- .. row 8
|
||||
- .. row 11
|
||||
|
||||
- __u64
|
||||
- __u32
|
||||
|
||||
- ``num_links``
|
||||
|
||||
- Total number of data and interface links in the graph
|
||||
|
||||
- .. row 9
|
||||
- .. row 12
|
||||
|
||||
- __u32
|
||||
|
||||
- ``reserved4``
|
||||
|
||||
- Applications and drivers shall set this to 0.
|
||||
|
||||
- .. row 13
|
||||
|
||||
- __u64
|
||||
|
||||
@@ -334,7 +366,7 @@ desired arrays with the media graph elements.
|
||||
|
||||
- On pad to pad links: unique ID for the source pad.
|
||||
|
||||
On interface to entity links: unique ID for the entity.
|
||||
On interface to entity links: unique ID for the interface.
|
||||
|
||||
- .. row 3
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user