Commit | Line | Data |
---|---|---|
17723111 SG |
1 | * Freescale MXS Pin Controller |
2 | ||
3 | The pins controlled by mxs pin controller are organized in banks, each bank | |
4 | has 32 pins. Each pin has 4 multiplexing functions, and generally, the 4th | |
5 | function is GPIO. The configuration on the pins includes drive strength, | |
6 | voltage and pull-up. | |
7 | ||
8 | Required properties: | |
9 | - compatible: "fsl,imx23-pinctrl" or "fsl,imx28-pinctrl" | |
10 | - reg: Should contain the register physical address and length for the | |
11 | pin controller. | |
12 | ||
13 | Please refer to pinctrl-bindings.txt in this directory for details of the | |
14 | common pinctrl bindings used by client devices. | |
15 | ||
16 | The node of mxs pin controller acts as a container for an arbitrary number of | |
17 | subnodes. Each of these subnodes represents some desired configuration for | |
18 | a group of pins, and only affects those parameters that are explicitly listed. | |
19 | In other words, a subnode that describes a drive strength parameter implies no | |
20 | information about pull-up. For this reason, even seemingly boolean values are | |
21 | actually tristates in this binding: unspecified, off, or on. Unspecified is | |
22 | represented as an absent property, and off/on are represented as integer | |
23 | values 0 and 1. | |
24 | ||
25 | Those subnodes under mxs pin controller node will fall into two categories. | |
26 | One is to set up a group of pins for a function, both mux selection and pin | |
27 | configurations, and it's called group node in the binding document. The other | |
28 | one is to adjust the pin configuration for some particular pins that need a | |
29 | different configuration than what is defined in group node. The binding | |
30 | document calls this type of node config node. | |
31 | ||
32 | On mxs, there is no hardware pin group. The pin group in this binding only | |
33 | means a group of pins put together for particular peripheral to work in | |
34 | particular function, like SSP0 functioning as mmc0-8bit. That said, the | |
35 | group node should include all the pins needed for one function rather than | |
36 | having these pins defined in several group nodes. It also means each of | |
37 | "pinctrl-*" phandle in client device node should only have one group node | |
38 | pointed in there, while the phandle can have multiple config node referenced | |
39 | there to adjust configurations for some pins in the group. | |
40 | ||
41 | Required subnode-properties: | |
42 | - fsl,pinmux-ids: An integer array. Each integer in the array specify a pin | |
43 | with given mux function, with bank, pin and mux packed as below. | |
44 | ||
45 | [15..12] : bank number | |
46 | [11..4] : pin number | |
47 | [3..0] : mux selection | |
48 | ||
49 | This integer with mux selection packed is used as an entity by both group | |
50 | and config nodes to identify a pin. The mux selection in the integer takes | |
51 | effects only on group node, and will get ignored by driver with config node, | |
52 | since config node is only meant to set up pin configurations. | |
53 | ||
54 | Valid values for these integers are listed below. | |
55 | ||
56 | - reg: Should be the index of the group nodes for same function. This property | |
57 | is required only for group nodes, and should not be present in any config | |
58 | nodes. | |
59 | ||
60 | Optional subnode-properties: | |
61 | - fsl,drive-strength: Integer. | |
ff04b401 LW |
62 | 0: MXS_DRIVE_4mA |
63 | 1: MXS_DRIVE_8mA | |
64 | 2: MXS_DRIVE_12mA | |
65 | 3: MXS_DRIVE_16mA | |
17723111 | 66 | - fsl,voltage: Integer. |
ff04b401 LW |
67 | 0: MXS_VOLTAGE_LOW - 1.8 V |
68 | 1: MXS_VOLTAGE_HIGH - 3.3 V | |
17723111 | 69 | - fsl,pull-up: Integer. |
ff04b401 LW |
70 | 0: MXS_PULL_DISABLE - Disable the internal pull-up |
71 | 1: MXS_PULL_ENABLE - Enable the internal pull-up | |
17723111 | 72 | |
d8880a12 AB |
73 | Note that when enabling the pull-up, the internal pad keeper gets disabled. |
74 | Also, some pins doesn't have a pull up, in that case, setting the fsl,pull-up | |
75 | will only disable the internal pad keeper. | |
76 | ||
17723111 SG |
77 | Examples: |
78 | ||
79 | pinctrl@80018000 { | |
80 | #address-cells = <1>; | |
81 | #size-cells = <0>; | |
82 | compatible = "fsl,imx28-pinctrl"; | |
83 | reg = <0x80018000 2000>; | |
84 | ||
85 | mmc0_8bit_pins_a: mmc0-8bit@0 { | |
86 | reg = <0>; | |
87 | fsl,pinmux-ids = < | |
ff04b401 LW |
88 | MX28_PAD_SSP0_DATA0__SSP0_D0 |
89 | MX28_PAD_SSP0_DATA1__SSP0_D1 | |
90 | MX28_PAD_SSP0_DATA2__SSP0_D2 | |
91 | MX28_PAD_SSP0_DATA3__SSP0_D3 | |
92 | MX28_PAD_SSP0_DATA4__SSP0_D4 | |
93 | MX28_PAD_SSP0_DATA5__SSP0_D5 | |
94 | MX28_PAD_SSP0_DATA6__SSP0_D6 | |
95 | MX28_PAD_SSP0_DATA7__SSP0_D7 | |
96 | MX28_PAD_SSP0_CMD__SSP0_CMD | |
97 | MX28_PAD_SSP0_DETECT__SSP0_CARD_DETECT | |
98 | MX28_PAD_SSP0_SCK__SSP0_SCK | |
99 | >; | |
100 | fsl,drive-strength = <MXS_DRIVE_4mA>; | |
101 | fsl,voltage = <MXS_VOLTAGE_HIGH>; | |
102 | fsl,pull-up = <MXS_PULL_ENABLE>; | |
17723111 SG |
103 | }; |
104 | ||
105 | mmc_cd_cfg: mmc-cd-cfg { | |
ff04b401 LW |
106 | fsl,pinmux-ids = <MX28_PAD_SSP0_DETECT__SSP0_CARD_DETECT>; |
107 | fsl,pull-up = <MXS_PULL_DISABLE>; | |
17723111 SG |
108 | }; |
109 | ||
110 | mmc_sck_cfg: mmc-sck-cfg { | |
ff04b401 LW |
111 | fsl,pinmux-ids = <MX28_PAD_SSP0_SCK__SSP0_SCK>; |
112 | fsl,drive-strength = <MXS_DRIVE_12mA>; | |
113 | fsl,pull-up = <MXS_PULL_DISABLE>; | |
17723111 SG |
114 | }; |
115 | }; | |
116 | ||
117 | In this example, group node mmc0-8bit defines a group of pins for mxs SSP0 | |
118 | to function as a 8-bit mmc device, with 8mA, 3.3V and pull-up configurations | |
119 | applied on all these pins. And config nodes mmc-cd-cfg and mmc-sck-cfg are | |
120 | adjusting the configuration for pins card-detection and clock from what group | |
121 | node mmc0-8bit defines. Only the configuration properties to be adjusted need | |
122 | to be listed in the config nodes. | |
123 | ||
ff04b401 LW |
124 | Valid values for i.MX28/i.MX23 pinmux-id are defined in |
125 | arch/arm/boot/dts/imx28-pinfunc.h and arch/arm/boot/dts/imx23-pinfunc.h. | |
126 | The definitions for the padconfig properties can be found in | |
127 | arch/arm/boot/dts/mxs-pinfunc.h. |