Message ID | 20191108021609.2584272-4-niklas.soderlund+renesas@ragnatech.se (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | dt-bindings: rcar-vin: Convert bindings to json-schema | expand |
On 11/8/19 3:16 AM, Niklas Söderlund wrote: > Convert Renesas R-Car VIN bindings documentation to json-schema. > > As the examples in the bindings now can be tested add a new one which > describes how the both a parallel and a CSI-2 source can be connected on > Gen3 SoCs. > > Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> Same here: you forgot to update MAINTAINERS. Regards, Hans > --- > .../devicetree/bindings/media/renesas,vin.txt | 217 ---------- > .../bindings/media/renesas,vin.yaml | 409 ++++++++++++++++++ > 2 files changed, 409 insertions(+), 217 deletions(-) > delete mode 100644 Documentation/devicetree/bindings/media/renesas,vin.txt > create mode 100644 Documentation/devicetree/bindings/media/renesas,vin.yaml > > diff --git a/Documentation/devicetree/bindings/media/renesas,vin.txt b/Documentation/devicetree/bindings/media/renesas,vin.txt > deleted file mode 100644 > index 5eefd62ac5c5b9fd..0000000000000000 > --- a/Documentation/devicetree/bindings/media/renesas,vin.txt > +++ /dev/null > @@ -1,217 +0,0 @@ > -Renesas R-Car Video Input driver (rcar_vin) > -------------------------------------------- > - > -The rcar_vin device provides video input capabilities for the Renesas R-Car > -family of devices. > - > -Each VIN instance has a single parallel input that supports RGB and YUV video, > -with both external synchronization and BT.656 synchronization for the latter. > -Depending on the instance the VIN input is connected to external SoC pins, or > -on Gen3 and RZ/G2 platforms to a CSI-2 receiver. > - > - - compatible: Must be one or more of the following > - - "renesas,vin-r8a7743" for the R8A7743 device > - - "renesas,vin-r8a7744" for the R8A7744 device > - - "renesas,vin-r8a7745" for the R8A7745 device > - - "renesas,vin-r8a77470" for the R8A77470 device > - - "renesas,vin-r8a774a1" for the R8A774A1 device > - - "renesas,vin-r8a774b1" for the R8A774B1 device > - - "renesas,vin-r8a774c0" for the R8A774C0 device > - - "renesas,vin-r8a7778" for the R8A7778 device > - - "renesas,vin-r8a7779" for the R8A7779 device > - - "renesas,vin-r8a7790" for the R8A7790 device > - - "renesas,vin-r8a7791" for the R8A7791 device > - - "renesas,vin-r8a7792" for the R8A7792 device > - - "renesas,vin-r8a7793" for the R8A7793 device > - - "renesas,vin-r8a7794" for the R8A7794 device > - - "renesas,vin-r8a7795" for the R8A7795 device > - - "renesas,vin-r8a7796" for the R8A7796 device > - - "renesas,vin-r8a77965" for the R8A77965 device > - - "renesas,vin-r8a77970" for the R8A77970 device > - - "renesas,vin-r8a77980" for the R8A77980 device > - - "renesas,vin-r8a77990" for the R8A77990 device > - - "renesas,vin-r8a77995" for the R8A77995 device > - - "renesas,rcar-gen2-vin" for a generic R-Car Gen2 or RZ/G1 compatible > - device. > - > - When compatible with the generic version nodes must list the > - SoC-specific version corresponding to the platform first > - followed by the generic version. > - > - - reg: the register base and size for the device registers > - - interrupts: the interrupt for the device > - - clocks: Reference to the parent clock > - > -The per-board settings for Gen2 and RZ/G1 platforms: > - > -- port - sub-node describing a single endpoint connected to the VIN > - from external SoC pins as described in video-interfaces.txt[1]. > - Only the first one will be considered as each vin interface has one > - input port. > - > - - Optional properties for endpoint nodes: > - - hsync-active: see [1] for description. Default is active high. > - - vsync-active: see [1] for description. Default is active high. > - If both HSYNC and VSYNC polarities are not specified, embedded > - synchronization is selected. > - - field-active-even: see [1] for description. Default is active high. > - - bus-width: see [1] for description. The selected bus width depends on > - the SoC type and selected input image format. > - Valid values are: 8, 10, 12, 16, 24 and 32. > - - data-shift: see [1] for description. Valid values are 0 and 8. > - - data-enable-active: polarity of CLKENB signal, see [1] for > - description. Default is active high. > - > -The per-board settings for Gen3 and RZ/G2 platforms: > - > -Gen3 and RZ/G2 platforms can support both a single connected parallel input > -source from external SoC pins (port@0) and/or multiple parallel input sources > -from local SoC CSI-2 receivers (port@1) depending on SoC. > - > -- renesas,id - ID number of the VIN, VINx in the documentation. > -- ports > - - port@0 - sub-node describing a single endpoint connected to the VIN > - from external SoC pins as described in video-interfaces.txt[1]. > - Describing more than one endpoint in port@0 is invalid. Only VIN > - instances that are connected to external pins should have port@0. > - > - Endpoint nodes of port@0 support the optional properties listed in > - the Gen2 per-board settings description. > - > - - port@1 - sub-nodes describing one or more endpoints connected to > - the VIN from local SoC CSI-2 receivers. The endpoint numbers must > - use the following schema. > - > - - endpoint@0 - sub-node describing the endpoint connected to CSI20 > - - endpoint@1 - sub-node describing the endpoint connected to CSI21 > - - endpoint@2 - sub-node describing the endpoint connected to CSI40 > - - endpoint@3 - sub-node describing the endpoint connected to CSI41 > - > - Endpoint nodes of port@1 do not support any optional endpoint property. > - > -Device node example for Gen2 platforms > --------------------------------------- > - > - aliases { > - vin0 = &vin0; > - }; > - > - vin0: vin@e6ef0000 { > - compatible = "renesas,vin-r8a7790", "renesas,rcar-gen2-vin"; > - clocks = <&mstp8_clks R8A7790_CLK_VIN0>; > - reg = <0 0xe6ef0000 0 0x1000>; > - interrupts = <0 188 IRQ_TYPE_LEVEL_HIGH>; > - status = "disabled"; > - }; > - > -Board setup example for Gen2 platforms (vin1 composite video input) > -------------------------------------------------------------------- > - > -&i2c2 { > - status = "okay"; > - pinctrl-0 = <&i2c2_pins>; > - pinctrl-names = "default"; > - > - adv7180@20 { > - compatible = "adi,adv7180"; > - reg = <0x20>; > - remote = <&vin1>; > - > - port { > - adv7180: endpoint { > - bus-width = <8>; > - remote-endpoint = <&vin1ep0>; > - }; > - }; > - }; > -}; > - > -/* composite video input */ > -&vin1 { > - pinctrl-0 = <&vin1_pins>; > - pinctrl-names = "default"; > - > - status = "okay"; > - > - port { > - vin1ep0: endpoint { > - remote-endpoint = <&adv7180>; > - bus-width = <8>; > - }; > - }; > -}; > - > -Device node example for Gen3 platforms > --------------------------------------- > - > - vin0: video@e6ef0000 { > - compatible = "renesas,vin-r8a7795"; > - reg = <0 0xe6ef0000 0 0x1000>; > - interrupts = <GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>; > - clocks = <&cpg CPG_MOD 811>; > - power-domains = <&sysc R8A7795_PD_ALWAYS_ON>; > - resets = <&cpg 811>; > - renesas,id = <0>; > - > - ports { > - #address-cells = <1>; > - #size-cells = <0>; > - > - port@1 { > - #address-cells = <1>; > - #size-cells = <0>; > - > - reg = <1>; > - > - vin0csi20: endpoint@0 { > - reg = <0>; > - remote-endpoint= <&csi20vin0>; > - }; > - vin0csi21: endpoint@1 { > - reg = <1>; > - remote-endpoint= <&csi21vin0>; > - }; > - vin0csi40: endpoint@2 { > - reg = <2>; > - remote-endpoint= <&csi40vin0>; > - }; > - }; > - }; > - }; > - > - csi20: csi2@fea80000 { > - compatible = "renesas,r8a7795-csi2"; > - reg = <0 0xfea80000 0 0x10000>; > - interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; > - clocks = <&cpg CPG_MOD 714>; > - power-domains = <&sysc R8A7795_PD_ALWAYS_ON>; > - resets = <&cpg 714>; > - > - ports { > - #address-cells = <1>; > - #size-cells = <0>; > - > - port@0 { > - reg = <0>; > - csi20_in: endpoint { > - clock-lanes = <0>; > - data-lanes = <1>; > - remote-endpoint = <&adv7482_txb>; > - }; > - }; > - > - port@1 { > - #address-cells = <1>; > - #size-cells = <0>; > - > - reg = <1>; > - > - csi20vin0: endpoint@0 { > - reg = <0>; > - remote-endpoint = <&vin0csi20>; > - }; > - }; > - }; > - }; > - > -[1] video-interfaces.txt common video media interface > diff --git a/Documentation/devicetree/bindings/media/renesas,vin.yaml b/Documentation/devicetree/bindings/media/renesas,vin.yaml > new file mode 100644 > index 0000000000000000..be261d9a98d62dcd > --- /dev/null > +++ b/Documentation/devicetree/bindings/media/renesas,vin.yaml > @@ -0,0 +1,409 @@ > +# SPDX-License-Identifier: GPL-2.0 > +# Copyright (C) 2019 Renesas Electronics Corp. > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/media/renesas,vin.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Renesas R-Car Video Input (VIN) > + > +maintainers: > + - Niklas Söderlund <niklas.soderlund@ragnatech.se> > + > +description: |- > + The R-Car Video Input (VIN) device provides video input capabilities for the > + Renesas R-Car family of devices. > + > + Each VIN instance has a single parallel input that supports RGB and YUV video, > + with both external synchronization and BT.656 synchronization for the latter. > + Depending on the instance the VIN input is connected to external SoC pins, or > + on Gen3 and RZ/G2 platforms to a CSI-2 receiver. > + > +properties: > + compatible: > + oneOf: > + - items: > + - enum: > + - renesas,vin-r8a7743 # RZ/G1M > + - renesas,vin-r8a7744 # RZ/G1N > + - renesas,vin-r8a7745 # RZ/G1E > + - renesas,vin-r8a77470 # RZ/G1C > + - renesas,vin-r8a7790 # R-Car H2 > + - renesas,vin-r8a7791 # R-Car M2-W > + - renesas,vin-r8a7792 # R-Car V2H > + - renesas,vin-r8a7793 # R-Car M2-N > + - renesas,vin-r8a7794 # R-Car E2 > + - const: renesas,rcar-gen2-vin # Generic R-Car Gen2 or RZ/G1 > + > + - items: > + - enum: > + - renesas,vin-r8a774a1 # RZ/G2M > + - renesas,vin-r8a774b1 # RZ/G2N > + - renesas,vin-r8a774c0 # RZ/G2E > + - renesas,vin-r8a7778 # R-Car M1 > + - renesas,vin-r8a7779 # R-Car H1 > + - renesas,vin-r8a7795 # R-Car H3 > + - renesas,vin-r8a7796 # R-Car M3-W > + - renesas,vin-r8a77965 # R-Car M3-N > + - renesas,vin-r8a77970 # R-Car V3M > + - renesas,vin-r8a77980 # R-Car V3H > + - renesas,vin-r8a77990 # R-Car E3 > + - renesas,vin-r8a77995 # R-Car D3 > + > + reg: > + maxItems: 1 > + > + interrupts: > + maxItems: 1 > + > + clocks: > + maxItems: 1 > + > + power-domains: > + maxItems: 1 > + > + resets: > + maxItems: 1 > + > + #The per-board settings for Gen2 and RZ/G1 platforms: > + port: > + type: object > + description: |- > + A node containing a parallel input with a singel endpoint definitions as > + documented in > + Documentation/devicetree/bindings/media/video-interfaces.txt > + > + properties: > + reg: > + const: 1 > + > + endpoint: > + type: object > + > + properties: > + hsync-active: > + description: |- > + Default is active high. If both HSYNC and VSYNC polarities are not > + specified, embedded synchronization is selected. > + enum: [ 0, 1 ] > + > + vsync-active: > + description: |- > + Default is active high. If both HSYNC and VSYNC polarities are not > + specified, embedded synchronization is selected. > + enum: [ 0, 1 ] > + > + field-active-even: > + description: Default is active high. > + enum: [ 0, 1 ] > + > + bus-width: > + enum: [ 8, 10, 12, 16, 24, 32 ] > + > + data-shift: > + enum: [ 0, 8 ] > + > + data-enable-active: > + description: Polarity of CLKENB signal, default is active high. > + enum: [ 0, 1 ] > + > + pclk-sample: > + enum: [ 0, 1 ] > + > + data-active: > + enum: [ 0, 1 ] > + > + remote-endpoint: > + maxItems: 1 > + > + required: > + - remote-endpoint > + > + additionalProperties: false > + > + additionalProperties: false > + > + #The per-board settings for Gen3 and RZ/G2 platforms: > + renesas,id: > + description: VIN channel number > + allOf: > + - $ref: /schemas/types.yaml#/definitions/uint32 > + - enum: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ] > + > + ports: > + type: object > + description: |- > + A node containing input nodes with endpoint definitions as documented in > + Documentation/devicetree/bindings/media/video-interfaces.txt > + > + properties: > + port@0: > + type: object > + description: |- > + Input port node, single endpoint describing a parallel input source. > + > + properties: > + reg: > + const: 0 > + > + endpoint: > + type: object > + > + properties: > + hsync-active: > + description: |- > + Default is active high. If both HSYNC and VSYNC polarities are not > + specified, embedded synchronization is selected. > + enum: [ 0, 1 ] > + > + vsync-active: > + description: |- > + Default is active high. If both HSYNC and VSYNC polarities are not > + specified, embedded synchronization is selected. > + enum: [ 0, 1 ] > + > + field-active-even: > + description: Default is active high. > + enum: [ 0, 1 ] > + > + bus-width: > + enum: [ 8, 10, 12, 16, 24, 32 ] > + > + data-shift: > + enum: [ 0, 8 ] > + > + data-enable-active: > + description: Polarity of CLKENB signal, default is active high. > + enum: [ 0, 1 ] > + > + pclk-sample: > + enum: [ 0, 1 ] > + > + data-active: > + enum: [ 0, 1 ] > + > + remote-endpoint: > + maxItems: 1 > + > + required: > + - remote-endpoint > + > + additionalProperties: false > + > + additionalProperties: false > + > + port@1: > + type: object > + description: |- > + Input port node, multiple endpoints describing all the R-Car CSI-2 > + modules connected the VIN. > + > + properties: > + '#address-cells': > + const: 1 > + > + '#size-cells': > + const: 0 > + > + reg: > + const: 1 > + > + endpoint@0: > + type: object > + description: Endpoint connected to CSI20. > + > + properties: > + reg: > + const: 0 > + > + remote-endpoint: > + maxItems: 1 > + > + required: > + - reg > + - remote-endpoint > + > + additionalProperties: false > + > + endpoint@1: > + type: object > + description: Endpoint connected to CSI21. > + > + properties: > + reg: > + const: 1 > + > + remote-endpoint: > + maxItems: 1 > + > + required: > + - reg > + - remote-endpoint > + > + additionalProperties: false > + > + endpoint@2: > + type: object > + description: Endpoint connected to CSI40. > + > + properties: > + reg: > + const: 2 > + > + remote-endpoint: > + maxItems: 1 > + > + required: > + - reg > + - remote-endpoint > + > + additionalProperties: false > + > + endpoint@3: > + type: object > + description: Endpoint connected to CSI41. > + > + properties: > + reg: > + const: 3 > + > + remote-endpoint: > + maxItems: 1 > + > + required: > + - reg > + - remote-endpoint > + > + additionalProperties: false > + > + additionalProperties: false > + > +required: > + - compatible > + - reg > + - interrupts > + - clocks > + - power-domains > + - resets > + > +if: > + properties: > + compatible: > + contains: > + anyOf: > + - const: renesas,vin-r8a7778 > + - const: renesas,vin-r8a7779 > + - const: renesas,rcar-gen2-vin > +then: > + required: > + - port > +else: > + required: > + - renesas,id > + - ports > + > +additionalProperties: false > + > +examples: > + # Device node example for Gen2 platform > + - | > + #include <dt-bindings/clock/r8a7790-cpg-mssr.h> > + #include <dt-bindings/interrupt-controller/arm-gic.h> > + #include <dt-bindings/power/r8a7790-sysc.h> > + > + vin1: vin@e6ef1000 { > + compatible = "renesas,vin-r8a7790", > + "renesas,rcar-gen2-vin"; > + reg = <0 0xe6ef1000 0 0x1000>; > + interrupts = <GIC_SPI 189 IRQ_TYPE_LEVEL_HIGH>; > + clocks = <&cpg CPG_MOD 810>; > + power-domains = <&sysc R8A7790_PD_ALWAYS_ON>; > + resets = <&cpg 810>; > + > + port { > + vin1ep0: endpoint { > + remote-endpoint = <&adv7180>; > + bus-width = <8>; > + }; > + }; > + }; > + > + # Device node example for Gen3 platform with only CSI-2 > + - | > + #include <dt-bindings/clock/r8a7795-cpg-mssr.h> > + #include <dt-bindings/interrupt-controller/arm-gic.h> > + #include <dt-bindings/power/r8a7795-sysc.h> > + > + vin0: video@e6ef0000 { > + compatible = "renesas,vin-r8a7795"; > + reg = <0 0xe6ef0000 0 0x1000>; > + interrupts = <GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>; > + clocks = <&cpg CPG_MOD 811>; > + power-domains = <&sysc R8A7795_PD_ALWAYS_ON>; > + resets = <&cpg 811>; > + renesas,id = <0>; > + > + ports { > + #address-cells = <1>; > + #size-cells = <0>; > + > + port@1 { > + #address-cells = <1>; > + #size-cells = <0>; > + > + reg = <1>; > + > + vin0csi20: endpoint@0 { > + reg = <0>; > + remote-endpoint= <&csi20vin0>; > + }; > + vin0csi40: endpoint@2 { > + reg = <2>; > + remote-endpoint= <&csi40vin0>; > + }; > + }; > + }; > + }; > + > + # Device node example for Gen3 platform with CSI-2 and parallel > + - | > + #include <dt-bindings/clock/r8a77970-cpg-mssr.h> > + #include <dt-bindings/interrupt-controller/arm-gic.h> > + #include <dt-bindings/power/r8a77970-sysc.h> > + > + vin2: video@e6ef2000 { > + compatible = "renesas,vin-r8a77970"; > + reg = <0 0xe6ef2000 0 0x1000>; > + interrupts = <GIC_SPI 190 IRQ_TYPE_LEVEL_HIGH>; > + clocks = <&cpg CPG_MOD 809>; > + power-domains = <&sysc R8A77970_PD_ALWAYS_ON>; > + resets = <&cpg 809>; > + renesas,id = <2>; > + > + ports { > + #address-cells = <1>; > + #size-cells = <0>; > + > + port@0 { > + reg = <0>; > + > + vin2_in: endpoint { > + remote-endpoint = <&adv7612_out>; > + hsync-active = <0>; > + vsync-active = <0>; > + }; > + }; > + > + port@1 { > + #address-cells = <1>; > + #size-cells = <0>; > + > + reg = <1>; > + > + vin2csi40: endpoint@2 { > + reg = <2>; > + remote-endpoint = <&csi40vin2>; > + }; > + }; > + }; > + }; >
Hi Niklas, thanks for the patch On Fri, Nov 08, 2019 at 03:16:09AM +0100, Niklas Söderlund wrote: > Convert Renesas R-Car VIN bindings documentation to json-schema. > > As the examples in the bindings now can be tested add a new one which > describes how the both a parallel and a CSI-2 source can be connected on > Gen3 SoCs. > > Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> > --- > .../devicetree/bindings/media/renesas,vin.txt | 217 ---------- > .../bindings/media/renesas,vin.yaml | 409 ++++++++++++++++++ > 2 files changed, 409 insertions(+), 217 deletions(-) > delete mode 100644 Documentation/devicetree/bindings/media/renesas,vin.txt > create mode 100644 Documentation/devicetree/bindings/media/renesas,vin.yaml > > diff --git a/Documentation/devicetree/bindings/media/renesas,vin.txt b/Documentation/devicetree/bindings/media/renesas,vin.txt > deleted file mode 100644 > index 5eefd62ac5c5b9fd..0000000000000000 > --- a/Documentation/devicetree/bindings/media/renesas,vin.txt > +++ /dev/null > @@ -1,217 +0,0 @@ > -Renesas R-Car Video Input driver (rcar_vin) > -------------------------------------------- > - > -The rcar_vin device provides video input capabilities for the Renesas R-Car > -family of devices. > - > -Each VIN instance has a single parallel input that supports RGB and YUV video, > -with both external synchronization and BT.656 synchronization for the latter. > -Depending on the instance the VIN input is connected to external SoC pins, or > -on Gen3 and RZ/G2 platforms to a CSI-2 receiver. > - > - - compatible: Must be one or more of the following > - - "renesas,vin-r8a7743" for the R8A7743 device > - - "renesas,vin-r8a7744" for the R8A7744 device > - - "renesas,vin-r8a7745" for the R8A7745 device > - - "renesas,vin-r8a77470" for the R8A77470 device > - - "renesas,vin-r8a774a1" for the R8A774A1 device > - - "renesas,vin-r8a774b1" for the R8A774B1 device > - - "renesas,vin-r8a774c0" for the R8A774C0 device > - - "renesas,vin-r8a7778" for the R8A7778 device > - - "renesas,vin-r8a7779" for the R8A7779 device > - - "renesas,vin-r8a7790" for the R8A7790 device > - - "renesas,vin-r8a7791" for the R8A7791 device > - - "renesas,vin-r8a7792" for the R8A7792 device > - - "renesas,vin-r8a7793" for the R8A7793 device > - - "renesas,vin-r8a7794" for the R8A7794 device > - - "renesas,vin-r8a7795" for the R8A7795 device > - - "renesas,vin-r8a7796" for the R8A7796 device > - - "renesas,vin-r8a77965" for the R8A77965 device > - - "renesas,vin-r8a77970" for the R8A77970 device > - - "renesas,vin-r8a77980" for the R8A77980 device > - - "renesas,vin-r8a77990" for the R8A77990 device > - - "renesas,vin-r8a77995" for the R8A77995 device > - - "renesas,rcar-gen2-vin" for a generic R-Car Gen2 or RZ/G1 compatible > - device. > - > - When compatible with the generic version nodes must list the > - SoC-specific version corresponding to the platform first > - followed by the generic version. > - > - - reg: the register base and size for the device registers > - - interrupts: the interrupt for the device > - - clocks: Reference to the parent clock > - > -The per-board settings for Gen2 and RZ/G1 platforms: > - > -- port - sub-node describing a single endpoint connected to the VIN > - from external SoC pins as described in video-interfaces.txt[1]. > - Only the first one will be considered as each vin interface has one > - input port. > - > - - Optional properties for endpoint nodes: > - - hsync-active: see [1] for description. Default is active high. > - - vsync-active: see [1] for description. Default is active high. > - If both HSYNC and VSYNC polarities are not specified, embedded > - synchronization is selected. > - - field-active-even: see [1] for description. Default is active high. > - - bus-width: see [1] for description. The selected bus width depends on > - the SoC type and selected input image format. > - Valid values are: 8, 10, 12, 16, 24 and 32. > - - data-shift: see [1] for description. Valid values are 0 and 8. > - - data-enable-active: polarity of CLKENB signal, see [1] for > - description. Default is active high. > - > -The per-board settings for Gen3 and RZ/G2 platforms: > - > -Gen3 and RZ/G2 platforms can support both a single connected parallel input > -source from external SoC pins (port@0) and/or multiple parallel input sources > -from local SoC CSI-2 receivers (port@1) depending on SoC. > - > -- renesas,id - ID number of the VIN, VINx in the documentation. > -- ports > - - port@0 - sub-node describing a single endpoint connected to the VIN > - from external SoC pins as described in video-interfaces.txt[1]. > - Describing more than one endpoint in port@0 is invalid. Only VIN > - instances that are connected to external pins should have port@0. > - > - Endpoint nodes of port@0 support the optional properties listed in > - the Gen2 per-board settings description. > - > - - port@1 - sub-nodes describing one or more endpoints connected to > - the VIN from local SoC CSI-2 receivers. The endpoint numbers must > - use the following schema. > - > - - endpoint@0 - sub-node describing the endpoint connected to CSI20 > - - endpoint@1 - sub-node describing the endpoint connected to CSI21 > - - endpoint@2 - sub-node describing the endpoint connected to CSI40 > - - endpoint@3 - sub-node describing the endpoint connected to CSI41 > - > - Endpoint nodes of port@1 do not support any optional endpoint property. > - > -Device node example for Gen2 platforms > --------------------------------------- > - > - aliases { > - vin0 = &vin0; > - }; > - > - vin0: vin@e6ef0000 { > - compatible = "renesas,vin-r8a7790", "renesas,rcar-gen2-vin"; > - clocks = <&mstp8_clks R8A7790_CLK_VIN0>; > - reg = <0 0xe6ef0000 0 0x1000>; > - interrupts = <0 188 IRQ_TYPE_LEVEL_HIGH>; > - status = "disabled"; > - }; > - > -Board setup example for Gen2 platforms (vin1 composite video input) > -------------------------------------------------------------------- > - > -&i2c2 { > - status = "okay"; > - pinctrl-0 = <&i2c2_pins>; > - pinctrl-names = "default"; > - > - adv7180@20 { > - compatible = "adi,adv7180"; > - reg = <0x20>; > - remote = <&vin1>; > - > - port { > - adv7180: endpoint { > - bus-width = <8>; > - remote-endpoint = <&vin1ep0>; > - }; > - }; > - }; > -}; > - > -/* composite video input */ > -&vin1 { > - pinctrl-0 = <&vin1_pins>; > - pinctrl-names = "default"; > - > - status = "okay"; > - > - port { > - vin1ep0: endpoint { > - remote-endpoint = <&adv7180>; > - bus-width = <8>; > - }; > - }; > -}; > - > -Device node example for Gen3 platforms > --------------------------------------- > - > - vin0: video@e6ef0000 { > - compatible = "renesas,vin-r8a7795"; > - reg = <0 0xe6ef0000 0 0x1000>; > - interrupts = <GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>; > - clocks = <&cpg CPG_MOD 811>; > - power-domains = <&sysc R8A7795_PD_ALWAYS_ON>; > - resets = <&cpg 811>; > - renesas,id = <0>; > - > - ports { > - #address-cells = <1>; > - #size-cells = <0>; > - > - port@1 { > - #address-cells = <1>; > - #size-cells = <0>; > - > - reg = <1>; > - > - vin0csi20: endpoint@0 { > - reg = <0>; > - remote-endpoint= <&csi20vin0>; > - }; > - vin0csi21: endpoint@1 { > - reg = <1>; > - remote-endpoint= <&csi21vin0>; > - }; > - vin0csi40: endpoint@2 { > - reg = <2>; > - remote-endpoint= <&csi40vin0>; > - }; > - }; > - }; > - }; > - > - csi20: csi2@fea80000 { > - compatible = "renesas,r8a7795-csi2"; > - reg = <0 0xfea80000 0 0x10000>; > - interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; > - clocks = <&cpg CPG_MOD 714>; > - power-domains = <&sysc R8A7795_PD_ALWAYS_ON>; > - resets = <&cpg 714>; > - > - ports { > - #address-cells = <1>; > - #size-cells = <0>; > - > - port@0 { > - reg = <0>; > - csi20_in: endpoint { > - clock-lanes = <0>; > - data-lanes = <1>; > - remote-endpoint = <&adv7482_txb>; > - }; > - }; > - > - port@1 { > - #address-cells = <1>; > - #size-cells = <0>; > - > - reg = <1>; > - > - csi20vin0: endpoint@0 { > - reg = <0>; > - remote-endpoint = <&vin0csi20>; > - }; > - }; > - }; > - }; > - > -[1] video-interfaces.txt common video media interface > diff --git a/Documentation/devicetree/bindings/media/renesas,vin.yaml b/Documentation/devicetree/bindings/media/renesas,vin.yaml > new file mode 100644 > index 0000000000000000..be261d9a98d62dcd > --- /dev/null > +++ b/Documentation/devicetree/bindings/media/renesas,vin.yaml > @@ -0,0 +1,409 @@ > +# SPDX-License-Identifier: GPL-2.0 I think you should use GPL-2.0-only > +# Copyright (C) 2019 Renesas Electronics Corp. > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/media/renesas,vin.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Renesas R-Car Video Input (VIN) > + > +maintainers: > + - Niklas Söderlund <niklas.soderlund@ragnatech.se> I also put the mailing lists here, not sure if that's desired. > + > +description: |- > + The R-Car Video Input (VIN) device provides video input capabilities for the > + Renesas R-Car family of devices. > + > + Each VIN instance has a single parallel input that supports RGB and YUV video, > + with both external synchronization and BT.656 synchronization for the latter. > + Depending on the instance the VIN input is connected to external SoC pins, or > + on Gen3 and RZ/G2 platforms to a CSI-2 receiver. > + > +properties: > + compatible: > + oneOf: > + - items: > + - enum: > + - renesas,vin-r8a7743 # RZ/G1M > + - renesas,vin-r8a7744 # RZ/G1N > + - renesas,vin-r8a7745 # RZ/G1E > + - renesas,vin-r8a77470 # RZ/G1C > + - renesas,vin-r8a7790 # R-Car H2 > + - renesas,vin-r8a7791 # R-Car M2-W > + - renesas,vin-r8a7792 # R-Car V2H > + - renesas,vin-r8a7793 # R-Car M2-N > + - renesas,vin-r8a7794 # R-Car E2 > + - const: renesas,rcar-gen2-vin # Generic R-Car Gen2 or RZ/G1 > + > + - items: > + - enum: > + - renesas,vin-r8a774a1 # RZ/G2M > + - renesas,vin-r8a774b1 # RZ/G2N > + - renesas,vin-r8a774c0 # RZ/G2E > + - renesas,vin-r8a7778 # R-Car M1 > + - renesas,vin-r8a7779 # R-Car H1 > + - renesas,vin-r8a7795 # R-Car H3 > + - renesas,vin-r8a7796 # R-Car M3-W > + - renesas,vin-r8a77965 # R-Car M3-N > + - renesas,vin-r8a77970 # R-Car V3M > + - renesas,vin-r8a77980 # R-Car V3H > + - renesas,vin-r8a77990 # R-Car E3 > + - renesas,vin-r8a77995 # R-Car D3 > + > + reg: > + maxItems: 1 > + > + interrupts: > + maxItems: 1 > + > + clocks: > + maxItems: 1 > + > + power-domains: > + maxItems: 1 > + > + resets: > + maxItems: 1 > + > + #The per-board settings for Gen2 and RZ/G1 platforms: > + port: > + type: object > + description: |- > + A node containing a parallel input with a singel endpoint definitions as > + documented in > + Documentation/devicetree/bindings/media/video-interfaces.txt > + > + properties: > + reg: > + const: 1 Do you need reg for the single 'port' ? > + > + endpoint: > + type: object > + > + properties: > + hsync-active: > + description: |- > + Default is active high. If both HSYNC and VSYNC polarities are not > + specified, embedded synchronization is selected. > + enum: [ 0, 1 ] > + > + vsync-active: > + description: |- > + Default is active high. If both HSYNC and VSYNC polarities are not > + specified, embedded synchronization is selected. > + enum: [ 0, 1 ] > + > + field-active-even: > + description: Default is active high. > + enum: [ 0, 1 ] > + > + bus-width: > + enum: [ 8, 10, 12, 16, 24, 32 ] > + > + data-shift: > + enum: [ 0, 8 ] > + > + data-enable-active: > + description: Polarity of CLKENB signal, default is active high. > + enum: [ 0, 1 ] > + > + pclk-sample: > + enum: [ 0, 1 ] > + > + data-active: > + enum: [ 0, 1 ] > + > + remote-endpoint: > + maxItems: 1 > + > + required: > + - remote-endpoint > + > + additionalProperties: false > + > + additionalProperties: false > + > + #The per-board settings for Gen3 and RZ/G2 platforms: > + renesas,id: > + description: VIN channel number > + allOf: > + - $ref: /schemas/types.yaml#/definitions/uint32 > + - enum: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ] > + > + ports: > + type: object > + description: |- > + A node containing input nodes with endpoint definitions as documented in > + Documentation/devicetree/bindings/media/video-interfaces.txt > + > + properties: > + port@0: > + type: object > + description: |- > + Input port node, single endpoint describing a parallel input source. > + > + properties: > + reg: > + const: 0 > + > + endpoint: > + type: object > + > + properties: > + hsync-active: > + description: |- > + Default is active high. If both HSYNC and VSYNC polarities are not > + specified, embedded synchronization is selected. > + enum: [ 0, 1 ] > + > + vsync-active: > + description: |- > + Default is active high. If both HSYNC and VSYNC polarities are not > + specified, embedded synchronization is selected. > + enum: [ 0, 1 ] > + > + field-active-even: > + description: Default is active high. > + enum: [ 0, 1 ] > + > + bus-width: > + enum: [ 8, 10, 12, 16, 24, 32 ] > + > + data-shift: > + enum: [ 0, 8 ] Why are those two not described ? I feel like or you either refrain from describing all poperties and point the reader to video-interfaces.txt, or you describe all of them, at least to provide an indication of the default if the property is not specified. > + > + data-enable-active: > + description: Polarity of CLKENB signal, default is active high. > + enum: [ 0, 1 ] > + > + pclk-sample: > + enum: [ 0, 1 ] > + > + data-active: > + enum: [ 0, 1 ] > + > + remote-endpoint: > + maxItems: 1 > + > + required: > + - remote-endpoint > + > + additionalProperties: false > + > + additionalProperties: false > + > + port@1: > + type: object > + description: |- > + Input port node, multiple endpoints describing all the R-Car CSI-2 > + modules connected the VIN. > + > + properties: > + '#address-cells': > + const: 1 > + > + '#size-cells': > + const: 0 > + > + reg: > + const: 1 > + > + endpoint@0: > + type: object > + description: Endpoint connected to CSI20. > + > + properties: > + reg: > + const: 0 > + > + remote-endpoint: > + maxItems: 1 > + > + required: > + - reg > + - remote-endpoint > + > + additionalProperties: false > + > + endpoint@1: > + type: object > + description: Endpoint connected to CSI21. > + > + properties: > + reg: > + const: 1 > + > + remote-endpoint: > + maxItems: 1 > + > + required: > + - reg > + - remote-endpoint > + > + additionalProperties: false > + > + endpoint@2: > + type: object > + description: Endpoint connected to CSI40. > + > + properties: > + reg: > + const: 2 > + > + remote-endpoint: > + maxItems: 1 > + > + required: > + - reg > + - remote-endpoint > + > + additionalProperties: false > + > + endpoint@3: > + type: object > + description: Endpoint connected to CSI41. > + > + properties: > + reg: > + const: 3 > + > + remote-endpoint: > + maxItems: 1 > + > + required: > + - reg > + - remote-endpoint Here and in the other endpoints of port@1, do you need required properties ? As I read in writing-schema.rts: "Unless noted otherwise, all properties are required." > + > + additionalProperties: false > + > + additionalProperties: false > + > +required: > + - compatible > + - reg > + - interrupts > + - clocks > + - power-domains > + - resets > + > +if: > + properties: > + compatible: > + contains: > + anyOf: > + - const: renesas,vin-r8a7778 > + - const: renesas,vin-r8a7779 > + - const: renesas,rcar-gen2-vin > +then: > + required: > + - port > +else: > + required: > + - renesas,id > + - ports > + > +additionalProperties: false > + > +examples: > + # Device node example for Gen2 platform > + - | > + #include <dt-bindings/clock/r8a7790-cpg-mssr.h> > + #include <dt-bindings/interrupt-controller/arm-gic.h> > + #include <dt-bindings/power/r8a7790-sysc.h> > + > + vin1: vin@e6ef1000 { > + compatible = "renesas,vin-r8a7790", > + "renesas,rcar-gen2-vin"; > + reg = <0 0xe6ef1000 0 0x1000>; > + interrupts = <GIC_SPI 189 IRQ_TYPE_LEVEL_HIGH>; > + clocks = <&cpg CPG_MOD 810>; > + power-domains = <&sysc R8A7790_PD_ALWAYS_ON>; > + resets = <&cpg 810>; > + > + port { > + vin1ep0: endpoint { > + remote-endpoint = <&adv7180>; > + bus-width = <8>; > + }; > + }; > + }; > + > + # Device node example for Gen3 platform with only CSI-2 > + - | > + #include <dt-bindings/clock/r8a7795-cpg-mssr.h> > + #include <dt-bindings/interrupt-controller/arm-gic.h> > + #include <dt-bindings/power/r8a7795-sysc.h> > + > + vin0: video@e6ef0000 { > + compatible = "renesas,vin-r8a7795"; > + reg = <0 0xe6ef0000 0 0x1000>; > + interrupts = <GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>; > + clocks = <&cpg CPG_MOD 811>; > + power-domains = <&sysc R8A7795_PD_ALWAYS_ON>; > + resets = <&cpg 811>; > + renesas,id = <0>; > + > + ports { > + #address-cells = <1>; > + #size-cells = <0>; > + > + port@1 { > + #address-cells = <1>; > + #size-cells = <0>; > + > + reg = <1>; > + > + vin0csi20: endpoint@0 { > + reg = <0>; > + remote-endpoint= <&csi20vin0>; > + }; > + vin0csi40: endpoint@2 { > + reg = <2>; > + remote-endpoint= <&csi40vin0>; > + }; > + }; > + }; > + }; > + > + # Device node example for Gen3 platform with CSI-2 and parallel > + - | > + #include <dt-bindings/clock/r8a77970-cpg-mssr.h> > + #include <dt-bindings/interrupt-controller/arm-gic.h> > + #include <dt-bindings/power/r8a77970-sysc.h> > + > + vin2: video@e6ef2000 { > + compatible = "renesas,vin-r8a77970"; > + reg = <0 0xe6ef2000 0 0x1000>; > + interrupts = <GIC_SPI 190 IRQ_TYPE_LEVEL_HIGH>; > + clocks = <&cpg CPG_MOD 809>; > + power-domains = <&sysc R8A77970_PD_ALWAYS_ON>; > + resets = <&cpg 809>; > + renesas,id = <2>; > + > + ports { > + #address-cells = <1>; > + #size-cells = <0>; > + > + port@0 { > + reg = <0>; > + > + vin2_in: endpoint { > + remote-endpoint = <&adv7612_out>; > + hsync-active = <0>; > + vsync-active = <0>; > + }; > + }; > + > + port@1 { > + #address-cells = <1>; > + #size-cells = <0>; > + > + reg = <1>; > + > + vin2csi40: endpoint@2 { > + reg = <2>; > + remote-endpoint = <&csi40vin2>; > + }; > + }; > + }; > + }; I can't really comment on the json-schema most complex parts, but from a device point of view, minors apart, it seems sane to me. Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Thanks j > -- > 2.23.0 >
On Tue, Nov 12, 2019 at 10:42:31AM +0100, Jacopo Mondi wrote: > Hi Niklas, > thanks for the patch > > On Fri, Nov 08, 2019 at 03:16:09AM +0100, Niklas Söderlund wrote: > > Convert Renesas R-Car VIN bindings documentation to json-schema. > > > > As the examples in the bindings now can be tested add a new one which > > describes how the both a parallel and a CSI-2 source can be connected on > > Gen3 SoCs. > > > > Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> > > --- > > .../devicetree/bindings/media/renesas,vin.txt | 217 ---------- > > .../bindings/media/renesas,vin.yaml | 409 ++++++++++++++++++ > > 2 files changed, 409 insertions(+), 217 deletions(-) > > delete mode 100644 Documentation/devicetree/bindings/media/renesas,vin.txt > > create mode 100644 Documentation/devicetree/bindings/media/renesas,vin.yaml > > diff --git a/Documentation/devicetree/bindings/media/renesas,vin.yaml b/Documentation/devicetree/bindings/media/renesas,vin.yaml > > new file mode 100644 > > index 0000000000000000..be261d9a98d62dcd > > --- /dev/null > > +++ b/Documentation/devicetree/bindings/media/renesas,vin.yaml > > @@ -0,0 +1,409 @@ > > +# SPDX-License-Identifier: GPL-2.0 > > I think you should use GPL-2.0-only > > > +# Copyright (C) 2019 Renesas Electronics Corp. > > +%YAML 1.2 > > +--- > > +$id: http://devicetree.org/schemas/media/renesas,vin.yaml# > > +$schema: http://devicetree.org/meta-schemas/core.yaml# > > + > > +title: Renesas R-Car Video Input (VIN) > > + > > +maintainers: > > + - Niklas Söderlund <niklas.soderlund@ragnatech.se> > > I also put the mailing lists here, not sure if that's desired. Not really. A Renesas list is fine, but no need for linux-media as the file path will pick that up. > > + > > +description: |- > > + The R-Car Video Input (VIN) device provides video input capabilities for the > > + Renesas R-Car family of devices. > > + > > + Each VIN instance has a single parallel input that supports RGB and YUV video, > > + with both external synchronization and BT.656 synchronization for the latter. > > + Depending on the instance the VIN input is connected to external SoC pins, or > > + on Gen3 and RZ/G2 platforms to a CSI-2 receiver. > > + > > +properties: > > + compatible: > > + oneOf: > > + - items: > > + - enum: > > + - renesas,vin-r8a7743 # RZ/G1M > > + - renesas,vin-r8a7744 # RZ/G1N > > + - renesas,vin-r8a7745 # RZ/G1E > > + - renesas,vin-r8a77470 # RZ/G1C > > + - renesas,vin-r8a7790 # R-Car H2 > > + - renesas,vin-r8a7791 # R-Car M2-W > > + - renesas,vin-r8a7792 # R-Car V2H > > + - renesas,vin-r8a7793 # R-Car M2-N > > + - renesas,vin-r8a7794 # R-Car E2 > > + - const: renesas,rcar-gen2-vin # Generic R-Car Gen2 or RZ/G1 > > + > > + - items: > > + - enum: > > + - renesas,vin-r8a774a1 # RZ/G2M > > + - renesas,vin-r8a774b1 # RZ/G2N > > + - renesas,vin-r8a774c0 # RZ/G2E > > + - renesas,vin-r8a7778 # R-Car M1 > > + - renesas,vin-r8a7779 # R-Car H1 > > + - renesas,vin-r8a7795 # R-Car H3 > > + - renesas,vin-r8a7796 # R-Car M3-W > > + - renesas,vin-r8a77965 # R-Car M3-N > > + - renesas,vin-r8a77970 # R-Car V3M > > + - renesas,vin-r8a77980 # R-Car V3H > > + - renesas,vin-r8a77990 # R-Car E3 > > + - renesas,vin-r8a77995 # R-Car D3 > > + > > + reg: > > + maxItems: 1 > > + > > + interrupts: > > + maxItems: 1 > > + > > + clocks: > > + maxItems: 1 > > + > > + power-domains: > > + maxItems: 1 > > + > > + resets: > > + maxItems: 1 > > + > > + #The per-board settings for Gen2 and RZ/G1 platforms: > > + port: > > + type: object > > + description: |- > > + A node containing a parallel input with a singel endpoint definitions as > > + documented in > > + Documentation/devicetree/bindings/media/video-interfaces.txt > > + > > + properties: > > + reg: > > + const: 1 > > Do you need reg for the single 'port' ? > > > + > > + endpoint: > > + type: object > > + > > + properties: > > + hsync-active: > > + description: |- > > + Default is active high. If both HSYNC and VSYNC polarities are not > > + specified, embedded synchronization is selected. > > + enum: [ 0, 1 ] > > + > > + vsync-active: > > + description: |- > > + Default is active high. If both HSYNC and VSYNC polarities are not > > + specified, embedded synchronization is selected. > > + enum: [ 0, 1 ] > > + > > + field-active-even: > > + description: Default is active high. > > + enum: [ 0, 1 ] > > + > > + bus-width: > > + enum: [ 8, 10, 12, 16, 24, 32 ] > > + > > + data-shift: > > + enum: [ 0, 8 ] > > + > > + data-enable-active: > > + description: Polarity of CLKENB signal, default is active high. > > + enum: [ 0, 1 ] > > + > > + pclk-sample: > > + enum: [ 0, 1 ] > > + > > + data-active: > > + enum: [ 0, 1 ] > > + > > + remote-endpoint: > > + maxItems: 1 > > + > > + required: > > + - remote-endpoint > > + > > + additionalProperties: false > > + > > + additionalProperties: false > > + > > + #The per-board settings for Gen3 and RZ/G2 platforms: > > + renesas,id: > > + description: VIN channel number > > + allOf: > > + - $ref: /schemas/types.yaml#/definitions/uint32 > > + - enum: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ] > > + > > + ports: > > + type: object > > + description: |- > > + A node containing input nodes with endpoint definitions as documented in > > + Documentation/devicetree/bindings/media/video-interfaces.txt > > + > > + properties: > > + port@0: > > + type: object > > + description: |- > > + Input port node, single endpoint describing a parallel input source. > > + > > + properties: > > + reg: > > + const: 0 > > + > > + endpoint: > > + type: object > > + > > + properties: > > + hsync-active: > > + description: |- Drop the literal block (|-). > > + Default is active high. If both HSYNC and VSYNC polarities are not > > + specified, embedded synchronization is selected. Express defaults as a schema: default: 1 > > + enum: [ 0, 1 ] Unless a subset of possible values apply, assume this is defined elsewhere (hopefully someone converts video-interfaces.txt to schema soon). > > + > > + vsync-active: > > + description: |- > > + Default is active high. If both HSYNC and VSYNC polarities are not > > + specified, embedded synchronization is selected. > > + enum: [ 0, 1 ] > > + > > + field-active-even: > > + description: Default is active high. > > + enum: [ 0, 1 ] > > + > > + bus-width: > > + enum: [ 8, 10, 12, 16, 24, 32 ] > > + > > + data-shift: > > + enum: [ 0, 8 ] > > Why are those two not described ? I feel like or you either refrain > from describing all poperties and point the reader to > video-interfaces.txt, or you describe all of them, at least to provide > an indication of the default if the property is not specified. > > > + > > + data-enable-active: > > + description: Polarity of CLKENB signal, default is active high. > > + enum: [ 0, 1 ] > > + > > + pclk-sample: > > + enum: [ 0, 1 ] > > + > > + data-active: > > + enum: [ 0, 1 ] > > + > > + remote-endpoint: > > + maxItems: 1 Just 'true' is enough here. Assume it's defined as a phandle elsewhere. > > + > > + required: > > + - remote-endpoint > > + > > + additionalProperties: false > > + > > + additionalProperties: false > > + > > + port@1: > > + type: object > > + description: |- > > + Input port node, multiple endpoints describing all the R-Car CSI-2 > > + modules connected the VIN. > > + > > + properties: > > + '#address-cells': > > + const: 1 > > + > > + '#size-cells': > > + const: 0 > > + > > + reg: > > + const: 1 > > + > > + endpoint@0: > > + type: object > > + description: Endpoint connected to CSI20. > > + > > + properties: > > + reg: > > + const: 0 > > + > > + remote-endpoint: > > + maxItems: 1 > > + > > + required: > > + - reg > > + - remote-endpoint > > + > > + additionalProperties: false > > + > > + endpoint@1: > > + type: object > > + description: Endpoint connected to CSI21. > > + > > + properties: > > + reg: > > + const: 1 > > + > > + remote-endpoint: > > + maxItems: 1 > > + > > + required: > > + - reg > > + - remote-endpoint > > + > > + additionalProperties: false > > + > > + endpoint@2: > > + type: object > > + description: Endpoint connected to CSI40. > > + > > + properties: > > + reg: > > + const: 2 > > + > > + remote-endpoint: > > + maxItems: 1 > > + > > + required: > > + - reg > > + - remote-endpoint > > + > > + additionalProperties: false > > + > > + endpoint@3: > > + type: object > > + description: Endpoint connected to CSI41. > > + > > + properties: > > + reg: > > + const: 3 > > + > > + remote-endpoint: > > + maxItems: 1 > > + > > + required: > > + - reg > > + - remote-endpoint > > Here and in the other endpoints of port@1, do you need required > properties ? As I read in writing-schema.rts: > "Unless noted otherwise, all properties are required." That is referring to schema properties ($id, properties, title, etc.), not binding properties. That's also just the top-level properties/keywords. If that's confusing, try reading the meta-schemas which has schema keywords as both properties and schema. > > + > > + additionalProperties: false > > + > > + additionalProperties: false > > + > > +required: > > + - compatible > > + - reg > > + - interrupts > > + - clocks > > + - power-domains > > + - resets > > + > > +if: > > + properties: > > + compatible: > > + contains: > > + anyOf: > > + - const: renesas,vin-r8a7778 > > + - const: renesas,vin-r8a7779 > > + - const: renesas,rcar-gen2-vin > > +then: > > + required: > > + - port > > +else: > > + required: > > + - renesas,id > > + - ports > > + > > +additionalProperties: false > > + > > +examples: > > + # Device node example for Gen2 platform > > + - | > > + #include <dt-bindings/clock/r8a7790-cpg-mssr.h> > > + #include <dt-bindings/interrupt-controller/arm-gic.h> > > + #include <dt-bindings/power/r8a7790-sysc.h> > > + > > + vin1: vin@e6ef1000 { > > + compatible = "renesas,vin-r8a7790", > > + "renesas,rcar-gen2-vin"; > > + reg = <0 0xe6ef1000 0 0x1000>; > > + interrupts = <GIC_SPI 189 IRQ_TYPE_LEVEL_HIGH>; > > + clocks = <&cpg CPG_MOD 810>; > > + power-domains = <&sysc R8A7790_PD_ALWAYS_ON>; > > + resets = <&cpg 810>; > > + > > + port { > > + vin1ep0: endpoint { > > + remote-endpoint = <&adv7180>; > > + bus-width = <8>; > > + }; > > + }; > > + }; > > + > > + # Device node example for Gen3 platform with only CSI-2 > > + - | > > + #include <dt-bindings/clock/r8a7795-cpg-mssr.h> > > + #include <dt-bindings/interrupt-controller/arm-gic.h> > > + #include <dt-bindings/power/r8a7795-sysc.h> > > + > > + vin0: video@e6ef0000 { > > + compatible = "renesas,vin-r8a7795"; > > + reg = <0 0xe6ef0000 0 0x1000>; > > + interrupts = <GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>; > > + clocks = <&cpg CPG_MOD 811>; > > + power-domains = <&sysc R8A7795_PD_ALWAYS_ON>; > > + resets = <&cpg 811>; > > + renesas,id = <0>; > > + > > + ports { > > + #address-cells = <1>; > > + #size-cells = <0>; > > + > > + port@1 { > > + #address-cells = <1>; > > + #size-cells = <0>; > > + > > + reg = <1>; > > + > > + vin0csi20: endpoint@0 { > > + reg = <0>; > > + remote-endpoint= <&csi20vin0>; > > + }; > > + vin0csi40: endpoint@2 { > > + reg = <2>; > > + remote-endpoint= <&csi40vin0>; > > + }; > > + }; > > + }; > > + }; > > + > > + # Device node example for Gen3 platform with CSI-2 and parallel > > + - | > > + #include <dt-bindings/clock/r8a77970-cpg-mssr.h> > > + #include <dt-bindings/interrupt-controller/arm-gic.h> > > + #include <dt-bindings/power/r8a77970-sysc.h> > > + > > + vin2: video@e6ef2000 { > > + compatible = "renesas,vin-r8a77970"; > > + reg = <0 0xe6ef2000 0 0x1000>; > > + interrupts = <GIC_SPI 190 IRQ_TYPE_LEVEL_HIGH>; > > + clocks = <&cpg CPG_MOD 809>; > > + power-domains = <&sysc R8A77970_PD_ALWAYS_ON>; > > + resets = <&cpg 809>; > > + renesas,id = <2>; > > + > > + ports { > > + #address-cells = <1>; > > + #size-cells = <0>; > > + > > + port@0 { > > + reg = <0>; > > + > > + vin2_in: endpoint { > > + remote-endpoint = <&adv7612_out>; > > + hsync-active = <0>; > > + vsync-active = <0>; > > + }; > > + }; > > + > > + port@1 { > > + #address-cells = <1>; > > + #size-cells = <0>; > > + > > + reg = <1>; > > + > > + vin2csi40: endpoint@2 { > > + reg = <2>; > > + remote-endpoint = <&csi40vin2>; > > + }; > > + }; > > + }; > > + }; > > I can't really comment on the json-schema most complex parts, but from > a device point of view, minors apart, it seems sane to me. > > Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> > > Thanks > j > > > -- > > 2.23.0 > >
diff --git a/Documentation/devicetree/bindings/media/renesas,vin.txt b/Documentation/devicetree/bindings/media/renesas,vin.txt deleted file mode 100644 index 5eefd62ac5c5b9fd..0000000000000000 --- a/Documentation/devicetree/bindings/media/renesas,vin.txt +++ /dev/null @@ -1,217 +0,0 @@ -Renesas R-Car Video Input driver (rcar_vin) -------------------------------------------- - -The rcar_vin device provides video input capabilities for the Renesas R-Car -family of devices. - -Each VIN instance has a single parallel input that supports RGB and YUV video, -with both external synchronization and BT.656 synchronization for the latter. -Depending on the instance the VIN input is connected to external SoC pins, or -on Gen3 and RZ/G2 platforms to a CSI-2 receiver. - - - compatible: Must be one or more of the following - - "renesas,vin-r8a7743" for the R8A7743 device - - "renesas,vin-r8a7744" for the R8A7744 device - - "renesas,vin-r8a7745" for the R8A7745 device - - "renesas,vin-r8a77470" for the R8A77470 device - - "renesas,vin-r8a774a1" for the R8A774A1 device - - "renesas,vin-r8a774b1" for the R8A774B1 device - - "renesas,vin-r8a774c0" for the R8A774C0 device - - "renesas,vin-r8a7778" for the R8A7778 device - - "renesas,vin-r8a7779" for the R8A7779 device - - "renesas,vin-r8a7790" for the R8A7790 device - - "renesas,vin-r8a7791" for the R8A7791 device - - "renesas,vin-r8a7792" for the R8A7792 device - - "renesas,vin-r8a7793" for the R8A7793 device - - "renesas,vin-r8a7794" for the R8A7794 device - - "renesas,vin-r8a7795" for the R8A7795 device - - "renesas,vin-r8a7796" for the R8A7796 device - - "renesas,vin-r8a77965" for the R8A77965 device - - "renesas,vin-r8a77970" for the R8A77970 device - - "renesas,vin-r8a77980" for the R8A77980 device - - "renesas,vin-r8a77990" for the R8A77990 device - - "renesas,vin-r8a77995" for the R8A77995 device - - "renesas,rcar-gen2-vin" for a generic R-Car Gen2 or RZ/G1 compatible - device. - - When compatible with the generic version nodes must list the - SoC-specific version corresponding to the platform first - followed by the generic version. - - - reg: the register base and size for the device registers - - interrupts: the interrupt for the device - - clocks: Reference to the parent clock - -The per-board settings for Gen2 and RZ/G1 platforms: - -- port - sub-node describing a single endpoint connected to the VIN - from external SoC pins as described in video-interfaces.txt[1]. - Only the first one will be considered as each vin interface has one - input port. - - - Optional properties for endpoint nodes: - - hsync-active: see [1] for description. Default is active high. - - vsync-active: see [1] for description. Default is active high. - If both HSYNC and VSYNC polarities are not specified, embedded - synchronization is selected. - - field-active-even: see [1] for description. Default is active high. - - bus-width: see [1] for description. The selected bus width depends on - the SoC type and selected input image format. - Valid values are: 8, 10, 12, 16, 24 and 32. - - data-shift: see [1] for description. Valid values are 0 and 8. - - data-enable-active: polarity of CLKENB signal, see [1] for - description. Default is active high. - -The per-board settings for Gen3 and RZ/G2 platforms: - -Gen3 and RZ/G2 platforms can support both a single connected parallel input -source from external SoC pins (port@0) and/or multiple parallel input sources -from local SoC CSI-2 receivers (port@1) depending on SoC. - -- renesas,id - ID number of the VIN, VINx in the documentation. -- ports - - port@0 - sub-node describing a single endpoint connected to the VIN - from external SoC pins as described in video-interfaces.txt[1]. - Describing more than one endpoint in port@0 is invalid. Only VIN - instances that are connected to external pins should have port@0. - - Endpoint nodes of port@0 support the optional properties listed in - the Gen2 per-board settings description. - - - port@1 - sub-nodes describing one or more endpoints connected to - the VIN from local SoC CSI-2 receivers. The endpoint numbers must - use the following schema. - - - endpoint@0 - sub-node describing the endpoint connected to CSI20 - - endpoint@1 - sub-node describing the endpoint connected to CSI21 - - endpoint@2 - sub-node describing the endpoint connected to CSI40 - - endpoint@3 - sub-node describing the endpoint connected to CSI41 - - Endpoint nodes of port@1 do not support any optional endpoint property. - -Device node example for Gen2 platforms --------------------------------------- - - aliases { - vin0 = &vin0; - }; - - vin0: vin@e6ef0000 { - compatible = "renesas,vin-r8a7790", "renesas,rcar-gen2-vin"; - clocks = <&mstp8_clks R8A7790_CLK_VIN0>; - reg = <0 0xe6ef0000 0 0x1000>; - interrupts = <0 188 IRQ_TYPE_LEVEL_HIGH>; - status = "disabled"; - }; - -Board setup example for Gen2 platforms (vin1 composite video input) -------------------------------------------------------------------- - -&i2c2 { - status = "okay"; - pinctrl-0 = <&i2c2_pins>; - pinctrl-names = "default"; - - adv7180@20 { - compatible = "adi,adv7180"; - reg = <0x20>; - remote = <&vin1>; - - port { - adv7180: endpoint { - bus-width = <8>; - remote-endpoint = <&vin1ep0>; - }; - }; - }; -}; - -/* composite video input */ -&vin1 { - pinctrl-0 = <&vin1_pins>; - pinctrl-names = "default"; - - status = "okay"; - - port { - vin1ep0: endpoint { - remote-endpoint = <&adv7180>; - bus-width = <8>; - }; - }; -}; - -Device node example for Gen3 platforms --------------------------------------- - - vin0: video@e6ef0000 { - compatible = "renesas,vin-r8a7795"; - reg = <0 0xe6ef0000 0 0x1000>; - interrupts = <GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>; - clocks = <&cpg CPG_MOD 811>; - power-domains = <&sysc R8A7795_PD_ALWAYS_ON>; - resets = <&cpg 811>; - renesas,id = <0>; - - ports { - #address-cells = <1>; - #size-cells = <0>; - - port@1 { - #address-cells = <1>; - #size-cells = <0>; - - reg = <1>; - - vin0csi20: endpoint@0 { - reg = <0>; - remote-endpoint= <&csi20vin0>; - }; - vin0csi21: endpoint@1 { - reg = <1>; - remote-endpoint= <&csi21vin0>; - }; - vin0csi40: endpoint@2 { - reg = <2>; - remote-endpoint= <&csi40vin0>; - }; - }; - }; - }; - - csi20: csi2@fea80000 { - compatible = "renesas,r8a7795-csi2"; - reg = <0 0xfea80000 0 0x10000>; - interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; - clocks = <&cpg CPG_MOD 714>; - power-domains = <&sysc R8A7795_PD_ALWAYS_ON>; - resets = <&cpg 714>; - - ports { - #address-cells = <1>; - #size-cells = <0>; - - port@0 { - reg = <0>; - csi20_in: endpoint { - clock-lanes = <0>; - data-lanes = <1>; - remote-endpoint = <&adv7482_txb>; - }; - }; - - port@1 { - #address-cells = <1>; - #size-cells = <0>; - - reg = <1>; - - csi20vin0: endpoint@0 { - reg = <0>; - remote-endpoint = <&vin0csi20>; - }; - }; - }; - }; - -[1] video-interfaces.txt common video media interface diff --git a/Documentation/devicetree/bindings/media/renesas,vin.yaml b/Documentation/devicetree/bindings/media/renesas,vin.yaml new file mode 100644 index 0000000000000000..be261d9a98d62dcd --- /dev/null +++ b/Documentation/devicetree/bindings/media/renesas,vin.yaml @@ -0,0 +1,409 @@ +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2019 Renesas Electronics Corp. +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/media/renesas,vin.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Renesas R-Car Video Input (VIN) + +maintainers: + - Niklas Söderlund <niklas.soderlund@ragnatech.se> + +description: |- + The R-Car Video Input (VIN) device provides video input capabilities for the + Renesas R-Car family of devices. + + Each VIN instance has a single parallel input that supports RGB and YUV video, + with both external synchronization and BT.656 synchronization for the latter. + Depending on the instance the VIN input is connected to external SoC pins, or + on Gen3 and RZ/G2 platforms to a CSI-2 receiver. + +properties: + compatible: + oneOf: + - items: + - enum: + - renesas,vin-r8a7743 # RZ/G1M + - renesas,vin-r8a7744 # RZ/G1N + - renesas,vin-r8a7745 # RZ/G1E + - renesas,vin-r8a77470 # RZ/G1C + - renesas,vin-r8a7790 # R-Car H2 + - renesas,vin-r8a7791 # R-Car M2-W + - renesas,vin-r8a7792 # R-Car V2H + - renesas,vin-r8a7793 # R-Car M2-N + - renesas,vin-r8a7794 # R-Car E2 + - const: renesas,rcar-gen2-vin # Generic R-Car Gen2 or RZ/G1 + + - items: + - enum: + - renesas,vin-r8a774a1 # RZ/G2M + - renesas,vin-r8a774b1 # RZ/G2N + - renesas,vin-r8a774c0 # RZ/G2E + - renesas,vin-r8a7778 # R-Car M1 + - renesas,vin-r8a7779 # R-Car H1 + - renesas,vin-r8a7795 # R-Car H3 + - renesas,vin-r8a7796 # R-Car M3-W + - renesas,vin-r8a77965 # R-Car M3-N + - renesas,vin-r8a77970 # R-Car V3M + - renesas,vin-r8a77980 # R-Car V3H + - renesas,vin-r8a77990 # R-Car E3 + - renesas,vin-r8a77995 # R-Car D3 + + reg: + maxItems: 1 + + interrupts: + maxItems: 1 + + clocks: + maxItems: 1 + + power-domains: + maxItems: 1 + + resets: + maxItems: 1 + + #The per-board settings for Gen2 and RZ/G1 platforms: + port: + type: object + description: |- + A node containing a parallel input with a singel endpoint definitions as + documented in + Documentation/devicetree/bindings/media/video-interfaces.txt + + properties: + reg: + const: 1 + + endpoint: + type: object + + properties: + hsync-active: + description: |- + Default is active high. If both HSYNC and VSYNC polarities are not + specified, embedded synchronization is selected. + enum: [ 0, 1 ] + + vsync-active: + description: |- + Default is active high. If both HSYNC and VSYNC polarities are not + specified, embedded synchronization is selected. + enum: [ 0, 1 ] + + field-active-even: + description: Default is active high. + enum: [ 0, 1 ] + + bus-width: + enum: [ 8, 10, 12, 16, 24, 32 ] + + data-shift: + enum: [ 0, 8 ] + + data-enable-active: + description: Polarity of CLKENB signal, default is active high. + enum: [ 0, 1 ] + + pclk-sample: + enum: [ 0, 1 ] + + data-active: + enum: [ 0, 1 ] + + remote-endpoint: + maxItems: 1 + + required: + - remote-endpoint + + additionalProperties: false + + additionalProperties: false + + #The per-board settings for Gen3 and RZ/G2 platforms: + renesas,id: + description: VIN channel number + allOf: + - $ref: /schemas/types.yaml#/definitions/uint32 + - enum: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ] + + ports: + type: object + description: |- + A node containing input nodes with endpoint definitions as documented in + Documentation/devicetree/bindings/media/video-interfaces.txt + + properties: + port@0: + type: object + description: |- + Input port node, single endpoint describing a parallel input source. + + properties: + reg: + const: 0 + + endpoint: + type: object + + properties: + hsync-active: + description: |- + Default is active high. If both HSYNC and VSYNC polarities are not + specified, embedded synchronization is selected. + enum: [ 0, 1 ] + + vsync-active: + description: |- + Default is active high. If both HSYNC and VSYNC polarities are not + specified, embedded synchronization is selected. + enum: [ 0, 1 ] + + field-active-even: + description: Default is active high. + enum: [ 0, 1 ] + + bus-width: + enum: [ 8, 10, 12, 16, 24, 32 ] + + data-shift: + enum: [ 0, 8 ] + + data-enable-active: + description: Polarity of CLKENB signal, default is active high. + enum: [ 0, 1 ] + + pclk-sample: + enum: [ 0, 1 ] + + data-active: + enum: [ 0, 1 ] + + remote-endpoint: + maxItems: 1 + + required: + - remote-endpoint + + additionalProperties: false + + additionalProperties: false + + port@1: + type: object + description: |- + Input port node, multiple endpoints describing all the R-Car CSI-2 + modules connected the VIN. + + properties: + '#address-cells': + const: 1 + + '#size-cells': + const: 0 + + reg: + const: 1 + + endpoint@0: + type: object + description: Endpoint connected to CSI20. + + properties: + reg: + const: 0 + + remote-endpoint: + maxItems: 1 + + required: + - reg + - remote-endpoint + + additionalProperties: false + + endpoint@1: + type: object + description: Endpoint connected to CSI21. + + properties: + reg: + const: 1 + + remote-endpoint: + maxItems: 1 + + required: + - reg + - remote-endpoint + + additionalProperties: false + + endpoint@2: + type: object + description: Endpoint connected to CSI40. + + properties: + reg: + const: 2 + + remote-endpoint: + maxItems: 1 + + required: + - reg + - remote-endpoint + + additionalProperties: false + + endpoint@3: + type: object + description: Endpoint connected to CSI41. + + properties: + reg: + const: 3 + + remote-endpoint: + maxItems: 1 + + required: + - reg + - remote-endpoint + + additionalProperties: false + + additionalProperties: false + +required: + - compatible + - reg + - interrupts + - clocks + - power-domains + - resets + +if: + properties: + compatible: + contains: + anyOf: + - const: renesas,vin-r8a7778 + - const: renesas,vin-r8a7779 + - const: renesas,rcar-gen2-vin +then: + required: + - port +else: + required: + - renesas,id + - ports + +additionalProperties: false + +examples: + # Device node example for Gen2 platform + - | + #include <dt-bindings/clock/r8a7790-cpg-mssr.h> + #include <dt-bindings/interrupt-controller/arm-gic.h> + #include <dt-bindings/power/r8a7790-sysc.h> + + vin1: vin@e6ef1000 { + compatible = "renesas,vin-r8a7790", + "renesas,rcar-gen2-vin"; + reg = <0 0xe6ef1000 0 0x1000>; + interrupts = <GIC_SPI 189 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&cpg CPG_MOD 810>; + power-domains = <&sysc R8A7790_PD_ALWAYS_ON>; + resets = <&cpg 810>; + + port { + vin1ep0: endpoint { + remote-endpoint = <&adv7180>; + bus-width = <8>; + }; + }; + }; + + # Device node example for Gen3 platform with only CSI-2 + - | + #include <dt-bindings/clock/r8a7795-cpg-mssr.h> + #include <dt-bindings/interrupt-controller/arm-gic.h> + #include <dt-bindings/power/r8a7795-sysc.h> + + vin0: video@e6ef0000 { + compatible = "renesas,vin-r8a7795"; + reg = <0 0xe6ef0000 0 0x1000>; + interrupts = <GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&cpg CPG_MOD 811>; + power-domains = <&sysc R8A7795_PD_ALWAYS_ON>; + resets = <&cpg 811>; + renesas,id = <0>; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@1 { + #address-cells = <1>; + #size-cells = <0>; + + reg = <1>; + + vin0csi20: endpoint@0 { + reg = <0>; + remote-endpoint= <&csi20vin0>; + }; + vin0csi40: endpoint@2 { + reg = <2>; + remote-endpoint= <&csi40vin0>; + }; + }; + }; + }; + + # Device node example for Gen3 platform with CSI-2 and parallel + - | + #include <dt-bindings/clock/r8a77970-cpg-mssr.h> + #include <dt-bindings/interrupt-controller/arm-gic.h> + #include <dt-bindings/power/r8a77970-sysc.h> + + vin2: video@e6ef2000 { + compatible = "renesas,vin-r8a77970"; + reg = <0 0xe6ef2000 0 0x1000>; + interrupts = <GIC_SPI 190 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&cpg CPG_MOD 809>; + power-domains = <&sysc R8A77970_PD_ALWAYS_ON>; + resets = <&cpg 809>; + renesas,id = <2>; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + + vin2_in: endpoint { + remote-endpoint = <&adv7612_out>; + hsync-active = <0>; + vsync-active = <0>; + }; + }; + + port@1 { + #address-cells = <1>; + #size-cells = <0>; + + reg = <1>; + + vin2csi40: endpoint@2 { + reg = <2>; + remote-endpoint = <&csi40vin2>; + }; + }; + }; + };
Convert Renesas R-Car VIN bindings documentation to json-schema. As the examples in the bindings now can be tested add a new one which describes how the both a parallel and a CSI-2 source can be connected on Gen3 SoCs. Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> --- .../devicetree/bindings/media/renesas,vin.txt | 217 ---------- .../bindings/media/renesas,vin.yaml | 409 ++++++++++++++++++ 2 files changed, 409 insertions(+), 217 deletions(-) delete mode 100644 Documentation/devicetree/bindings/media/renesas,vin.txt create mode 100644 Documentation/devicetree/bindings/media/renesas,vin.yaml