1# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/gpio/socionext,uniphier-gpio.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: UniPhier GPIO controller
8
9maintainers:
10  - Masahiro Yamada <yamada.masahiro@socionext.com>
11
12properties:
13  $nodename:
14    pattern: "^gpio@[0-9a-f]+$"
15
16  compatible:
17    const: socionext,uniphier-gpio
18
19  reg:
20    maxItems: 1
21
22  gpio-controller: true
23
24  "#gpio-cells":
25    const: 2
26
27  interrupt-controller: true
28
29  "#interrupt-cells":
30    description: |
31      The first cell defines the interrupt number.
32      The second cell bits[3:0] is used to specify trigger type as follows:
33        1 = low-to-high edge triggered
34        2 = high-to-low edge triggered
35        4 = active high level-sensitive
36        8 = active low level-sensitive
37      Valid combinations are 1, 2, 3, 4, 8.
38    const: 2
39
40  ngpios:
41    minimum: 0
42    maximum: 512
43
44  gpio-ranges: true
45
46  gpio-ranges-group-names: true
47
48  socionext,interrupt-ranges:
49    description: |
50      Specifies an interrupt number mapping between this GPIO controller and
51      its interrupt parent, in the form of arbitrary number of
52      <child-interrupt-base parent-interrupt-base length> triplets.
53    $ref: /schemas/types.yaml#/definitions/uint32-matrix
54
55patternProperties:
56  "^.+-hog(-[0-9]+)?$":
57    type: object
58    properties:
59      gpio-hog: true
60      gpios: true
61      input: true
62      output-high: true
63      output-low: true
64      line-name: true
65
66    required:
67      - gpio-hog
68      - gpios
69
70    additionalProperties: false
71
72required:
73  - compatible
74  - reg
75  - gpio-controller
76  - "#gpio-cells"
77  - interrupt-controller
78  - "#interrupt-cells"
79  - ngpios
80  - gpio-ranges
81  - socionext,interrupt-ranges
82
83additionalProperties: false
84
85examples:
86  - |
87    #include <dt-bindings/gpio/gpio.h>
88    #include <dt-bindings/gpio/uniphier-gpio.h>
89
90    gpio: gpio@55000000 {
91        compatible = "socionext,uniphier-gpio";
92        reg = <0x55000000 0x200>;
93        interrupt-parent = <&aidet>;
94        interrupt-controller;
95        #interrupt-cells = <2>;
96        gpio-controller;
97        #gpio-cells = <2>;
98        gpio-ranges = <&pinctrl 0 0 0>;
99        gpio-ranges-group-names = "gpio_range";
100        ngpios = <248>;
101        socionext,interrupt-ranges = <0 48 16>, <16 154 5>, <21 217 3>;
102    };
103
104    // Consumer:
105    // Please note UNIPHIER_GPIO_PORT(29, 4) represents PORT294 in the SoC
106    // document. Unfortunately, only the one's place is octal in the port
107    // numbering. (That is, PORT 8, 9, 18, 19, 28, 29, ... do not exist.)
108    // UNIPHIER_GPIO_PORT() is a helper macro to calculate 29 * 8 + 4.
109    sdhci0_pwrseq {
110        compatible = "mmc-pwrseq-emmc";
111        reset-gpios = <&gpio UNIPHIER_GPIO_PORT(29, 4) GPIO_ACTIVE_LOW>;
112    };
113