270 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			270 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
 | 
						|
%YAML 1.2
 | 
						|
---
 | 
						|
$id: http://devicetree.org/schemas/media/renesas,drif.yaml#
 | 
						|
$schema: http://devicetree.org/meta-schemas/core.yaml#
 | 
						|
 | 
						|
title: Renesas R-Car Gen3 Digital Radio Interface Controller (DRIF)
 | 
						|
 | 
						|
maintainers:
 | 
						|
  - Ramesh Shanmugasundaram <rashanmu@gmail.com>
 | 
						|
  - Fabrizio Castro <fabrizio.castro.jz@renesas.com>
 | 
						|
 | 
						|
description: |
 | 
						|
  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.
 | 
						|
 | 
						|
properties:
 | 
						|
  compatible:
 | 
						|
    items:
 | 
						|
      - enum:
 | 
						|
          - renesas,r8a7795-drif        # R-Car H3
 | 
						|
          - renesas,r8a7796-drif        # R-Car M3-W
 | 
						|
          - renesas,r8a77965-drif       # R-Car M3-N
 | 
						|
          - renesas,r8a77990-drif       # R-Car E3
 | 
						|
      - const: renesas,rcar-gen3-drif   # Generic R-Car Gen3 compatible device
 | 
						|
 | 
						|
  reg:
 | 
						|
    maxItems: 1
 | 
						|
 | 
						|
  interrupts:
 | 
						|
    maxItems: 1
 | 
						|
 | 
						|
  clocks:
 | 
						|
    maxItems: 1
 | 
						|
 | 
						|
  clock-names:
 | 
						|
    const: fck
 | 
						|
 | 
						|
  resets:
 | 
						|
    maxItems: 1
 | 
						|
 | 
						|
  dmas:
 | 
						|
    minItems: 1
 | 
						|
    maxItems: 2
 | 
						|
 | 
						|
  dma-names:
 | 
						|
    minItems: 1
 | 
						|
    items:
 | 
						|
      - const: rx
 | 
						|
      - const: rx
 | 
						|
 | 
						|
  renesas,bonding:
 | 
						|
    $ref: /schemas/types.yaml#/definitions/phandle
 | 
						|
    description:
 | 
						|
      The phandle to the other internal channel of DRIF
 | 
						|
 | 
						|
  power-domains:
 | 
						|
    maxItems: 1
 | 
						|
 | 
						|
  renesas,primary-bond:
 | 
						|
    type: boolean
 | 
						|
    description:
 | 
						|
      Indicates that the channel acts as primary among the bonded channels.
 | 
						|
 | 
						|
  port:
 | 
						|
    $ref: /schemas/graph.yaml#/$defs/port-base
 | 
						|
    unevaluatedProperties: false
 | 
						|
    description:
 | 
						|
      Child port node corresponding to the data input. The port node must
 | 
						|
      contain at least one endpoint.
 | 
						|
 | 
						|
    properties:
 | 
						|
      endpoint:
 | 
						|
        $ref: /schemas/graph.yaml#/$defs/endpoint-base
 | 
						|
        unevaluatedProperties: false
 | 
						|
 | 
						|
        properties:
 | 
						|
          sync-active:
 | 
						|
            $ref: /schemas/types.yaml#/definitions/uint32
 | 
						|
            enum: [0, 1]
 | 
						|
            description:
 | 
						|
              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).
 | 
						|
 | 
						|
required:
 | 
						|
  - compatible
 | 
						|
  - reg
 | 
						|
  - interrupts
 | 
						|
  - clocks
 | 
						|
  - clock-names
 | 
						|
  - resets
 | 
						|
  - dmas
 | 
						|
  - dma-names
 | 
						|
  - renesas,bonding
 | 
						|
  - power-domains
 | 
						|
 | 
						|
allOf:
 | 
						|
  - if:
 | 
						|
      required:
 | 
						|
        - renesas,primary-bond
 | 
						|
    then:
 | 
						|
      required:
 | 
						|
        - pinctrl-0
 | 
						|
        - pinctrl-names
 | 
						|
        - port
 | 
						|
 | 
						|
  - if:
 | 
						|
      required:
 | 
						|
        - port
 | 
						|
    then:
 | 
						|
      required:
 | 
						|
        - pinctrl-0
 | 
						|
        - pinctrl-names
 | 
						|
    else:
 | 
						|
      properties:
 | 
						|
        pinctrl-0: false
 | 
						|
        pinctrl-names: false
 | 
						|
 | 
						|
additionalProperties: false
 | 
						|
 | 
						|
examples:
 | 
						|
  # Example with 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                   |
 | 
						|
  # +---------------------+                +---------------------+
 | 
						|
  - |
 | 
						|
    #include <dt-bindings/clock/r8a7795-cpg-mssr.h>
 | 
						|
    #include <dt-bindings/interrupt-controller/arm-gic.h>
 | 
						|
    #include <dt-bindings/power/r8a7795-sysc.h>
 | 
						|
 | 
						|
    soc {
 | 
						|
            #address-cells = <2>;
 | 
						|
            #size-cells = <2>;
 | 
						|
 | 
						|
            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>;
 | 
						|
                    resets = <&cpg 515>;
 | 
						|
                    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>;
 | 
						|
                    resets = <&cpg 514>;
 | 
						|
            };
 | 
						|
    };
 | 
						|
 | 
						|
  # Example with internal channel 1 alone 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                   |
 | 
						|
  # +---------------------+                +---------------------+
 | 
						|
  - |
 | 
						|
    #include <dt-bindings/clock/r8a7795-cpg-mssr.h>
 | 
						|
    #include <dt-bindings/interrupt-controller/arm-gic.h>
 | 
						|
    #include <dt-bindings/power/r8a7795-sysc.h>
 | 
						|
 | 
						|
    soc {
 | 
						|
            #address-cells = <2>;
 | 
						|
            #size-cells = <2>;
 | 
						|
 | 
						|
            drif10: rif@e6f60000 {
 | 
						|
                    compatible = "renesas,r8a7795-drif",
 | 
						|
                                 "renesas,rcar-gen3-drif";
 | 
						|
                    reg = <0 0xe6f60000 0 0x64>;
 | 
						|
                    interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
 | 
						|
                    clocks = <&cpg CPG_MOD 513>;
 | 
						|
                    clock-names = "fck";
 | 
						|
                    dmas = <&dmac1 0x24>, <&dmac2 0x24>;
 | 
						|
                    dma-names = "rx", "rx";
 | 
						|
                    power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
 | 
						|
                    resets = <&cpg 513>;
 | 
						|
                    renesas,bonding = <&drif11>;
 | 
						|
            };
 | 
						|
 | 
						|
            drif11: rif@e6f70000 {
 | 
						|
                    compatible = "renesas,r8a7795-drif",
 | 
						|
                                 "renesas,rcar-gen3-drif";
 | 
						|
                    reg = <0 0xe6f70000 0 0x64>;
 | 
						|
                    interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
 | 
						|
                    clocks = <&cpg CPG_MOD 512>;
 | 
						|
                    clock-names = "fck";
 | 
						|
                    dmas = <&dmac1 0x26>, <&dmac2 0x26>;
 | 
						|
                    dma-names = "rx", "rx";
 | 
						|
                    power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
 | 
						|
                    resets = <&cpg 512>;
 | 
						|
                    renesas,bonding = <&drif10>;
 | 
						|
                    pinctrl-0 = <&drif1_pins>;
 | 
						|
                    pinctrl-names = "default";
 | 
						|
                    port {
 | 
						|
                            drif1_ep: endpoint {
 | 
						|
                                 remote-endpoint = <&tuner_ep1>;
 | 
						|
                                 sync-active = <0>;
 | 
						|
                            };
 | 
						|
                    };
 | 
						|
            };
 | 
						|
    };
 | 
						|
...
 |