xref: /OK3568_Linux_fs/kernel/Documentation/devicetree/bindings/pinctrl/fsl,imx27-pinctrl.txt (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun* Freescale IMX27 IOMUX Controller
2*4882a593Smuzhiyun
3*4882a593SmuzhiyunRequired properties:
4*4882a593Smuzhiyun- compatible: "fsl,imx27-iomuxc"
5*4882a593Smuzhiyun
6*4882a593SmuzhiyunThe iomuxc driver node should define subnodes containing of pinctrl configuration subnodes.
7*4882a593Smuzhiyun
8*4882a593SmuzhiyunRequired properties for pin configuration node:
9*4882a593Smuzhiyun- fsl,pins: three integers array, represents a group of pins mux and config
10*4882a593Smuzhiyun  setting. The format is fsl,pins = <PIN MUX_ID CONFIG>.
11*4882a593Smuzhiyun
12*4882a593Smuzhiyun  PIN is an integer between 0 and 0xbf. imx27 has 6 ports with 32 configurable
13*4882a593Smuzhiyun  configurable pins each. PIN is PORT * 32 + PORT_PIN, PORT_PIN is the pin
14*4882a593Smuzhiyun  number on the specific port (between 0 and 31).
15*4882a593Smuzhiyun
16*4882a593Smuzhiyun  MUX_ID is
17*4882a593Smuzhiyun    function + (direction << 2) + (gpio_oconf << 4) + (gpio_iconfa << 8) + (gpio_iconfb << 10)
18*4882a593Smuzhiyun
19*4882a593Smuzhiyun      function value is used to select the pin function.
20*4882a593Smuzhiyun      Possible values:
21*4882a593Smuzhiyun          0 - Primary function
22*4882a593Smuzhiyun          1 - Alternate function
23*4882a593Smuzhiyun          2 - GPIO
24*4882a593Smuzhiyun      Registers: GIUS (GPIO In Use), GPR (General Purpose Register)
25*4882a593Smuzhiyun
26*4882a593Smuzhiyun      direction defines the data direction of the pin.
27*4882a593Smuzhiyun      Possible values:
28*4882a593Smuzhiyun          0 - Input
29*4882a593Smuzhiyun          1 - Output
30*4882a593Smuzhiyun      Register: DDIR
31*4882a593Smuzhiyun
32*4882a593Smuzhiyun      gpio_oconf configures the gpio submodule output signal. This does not
33*4882a593Smuzhiyun      have any effect unless GPIO function is selected. A/B/C_IN are output
34*4882a593Smuzhiyun      signals of function blocks A,B and C. Specific function blocks are
35*4882a593Smuzhiyun      described in the reference manual.
36*4882a593Smuzhiyun      Possible values:
37*4882a593Smuzhiyun          0 - A_IN
38*4882a593Smuzhiyun          1 - B_IN
39*4882a593Smuzhiyun          2 - C_IN
40*4882a593Smuzhiyun          3 - Data Register
41*4882a593Smuzhiyun      Registers: OCR1, OCR2
42*4882a593Smuzhiyun
43*4882a593Smuzhiyun      gpio_iconfa/b configures the gpio submodule input to functionblocks A and
44*4882a593Smuzhiyun      B. GPIO function should be selected if this is configured.
45*4882a593Smuzhiyun      Possible values:
46*4882a593Smuzhiyun          0 - GPIO_IN
47*4882a593Smuzhiyun          1 - Interrupt Status Register
48*4882a593Smuzhiyun          2 - Pulldown
49*4882a593Smuzhiyun          3 - Pullup
50*4882a593Smuzhiyun      Registers ICONFA1, ICONFA2, ICONFB1 and ICONFB2
51*4882a593Smuzhiyun
52*4882a593Smuzhiyun  CONFIG can be 0 or 1, meaning Pullup disable/enable.
53*4882a593Smuzhiyun
54*4882a593Smuzhiyun
55*4882a593SmuzhiyunThe iomux controller has gpio child nodes which are embedded in the iomux
56*4882a593Smuzhiyuncontrol registers. They have to be defined as child nodes of the iomux device
57*4882a593Smuzhiyunnode. If gpio subnodes are defined "#address-cells", "#size-cells" and "ranges"
58*4882a593Smuzhiyunproperties for the iomux device node are required.
59*4882a593Smuzhiyun
60*4882a593SmuzhiyunExample:
61*4882a593Smuzhiyun
62*4882a593Smuzhiyuniomuxc: iomuxc@10015000 {
63*4882a593Smuzhiyun	compatible = "fsl,imx27-iomuxc";
64*4882a593Smuzhiyun	reg = <0x10015000 0x600>;
65*4882a593Smuzhiyun	#address-cells = <1>;
66*4882a593Smuzhiyun	#size-cells = <1>;
67*4882a593Smuzhiyun	ranges;
68*4882a593Smuzhiyun
69*4882a593Smuzhiyun	gpio1: gpio@10015000 {
70*4882a593Smuzhiyun		...
71*4882a593Smuzhiyun	};
72*4882a593Smuzhiyun
73*4882a593Smuzhiyun	...
74*4882a593Smuzhiyun
75*4882a593Smuzhiyun	uart {
76*4882a593Smuzhiyun		pinctrl_uart1: uart-1 {
77*4882a593Smuzhiyun			fsl,pins = <
78*4882a593Smuzhiyun				0x8c 0x004 0x0 /* UART1_TXD__UART1_TXD */
79*4882a593Smuzhiyun				0x8d 0x000 0x0 /* UART1_RXD__UART1_RXD */
80*4882a593Smuzhiyun				0x8e 0x004 0x0 /* UART1_CTS__UART1_CTS */
81*4882a593Smuzhiyun				0x8f 0x000 0x0 /* UART1_RTS__UART1_RTS */
82*4882a593Smuzhiyun			>;
83*4882a593Smuzhiyun		};
84*4882a593Smuzhiyun
85*4882a593Smuzhiyun		...
86*4882a593Smuzhiyun	};
87*4882a593Smuzhiyun};
88*4882a593Smuzhiyun
89*4882a593Smuzhiyun
90*4882a593SmuzhiyunFor convenience there are macros defined in imx27-pinfunc.h which provide PIN
91*4882a593Smuzhiyunand MUX_ID. They are structured as MX27_PAD_<Pad name>__<Signal name>. The names
92*4882a593Smuzhiyunare defined in the i.MX27 reference manual.
93*4882a593Smuzhiyun
94*4882a593SmuzhiyunThe above example using macros:
95*4882a593Smuzhiyun
96*4882a593Smuzhiyuniomuxc: iomuxc@10015000 {
97*4882a593Smuzhiyun	compatible = "fsl,imx27-iomuxc";
98*4882a593Smuzhiyun	reg = <0x10015000 0x600>;
99*4882a593Smuzhiyun	#address-cells = <1>;
100*4882a593Smuzhiyun	#size-cells = <1>;
101*4882a593Smuzhiyun	ranges;
102*4882a593Smuzhiyun
103*4882a593Smuzhiyun	gpio1: gpio@10015000 {
104*4882a593Smuzhiyun		...
105*4882a593Smuzhiyun	};
106*4882a593Smuzhiyun
107*4882a593Smuzhiyun	...
108*4882a593Smuzhiyun
109*4882a593Smuzhiyun	uart {
110*4882a593Smuzhiyun		pinctrl_uart1: uart-1 {
111*4882a593Smuzhiyun			fsl,pins = <
112*4882a593Smuzhiyun				MX27_PAD_UART1_TXD__UART1_TXD 0x0
113*4882a593Smuzhiyun				MX27_PAD_UART1_RXD__UART1_RXD 0x0
114*4882a593Smuzhiyun				MX27_PAD_UART1_CTS__UART1_CTS 0x0
115*4882a593Smuzhiyun				MX27_PAD_UART1_RTS__UART1_RTS 0x0
116*4882a593Smuzhiyun			>;
117*4882a593Smuzhiyun		};
118*4882a593Smuzhiyun
119*4882a593Smuzhiyun		...
120*4882a593Smuzhiyun	};
121*4882a593Smuzhiyun};
122