xref: /freebsd/sys/contrib/device-tree/Bindings/pinctrl/pinctrl-stmfx.txt (revision 02e9120893770924227138ba49df1edb3896112a)
1STMicroelectronics Multi-Function eXpander (STMFX) GPIO expander bindings
2
3ST Multi-Function eXpander (STMFX) offers up to 24 GPIOs expansion.
4Please refer to ../mfd/stmfx.txt for STMFX Core bindings.
5
6Required 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.
17Please refer to ../gpio/gpio.txt.
18
19Please refer to pinctrl-bindings.txt for pin configuration.
20
21Required properties for pin configuration sub-nodes:
22- pins: list of pins to which the configuration applies.
23
24Optional 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
34Note that STMFX pins[15:0] are called "gpio[15:0]", and STMFX pins[23:16] are
35called "agpio[7:0]". Example, to refer to pin 18 of STMFX, use "agpio2".
36
37Concerning 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
46Example:
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
67Example 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	}
117