162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause 262306a36Sopenharmony_ci%YAML 1.2 362306a36Sopenharmony_ci--- 462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/media/renesas,drif.yaml# 562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml# 662306a36Sopenharmony_ci 762306a36Sopenharmony_cititle: Renesas R-Car Gen3 Digital Radio Interface Controller (DRIF) 862306a36Sopenharmony_ci 962306a36Sopenharmony_cimaintainers: 1062306a36Sopenharmony_ci - Ramesh Shanmugasundaram <rashanmu@gmail.com> 1162306a36Sopenharmony_ci - Fabrizio Castro <fabrizio.castro.jz@renesas.com> 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_cidescription: | 1462306a36Sopenharmony_ci R-Car Gen3 DRIF is a SPI like receive only slave device. A general 1562306a36Sopenharmony_ci representation of DRIF interfacing with a master device is shown below. 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci +---------------------+ +---------------------+ 1862306a36Sopenharmony_ci | |-----SCK------->|CLK | 1962306a36Sopenharmony_ci | Master |-----SS-------->|SYNC DRIFn (slave) | 2062306a36Sopenharmony_ci | |-----SD0------->|D0 | 2162306a36Sopenharmony_ci | |-----SD1------->|D1 | 2262306a36Sopenharmony_ci +---------------------+ +---------------------+ 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci As per datasheet, each DRIF channel (drifn) is made up of two internal 2562306a36Sopenharmony_ci channels (drifn0 & drifn1). These two internal channels share the common 2662306a36Sopenharmony_ci CLK & SYNC. Each internal channel has its own dedicated resources like 2762306a36Sopenharmony_ci irq, dma channels, address space & clock. This internal split is not 2862306a36Sopenharmony_ci visible to the external master device. 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci The device tree model represents each internal channel as a separate node. 3162306a36Sopenharmony_ci The internal channels sharing the CLK & SYNC are tied together by their 3262306a36Sopenharmony_ci phandles using a property called "renesas,bonding". For the rest of 3362306a36Sopenharmony_ci the documentation, unless explicitly stated, the word channel implies an 3462306a36Sopenharmony_ci internal channel. 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci When both internal channels are enabled they need to be managed together 3762306a36Sopenharmony_ci as one (i.e.) they cannot operate alone as independent devices. Out of the 3862306a36Sopenharmony_ci two, one of them needs to act as a primary device that accepts common 3962306a36Sopenharmony_ci properties of both the internal channels. This channel is identified by a 4062306a36Sopenharmony_ci property called "renesas,primary-bond". 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci To summarize, 4362306a36Sopenharmony_ci * When both the internal channels that are bonded together are enabled, 4462306a36Sopenharmony_ci the zeroth channel is selected as primary-bond. This channels accepts 4562306a36Sopenharmony_ci properties common to all the members of the bond. 4662306a36Sopenharmony_ci * When only one of the bonded channels need to be enabled, the property 4762306a36Sopenharmony_ci "renesas,bonding" or "renesas,primary-bond" will have no effect. That 4862306a36Sopenharmony_ci enabled channel can act alone as any other independent device. 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ciproperties: 5162306a36Sopenharmony_ci compatible: 5262306a36Sopenharmony_ci items: 5362306a36Sopenharmony_ci - enum: 5462306a36Sopenharmony_ci - renesas,r8a7795-drif # R-Car H3 5562306a36Sopenharmony_ci - renesas,r8a7796-drif # R-Car M3-W 5662306a36Sopenharmony_ci - renesas,r8a77965-drif # R-Car M3-N 5762306a36Sopenharmony_ci - renesas,r8a77990-drif # R-Car E3 5862306a36Sopenharmony_ci - const: renesas,rcar-gen3-drif # Generic R-Car Gen3 compatible device 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ci reg: 6162306a36Sopenharmony_ci maxItems: 1 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ci interrupts: 6462306a36Sopenharmony_ci maxItems: 1 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci clocks: 6762306a36Sopenharmony_ci maxItems: 1 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci clock-names: 7062306a36Sopenharmony_ci const: fck 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci resets: 7362306a36Sopenharmony_ci maxItems: 1 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci dmas: 7662306a36Sopenharmony_ci minItems: 1 7762306a36Sopenharmony_ci maxItems: 2 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_ci dma-names: 8062306a36Sopenharmony_ci minItems: 1 8162306a36Sopenharmony_ci items: 8262306a36Sopenharmony_ci - const: rx 8362306a36Sopenharmony_ci - const: rx 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ci renesas,bonding: 8662306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/phandle 8762306a36Sopenharmony_ci description: 8862306a36Sopenharmony_ci The phandle to the other internal channel of DRIF 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_ci power-domains: 9162306a36Sopenharmony_ci maxItems: 1 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_ci renesas,primary-bond: 9462306a36Sopenharmony_ci type: boolean 9562306a36Sopenharmony_ci description: 9662306a36Sopenharmony_ci Indicates that the channel acts as primary among the bonded channels. 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_ci port: 9962306a36Sopenharmony_ci $ref: /schemas/graph.yaml#/$defs/port-base 10062306a36Sopenharmony_ci unevaluatedProperties: false 10162306a36Sopenharmony_ci description: 10262306a36Sopenharmony_ci Child port node corresponding to the data input. The port node must 10362306a36Sopenharmony_ci contain at least one endpoint. 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ci properties: 10662306a36Sopenharmony_ci endpoint: 10762306a36Sopenharmony_ci $ref: /schemas/graph.yaml#/$defs/endpoint-base 10862306a36Sopenharmony_ci unevaluatedProperties: false 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_ci properties: 11162306a36Sopenharmony_ci sync-active: 11262306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/uint32 11362306a36Sopenharmony_ci enum: [0, 1] 11462306a36Sopenharmony_ci description: 11562306a36Sopenharmony_ci Indicates sync signal polarity, 0/1 for low/high respectively. 11662306a36Sopenharmony_ci This property maps to SYNCAC bit in the hardware manual. The 11762306a36Sopenharmony_ci default is 1 (active high). 11862306a36Sopenharmony_ci 11962306a36Sopenharmony_cirequired: 12062306a36Sopenharmony_ci - compatible 12162306a36Sopenharmony_ci - reg 12262306a36Sopenharmony_ci - interrupts 12362306a36Sopenharmony_ci - clocks 12462306a36Sopenharmony_ci - clock-names 12562306a36Sopenharmony_ci - resets 12662306a36Sopenharmony_ci - dmas 12762306a36Sopenharmony_ci - dma-names 12862306a36Sopenharmony_ci - renesas,bonding 12962306a36Sopenharmony_ci - power-domains 13062306a36Sopenharmony_ci 13162306a36Sopenharmony_ciallOf: 13262306a36Sopenharmony_ci - if: 13362306a36Sopenharmony_ci required: 13462306a36Sopenharmony_ci - renesas,primary-bond 13562306a36Sopenharmony_ci then: 13662306a36Sopenharmony_ci required: 13762306a36Sopenharmony_ci - pinctrl-0 13862306a36Sopenharmony_ci - pinctrl-names 13962306a36Sopenharmony_ci - port 14062306a36Sopenharmony_ci 14162306a36Sopenharmony_ci - if: 14262306a36Sopenharmony_ci required: 14362306a36Sopenharmony_ci - port 14462306a36Sopenharmony_ci then: 14562306a36Sopenharmony_ci required: 14662306a36Sopenharmony_ci - pinctrl-0 14762306a36Sopenharmony_ci - pinctrl-names 14862306a36Sopenharmony_ci else: 14962306a36Sopenharmony_ci properties: 15062306a36Sopenharmony_ci pinctrl-0: false 15162306a36Sopenharmony_ci pinctrl-names: false 15262306a36Sopenharmony_ci 15362306a36Sopenharmony_ciadditionalProperties: false 15462306a36Sopenharmony_ci 15562306a36Sopenharmony_ciexamples: 15662306a36Sopenharmony_ci # Example with both internal channels enabled. 15762306a36Sopenharmony_ci # 15862306a36Sopenharmony_ci # When interfacing with a third party tuner device with two data pins as shown 15962306a36Sopenharmony_ci # below. 16062306a36Sopenharmony_ci # 16162306a36Sopenharmony_ci # +---------------------+ +---------------------+ 16262306a36Sopenharmony_ci # | |-----SCK------->|CLK | 16362306a36Sopenharmony_ci # | Master |-----SS-------->|SYNC DRIFn (slave) | 16462306a36Sopenharmony_ci # | |-----SD0------->|D0 | 16562306a36Sopenharmony_ci # | |-----SD1------->|D1 | 16662306a36Sopenharmony_ci # +---------------------+ +---------------------+ 16762306a36Sopenharmony_ci - | 16862306a36Sopenharmony_ci #include <dt-bindings/clock/r8a7795-cpg-mssr.h> 16962306a36Sopenharmony_ci #include <dt-bindings/interrupt-controller/arm-gic.h> 17062306a36Sopenharmony_ci #include <dt-bindings/power/r8a7795-sysc.h> 17162306a36Sopenharmony_ci 17262306a36Sopenharmony_ci soc { 17362306a36Sopenharmony_ci #address-cells = <2>; 17462306a36Sopenharmony_ci #size-cells = <2>; 17562306a36Sopenharmony_ci 17662306a36Sopenharmony_ci drif00: rif@e6f40000 { 17762306a36Sopenharmony_ci compatible = "renesas,r8a7795-drif", 17862306a36Sopenharmony_ci "renesas,rcar-gen3-drif"; 17962306a36Sopenharmony_ci reg = <0 0xe6f40000 0 0x64>; 18062306a36Sopenharmony_ci interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>; 18162306a36Sopenharmony_ci clocks = <&cpg CPG_MOD 515>; 18262306a36Sopenharmony_ci clock-names = "fck"; 18362306a36Sopenharmony_ci dmas = <&dmac1 0x20>, <&dmac2 0x20>; 18462306a36Sopenharmony_ci dma-names = "rx", "rx"; 18562306a36Sopenharmony_ci power-domains = <&sysc R8A7795_PD_ALWAYS_ON>; 18662306a36Sopenharmony_ci renesas,bonding = <&drif01>; 18762306a36Sopenharmony_ci resets = <&cpg 515>; 18862306a36Sopenharmony_ci renesas,primary-bond; 18962306a36Sopenharmony_ci pinctrl-0 = <&drif0_pins>; 19062306a36Sopenharmony_ci pinctrl-names = "default"; 19162306a36Sopenharmony_ci port { 19262306a36Sopenharmony_ci drif0_ep: endpoint { 19362306a36Sopenharmony_ci remote-endpoint = <&tuner_ep>; 19462306a36Sopenharmony_ci }; 19562306a36Sopenharmony_ci }; 19662306a36Sopenharmony_ci }; 19762306a36Sopenharmony_ci 19862306a36Sopenharmony_ci drif01: rif@e6f50000 { 19962306a36Sopenharmony_ci compatible = "renesas,r8a7795-drif", 20062306a36Sopenharmony_ci "renesas,rcar-gen3-drif"; 20162306a36Sopenharmony_ci reg = <0 0xe6f50000 0 0x64>; 20262306a36Sopenharmony_ci interrupts = <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>; 20362306a36Sopenharmony_ci clocks = <&cpg CPG_MOD 514>; 20462306a36Sopenharmony_ci clock-names = "fck"; 20562306a36Sopenharmony_ci dmas = <&dmac1 0x22>, <&dmac2 0x22>; 20662306a36Sopenharmony_ci dma-names = "rx", "rx"; 20762306a36Sopenharmony_ci power-domains = <&sysc R8A7795_PD_ALWAYS_ON>; 20862306a36Sopenharmony_ci renesas,bonding = <&drif00>; 20962306a36Sopenharmony_ci resets = <&cpg 514>; 21062306a36Sopenharmony_ci }; 21162306a36Sopenharmony_ci }; 21262306a36Sopenharmony_ci 21362306a36Sopenharmony_ci # Example with internal channel 1 alone enabled. 21462306a36Sopenharmony_ci # 21562306a36Sopenharmony_ci # When interfacing with a third party tuner device with one data pin as shown 21662306a36Sopenharmony_ci # below. 21762306a36Sopenharmony_ci # 21862306a36Sopenharmony_ci # +---------------------+ +---------------------+ 21962306a36Sopenharmony_ci # | |-----SCK------->|CLK | 22062306a36Sopenharmony_ci # | Master |-----SS-------->|SYNC DRIFn (slave) | 22162306a36Sopenharmony_ci # | | |D0 (unused) | 22262306a36Sopenharmony_ci # | |-----SD-------->|D1 | 22362306a36Sopenharmony_ci # +---------------------+ +---------------------+ 22462306a36Sopenharmony_ci - | 22562306a36Sopenharmony_ci #include <dt-bindings/clock/r8a7795-cpg-mssr.h> 22662306a36Sopenharmony_ci #include <dt-bindings/interrupt-controller/arm-gic.h> 22762306a36Sopenharmony_ci #include <dt-bindings/power/r8a7795-sysc.h> 22862306a36Sopenharmony_ci 22962306a36Sopenharmony_ci soc { 23062306a36Sopenharmony_ci #address-cells = <2>; 23162306a36Sopenharmony_ci #size-cells = <2>; 23262306a36Sopenharmony_ci 23362306a36Sopenharmony_ci drif10: rif@e6f60000 { 23462306a36Sopenharmony_ci compatible = "renesas,r8a7795-drif", 23562306a36Sopenharmony_ci "renesas,rcar-gen3-drif"; 23662306a36Sopenharmony_ci reg = <0 0xe6f60000 0 0x64>; 23762306a36Sopenharmony_ci interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>; 23862306a36Sopenharmony_ci clocks = <&cpg CPG_MOD 513>; 23962306a36Sopenharmony_ci clock-names = "fck"; 24062306a36Sopenharmony_ci dmas = <&dmac1 0x24>, <&dmac2 0x24>; 24162306a36Sopenharmony_ci dma-names = "rx", "rx"; 24262306a36Sopenharmony_ci power-domains = <&sysc R8A7795_PD_ALWAYS_ON>; 24362306a36Sopenharmony_ci resets = <&cpg 513>; 24462306a36Sopenharmony_ci renesas,bonding = <&drif11>; 24562306a36Sopenharmony_ci }; 24662306a36Sopenharmony_ci 24762306a36Sopenharmony_ci drif11: rif@e6f70000 { 24862306a36Sopenharmony_ci compatible = "renesas,r8a7795-drif", 24962306a36Sopenharmony_ci "renesas,rcar-gen3-drif"; 25062306a36Sopenharmony_ci reg = <0 0xe6f70000 0 0x64>; 25162306a36Sopenharmony_ci interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>; 25262306a36Sopenharmony_ci clocks = <&cpg CPG_MOD 512>; 25362306a36Sopenharmony_ci clock-names = "fck"; 25462306a36Sopenharmony_ci dmas = <&dmac1 0x26>, <&dmac2 0x26>; 25562306a36Sopenharmony_ci dma-names = "rx", "rx"; 25662306a36Sopenharmony_ci power-domains = <&sysc R8A7795_PD_ALWAYS_ON>; 25762306a36Sopenharmony_ci resets = <&cpg 512>; 25862306a36Sopenharmony_ci renesas,bonding = <&drif10>; 25962306a36Sopenharmony_ci pinctrl-0 = <&drif1_pins>; 26062306a36Sopenharmony_ci pinctrl-names = "default"; 26162306a36Sopenharmony_ci port { 26262306a36Sopenharmony_ci drif1_ep: endpoint { 26362306a36Sopenharmony_ci remote-endpoint = <&tuner_ep1>; 26462306a36Sopenharmony_ci sync-active = <0>; 26562306a36Sopenharmony_ci }; 26662306a36Sopenharmony_ci }; 26762306a36Sopenharmony_ci }; 26862306a36Sopenharmony_ci }; 26962306a36Sopenharmony_ci... 270