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