1701016c0SSrinivas KANDAGATLA*ST pin controller. 2701016c0SSrinivas KANDAGATLA 3701016c0SSrinivas KANDAGATLAEach multi-function pin is controlled, driven and routed through the 4701016c0SSrinivas KANDAGATLAPIO multiplexing block. Each pin supports GPIO functionality (ALT0) 5701016c0SSrinivas KANDAGATLAand multiple alternate functions(ALT1 - ALTx) that directly connect 6701016c0SSrinivas KANDAGATLAthe pin to different hardware blocks. 7701016c0SSrinivas KANDAGATLA 8701016c0SSrinivas KANDAGATLAWhen a pin is in GPIO mode, Output Enable (OE), Open Drain(OD), and 9701016c0SSrinivas KANDAGATLAPull Up (PU) are driven by the related PIO block. 10701016c0SSrinivas KANDAGATLA 11701016c0SSrinivas KANDAGATLAST pinctrl driver controls PIO multiplexing block and also interacts with 12701016c0SSrinivas KANDAGATLAgpio driver to configure a pin. 13701016c0SSrinivas KANDAGATLA 14727b0f71SSrinivas KandagatlaGPIO bank can have one of the two possible types of interrupt-wirings. 15727b0f71SSrinivas Kandagatla 16727b0f71SSrinivas KandagatlaFirst type is via irqmux, single interrupt is used by multiple gpio banks. This 17727b0f71SSrinivas Kandagatlareduces number of overall interrupts numbers required. All these banks belong to 18727b0f71SSrinivas Kandagatlaa single pincontroller. 19727b0f71SSrinivas Kandagatla _________ 20727b0f71SSrinivas Kandagatla | |----> [gpio-bank (n) ] 21727b0f71SSrinivas Kandagatla | |----> [gpio-bank (n + 1)] 22727b0f71SSrinivas Kandagatla [irqN]-- | irq-mux |----> [gpio-bank (n + 2)] 23727b0f71SSrinivas Kandagatla | |----> [gpio-bank (... )] 24727b0f71SSrinivas Kandagatla |_________|----> [gpio-bank (n + 7)] 25727b0f71SSrinivas Kandagatla 26727b0f71SSrinivas KandagatlaSecond type has a dedicated interrupt per gpio bank. 27727b0f71SSrinivas Kandagatla 28727b0f71SSrinivas Kandagatla [irqN]----> [gpio-bank (n)] 29727b0f71SSrinivas Kandagatla 30727b0f71SSrinivas Kandagatla 31727b0f71SSrinivas KandagatlaPin controller node: 32727b0f71SSrinivas KandagatlaRequired properties: 3307bc299bSPeter Griffin- compatible : should be "st,stih407-<pio-block>-pinctrl" 34727b0f71SSrinivas Kandagatla- st,syscfg : Should be a phandle of the syscfg node. 35701016c0SSrinivas KANDAGATLA- st,retime-pin-mask : Should be mask to specify which pins can be retimed. 36701016c0SSrinivas KANDAGATLA If the property is not present, it is assumed that all the pins in the 37701016c0SSrinivas KANDAGATLA bank are capable of retiming. Retiming is mainly used to improve the 38701016c0SSrinivas KANDAGATLA IO timing margins of external synchronous interfaces. 39727b0f71SSrinivas Kandagatla- ranges : defines mapping between pin controller node (parent) to gpio-bank 40727b0f71SSrinivas Kandagatla node (children). 41727b0f71SSrinivas Kandagatla 42727b0f71SSrinivas KandagatlaOptional properties: 43727b0f71SSrinivas Kandagatla- interrupts : Interrupt number of the irqmux. If the interrupt is shared 44727b0f71SSrinivas Kandagatla with other gpio banks via irqmux. 45727b0f71SSrinivas Kandagatla a irqline and gpio banks. 46727b0f71SSrinivas Kandagatla- reg : irqmux memory resource. If irqmux is present. 47727b0f71SSrinivas Kandagatla- reg-names : irqmux resource should be named as "irqmux". 48727b0f71SSrinivas Kandagatla 49727b0f71SSrinivas KandagatlaGPIO controller/bank node. 50727b0f71SSrinivas KandagatlaRequired properties: 51727b0f71SSrinivas Kandagatla- gpio-controller : Indicates this device is a GPIO controller 521e234375SPatrice Chotard- #gpio-cells : Must be two. 531e234375SPatrice Chotard - First cell: specifies the pin number inside the controller 541e234375SPatrice Chotard - Second cell: specifies whether the pin is logically inverted. 551e234375SPatrice Chotard - 0 = active high 561e234375SPatrice Chotard - 1 = active low 57727b0f71SSrinivas Kandagatla- st,bank-name : Should be a name string for this bank as specified in 58727b0f71SSrinivas Kandagatla datasheet. 59727b0f71SSrinivas Kandagatla 60727b0f71SSrinivas KandagatlaOptional properties: 61727b0f71SSrinivas Kandagatla- interrupts : Interrupt number for this gpio bank. If there is a dedicated 62727b0f71SSrinivas Kandagatla interrupt wired up for this gpio bank. 63727b0f71SSrinivas Kandagatla 64727b0f71SSrinivas Kandagatla- interrupt-controller : Indicates this device is a interrupt controller. GPIO 65727b0f71SSrinivas Kandagatla bank can be an interrupt controller iff one of the interrupt type either via 66727b0f71SSrinivas Kandagatlairqmux or a dedicated interrupt per bank is specified. 67727b0f71SSrinivas Kandagatla 68727b0f71SSrinivas Kandagatla- #interrupt-cells: the value of this property should be 2. 69727b0f71SSrinivas Kandagatla - First Cell: represents the external gpio interrupt number local to the 70727b0f71SSrinivas Kandagatla gpio interrupt space of the controller. 71727b0f71SSrinivas Kandagatla - Second Cell: flags to identify the type of the interrupt 72727b0f71SSrinivas Kandagatla - 1 = rising edge triggered 73727b0f71SSrinivas Kandagatla - 2 = falling edge triggered 74727b0f71SSrinivas Kandagatla - 3 = rising and falling edge triggered 75727b0f71SSrinivas Kandagatla - 4 = high level triggered 76727b0f71SSrinivas Kandagatla - 8 = low level triggered 77727b0f71SSrinivas Kandagatlafor related macros look in: 78727b0f71SSrinivas Kandagatlainclude/dt-bindings/interrupt-controller/irq.h 79701016c0SSrinivas KANDAGATLA 80701016c0SSrinivas KANDAGATLAExample: 81701016c0SSrinivas KANDAGATLA pin-controller-sbc { 82701016c0SSrinivas KANDAGATLA #address-cells = <1>; 83701016c0SSrinivas KANDAGATLA #size-cells = <1>; 8407bc299bSPeter Griffin compatible = "st,stih407-sbc-pinctrl"; 85701016c0SSrinivas KANDAGATLA st,syscfg = <&syscfg_sbc>; 8607bc299bSPeter Griffin reg = <0x0961f080 0x4>; 87727b0f71SSrinivas Kandagatla reg-names = "irqmux"; 8807bc299bSPeter Griffin interrupts = <GIC_SPI 188 IRQ_TYPE_NONE>; 89ae107d06SGeert Uytterhoeven interrupt-names = "irqmux"; 9007bc299bSPeter Griffin ranges = <0 0x09610000 0x6000>; 91727b0f71SSrinivas Kandagatla 9248c926cdSMarco Franchi pio0: gpio@9610000 { 93701016c0SSrinivas KANDAGATLA gpio-controller; 941e234375SPatrice Chotard #gpio-cells = <2>; 95727b0f71SSrinivas Kandagatla interrupt-controller; 96727b0f71SSrinivas Kandagatla #interrupt-cells = <2>; 9707bc299bSPeter Griffin reg = <0x0 0x100>; 98701016c0SSrinivas KANDAGATLA st,bank-name = "PIO0"; 99701016c0SSrinivas KANDAGATLA }; 100701016c0SSrinivas KANDAGATLA ... 101701016c0SSrinivas KANDAGATLA pin-functions nodes follow... 102701016c0SSrinivas KANDAGATLA }; 103701016c0SSrinivas KANDAGATLA 104701016c0SSrinivas KANDAGATLA 105701016c0SSrinivas KANDAGATLAContents of function subnode node: 106701016c0SSrinivas KANDAGATLA---------------------- 107701016c0SSrinivas KANDAGATLARequired properties for pin configuration node: 108701016c0SSrinivas KANDAGATLA- st,pins : Child node with list of pins with configuration. 109701016c0SSrinivas KANDAGATLA 110701016c0SSrinivas KANDAGATLABelow is the format of how each pin conf should look like. 111701016c0SSrinivas KANDAGATLA 112701016c0SSrinivas KANDAGATLA<bank offset mux mode rt_type rt_delay rt_clk> 113701016c0SSrinivas KANDAGATLA 114701016c0SSrinivas KANDAGATLAEvery PIO is represented with 4-7 parameters depending on retime configuration. 115701016c0SSrinivas KANDAGATLAEach parameter is explained as below. 116701016c0SSrinivas KANDAGATLA 117701016c0SSrinivas KANDAGATLA-bank : Should be bank phandle to which this PIO belongs. 118701016c0SSrinivas KANDAGATLA-offset : Offset in the PIO bank. 119701016c0SSrinivas KANDAGATLA-mux : Should be alternate function number associated this pin. 120701016c0SSrinivas KANDAGATLA Use same numbers from datasheet. 121701016c0SSrinivas KANDAGATLA-mode :pin configuration is selected from one of the below values. 122701016c0SSrinivas KANDAGATLA IN 123701016c0SSrinivas KANDAGATLA IN_PU 124701016c0SSrinivas KANDAGATLA OUT 125701016c0SSrinivas KANDAGATLA BIDIR 126701016c0SSrinivas KANDAGATLA BIDIR_PU 127701016c0SSrinivas KANDAGATLA 128701016c0SSrinivas KANDAGATLA-rt_type Retiming Configuration for the pin. 129701016c0SSrinivas KANDAGATLA Possible retime configuration are: 130701016c0SSrinivas KANDAGATLA 131701016c0SSrinivas KANDAGATLA ------- ------------- 132701016c0SSrinivas KANDAGATLA value args 133701016c0SSrinivas KANDAGATLA ------- ------------- 134701016c0SSrinivas KANDAGATLA NICLK <delay> <clk> 135701016c0SSrinivas KANDAGATLA ICLK_IO <delay> <clk> 136701016c0SSrinivas KANDAGATLA BYPASS <delay> 137701016c0SSrinivas KANDAGATLA DE_IO <delay> <clk> 138701016c0SSrinivas KANDAGATLA SE_ICLK_IO <delay> <clk> 139701016c0SSrinivas KANDAGATLA SE_NICLK_IO <delay> <clk> 140701016c0SSrinivas KANDAGATLA 141701016c0SSrinivas KANDAGATLA- delay is retime delay in pico seconds as mentioned in data sheet. 142701016c0SSrinivas KANDAGATLA 143701016c0SSrinivas KANDAGATLA- rt_clk :clk to be use for retime. 144701016c0SSrinivas KANDAGATLA Possible values are: 145701016c0SSrinivas KANDAGATLA CLK_A 146701016c0SSrinivas KANDAGATLA CLK_B 147701016c0SSrinivas KANDAGATLA CLK_C 148701016c0SSrinivas KANDAGATLA CLK_D 149701016c0SSrinivas KANDAGATLA 150701016c0SSrinivas KANDAGATLAExample of mmcclk pin which is a bi-direction pull pu with retime config 151701016c0SSrinivas KANDAGATLAas non inverted clock retimed with CLK_B and delay of 0 pico seconds: 152701016c0SSrinivas KANDAGATLA 153701016c0SSrinivas KANDAGATLApin-controller { 154701016c0SSrinivas KANDAGATLA ... 155701016c0SSrinivas KANDAGATLA mmc0 { 156701016c0SSrinivas KANDAGATLA pinctrl_mmc: mmc { 157701016c0SSrinivas KANDAGATLA st,pins { 158701016c0SSrinivas KANDAGATLA mmcclk = <&PIO13 4 ALT4 BIDIR_PU NICLK 0 CLK_B>; 159701016c0SSrinivas KANDAGATLA ... 160701016c0SSrinivas KANDAGATLA }; 161701016c0SSrinivas KANDAGATLA }; 162701016c0SSrinivas KANDAGATLA ... 163701016c0SSrinivas KANDAGATLA }; 164701016c0SSrinivas KANDAGATLA}; 165701016c0SSrinivas KANDAGATLA 166701016c0SSrinivas KANDAGATLAsdhci0:sdhci@fe810000{ 167701016c0SSrinivas KANDAGATLA ... 16807bc299bSPeter Griffin interrupt-parent = <&pio3>; 169727b0f71SSrinivas Kandagatla #interrupt-cells = <2>; 170727b0f71SSrinivas Kandagatla interrupts = <3 IRQ_TYPE_LEVEL_HIGH>; /* Interrupt line via PIO3-3 */ 171ae107d06SGeert Uytterhoeven interrupt-names = "card-detect"; 172701016c0SSrinivas KANDAGATLA pinctrl-names = "default"; 173701016c0SSrinivas KANDAGATLA pinctrl-0 = <&pinctrl_mmc>; 174701016c0SSrinivas KANDAGATLA}; 175