1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/mfd/st,stmfx.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: STMicroelectonics Multi-Function eXpander (STMFX) bindings
8
9description: ST Multi-Function eXpander (STMFX) is a slave controller using I2C for
10               communication with the main MCU. Its main features are GPIO expansion,
11               main MCU IDD measurement (IDD is the amount of current that flows
12               through VDD) and resistive touchscreen controller.
13
14maintainers:
15  - Amelie Delaunay <amelie.delaunay@foss.st.com>
16
17properties:
18  compatible:
19    const: st,stmfx-0300
20
21  reg:
22    enum: [ 0x42, 0x43 ]
23
24  interrupts:
25    maxItems: 1
26
27  drive-open-drain: true
28
29  vdd-supply: true
30
31  pinctrl:
32    type: object
33
34    properties:
35      compatible:
36        const: st,stmfx-0300-pinctrl
37
38      "#gpio-cells":
39        const: 2
40
41      "#interrupt-cells":
42        const: 2
43
44      gpio-controller: true
45
46      interrupt-controller: true
47
48      gpio-ranges:
49        description: if all STMFX pins[24:0] are available (no other STMFX function in use),
50                     you should use gpio-ranges = <&stmfx_pinctrl 0 0 24>;
51                     if agpio[3:0] are not available (STMFX Touchscreen function in use),
52                     you should use gpio-ranges = <&stmfx_pinctrl 0 0 16>, <&stmfx_pinctrl 20 20 4>;
53                     if agpio[7:4] are not available (STMFX IDD function in use),
54                     you should use gpio-ranges = <&stmfx_pinctrl 0 0 20>;
55        maxItems: 1
56
57    patternProperties:
58      "^[a-zA-Z]*-pins$":
59        type: object
60
61        allOf:
62          - $ref: ../pinctrl/pinmux-node.yaml
63
64        properties:
65          pins: true
66          bias-disable: true
67          bias-pull-up: true
68          bias-pull-pin-default: true
69          bias-pull-down: true
70          drive-open-drain: true
71          drive-push-pull: true
72          output-high: true
73          output-low: true
74
75    additionalProperties: false
76
77    required:
78      - compatible
79      - "#gpio-cells"
80      - "#interrupt-cells"
81      - gpio-controller
82      - interrupt-controller
83      - gpio-ranges
84
85additionalProperties: false
86
87required:
88  - compatible
89  - reg
90  - interrupts
91
92examples:
93  - |
94    #include <dt-bindings/interrupt-controller/arm-gic.h>
95    i2c {
96      #address-cells = <1>;
97      #size-cells = <0>;
98      stmfx@42 {
99        compatible = "st,stmfx-0300";
100        reg = <0x42>;
101        interrupts = <8 IRQ_TYPE_EDGE_RISING>;
102        interrupt-parent = <&gpioi>;
103        vdd-supply = <&v3v3>;
104
105        stmfx_pinctrl: pinctrl {
106          compatible = "st,stmfx-0300-pinctrl";
107          #gpio-cells = <2>;
108          #interrupt-cells = <2>;
109          gpio-controller;
110          interrupt-controller;
111          gpio-ranges = <&stmfx_pinctrl 0 0 24>;
112
113          joystick_pins: joystick-pins {
114            pins = "gpio0", "gpio1", "gpio2", "gpio3", "gpio4";
115            drive-push-pull;
116            bias-pull-up;
117          };
118        };
119      };
120    };
121...
122