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/pinctrl/nuvoton,wpcm450-pinctrl.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: Nuvoton WPCM450 pin control and GPIO
862306a36Sopenharmony_ci
962306a36Sopenharmony_cimaintainers:
1062306a36Sopenharmony_ci  - Jonathan Neuschäfer <j.neuschaefer@gmx.net>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ciproperties:
1362306a36Sopenharmony_ci  compatible:
1462306a36Sopenharmony_ci    const: nuvoton,wpcm450-pinctrl
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci  reg:
1762306a36Sopenharmony_ci    maxItems: 1
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci  '#address-cells':
2062306a36Sopenharmony_ci    const: 1
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci  '#size-cells':
2362306a36Sopenharmony_ci    const: 0
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_cipatternProperties:
2662306a36Sopenharmony_ci  # There are three kinds of subnodes:
2762306a36Sopenharmony_ci  # 1. a GPIO controller node for each GPIO bank
2862306a36Sopenharmony_ci  # 2. a pinmux node configures pin muxing for a group of pins (e.g. rmii2)
2962306a36Sopenharmony_ci  # 3. a pinconf node configures properties of a single pin
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci  "^gpio@[0-7]$":
3262306a36Sopenharmony_ci    type: object
3362306a36Sopenharmony_ci    additionalProperties: false
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci    description:
3662306a36Sopenharmony_ci      Eight GPIO banks (gpio@0 to gpio@7), that each contain between 14 and 18
3762306a36Sopenharmony_ci      GPIOs. Some GPIOs support interrupts.
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci    properties:
4062306a36Sopenharmony_ci      reg:
4162306a36Sopenharmony_ci        minimum: 0
4262306a36Sopenharmony_ci        maximum: 7
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci      gpio-controller: true
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci      "#gpio-cells":
4762306a36Sopenharmony_ci        const: 2
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci      interrupt-controller: true
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci      "#interrupt-cells":
5262306a36Sopenharmony_ci        const: 2
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ci      interrupts:
5562306a36Sopenharmony_ci        maxItems: 3
5662306a36Sopenharmony_ci        description:
5762306a36Sopenharmony_ci          The interrupts associated with this GPIO bank
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ci    required:
6062306a36Sopenharmony_ci      - reg
6162306a36Sopenharmony_ci      - gpio-controller
6262306a36Sopenharmony_ci      - '#gpio-cells'
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_ci  "^mux-":
6562306a36Sopenharmony_ci    $ref: pinmux-node.yaml#
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ci    properties:
6862306a36Sopenharmony_ci      groups:
6962306a36Sopenharmony_ci        description:
7062306a36Sopenharmony_ci          One or more groups of pins to mux to a certain function
7162306a36Sopenharmony_ci        items:
7262306a36Sopenharmony_ci          enum: [ smb3, smb4, smb5, scs1, scs2, scs3, smb0, smb1, smb2, bsp,
7362306a36Sopenharmony_ci                  hsp1, hsp2, r1err, r1md, rmii2, r2err, r2md, kbcc, dvo,
7462306a36Sopenharmony_ci                  clko, smi, uinc, gspi, mben, xcs2, xcs1, sdio, sspi, fi0,
7562306a36Sopenharmony_ci                  fi1, fi2, fi3, fi4, fi5, fi6, fi7, fi8, fi9, fi10, fi11,
7662306a36Sopenharmony_ci                  fi12, fi13, fi14, fi15, pwm0, pwm1, pwm2, pwm3, pwm4, pwm5,
7762306a36Sopenharmony_ci                  pwm6, pwm7, hg0, hg1, hg2, hg3, hg4, hg5, hg6, hg7 ]
7862306a36Sopenharmony_ci      function:
7962306a36Sopenharmony_ci        description:
8062306a36Sopenharmony_ci          The function that a group of pins is muxed to
8162306a36Sopenharmony_ci        enum: [ smb3, smb4, smb5, scs1, scs2, scs3, smb0, smb1, smb2, bsp,
8262306a36Sopenharmony_ci                hsp1, hsp2, r1err, r1md, rmii2, r2err, r2md, kbcc, dvo0,
8362306a36Sopenharmony_ci                dvo1, dvo2, dvo3, dvo4, dvo5, dvo6, dvo7, clko, smi, uinc,
8462306a36Sopenharmony_ci                gspi, mben, xcs2, xcs1, sdio, sspi, fi0, fi1, fi2, fi3, fi4,
8562306a36Sopenharmony_ci                fi5, fi6, fi7, fi8, fi9, fi10, fi11, fi12, fi13, fi14, fi15,
8662306a36Sopenharmony_ci                pwm0, pwm1, pwm2, pwm3, pwm4, pwm5, pwm6, pwm7, hg0, hg1,
8762306a36Sopenharmony_ci                hg2, hg3, hg4, hg5, hg6, hg7, gpio ]
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ci    dependencies:
9062306a36Sopenharmony_ci      groups: [ function ]
9162306a36Sopenharmony_ci      function: [ groups ]
9262306a36Sopenharmony_ci
9362306a36Sopenharmony_ci    additionalProperties: false
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_ci  "^cfg-":
9662306a36Sopenharmony_ci    $ref: pincfg-node.yaml#
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_ci    properties:
9962306a36Sopenharmony_ci      pins:
10062306a36Sopenharmony_ci        description:
10162306a36Sopenharmony_ci          A list of pins to configure in certain ways, such as enabling
10262306a36Sopenharmony_ci          debouncing
10362306a36Sopenharmony_ci        items:
10462306a36Sopenharmony_ci          pattern: "^gpio1?[0-9]{1,2}$"
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_ci      input-debounce: true
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_ci    additionalProperties: false
10962306a36Sopenharmony_ci
11062306a36Sopenharmony_cirequired:
11162306a36Sopenharmony_ci  - compatible
11262306a36Sopenharmony_ci  - reg
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_ciadditionalProperties: false
11562306a36Sopenharmony_ci
11662306a36Sopenharmony_ciexamples:
11762306a36Sopenharmony_ci  - |
11862306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/irq.h>
11962306a36Sopenharmony_ci    #include <dt-bindings/gpio/gpio.h>
12062306a36Sopenharmony_ci    pinctrl: pinctrl@b8003000 {
12162306a36Sopenharmony_ci      compatible = "nuvoton,wpcm450-pinctrl";
12262306a36Sopenharmony_ci      reg = <0xb8003000 0x1000>;
12362306a36Sopenharmony_ci      #address-cells = <1>;
12462306a36Sopenharmony_ci      #size-cells = <0>;
12562306a36Sopenharmony_ci
12662306a36Sopenharmony_ci      gpio0: gpio@0 {
12762306a36Sopenharmony_ci        reg = <0>;
12862306a36Sopenharmony_ci        gpio-controller;
12962306a36Sopenharmony_ci        #gpio-cells = <2>;
13062306a36Sopenharmony_ci        interrupts = <2 IRQ_TYPE_LEVEL_HIGH>,
13162306a36Sopenharmony_ci                     <3 IRQ_TYPE_LEVEL_HIGH>,
13262306a36Sopenharmony_ci                     <4 IRQ_TYPE_LEVEL_HIGH>;
13362306a36Sopenharmony_ci      };
13462306a36Sopenharmony_ci
13562306a36Sopenharmony_ci      mux-rmii2 {
13662306a36Sopenharmony_ci        groups = "rmii2";
13762306a36Sopenharmony_ci        function = "rmii2";
13862306a36Sopenharmony_ci      };
13962306a36Sopenharmony_ci
14062306a36Sopenharmony_ci      pinmux_uid: mux-uid {
14162306a36Sopenharmony_ci        groups = "gspi", "sspi";
14262306a36Sopenharmony_ci        function = "gpio";
14362306a36Sopenharmony_ci      };
14462306a36Sopenharmony_ci
14562306a36Sopenharmony_ci      pinctrl_uid: cfg-uid {
14662306a36Sopenharmony_ci        pins = "gpio14";
14762306a36Sopenharmony_ci        input-debounce = <1>;
14862306a36Sopenharmony_ci      };
14962306a36Sopenharmony_ci    };
15062306a36Sopenharmony_ci
15162306a36Sopenharmony_ci    gpio-keys {
15262306a36Sopenharmony_ci      compatible = "gpio-keys";
15362306a36Sopenharmony_ci      pinctrl-names = "default";
15462306a36Sopenharmony_ci      pinctrl-0 = <&pinctrl_uid>, <&pinmux_uid>;
15562306a36Sopenharmony_ci
15662306a36Sopenharmony_ci      button-uid {
15762306a36Sopenharmony_ci        label = "UID";
15862306a36Sopenharmony_ci        linux,code = <102>;
15962306a36Sopenharmony_ci        gpios = <&gpio0 14 GPIO_ACTIVE_HIGH>;
16062306a36Sopenharmony_ci      };
16162306a36Sopenharmony_ci    };
162