195 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			195 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
 | 
						|
%YAML 1.2
 | 
						|
---
 | 
						|
$id: http://devicetree.org/schemas/pinctrl/renesas,rza1-ports.yaml#
 | 
						|
$schema: http://devicetree.org/meta-schemas/core.yaml#
 | 
						|
 | 
						|
title: Renesas RZ/A1 combined Pin and GPIO controller
 | 
						|
 | 
						|
maintainers:
 | 
						|
  - Jacopo Mondi <jacopo+renesas@jmondi.org>
 | 
						|
  - Geert Uytterhoeven <geert+renesas@glider.be>
 | 
						|
 | 
						|
description:
 | 
						|
  The Renesas SoCs of the RZ/A1 family feature a combined Pin and GPIO
 | 
						|
  controller, named "Ports" in the hardware reference manual.
 | 
						|
  Pin multiplexing and GPIO configuration is performed on a per-pin basis
 | 
						|
  writing configuration values to per-port register sets.
 | 
						|
  Each "port" features up to 16 pins, each of them configurable for GPIO
 | 
						|
  function (port mode) or in alternate function mode.
 | 
						|
  Up to 8 different alternate function modes exist for each single pin.
 | 
						|
 | 
						|
properties:
 | 
						|
  compatible:
 | 
						|
    oneOf:
 | 
						|
      - const: renesas,r7s72100-ports     # RZ/A1H
 | 
						|
      - items:
 | 
						|
          - const: renesas,r7s72101-ports # RZ/A1M
 | 
						|
          - const: renesas,r7s72100-ports # fallback
 | 
						|
      - const: renesas,r7s72102-ports     # RZ/A1L
 | 
						|
 | 
						|
  reg:
 | 
						|
    maxItems: 1
 | 
						|
 | 
						|
allOf:
 | 
						|
  - $ref: "pinctrl.yaml#"
 | 
						|
 | 
						|
required:
 | 
						|
  - compatible
 | 
						|
  - reg
 | 
						|
 | 
						|
patternProperties:
 | 
						|
  "^gpio-[0-9]*$":
 | 
						|
    type: object
 | 
						|
    additionalProperties: false
 | 
						|
 | 
						|
    description:
 | 
						|
      Each port of the r7s72100 pin controller hardware is itself a GPIO
 | 
						|
      controller.
 | 
						|
      Different SoCs have different numbers of available pins per port, but
 | 
						|
      generally speaking, each of them can be configured in GPIO ("port") mode
 | 
						|
      on this hardware.
 | 
						|
      Describe GPIO controllers using sub-nodes with the following properties.
 | 
						|
 | 
						|
    properties:
 | 
						|
      gpio-controller: true
 | 
						|
 | 
						|
      '#gpio-cells':
 | 
						|
        const: 2
 | 
						|
 | 
						|
      gpio-ranges:
 | 
						|
        maxItems: 1
 | 
						|
 | 
						|
    required:
 | 
						|
      - gpio-controller
 | 
						|
      - '#gpio-cells'
 | 
						|
      - gpio-ranges
 | 
						|
 | 
						|
 | 
						|
additionalProperties:
 | 
						|
  anyOf:
 | 
						|
    - type: object
 | 
						|
      allOf:
 | 
						|
        - $ref: pincfg-node.yaml#
 | 
						|
        - $ref: pinmux-node.yaml#
 | 
						|
 | 
						|
      description:
 | 
						|
        A pin multiplexing sub-node describes how to configure a set of (or a
 | 
						|
        single) pin in some desired alternate function mode.
 | 
						|
        A single sub-node may define several pin configurations.
 | 
						|
        A few alternate function require special pin configuration flags to be
 | 
						|
        supplied along with the alternate function configuration number.
 | 
						|
        The hardware reference manual specifies when a pin function requires
 | 
						|
        "software IO driven" mode to be specified. To do so use the generic
 | 
						|
        properties from the <include/linux/pinctrl/pinconf_generic.h> header
 | 
						|
        file to instruct the pin controller to perform the desired pin
 | 
						|
        configuration operation.
 | 
						|
        The hardware reference manual specifies when a pin has to be configured
 | 
						|
        to work in bi-directional mode and when the IO direction has to be
 | 
						|
        specified by software. Bi-directional pins must be managed by the pin
 | 
						|
        controller driver internally, while software driven IO direction has to
 | 
						|
        be explicitly selected when multiple options are available.
 | 
						|
 | 
						|
      properties:
 | 
						|
        pinmux:
 | 
						|
          description: |
 | 
						|
            Integer array representing pin number and pin multiplexing
 | 
						|
            configuration.
 | 
						|
            When a pin has to be configured in alternate function mode, use
 | 
						|
            this property to identify the pin by its global index, and provide
 | 
						|
            its alternate function configuration number along with it.
 | 
						|
            When multiple pins are required to be configured as part of the
 | 
						|
            same alternate function they shall be specified as members of the
 | 
						|
            same argument list of a single "pinmux" property.
 | 
						|
            Helper macros to ease assembling the pin index from its position
 | 
						|
            (port where it sits on and pin number) and alternate function
 | 
						|
            identifier are provided by the pin controller header file at:
 | 
						|
            <include/dt-bindings/pinctrl/r7s72100-pinctrl.h>
 | 
						|
            Integers values in "pinmux" argument list are assembled as:
 | 
						|
            ((PORT * 16 + PIN) | MUX_FUNC << 16)
 | 
						|
 | 
						|
        phandle: true
 | 
						|
        input-enable: true
 | 
						|
        output-enable: true
 | 
						|
 | 
						|
      required:
 | 
						|
        - pinmux
 | 
						|
 | 
						|
      additionalProperties: false
 | 
						|
 | 
						|
    - type: object
 | 
						|
      properties:
 | 
						|
        phandle: true
 | 
						|
 | 
						|
      additionalProperties:
 | 
						|
        $ref: "#/additionalProperties/anyOf/0"
 | 
						|
 | 
						|
examples:
 | 
						|
  - |
 | 
						|
    #include <dt-bindings/pinctrl/r7s72100-pinctrl.h>
 | 
						|
    pinctrl: pinctrl@fcfe3000 {
 | 
						|
            compatible = "renesas,r7s72100-ports";
 | 
						|
 | 
						|
            reg = <0xfcfe3000 0x4230>;
 | 
						|
 | 
						|
            /*
 | 
						|
             * A GPIO controller node, controlling 16 pins indexed from 0.
 | 
						|
             * The GPIO controller base in the global pin indexing space is pin
 | 
						|
             * 48, thus pins [0 - 15] on this controller map to pins [48 - 63]
 | 
						|
             * in the global pin indexing space.
 | 
						|
             */
 | 
						|
            port3: gpio-3 {
 | 
						|
                    gpio-controller;
 | 
						|
                    #gpio-cells = <2>;
 | 
						|
                    gpio-ranges = <&pinctrl 0 48 16>;
 | 
						|
            };
 | 
						|
 | 
						|
            /*
 | 
						|
             * A serial communication interface with a TX output pin and an RX
 | 
						|
             * input pin.
 | 
						|
             * Pin #0 on port #3 is configured as alternate function #6.
 | 
						|
             * Pin #2 on port #3 is configured as alternate function #4.
 | 
						|
             */
 | 
						|
            scif2_pins: serial2 {
 | 
						|
                    pinmux = <RZA1_PINMUX(3, 0, 6)>, <RZA1_PINMUX(3, 2, 4)>;
 | 
						|
            };
 | 
						|
 | 
						|
 | 
						|
            /*
 | 
						|
             * I2c master: both SDA and SCL pins need bi-directional operations
 | 
						|
             * Pin #4 on port #1 is configured as alternate function #1.
 | 
						|
             * Pin #5 on port #1 is configured as alternate function #1.
 | 
						|
             * Both need to work in bi-directional mode, the driver must manage
 | 
						|
             * this internally.
 | 
						|
             */
 | 
						|
            i2c2_pins: i2c2 {
 | 
						|
                    pinmux = <RZA1_PINMUX(1, 4, 1)>, <RZA1_PINMUX(1, 5, 1)>;
 | 
						|
            };
 | 
						|
 | 
						|
 | 
						|
            /*
 | 
						|
             * Multi-function timer input and output compare pins.
 | 
						|
             */
 | 
						|
            tioc0_pins: tioc0 {
 | 
						|
                    /*
 | 
						|
                     * Configure TIOC0A as software driven input
 | 
						|
                     * Pin #0 on port #4 is configured as alternate function #2
 | 
						|
                     * with IO direction specified by software as input.
 | 
						|
                     */
 | 
						|
                    tioc0_input_pins {
 | 
						|
                            pinmux = <RZA1_PINMUX(4, 0, 2)>;
 | 
						|
                            input-enable;
 | 
						|
                    };
 | 
						|
 | 
						|
                    /*
 | 
						|
                     * Configure TIOC0B as software driven output
 | 
						|
                     * Pin #1 on port #4 is configured as alternate function #1
 | 
						|
                     * with IO direction specified by software as output.
 | 
						|
                     */
 | 
						|
                    tioc0_output_pins {
 | 
						|
                            pinmux = <RZA1_PINMUX(4, 1, 1)>;
 | 
						|
                            output-enable;
 | 
						|
                    };
 | 
						|
            };
 | 
						|
    };
 |