Merge tag 'armsoc-dt' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc
[sfrench/cifs-2.6.git] / Documentation / devicetree / bindings / pinctrl / pinctrl-stmfx.txt
1 STMicroelectronics Multi-Function eXpander (STMFX) GPIO expander bindings
2
3 ST Multi-Function eXpander (STMFX) offers up to 24 GPIOs expansion.
4 Please refer to ../mfd/stmfx.txt for STMFX Core bindings.
5
6 Required properties:
7 - compatible: should be "st,stmfx-0300-pinctrl".
8 - #gpio-cells: should be <2>, the first cell is the GPIO number and the second
9   cell is the gpio flags in accordance with <dt-bindings/gpio/gpio.h>.
10 - gpio-controller: marks the device as a GPIO controller.
11 - #interrupt-cells: should be <2>, the first cell is the GPIO number and the
12   second cell is the interrupt flags in accordance with
13   <dt-bindings/interrupt-controller/irq.h>.
14 - interrupt-controller: marks the device as an interrupt controller.
15 - gpio-ranges: specifies the mapping between gpio controller and pin
16   controller pins. Check "Concerning gpio-ranges property" below.
17 Please refer to ../gpio/gpio.txt.
18
19 Please refer to pinctrl-bindings.txt for pin configuration.
20
21 Required properties for pin configuration sub-nodes:
22 - pins: list of pins to which the configuration applies.
23
24 Optional properties for pin configuration sub-nodes (pinconf-generic ones):
25 - bias-disable: disable any bias on the pin.
26 - bias-pull-up: the pin will be pulled up.
27 - bias-pull-pin-default: use the pin-default pull state.
28 - bias-pull-down: the pin will be pulled down.
29 - drive-open-drain: the pin will be driven with open drain.
30 - drive-push-pull: the pin will be driven actively high and low.
31 - output-high: the pin will be configured as an output driving high level.
32 - output-low: the pin will be configured as an output driving low level.
33
34 Note that STMFX pins[15:0] are called "gpio[15:0]", and STMFX pins[23:16] are
35 called "agpio[7:0]". Example, to refer to pin 18 of STMFX, use "agpio2".
36
37 Concerning gpio-ranges property:
38 - if all STMFX pins[24:0] are available (no other STMFX function in use), you
39   should use gpio-ranges = <&stmfx_pinctrl 0 0 24>;
40 - if agpio[3:0] are not available (STMFX Touchscreen function in use), you
41   should use gpio-ranges = <&stmfx_pinctrl 0 0 16>, <&stmfx_pinctrl 20 20 4>;
42 - if agpio[7:4] are not available (STMFX IDD function in use), you
43   should use gpio-ranges = <&stmfx_pinctrl 0 0 20>;
44
45
46 Example:
47
48         stmfx: stmfx@42 {
49                 ...
50
51                 stmfx_pinctrl: stmfx-pin-controller {
52                         compatible = "st,stmfx-0300-pinctrl";
53                         #gpio-cells = <2>;
54                         #interrupt-cells = <2>;
55                         gpio-controller;
56                         interrupt-controller;
57                         gpio-ranges = <&stmfx_pinctrl 0 0 24>;
58
59                         joystick_pins: joystick {
60                                 pins = "gpio0", "gpio1", "gpio2", "gpio3", "gpio4";
61                                 drive-push-pull;
62                                 bias-pull-up;
63                         };
64                 };
65         };
66
67 Example of STMFX GPIO consumers:
68
69         joystick {
70                 compatible = "gpio-keys";
71                 #address-cells = <1>;
72                 #size-cells = <0>;
73                 pinctrl-0 = <&joystick_pins>;
74                 pinctrl-names = "default";
75                 button-0 {
76                         label = "JoySel";
77                         linux,code = <KEY_ENTER>;
78                         interrupt-parent = <&stmfx_pinctrl>;
79                         interrupts = <0 IRQ_TYPE_EDGE_RISING>;
80                 };
81                 button-1 {
82                         label = "JoyDown";
83                         linux,code = <KEY_DOWN>;
84                         interrupt-parent = <&stmfx_pinctrl>;
85                         interrupts = <1 IRQ_TYPE_EDGE_RISING>;
86                 };
87                 button-2 {
88                         label = "JoyLeft";
89                         linux,code = <KEY_LEFT>;
90                         interrupt-parent = <&stmfx_pinctrl>;
91                         interrupts = <2 IRQ_TYPE_EDGE_RISING>;
92                 };
93                 button-3 {
94                         label = "JoyRight";
95                         linux,code = <KEY_RIGHT>;
96                         interrupt-parent = <&stmfx_pinctrl>;
97                         interrupts = <3 IRQ_TYPE_EDGE_RISING>;
98                 };
99                 button-4 {
100                         label = "JoyUp";
101                         linux,code = <KEY_UP>;
102                         interrupt-parent = <&stmfx_pinctrl>;
103                         interrupts = <4 IRQ_TYPE_EDGE_RISING>;
104                 };
105         };
106
107         leds {
108                 compatible = "gpio-leds";
109                 orange {
110                         gpios = <&stmfx_pinctrl 17 1>;
111                 };
112
113                 blue {
114                         gpios = <&stmfx_pinctrl 19 1>;
115                 };
116         }