| *ST pin controller. |
| |
| Each multi-function pin is controlled, driven and routed through the |
| PIO multiplexing block. Each pin supports GPIO functionality (ALT0) |
| and multiple alternate functions(ALT1 - ALTx) that directly connect |
| the pin to different hardware blocks. |
| |
| When a pin is in GPIO mode, Output Enable (OE), Open Drain(OD), and |
| Pull Up (PU) are driven by the related PIO block. |
| |
| ST pinctrl driver controls PIO multiplexing block and also interacts with |
| gpio driver to configure a pin. |
| |
| GPIO bank can have one of the two possible types of interrupt-wirings. |
| |
| First type is via irqmux, single interrupt is used by multiple gpio banks. This |
| reduces number of overall interrupts numbers required. All these banks belong to |
| a single pincontroller. |
| _________ |
| | |----> [gpio-bank (n) ] |
| | |----> [gpio-bank (n + 1)] |
| [irqN]-- | irq-mux |----> [gpio-bank (n + 2)] |
| | |----> [gpio-bank (... )] |
| |_________|----> [gpio-bank (n + 7)] |
| |
| Second type has a dedicated interrupt per gpio bank. |
| |
| [irqN]----> [gpio-bank (n)] |
| |
| |
| Pin controller node: |
| Required properties: |
| - compatible : should be "st,stih407-<pio-block>-pinctrl" |
| - st,syscfg : Should be a phandle of the syscfg node. |
| - st,retime-pin-mask : Should be mask to specify which pins can be retimed. |
| If the property is not present, it is assumed that all the pins in the |
| bank are capable of retiming. Retiming is mainly used to improve the |
| IO timing margins of external synchronous interfaces. |
| - ranges : defines mapping between pin controller node (parent) to gpio-bank |
| node (children). |
| |
| Optional properties: |
| - interrupts : Interrupt number of the irqmux. If the interrupt is shared |
| with other gpio banks via irqmux. |
| a irqline and gpio banks. |
| - reg : irqmux memory resource. If irqmux is present. |
| - reg-names : irqmux resource should be named as "irqmux". |
| |
| GPIO controller/bank node. |
| Required properties: |
| - gpio-controller : Indicates this device is a GPIO controller |
| - #gpio-cells : Must be two. |
| - First cell: specifies the pin number inside the controller |
| - Second cell: specifies whether the pin is logically inverted. |
| - 0 = active high |
| - 1 = active low |
| - st,bank-name : Should be a name string for this bank as specified in |
| datasheet. |
| |
| Optional properties: |
| - interrupts : Interrupt number for this gpio bank. If there is a dedicated |
| interrupt wired up for this gpio bank. |
| |
| - interrupt-controller : Indicates this device is a interrupt controller. GPIO |
| bank can be an interrupt controller iff one of the interrupt type either via |
| irqmux or a dedicated interrupt per bank is specified. |
| |
| - #interrupt-cells: the value of this property should be 2. |
| - First Cell: represents the external gpio interrupt number local to the |
| gpio interrupt space of the controller. |
| - Second Cell: flags to identify the type of the interrupt |
| - 1 = rising edge triggered |
| - 2 = falling edge triggered |
| - 3 = rising and falling edge triggered |
| - 4 = high level triggered |
| - 8 = low level triggered |
| for related macros look in: |
| include/dt-bindings/interrupt-controller/irq.h |
| |
| Example: |
| pin-controller-sbc { |
| #address-cells = <1>; |
| #size-cells = <1>; |
| compatible = "st,stih407-sbc-pinctrl"; |
| st,syscfg = <&syscfg_sbc>; |
| reg = <0x0961f080 0x4>; |
| reg-names = "irqmux"; |
| interrupts = <GIC_SPI 188 IRQ_TYPE_NONE>; |
| interrupt-names = "irqmux"; |
| ranges = <0 0x09610000 0x6000>; |
| |
| pio0: gpio@9610000 { |
| gpio-controller; |
| #gpio-cells = <2>; |
| interrupt-controller; |
| #interrupt-cells = <2>; |
| reg = <0x0 0x100>; |
| st,bank-name = "PIO0"; |
| }; |
| ... |
| pin-functions nodes follow... |
| }; |
| |
| |
| Contents of function subnode node: |
| ---------------------- |
| Required properties for pin configuration node: |
| - st,pins : Child node with list of pins with configuration. |
| |
| Below is the format of how each pin conf should look like. |
| |
| <bank offset mux mode rt_type rt_delay rt_clk> |
| |
| Every PIO is represented with 4-7 parameters depending on retime configuration. |
| Each parameter is explained as below. |
| |
| -bank : Should be bank phandle to which this PIO belongs. |
| -offset : Offset in the PIO bank. |
| -mux : Should be alternate function number associated this pin. |
| Use same numbers from datasheet. |
| -mode :pin configuration is selected from one of the below values. |
| IN |
| IN_PU |
| OUT |
| BIDIR |
| BIDIR_PU |
| |
| -rt_type Retiming Configuration for the pin. |
| Possible retime configuration are: |
| |
| ------- ------------- |
| value args |
| ------- ------------- |
| NICLK <delay> <clk> |
| ICLK_IO <delay> <clk> |
| BYPASS <delay> |
| DE_IO <delay> <clk> |
| SE_ICLK_IO <delay> <clk> |
| SE_NICLK_IO <delay> <clk> |
| |
| - delay is retime delay in pico seconds as mentioned in data sheet. |
| |
| - rt_clk :clk to be use for retime. |
| Possible values are: |
| CLK_A |
| CLK_B |
| CLK_C |
| CLK_D |
| |
| Example of mmcclk pin which is a bi-direction pull pu with retime config |
| as non inverted clock retimed with CLK_B and delay of 0 pico seconds: |
| |
| pin-controller { |
| ... |
| mmc0 { |
| pinctrl_mmc: mmc { |
| st,pins { |
| mmcclk = <&PIO13 4 ALT4 BIDIR_PU NICLK 0 CLK_B>; |
| ... |
| }; |
| }; |
| ... |
| }; |
| }; |
| |
| sdhci0:sdhci@fe810000{ |
| ... |
| interrupt-parent = <&pio3>; |
| #interrupt-cells = <2>; |
| interrupts = <3 IRQ_TYPE_LEVEL_HIGH>; /* Interrupt line via PIO3-3 */ |
| interrupt-names = "card-detect"; |
| pinctrl-names = "default"; |
| pinctrl-0 = <&pinctrl_mmc>; |
| }; |