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