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