| Renesas R-Car Gen3 Digital Radio Interface controller (DRIF) |
| ------------------------------------------------------------ |
| |
| R-Car Gen3 DRIF is a SPI like receive only slave device. A general |
| representation of DRIF interfacing with a master device is shown below. |
| |
| +---------------------+ +---------------------+ |
| | |-----SCK------->|CLK | |
| | Master |-----SS-------->|SYNC DRIFn (slave) | |
| | |-----SD0------->|D0 | |
| | |-----SD1------->|D1 | |
| +---------------------+ +---------------------+ |
| |
| As per datasheet, each DRIF channel (drifn) is made up of two internal |
| channels (drifn0 & drifn1). These two internal channels share the common |
| CLK & SYNC. Each internal channel has its own dedicated resources like |
| irq, dma channels, address space & clock. This internal split is not |
| visible to the external master device. |
| |
| The device tree model represents each internal channel as a separate node. |
| The internal channels sharing the CLK & SYNC are tied together by their |
| phandles using a property called "renesas,bonding". For the rest of |
| the documentation, unless explicitly stated, the word channel implies an |
| internal channel. |
| |
| When both internal channels are enabled they need to be managed together |
| as one (i.e.) they cannot operate alone as independent devices. Out of the |
| two, one of them needs to act as a primary device that accepts common |
| properties of both the internal channels. This channel is identified by a |
| property called "renesas,primary-bond". |
| |
| To summarize, |
| - When both the internal channels that are bonded together are enabled, |
| the zeroth channel is selected as primary-bond. This channels accepts |
| properties common to all the members of the bond. |
| - When only one of the bonded channels need to be enabled, the property |
| "renesas,bonding" or "renesas,primary-bond" will have no effect. That |
| enabled channel can act alone as any other independent device. |
| |
| Required properties of an internal channel: |
| ------------------------------------------- |
| - compatible: "renesas,r8a7795-drif" if DRIF controller is a part of R8A7795 SoC. |
| "renesas,r8a7796-drif" if DRIF controller is a part of R8A7796 SoC. |
| "renesas,rcar-gen3-drif" for a generic R-Car Gen3 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: offset and length of that channel. |
| - interrupts: associated with that channel. |
| - clocks: phandle and clock specifier of that channel. |
| - clock-names: clock input name string: "fck". |
| - dmas: phandles to the DMA channels. |
| - dma-names: names of the DMA channel: "rx". |
| - renesas,bonding: phandle to the other channel. |
| |
| Optional properties of an internal channel: |
| ------------------------------------------- |
| - power-domains: phandle to the respective power domain. |
| |
| Required properties of an internal channel when: |
| - It is the only enabled channel of the bond (or) |
| - If it acts as primary among enabled bonds |
| -------------------------------------------------------- |
| - pinctrl-0: pin control group to be used for this channel. |
| - pinctrl-names: must be "default". |
| - renesas,primary-bond: empty property indicating the channel acts as primary |
| among the bonded channels. |
| - port: child port node corresponding to the data input, in accordance with |
| the video interface bindings defined in |
| Documentation/devicetree/bindings/media/video-interfaces.txt. The port |
| node must contain at least one endpoint. |
| |
| Optional endpoint property: |
| --------------------------- |
| - sync-active: Indicates sync signal polarity, 0/1 for low/high respectively. |
| This property maps to SYNCAC bit in the hardware manual. The |
| default is 1 (active high). |
| |
| Example: |
| -------- |
| |
| (1) Both internal channels enabled: |
| ----------------------------------- |
| |
| When interfacing with a third party tuner device with two data pins as shown |
| below. |
| |
| +---------------------+ +---------------------+ |
| | |-----SCK------->|CLK | |
| | Master |-----SS-------->|SYNC DRIFn (slave) | |
| | |-----SD0------->|D0 | |
| | |-----SD1------->|D1 | |
| +---------------------+ +---------------------+ |
| |
| drif00: rif@e6f40000 { |
| compatible = "renesas,r8a7795-drif", |
| "renesas,rcar-gen3-drif"; |
| reg = <0 0xe6f40000 0 0x64>; |
| interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>; |
| clocks = <&cpg CPG_MOD 515>; |
| clock-names = "fck"; |
| dmas = <&dmac1 0x20>, <&dmac2 0x20>; |
| dma-names = "rx", "rx"; |
| power-domains = <&sysc R8A7795_PD_ALWAYS_ON>; |
| renesas,bonding = <&drif01>; |
| renesas,primary-bond; |
| pinctrl-0 = <&drif0_pins>; |
| pinctrl-names = "default"; |
| port { |
| drif0_ep: endpoint { |
| remote-endpoint = <&tuner_ep>; |
| }; |
| }; |
| }; |
| |
| drif01: rif@e6f50000 { |
| compatible = "renesas,r8a7795-drif", |
| "renesas,rcar-gen3-drif"; |
| reg = <0 0xe6f50000 0 0x64>; |
| interrupts = <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>; |
| clocks = <&cpg CPG_MOD 514>; |
| clock-names = "fck"; |
| dmas = <&dmac1 0x22>, <&dmac2 0x22>; |
| dma-names = "rx", "rx"; |
| power-domains = <&sysc R8A7795_PD_ALWAYS_ON>; |
| renesas,bonding = <&drif00>; |
| }; |
| |
| |
| (2) Internal channel 1 alone is enabled: |
| ---------------------------------------- |
| |
| When interfacing with a third party tuner device with one data pin as shown |
| below. |
| |
| +---------------------+ +---------------------+ |
| | |-----SCK------->|CLK | |
| | Master |-----SS-------->|SYNC DRIFn (slave) | |
| | | |D0 (unused) | |
| | |-----SD-------->|D1 | |
| +---------------------+ +---------------------+ |
| |
| drif00: rif@e6f40000 { |
| compatible = "renesas,r8a7795-drif", |
| "renesas,rcar-gen3-drif"; |
| reg = <0 0xe6f40000 0 0x64>; |
| interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>; |
| clocks = <&cpg CPG_MOD 515>; |
| clock-names = "fck"; |
| dmas = <&dmac1 0x20>, <&dmac2 0x20>; |
| dma-names = "rx", "rx"; |
| power-domains = <&sysc R8A7795_PD_ALWAYS_ON>; |
| renesas,bonding = <&drif01>; |
| }; |
| |
| drif01: rif@e6f50000 { |
| compatible = "renesas,r8a7795-drif", |
| "renesas,rcar-gen3-drif"; |
| reg = <0 0xe6f50000 0 0x64>; |
| interrupts = <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>; |
| clocks = <&cpg CPG_MOD 514>; |
| clock-names = "fck"; |
| dmas = <&dmac1 0x22>, <&dmac2 0x22>; |
| dma-names = "rx", "rx"; |
| power-domains = <&sysc R8A7795_PD_ALWAYS_ON>; |
| renesas,bonding = <&drif00>; |
| pinctrl-0 = <&drif0_pins>; |
| pinctrl-names = "default"; |
| port { |
| drif0_ep: endpoint { |
| remote-endpoint = <&tuner_ep>; |
| sync-active = <0>; |
| }; |
| }; |
| }; |