xref: /OK3568_Linux_fs/kernel/Documentation/devicetree/bindings/pinctrl/atmel,at91-pinctrl.txt (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun* Atmel AT91 Pinmux Controller
2*4882a593Smuzhiyun
3*4882a593SmuzhiyunThe AT91 Pinmux Controller, enables the IC
4*4882a593Smuzhiyunto share one PAD to several functional blocks. The sharing is done by
5*4882a593Smuzhiyunmultiplexing the PAD input/output signals. For each PAD there are up to
6*4882a593Smuzhiyun8 muxing options (called periph modes). Since different modules require
7*4882a593Smuzhiyundifferent PAD settings (like pull up, keeper, etc) the controller controls
8*4882a593Smuzhiyunalso the PAD settings parameters.
9*4882a593Smuzhiyun
10*4882a593SmuzhiyunPlease refer to pinctrl-bindings.txt in this directory for details of the
11*4882a593Smuzhiyuncommon pinctrl bindings used by client devices, including the meaning of the
12*4882a593Smuzhiyunphrase "pin configuration node".
13*4882a593Smuzhiyun
14*4882a593SmuzhiyunAtmel AT91 pin configuration node is a node of a group of pins which can be
15*4882a593Smuzhiyunused for a specific device or function. This node represents both mux and config
16*4882a593Smuzhiyunof the pins in that group. The 'pins' selects the function mode(also named pin
17*4882a593Smuzhiyunmode) this pin can work on and the 'config' configures various pad settings
18*4882a593Smuzhiyunsuch as pull-up, multi drive, etc.
19*4882a593Smuzhiyun
20*4882a593SmuzhiyunRequired properties for iomux controller:
21*4882a593Smuzhiyun- compatible: "atmel,at91rm9200-pinctrl" or "atmel,at91sam9x5-pinctrl"
22*4882a593Smuzhiyun		or "atmel,sama5d3-pinctrl" or "microchip,sam9x60-pinctrl"
23*4882a593Smuzhiyun- atmel,mux-mask: array of mask (periph per bank) to describe if a pin can be
24*4882a593Smuzhiyun  configured in this periph mode. All the periph and bank need to be describe.
25*4882a593Smuzhiyun
26*4882a593SmuzhiyunHow to create such array:
27*4882a593Smuzhiyun
28*4882a593SmuzhiyunEach column will represent the possible peripheral of the pinctrl
29*4882a593SmuzhiyunEach line will represent a pio bank
30*4882a593Smuzhiyun
31*4882a593SmuzhiyunTake an example on the 9260
32*4882a593SmuzhiyunPeripheral: 2 ( A and B)
33*4882a593SmuzhiyunBank: 3 (A, B and C)
34*4882a593Smuzhiyun=>
35*4882a593Smuzhiyun
36*4882a593Smuzhiyun  /*    A         B     */
37*4882a593Smuzhiyun  0xffffffff 0xffc00c3b  /* pioA */
38*4882a593Smuzhiyun  0xffffffff 0x7fff3ccf  /* pioB */
39*4882a593Smuzhiyun  0xffffffff 0x007fffff  /* pioC */
40*4882a593Smuzhiyun
41*4882a593SmuzhiyunFor each peripheral/bank we will describe in a u32 if a pin can be
42*4882a593Smuzhiyunconfigured in it by putting 1 to the pin bit (1 << pin)
43*4882a593Smuzhiyun
44*4882a593SmuzhiyunLet's take the pioA on peripheral B
45*4882a593SmuzhiyunFrom the datasheet Table 10-2.
46*4882a593SmuzhiyunPeripheral B
47*4882a593SmuzhiyunPA0	MCDB0
48*4882a593SmuzhiyunPA1	MCCDB
49*4882a593SmuzhiyunPA2
50*4882a593SmuzhiyunPA3	MCDB3
51*4882a593SmuzhiyunPA4	MCDB2
52*4882a593SmuzhiyunPA5	MCDB1
53*4882a593SmuzhiyunPA6
54*4882a593SmuzhiyunPA7
55*4882a593SmuzhiyunPA8
56*4882a593SmuzhiyunPA9
57*4882a593SmuzhiyunPA10	ETX2
58*4882a593SmuzhiyunPA11	ETX3
59*4882a593SmuzhiyunPA12
60*4882a593SmuzhiyunPA13
61*4882a593SmuzhiyunPA14
62*4882a593SmuzhiyunPA15
63*4882a593SmuzhiyunPA16
64*4882a593SmuzhiyunPA17
65*4882a593SmuzhiyunPA18
66*4882a593SmuzhiyunPA19
67*4882a593SmuzhiyunPA20
68*4882a593SmuzhiyunPA21
69*4882a593SmuzhiyunPA22	ETXER
70*4882a593SmuzhiyunPA23	ETX2
71*4882a593SmuzhiyunPA24	ETX3
72*4882a593SmuzhiyunPA25	ERX2
73*4882a593SmuzhiyunPA26	ERX3
74*4882a593SmuzhiyunPA27	ERXCK
75*4882a593SmuzhiyunPA28	ECRS
76*4882a593SmuzhiyunPA29	ECOL
77*4882a593SmuzhiyunPA30	RXD4
78*4882a593SmuzhiyunPA31	TXD4
79*4882a593Smuzhiyun
80*4882a593Smuzhiyun=> 0xffc00c3b
81*4882a593Smuzhiyun
82*4882a593SmuzhiyunRequired properties for pin configuration node:
83*4882a593Smuzhiyun- atmel,pins: 4 integers array, represents a group of pins mux and config
84*4882a593Smuzhiyun  setting. The format is atmel,pins = <PIN_BANK PIN_BANK_NUM PERIPH CONFIG>.
85*4882a593Smuzhiyun  The PERIPH 0 means gpio, PERIPH 1 is periph A, PERIPH 2 is periph B...
86*4882a593Smuzhiyun  PIN_BANK 0 is pioA, PIN_BANK 1 is pioB...
87*4882a593Smuzhiyun
88*4882a593SmuzhiyunBits used for CONFIG:
89*4882a593SmuzhiyunPULL_UP		(1 << 0): indicate this pin needs a pull up.
90*4882a593SmuzhiyunMULTIDRIVE	(1 << 1): indicate this pin needs to be configured as multi-drive.
91*4882a593Smuzhiyun			Multi-drive is equivalent to open-drain type output.
92*4882a593SmuzhiyunDEGLITCH	(1 << 2): indicate this pin needs deglitch.
93*4882a593SmuzhiyunPULL_DOWN	(1 << 3): indicate this pin needs a pull down.
94*4882a593SmuzhiyunDIS_SCHMIT	(1 << 4): indicate this pin needs to the disable schmitt trigger.
95*4882a593SmuzhiyunDRIVE_STRENGTH (3 << 5): indicate the drive strength of the pin using the
96*4882a593Smuzhiyun			following values:
97*4882a593Smuzhiyun				00 - No change (reset state value kept)
98*4882a593Smuzhiyun				01 - Low
99*4882a593Smuzhiyun				10 - Medium
100*4882a593Smuzhiyun				11 - High
101*4882a593SmuzhiyunOUTPUT		(1 << 7): indicate this pin need to be configured as an output.
102*4882a593SmuzhiyunOUTPUT_VAL	(1 << 8): output val (1 = high, 0 = low)
103*4882a593SmuzhiyunSLEWRATE	(1 << 9): slew rate of the pin: 0 = disable, 1 = enable
104*4882a593SmuzhiyunDEBOUNCE	(1 << 16): indicate this pin needs debounce.
105*4882a593SmuzhiyunDEBOUNCE_VAL	(0x3fff << 17): debounce value.
106*4882a593Smuzhiyun
107*4882a593SmuzhiyunNOTE:
108*4882a593SmuzhiyunSome requirements for using atmel,at91rm9200-pinctrl binding:
109*4882a593Smuzhiyun1. We have pin function node defined under at91 controller node to represent
110*4882a593Smuzhiyun   what pinmux functions this SoC supports.
111*4882a593Smuzhiyun2. The driver can use the function node's name and pin configuration node's
112*4882a593Smuzhiyun   name describe the pin function and group hierarchy.
113*4882a593Smuzhiyun   For example, Linux at91 pinctrl driver takes the function node's name
114*4882a593Smuzhiyun   as the function name and pin configuration node's name as group name to
115*4882a593Smuzhiyun   create the map table.
116*4882a593Smuzhiyun3. Each pin configuration node should have a phandle, devices can set pins
117*4882a593Smuzhiyun   configurations by referring to the phandle of that pin configuration node.
118*4882a593Smuzhiyun4. The gpio controller must be describe in the pinctrl simple-bus.
119*4882a593Smuzhiyun
120*4882a593SmuzhiyunFor each bank the required properties are:
121*4882a593Smuzhiyun- compatible: "atmel,at91sam9x5-gpio" or "atmel,at91rm9200-gpio" or
122*4882a593Smuzhiyun  "microchip,sam9x60-gpio"
123*4882a593Smuzhiyun- reg: physical base address and length of the controller's registers
124*4882a593Smuzhiyun- interrupts: interrupt outputs from the controller
125*4882a593Smuzhiyun- interrupt-controller: marks the device node as an interrupt controller
126*4882a593Smuzhiyun- #interrupt-cells: should be 2; refer to ../interrupt-controller/interrupts.txt
127*4882a593Smuzhiyun  for more details.
128*4882a593Smuzhiyun- gpio-controller
129*4882a593Smuzhiyun- #gpio-cells: should be 2; the first cell is the GPIO number and the second
130*4882a593Smuzhiyun  cell specifies GPIO flags as defined in <dt-bindings/gpio/gpio.h>.
131*4882a593Smuzhiyun- clocks: bank clock
132*4882a593Smuzhiyun
133*4882a593SmuzhiyunExamples:
134*4882a593Smuzhiyun
135*4882a593Smuzhiyunpinctrl@fffff400 {
136*4882a593Smuzhiyun	#address-cells = <1>;
137*4882a593Smuzhiyun	#size-cells = <1>;
138*4882a593Smuzhiyun	ranges;
139*4882a593Smuzhiyun	compatible = "atmel,at91rm9200-pinctrl", "simple-bus";
140*4882a593Smuzhiyun	reg = <0xfffff400 0x600>;
141*4882a593Smuzhiyun
142*4882a593Smuzhiyun	pioA: gpio@fffff400 {
143*4882a593Smuzhiyun		compatible = "atmel,at91sam9x5-gpio";
144*4882a593Smuzhiyun		reg = <0xfffff400 0x200>;
145*4882a593Smuzhiyun		interrupts = <2 IRQ_TYPE_LEVEL_HIGH 1>;
146*4882a593Smuzhiyun		#gpio-cells = <2>;
147*4882a593Smuzhiyun		gpio-controller;
148*4882a593Smuzhiyun		interrupt-controller;
149*4882a593Smuzhiyun		#interrupt-cells = <2>;
150*4882a593Smuzhiyun		clocks = <&pmc PMC_TYPE_PERIPHERAL 2>;
151*4882a593Smuzhiyun	};
152*4882a593Smuzhiyun
153*4882a593Smuzhiyun	atmel,mux-mask = <
154*4882a593Smuzhiyun	      /*    A         B     */
155*4882a593Smuzhiyun	       0xffffffff 0xffc00c3b  /* pioA */
156*4882a593Smuzhiyun	       0xffffffff 0x7fff3ccf  /* pioB */
157*4882a593Smuzhiyun	       0xffffffff 0x007fffff  /* pioC */
158*4882a593Smuzhiyun	      >;
159*4882a593Smuzhiyun
160*4882a593Smuzhiyun	/* shared pinctrl settings */
161*4882a593Smuzhiyun	dbgu {
162*4882a593Smuzhiyun		pinctrl_dbgu: dbgu-0 {
163*4882a593Smuzhiyun			atmel,pins =
164*4882a593Smuzhiyun				<1 14 0x1 0x0	/* PB14 periph A */
165*4882a593Smuzhiyun				 1 15 0x1 0x1>;	/* PB15 periph A with pullup */
166*4882a593Smuzhiyun		};
167*4882a593Smuzhiyun	};
168*4882a593Smuzhiyun};
169*4882a593Smuzhiyun
170*4882a593Smuzhiyundbgu: serial@fffff200 {
171*4882a593Smuzhiyun	compatible = "atmel,at91sam9260-usart";
172*4882a593Smuzhiyun	reg = <0xfffff200 0x200>;
173*4882a593Smuzhiyun	interrupts = <1 4 7>;
174*4882a593Smuzhiyun	pinctrl-names = "default";
175*4882a593Smuzhiyun	pinctrl-0 = <&pinctrl_dbgu>;
176*4882a593Smuzhiyun};
177