Commit e6e47d31 authored by Christian Marangi's avatar Christian Marangi Committed by Linus Walleij
Browse files

dt-bindings: pinctrl: airoha: Document AN7583 Pin Controller



Document Airoha AN7583 Pin Controller based on Airoha EN7581 with some
minor difference on some function group (PCM and LED gpio).

To not bloat the EN7581 schema with massive if condition, use a
dedicated YAML schema for Airoha AN7583.

Signed-off-by: default avatarChristian Marangi <ansuelsmth@gmail.com>
Reviewed-by: default avatarConor Dooley <conor.dooley@microchip.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 1552ad5d
Loading
Loading
Loading
Loading
+402 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/pinctrl/airoha,an7583-pinctrl.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Airoha AN7583 Pin Controller

maintainers:
  - Lorenzo Bianconi <lorenzo@kernel.org>

description:
  The Airoha's AN7583 Pin controller is used to control SoC pins.

properties:
  compatible:
    const: airoha,an7583-pinctrl

  interrupts:
    maxItems: 1

  gpio-controller: true

  '#gpio-cells':
    const: 2

  gpio-ranges:
    maxItems: 1

  interrupt-controller: true

  '#interrupt-cells':
    const: 2

allOf:
  - $ref: pinctrl.yaml#

required:
  - compatible
  - interrupts
  - gpio-controller
  - "#gpio-cells"
  - interrupt-controller
  - "#interrupt-cells"

patternProperties:
  '-pins$':
    type: object

    patternProperties:
      '^mux(-|$)':
        type: object

        description:
          pinmux configuration nodes.

        $ref: /schemas/pinctrl/pinmux-node.yaml

        properties:
          function:
            description:
              A string containing the name of the function to mux to the group.
            enum: [pon, tod_1pps, sipo, mdio, uart, i2c, jtag, pcm, spi,
                   pcm_spi, i2s, emmc, pnand, pcie_reset, pwm, phy1_led0,
                   phy2_led0, phy3_led0, phy4_led0, phy1_led1, phy2_led1,
                   phy3_led1, phy4_led1]

          groups:
            description:
              An array of strings. Each string contains the name of a group.

        required:
          - function
          - groups

        allOf:
          - if:
              properties:
                function:
                  const: pon
            then:
              properties:
                groups:
                  enum: [pon]
          - if:
              properties:
                function:
                  const: tod_1pps
            then:
              properties:
                groups:
                  enum: [pon_tod_1pps, gsw_tod_1pps]
          - if:
              properties:
                function:
                  const: sipo
            then:
              properties:
                groups:
                  enum: [sipo, sipo_rclk]
          - if:
              properties:
                function:
                  const: mdio
            then:
              properties:
                groups:
                  enum: [mdio]
          - if:
              properties:
                function:
                  const: uart
            then:
              properties:
                groups:
                  items:
                    enum: [uart2, uart2_cts_rts, hsuart, hsuart_cts_rts,
                           uart4, uart5]
                  maxItems: 2
          - if:
              properties:
                function:
                  const: i2c
            then:
              properties:
                groups:
                  enum: [i2c1]
          - if:
              properties:
                function:
                  const: jtag
            then:
              properties:
                groups:
                  enum: [jtag_udi, jtag_dfd]
          - if:
              properties:
                function:
                  const: pcm
            then:
              properties:
                groups:
                  enum: [pcm1, pcm2]
          - if:
              properties:
                function:
                  const: spi
            then:
              properties:
                groups:
                  items:
                    enum: [spi_quad, spi_cs1]
                  maxItems: 2
          - if:
              properties:
                function:
                  const: pcm_spi
            then:
              properties:
                groups:
                  items:
                    enum: [pcm_spi, pcm_spi_int, pcm_spi_rst, pcm_spi_cs1,
                           pcm_spi_cs2, pcm_spi_cs3, pcm_spi_cs4]
                  maxItems: 7
          - if:
              properties:
                function:
                  const: i2c
            then:
              properties:
                groups:
                  enum: [i2s]
          - if:
              properties:
                function:
                  const: emmc
            then:
              properties:
                groups:
                  enum: [emmc]
          - if:
              properties:
                function:
                  const: pnand
            then:
              properties:
                groups:
                  enum: [pnand]
          - if:
              properties:
                function:
                  const: pcie_reset
            then:
              properties:
                groups:
                  enum: [pcie_reset0, pcie_reset1]
          - if:
              properties:
                function:
                  const: pwm
            then:
              properties:
                groups:
                  enum: [gpio0, gpio1, gpio2, gpio3, gpio4, gpio5, gpio6,
                         gpio7, gpio8, gpio9, gpio10, gpio11, gpio12, gpio13,
                         gpio14, gpio15, gpio16, gpio17, gpio18, gpio19,
                         gpio20, gpio21, gpio22, gpio23, gpio24, gpio25,
                         gpio26, gpio27, gpio28, gpio29, gpio30, gpio31,
                         gpio36, gpio37, gpio38, gpio39, gpio40, gpio41,
                         gpio42, gpio43, gpio44, gpio45, gpio46, gpio47]
          - if:
              properties:
                function:
                  const: phy1_led0
            then:
              properties:
                groups:
                  enum: [gpio1, gpio2, gpio3, gpio4]
          - if:
              properties:
                function:
                  const: phy2_led0
            then:
              properties:
                groups:
                  enum: [gpio1, gpio2, gpio3, gpio4]
          - if:
              properties:
                function:
                  const: phy3_led0
            then:
              properties:
                groups:
                  enum: [gpio1, gpio2, gpio3, gpio4]
          - if:
              properties:
                function:
                  const: phy4_led0
            then:
              properties:
                groups:
                  enum: [gpio1, gpio2, gpio3, gpio4]
          - if:
              properties:
                function:
                  const: phy1_led1
            then:
              properties:
                groups:
                  enum: [gpio8, gpio9, gpio10, gpio11]
          - if:
              properties:
                function:
                  const: phy2_led1
            then:
              properties:
                groups:
                  enum: [gpio8, gpio9, gpio10, gpio11]
          - if:
              properties:
                function:
                  const: phy3_led1
            then:
              properties:
                groups:
                  enum: [gpio8, gpio9, gpio10, gpio11]
          - if:
              properties:
                function:
                  const: phy4_led1
            then:
              properties:
                groups:
                  enum: [gpio8, gpio9, gpio10, gpio11]

        additionalProperties: false

      '^conf(-|$)':
        type: object

        description:
          pinconf configuration nodes.

        $ref: /schemas/pinctrl/pincfg-node.yaml

        properties:
          pins:
            description:
              An array of strings. Each string contains the name of a pin.
            items:
              enum: [uart1_txd, uart1_rxd, i2c_scl, i2c_sda, spi_cs0, spi_clk,
                     spi_mosi, spi_miso, gpio0, gpio1, gpio2, gpio3, gpio4,
                     gpio5, gpio6, gpio7, gpio8, gpio9, gpio10, gpio11, gpio12,
                     gpio13, gpio14, gpio15, gpio16, gpio17, gpio18, gpio19,
                     gpio20, gpio21, gpio22, gpio23, gpio24, gpio25, gpio26,
                     gpio27, gpio28, gpio29, gpio30, gpio31, gpio32, gpio33,
                     gpio34, gpio35, gpio36, gpio37, gpio38, gpio39, gpio40,
                     gpio41, gpio42, gpio43, gpio44, gpio45, gpio46,
                     pcie_reset0, pcie_reset1, pcie_reset2]
            minItems: 1
            maxItems: 58

          bias-disable: true

          bias-pull-up: true

          bias-pull-down: true

          input-enable: true

          output-enable: true

          output-low: true

          output-high: true

          drive-open-drain: true

          drive-strength:
            description:
              Selects the drive strength for MIO pins, in mA.
            enum: [2, 4, 6, 8]

        required:
          - pins

        additionalProperties: false

    additionalProperties: false

additionalProperties: false

examples:
  - |
    #include <dt-bindings/interrupt-controller/arm-gic.h>

    pinctrl {
      compatible = "airoha,an7583-pinctrl";

      interrupt-parent = <&gic>;
      interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>;

      gpio-controller;
      #gpio-cells = <2>;

      interrupt-controller;
      #interrupt-cells = <2>;

      pcie1-rst-pins {
        conf {
          pins = "pcie_reset1";
          drive-open-drain = <1>;
        };
      };

      pwm-pins {
        mux {
          function = "pwm";
          groups = "gpio18";
        };
      };

      spi-pins {
        mux {
          function = "spi";
          groups = "spi_quad", "spi_cs1";
        };
      };

      uart2-pins {
        mux {
          function = "uart";
          groups = "uart2", "uart2_cts_rts";
        };
      };

      uar5-pins {
        mux {
          function = "uart";
          groups = "uart5";
        };
      };

      mmc-pins {
        mux {
          function = "emmc";
          groups = "emmc";
        };
      };

      mdio-pins {
        mux {
          function = "mdio";
          groups = "mdio";
        };

        conf {
          pins = "gpio2";
          output-enable;
        };
      };
    };