Commit 3d1482fe authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'pinctrl-for-v3.5' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl

Pull pin control subsystem changes from Linus Walleij:

 - Generic Device Tree bindings and hooks for drivers so we can move
   over modern drivers to using this.

 - Device Tree bindings for Tegra SoCs.

 - Funneling some devicetree helper code for the drivers/of subsystem.

 - New pin control drivers for:
   * Freescale MXS
   * Freescale i.MX51
   * Freescale i.MX53
     All of these use Device Tree bindings.

 - Dummy pinctrl handles for stepwise migration to pinctrl, akin to
   dummy regulators.
 - Minor non-urgent fixes and improvments.

Fix up trivial conflicts in Documentation/driver-model/devres.txt and
drivers/pinctrl/core.c,

* tag 'pinctrl-for-v3.5' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl: (46 commits)
  pinctrl: pinctrl-imx: add imx51 pinctrl driver
  pinctrl: pinctrl-imx: add imx53 pinctrl driver
  pinctrl: pinctrl-pxa3xx: remove empty pinmux disable function
  pinctrl: pinctrl-mxs: remove empty pinmux disable function
  pinctrl: pinctrl-imx: remove empty pinmux disable function
  pinctrl: make pinmux disable function optional
  pinctrl: a minor error checking improvement for pinconf
  pinctrl: mxs: skip gpio nodes for group creation
  pinctrl: mxs: create group for pin config node
  pinctrl: (cosmetic) fix two entries in DocBook comments
  pinctrl: add more info to error msgs in pin_request
  pinctrl: add pinctrl-mxs support
  pinctrl: pinctrl-imx: add imx6q pinctrl driver
  pinctrl: pinctrl-imx: add imx pinctrl core driver
  dt: add of_get_child_count helper function
  pinctrl: support gpio request deferred probing
  pinctrl: add pinctrl_provide_dummies interface for platforms to use
  pinctrl: enhance reporting of errors when loading from DT
  pinctrl: add kerneldoc for pinctrl_ops device tree functions
  pinctrl: propagate map validation errors
  ...
parents ac180657 4f6a16bf
* Freescale IOMUX Controller (IOMUXC) for i.MX
The IOMUX Controller (IOMUXC), together with the IOMUX, enables the IC
to share one PAD to several functional blocks. The sharing is done by
multiplexing the PAD input/output signals. For each PAD there are up to
8 muxing options (called ALT modes). Since different modules require
different PAD settings (like pull up, keeper, etc) the IOMUXC controls
also the PAD settings parameters.
Please refer to pinctrl-bindings.txt in this directory for details of the
common pinctrl bindings used by client devices, including the meaning of the
phrase "pin configuration node".
Freescale IMX pin configuration node is a node of a group of pins which can be
used for a specific device or function. This node represents both mux and config
of the pins in that group. The 'mux' selects the function mode(also named mux
mode) this pin can work on and the 'config' configures various pad settings
such as pull-up, open drain, drive strength, etc.
Required properties for iomux controller:
- compatible: "fsl,<soc>-iomuxc"
Please refer to each fsl,<soc>-pinctrl.txt binding doc for supported SoCs.
Required properties for pin configuration node:
- fsl,pins: two integers array, represents a group of pins mux and config
setting. The format is fsl,pins = <PIN_FUNC_ID CONFIG>, PIN_FUNC_ID is a
pin working on a specific function, CONFIG is the pad setting value like
pull-up on this pin. Please refer to fsl,<soc>-pinctrl.txt for the valid
pins and functions of each SoC.
Bits used for CONFIG:
NO_PAD_CTL(1 << 31): indicate this pin does not need config.
SION(1 << 30): Software Input On Field.
Force the selected mux mode input path no matter of MUX_MODE functionality.
By default the input path is determined by functionality of the selected
mux mode (regular).
Other bits are used for PAD setting.
Please refer to each fsl,<soc>-pinctrl,txt binding doc for SoC specific part
of bits definitions.
NOTE:
Some requirements for using fsl,imx-pinctrl binding:
1. We have pin function node defined under iomux controller node to represent
what pinmux functions this SoC supports.
2. The pin configuration node intends to work on a specific function should
to be defined under that specific function node.
The function node's name should represent well about what function
this group of pins in this pin configuration node are working on.
3. The driver can use the function node's name and pin configuration node's
name describe the pin function and group hierarchy.
For example, Linux IMX pinctrl driver takes the function node's name
as the function name and pin configuration node's name as group name to
create the map table.
4. Each pin configuration node should have a phandle, devices can set pins
configurations by referring to the phandle of that pin configuration node.
Examples:
usdhc@0219c000 { /* uSDHC4 */
fsl,card-wired;
vmmc-supply = <&reg_3p3v>;
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_usdhc4_1>;
};
iomuxc@020e0000 {
compatible = "fsl,imx6q-iomuxc";
reg = <0x020e0000 0x4000>;
/* shared pinctrl settings */
usdhc4 {
pinctrl_usdhc4_1: usdhc4grp-1 {
fsl,pins = <1386 0x17059 /* MX6Q_PAD_SD4_CMD__USDHC4_CMD */
1392 0x10059 /* MX6Q_PAD_SD4_CLK__USDHC4_CLK */
1462 0x17059 /* MX6Q_PAD_SD4_DAT0__USDHC4_DAT0 */
1470 0x17059 /* MX6Q_PAD_SD4_DAT1__USDHC4_DAT1 */
1478 0x17059 /* MX6Q_PAD_SD4_DAT2__USDHC4_DAT2 */
1486 0x17059 /* MX6Q_PAD_SD4_DAT3__USDHC4_DAT3 */
1493 0x17059 /* MX6Q_PAD_SD4_DAT4__USDHC4_DAT4 */
1501 0x17059 /* MX6Q_PAD_SD4_DAT5__USDHC4_DAT5 */
1509 0x17059 /* MX6Q_PAD_SD4_DAT6__USDHC4_DAT6 */
1517 0x17059>; /* MX6Q_PAD_SD4_DAT7__USDHC4_DAT7 */
};
};
....
};
Refer to the IOMUXC controller chapter in imx6q datasheet,
0x17059 means enable hysteresis, 47KOhm Pull Up, 50Mhz speed,
80Ohm driver strength and Fast Slew Rate.
User should refer to each SoC spec to set the correct value.
TODO: when dtc macro support is available, we can change above raw data
to dt macro which can get better readability in dts file.
* Freescale IMX51 IOMUX Controller
Please refer to fsl,imx-pinctrl.txt in this directory for common binding part
and usage.
Required properties:
- compatible: "fsl,imx51-iomuxc"
- fsl,pins: two integers array, represents a group of pins mux and config
setting. The format is fsl,pins = <PIN_FUNC_ID CONFIG>, PIN_FUNC_ID is a
pin working on a specific function, CONFIG is the pad setting value like
pull-up for this pin. Please refer to imx51 datasheet for the valid pad
config settings.
CONFIG bits definition:
PAD_CTL_HVE (1 << 13)
PAD_CTL_HYS (1 << 8)
PAD_CTL_PKE (1 << 7)
PAD_CTL_PUE (1 << 6)
PAD_CTL_PUS_100K_DOWN (0 << 4)
PAD_CTL_PUS_47K_UP (1 << 4)
PAD_CTL_PUS_100K_UP (2 << 4)
PAD_CTL_PUS_22K_UP (3 << 4)
PAD_CTL_ODE (1 << 3)
PAD_CTL_DSE_LOW (0 << 1)
PAD_CTL_DSE_MED (1 << 1)
PAD_CTL_DSE_HIGH (2 << 1)
PAD_CTL_DSE_MAX (3 << 1)
PAD_CTL_SRE_FAST (1 << 0)
PAD_CTL_SRE_SLOW (0 << 0)
See below for available PIN_FUNC_ID for imx51:
MX51_PAD_EIM_D16__AUD4_RXFS 0
MX51_PAD_EIM_D16__AUD5_TXD 1
MX51_PAD_EIM_D16__EIM_D16 2
MX51_PAD_EIM_D16__GPIO2_0 3
MX51_PAD_EIM_D16__I2C1_SDA 4
MX51_PAD_EIM_D16__UART2_CTS 5
MX51_PAD_EIM_D16__USBH2_DATA0 6
MX51_PAD_EIM_D17__AUD5_RXD 7
MX51_PAD_EIM_D17__EIM_D17 8
MX51_PAD_EIM_D17__GPIO2_1 9
MX51_PAD_EIM_D17__UART2_RXD 10
MX51_PAD_EIM_D17__UART3_CTS 11
MX51_PAD_EIM_D17__USBH2_DATA1 12
MX51_PAD_EIM_D18__AUD5_TXC 13
MX51_PAD_EIM_D18__EIM_D18 14
MX51_PAD_EIM_D18__GPIO2_2 15
MX51_PAD_EIM_D18__UART2_TXD 16
MX51_PAD_EIM_D18__UART3_RTS 17
MX51_PAD_EIM_D18__USBH2_DATA2 18
MX51_PAD_EIM_D19__AUD4_RXC 19
MX51_PAD_EIM_D19__AUD5_TXFS 20
MX51_PAD_EIM_D19__EIM_D19 21
MX51_PAD_EIM_D19__GPIO2_3 22
MX51_PAD_EIM_D19__I2C1_SCL 23
MX51_PAD_EIM_D19__UART2_RTS 24
MX51_PAD_EIM_D19__USBH2_DATA3 25
MX51_PAD_EIM_D20__AUD4_TXD 26
MX51_PAD_EIM_D20__EIM_D20 27
MX51_PAD_EIM_D20__GPIO2_4 28
MX51_PAD_EIM_D20__SRTC_ALARM_DEB 29
MX51_PAD_EIM_D20__USBH2_DATA4 30
MX51_PAD_EIM_D21__AUD4_RXD 31
MX51_PAD_EIM_D21__EIM_D21 32
MX51_PAD_EIM_D21__GPIO2_5 33
MX51_PAD_EIM_D21__SRTC_ALARM_DEB 34
MX51_PAD_EIM_D21__USBH2_DATA5 35
MX51_PAD_EIM_D22__AUD4_TXC 36
MX51_PAD_EIM_D22__EIM_D22 37
MX51_PAD_EIM_D22__GPIO2_6 38
MX51_PAD_EIM_D22__USBH2_DATA6 39
MX51_PAD_EIM_D23__AUD4_TXFS 40
MX51_PAD_EIM_D23__EIM_D23 41
MX51_PAD_EIM_D23__GPIO2_7 42
MX51_PAD_EIM_D23__SPDIF_OUT1 43
MX51_PAD_EIM_D23__USBH2_DATA7 44
MX51_PAD_EIM_D24__AUD6_RXFS 45
MX51_PAD_EIM_D24__EIM_D24 46
MX51_PAD_EIM_D24__GPIO2_8 47
MX51_PAD_EIM_D24__I2C2_SDA 48
MX51_PAD_EIM_D24__UART3_CTS 49
MX51_PAD_EIM_D24__USBOTG_DATA0 50
MX51_PAD_EIM_D25__EIM_D25 51
MX51_PAD_EIM_D25__KEY_COL6 52
MX51_PAD_EIM_D25__UART2_CTS 53
MX51_PAD_EIM_D25__UART3_RXD 54
MX51_PAD_EIM_D25__USBOTG_DATA1 55
MX51_PAD_EIM_D26__EIM_D26 56
MX51_PAD_EIM_D26__KEY_COL7 57
MX51_PAD_EIM_D26__UART2_RTS 58
MX51_PAD_EIM_D26__UART3_TXD 59
MX51_PAD_EIM_D26__USBOTG_DATA2 60
MX51_PAD_EIM_D27__AUD6_RXC 61
MX51_PAD_EIM_D27__EIM_D27 62
MX51_PAD_EIM_D27__GPIO2_9 63
MX51_PAD_EIM_D27__I2C2_SCL 64
MX51_PAD_EIM_D27__UART3_RTS 65
MX51_PAD_EIM_D27__USBOTG_DATA3 66
MX51_PAD_EIM_D28__AUD6_TXD 67
MX51_PAD_EIM_D28__EIM_D28 68
MX51_PAD_EIM_D28__KEY_ROW4 69
MX51_PAD_EIM_D28__USBOTG_DATA4 70
MX51_PAD_EIM_D29__AUD6_RXD 71
MX51_PAD_EIM_D29__EIM_D29 72
MX51_PAD_EIM_D29__KEY_ROW5 73
MX51_PAD_EIM_D29__USBOTG_DATA5 74
MX51_PAD_EIM_D30__AUD6_TXC 75
MX51_PAD_EIM_D30__EIM_D30 76
MX51_PAD_EIM_D30__KEY_ROW6 77
MX51_PAD_EIM_D30__USBOTG_DATA6 78
MX51_PAD_EIM_D31__AUD6_TXFS 79
MX51_PAD_EIM_D31__EIM_D31 80
MX51_PAD_EIM_D31__KEY_ROW7 81
MX51_PAD_EIM_D31__USBOTG_DATA7 82
MX51_PAD_EIM_A16__EIM_A16 83
MX51_PAD_EIM_A16__GPIO2_10 84
MX51_PAD_EIM_A16__OSC_FREQ_SEL0 85
MX51_PAD_EIM_A17__EIM_A17 86
MX51_PAD_EIM_A17__GPIO2_11 87
MX51_PAD_EIM_A17__OSC_FREQ_SEL1 88
MX51_PAD_EIM_A18__BOOT_LPB0 89
MX51_PAD_EIM_A18__EIM_A18 90
MX51_PAD_EIM_A18__GPIO2_12 91
MX51_PAD_EIM_A19__BOOT_LPB1 92
MX51_PAD_EIM_A19__EIM_A19 93
MX51_PAD_EIM_A19__GPIO2_13 94
MX51_PAD_EIM_A20__BOOT_UART_SRC0 95
MX51_PAD_EIM_A20__EIM_A20 96
MX51_PAD_EIM_A20__GPIO2_14 97
MX51_PAD_EIM_A21__BOOT_UART_SRC1 98
MX51_PAD_EIM_A21__EIM_A21 99
MX51_PAD_EIM_A21__GPIO2_15 100
MX51_PAD_EIM_A22__EIM_A22 101
MX51_PAD_EIM_A22__GPIO2_16 102
MX51_PAD_EIM_A23__BOOT_HPN_EN 103
MX51_PAD_EIM_A23__EIM_A23 104
MX51_PAD_EIM_A23__GPIO2_17 105
MX51_PAD_EIM_A24__EIM_A24 106
MX51_PAD_EIM_A24__GPIO2_18 107
MX51_PAD_EIM_A24__USBH2_CLK 108
MX51_PAD_EIM_A25__DISP1_PIN4 109
MX51_PAD_EIM_A25__EIM_A25 110
MX51_PAD_EIM_A25__GPIO2_19 111
MX51_PAD_EIM_A25__USBH2_DIR 112
MX51_PAD_EIM_A26__CSI1_DATA_EN 113
MX51_PAD_EIM_A26__DISP2_EXT_CLK 114
MX51_PAD_EIM_A26__EIM_A26 115
MX51_PAD_EIM_A26__GPIO2_20 116
MX51_PAD_EIM_A26__USBH2_STP 117
MX51_PAD_EIM_A27__CSI2_DATA_EN 118
MX51_PAD_EIM_A27__DISP1_PIN1 119
MX51_PAD_EIM_A27__EIM_A27 120
MX51_PAD_EIM_A27__GPIO2_21 121
MX51_PAD_EIM_A27__USBH2_NXT 122
MX51_PAD_EIM_EB0__EIM_EB0 123
MX51_PAD_EIM_EB1__EIM_EB1 124
MX51_PAD_EIM_EB2__AUD5_RXFS 125
MX51_PAD_EIM_EB2__CSI1_D2 126
MX51_PAD_EIM_EB2__EIM_EB2 127
MX51_PAD_EIM_EB2__FEC_MDIO 128
MX51_PAD_EIM_EB2__GPIO2_22 129
MX51_PAD_EIM_EB2__GPT_CMPOUT1 130
MX51_PAD_EIM_EB3__AUD5_RXC 131
MX51_PAD_EIM_EB3__CSI1_D3 132
MX51_PAD_EIM_EB3__EIM_EB3 133
MX51_PAD_EIM_EB3__FEC_RDATA1 134
MX51_PAD_EIM_EB3__GPIO2_23 135
MX51_PAD_EIM_EB3__GPT_CMPOUT2 136
MX51_PAD_EIM_OE__EIM_OE 137
MX51_PAD_EIM_OE__GPIO2_24 138
MX51_PAD_EIM_CS0__EIM_CS0 139
MX51_PAD_EIM_CS0__GPIO2_25 140
MX51_PAD_EIM_CS1__EIM_CS1 141
MX51_PAD_EIM_CS1__GPIO2_26 142
MX51_PAD_EIM_CS2__AUD5_TXD 143
MX51_PAD_EIM_CS2__CSI1_D4 144
MX51_PAD_EIM_CS2__EIM_CS2 145
MX51_PAD_EIM_CS2__FEC_RDATA2 146
MX51_PAD_EIM_CS2__GPIO2_27 147
MX51_PAD_EIM_CS2__USBOTG_STP 148
MX51_PAD_EIM_CS3__AUD5_RXD 149
MX51_PAD_EIM_CS3__CSI1_D5 150
MX51_PAD_EIM_CS3__EIM_CS3 151
MX51_PAD_EIM_CS3__FEC_RDATA3 152
MX51_PAD_EIM_CS3__GPIO2_28 153
MX51_PAD_EIM_CS3__USBOTG_NXT 154
MX51_PAD_EIM_CS4__AUD5_TXC 155
MX51_PAD_EIM_CS4__CSI1_D6 156
MX51_PAD_EIM_CS4__EIM_CS4 157
MX51_PAD_EIM_CS4__FEC_RX_ER 158
MX51_PAD_EIM_CS4__GPIO2_29 159
MX51_PAD_EIM_CS4__USBOTG_CLK 160
MX51_PAD_EIM_CS5__AUD5_TXFS 161
MX51_PAD_EIM_CS5__CSI1_D7 162
MX51_PAD_EIM_CS5__DISP1_EXT_CLK 163
MX51_PAD_EIM_CS5__EIM_CS5 164
MX51_PAD_EIM_CS5__FEC_CRS 165
MX51_PAD_EIM_CS5__GPIO2_30 166
MX51_PAD_EIM_CS5__USBOTG_DIR 167
MX51_PAD_EIM_DTACK__EIM_DTACK 168
MX51_PAD_EIM_DTACK__GPIO2_31 169
MX51_PAD_EIM_LBA__EIM_LBA 170
MX51_PAD_EIM_LBA__GPIO3_1 171
MX51_PAD_EIM_CRE__EIM_CRE 172
MX51_PAD_EIM_CRE__GPIO3_2 173
MX51_PAD_DRAM_CS1__DRAM_CS1 174
MX51_PAD_NANDF_WE_B__GPIO3_3 175
MX51_PAD_NANDF_WE_B__NANDF_WE_B 176
MX51_PAD_NANDF_WE_B__PATA_DIOW 177
MX51_PAD_NANDF_WE_B__SD3_DATA0 178
MX51_PAD_NANDF_RE_B__GPIO3_4 179
MX51_PAD_NANDF_RE_B__NANDF_RE_B 180
MX51_PAD_NANDF_RE_B__PATA_DIOR 181
MX51_PAD_NANDF_RE_B__SD3_DATA1 182
MX51_PAD_NANDF_ALE__GPIO3_5 183
MX51_PAD_NANDF_ALE__NANDF_ALE 184
MX51_PAD_NANDF_ALE__PATA_BUFFER_EN 185
MX51_PAD_NANDF_CLE__GPIO3_6 186
MX51_PAD_NANDF_CLE__NANDF_CLE 187
MX51_PAD_NANDF_CLE__PATA_RESET_B 188
MX51_PAD_NANDF_WP_B__GPIO3_7 189
MX51_PAD_NANDF_WP_B__NANDF_WP_B 190
MX51_PAD_NANDF_WP_B__PATA_DMACK 191
MX51_PAD_NANDF_WP_B__SD3_DATA2 192
MX51_PAD_NANDF_RB0__ECSPI2_SS1 193
MX51_PAD_NANDF_RB0__GPIO3_8 194
MX51_PAD_NANDF_RB0__NANDF_RB0 195
MX51_PAD_NANDF_RB0__PATA_DMARQ 196
MX51_PAD_NANDF_RB0__SD3_DATA3 197
MX51_PAD_NANDF_RB1__CSPI_MOSI 198
MX51_PAD_NANDF_RB1__ECSPI2_RDY 199
MX51_PAD_NANDF_RB1__GPIO3_9 200
MX51_PAD_NANDF_RB1__NANDF_RB1 201
MX51_PAD_NANDF_RB1__PATA_IORDY 202
MX51_PAD_NANDF_RB1__SD4_CMD 203
MX51_PAD_NANDF_RB2__DISP2_WAIT 204
MX51_PAD_NANDF_RB2__ECSPI2_SCLK 205
MX51_PAD_NANDF_RB2__FEC_COL 206
MX51_PAD_NANDF_RB2__GPIO3_10 207
MX51_PAD_NANDF_RB2__NANDF_RB2 208
MX51_PAD_NANDF_RB2__USBH3_H3_DP 209
MX51_PAD_NANDF_RB2__USBH3_NXT 210
MX51_PAD_NANDF_RB3__DISP1_WAIT 211
MX51_PAD_NANDF_RB3__ECSPI2_MISO 212
MX51_PAD_NANDF_RB3__FEC_RX_CLK 213
MX51_PAD_NANDF_RB3__GPIO3_11 214
MX51_PAD_NANDF_RB3__NANDF_RB3 215
MX51_PAD_NANDF_RB3__USBH3_CLK 216
MX51_PAD_NANDF_RB3__USBH3_H3_DM 217
MX51_PAD_GPIO_NAND__GPIO_NAND 218
MX51_PAD_GPIO_NAND__PATA_INTRQ 219
MX51_PAD_NANDF_CS0__GPIO3_16 220
MX51_PAD_NANDF_CS0__NANDF_CS0 221
MX51_PAD_NANDF_CS1__GPIO3_17 222
MX51_PAD_NANDF_CS1__NANDF_CS1 223
MX51_PAD_NANDF_CS2__CSPI_SCLK 224
MX51_PAD_NANDF_CS2__FEC_TX_ER 225
MX51_PAD_NANDF_CS2__GPIO3_18 226
MX51_PAD_NANDF_CS2__NANDF_CS2 227
MX51_PAD_NANDF_CS2__PATA_CS_0 228
MX51_PAD_NANDF_CS2__SD4_CLK 229
MX51_PAD_NANDF_CS2__USBH3_H1_DP 230
MX51_PAD_NANDF_CS3__FEC_MDC 231
MX51_PAD_NANDF_CS3__GPIO3_19 232
MX51_PAD_NANDF_CS3__NANDF_CS3 233
MX51_PAD_NANDF_CS3__PATA_CS_1 234
MX51_PAD_NANDF_CS3__SD4_DAT0 235
MX51_PAD_NANDF_CS3__USBH3_H1_DM 236
MX51_PAD_NANDF_CS4__FEC_TDATA1 237
MX51_PAD_NANDF_CS4__GPIO3_20 238
MX51_PAD_NANDF_CS4__NANDF_CS4 239
MX51_PAD_NANDF_CS4__PATA_DA_0 240
MX51_PAD_NANDF_CS4__SD4_DAT1 241
MX51_PAD_NANDF_CS4__USBH3_STP 242
MX51_PAD_NANDF_CS5__FEC_TDATA2 243
MX51_PAD_NANDF_CS5__GPIO3_21 244
MX51_PAD_NANDF_CS5__NANDF_CS5 245
MX51_PAD_NANDF_CS5__PATA_DA_1 246
MX51_PAD_NANDF_CS5__SD4_DAT2 247
MX51_PAD_NANDF_CS5__USBH3_DIR 248
MX51_PAD_NANDF_CS6__CSPI_SS3 249
MX51_PAD_NANDF_CS6__FEC_TDATA3 250
MX51_PAD_NANDF_CS6__GPIO3_22 251
MX51_PAD_NANDF_CS6__NANDF_CS6 252
MX51_PAD_NANDF_CS6__PATA_DA_2 253
MX51_PAD_NANDF_CS6__SD4_DAT3 254
MX51_PAD_NANDF_CS7__FEC_TX_EN 255
MX51_PAD_NANDF_CS7__GPIO3_23 256
MX51_PAD_NANDF_CS7__NANDF_CS7 257
MX51_PAD_NANDF_CS7__SD3_CLK 258
MX51_PAD_NANDF_RDY_INT__ECSPI2_SS0 259
MX51_PAD_NANDF_RDY_INT__FEC_TX_CLK 260
MX51_PAD_NANDF_RDY_INT__GPIO3_24 261
MX51_PAD_NANDF_RDY_INT__NANDF_RDY_INT 262
MX51_PAD_NANDF_RDY_INT__SD3_CMD 263
MX51_PAD_NANDF_D15__ECSPI2_MOSI 264
MX51_PAD_NANDF_D15__GPIO3_25 265
MX51_PAD_NANDF_D15__NANDF_D15 266
MX51_PAD_NANDF_D15__PATA_DATA15 267
MX51_PAD_NANDF_D15__SD3_DAT7 268
MX51_PAD_NANDF_D14__ECSPI2_SS3 269
MX51_PAD_NANDF_D14__GPIO3_26 270
MX51_PAD_NANDF_D14__NANDF_D14 271
MX51_PAD_NANDF_D14__PATA_DATA14 272
MX51_PAD_NANDF_D14__SD3_DAT6 273
MX51_PAD_NANDF_D13__ECSPI2_SS2 274
MX51_PAD_NANDF_D13__GPIO3_27 275
MX51_PAD_NANDF_D13__NANDF_D13 276
MX51_PAD_NANDF_D13__PATA_DATA13 277
MX51_PAD_NANDF_D13__SD3_DAT5 278
MX51_PAD_NANDF_D12__ECSPI2_SS1 279
MX51_PAD_NANDF_D12__GPIO3_28 280
MX51_PAD_NANDF_D12__NANDF_D12 281
MX51_PAD_NANDF_D12__PATA_DATA12 282
MX51_PAD_NANDF_D12__SD3_DAT4 283
MX51_PAD_NANDF_D11__FEC_RX_DV 284
MX51_PAD_NANDF_D11__GPIO3_29 285
MX51_PAD_NANDF_D11__NANDF_D11 286
MX51_PAD_NANDF_D11__PATA_DATA11 287
MX51_PAD_NANDF_D11__SD3_DATA3 288
MX51_PAD_NANDF_D10__GPIO3_30 289
MX51_PAD_NANDF_D10__NANDF_D10 290
MX51_PAD_NANDF_D10__PATA_DATA10 291
MX51_PAD_NANDF_D10__SD3_DATA2 292
MX51_PAD_NANDF_D9__FEC_RDATA0 293
MX51_PAD_NANDF_D9__GPIO3_31 294
MX51_PAD_NANDF_D9__NANDF_D9 295
MX51_PAD_NANDF_D9__PATA_DATA9 296
MX51_PAD_NANDF_D9__SD3_DATA1 297
MX51_PAD_NANDF_D8__FEC_TDATA0 298
MX51_PAD_NANDF_D8__GPIO4_0 299
MX51_PAD_NANDF_D8__NANDF_D8 300
MX51_PAD_NANDF_D8__PATA_DATA8 301
MX51_PAD_NANDF_D8__SD3_DATA0 302
MX51_PAD_NANDF_D7__GPIO4_1 303
MX51_PAD_NANDF_D7__NANDF_D7 304
MX51_PAD_NANDF_D7__PATA_DATA7 305
MX51_PAD_NANDF_D7__USBH3_DATA0 306
MX51_PAD_NANDF_D6__GPIO4_2 307
MX51_PAD_NANDF_D6__NANDF_D6 308
MX51_PAD_NANDF_D6__PATA_DATA6 309
MX51_PAD_NANDF_D6__SD4_LCTL 310
MX51_PAD_NANDF_D6__USBH3_DATA1 311
MX51_PAD_NANDF_D5__GPIO4_3 312
MX51_PAD_NANDF_D5__NANDF_D5 313
MX51_PAD_NANDF_D5__PATA_DATA5 314
MX51_PAD_NANDF_D5__SD4_WP 315
MX51_PAD_NANDF_D5__USBH3_DATA2 316
MX51_PAD_NANDF_D4__GPIO4_4 317
MX51_PAD_NANDF_D4__NANDF_D4 318
MX51_PAD_NANDF_D4__PATA_DATA4 319
MX51_PAD_NANDF_D4__SD4_CD 320
MX51_PAD_NANDF_D4__USBH3_DATA3 321
MX51_PAD_NANDF_D3__GPIO4_5 322
MX51_PAD_NANDF_D3__NANDF_D3 323
MX51_PAD_NANDF_D3__PATA_DATA3 324
MX51_PAD_NANDF_D3__SD4_DAT4 325
MX51_PAD_NANDF_D3__USBH3_DATA4 326
MX51_PAD_NANDF_D2__GPIO4_6 327
MX51_PAD_NANDF_D2__NANDF_D2 328
MX51_PAD_NANDF_D2__PATA_DATA2 329
MX51_PAD_NANDF_D2__SD4_DAT5 330
MX51_PAD_NANDF_D2__USBH3_DATA5 331
MX51_PAD_NANDF_D1__GPIO4_7 332
MX51_PAD_NANDF_D1__NANDF_D1 333
MX51_PAD_NANDF_D1__PATA_DATA1 334
MX51_PAD_NANDF_D1__SD4_DAT6 335
MX51_PAD_NANDF_D1__USBH3_DATA6 336
MX51_PAD_NANDF_D0__GPIO4_8 337
MX51_PAD_NANDF_D0__NANDF_D0 338
MX51_PAD_NANDF_D0__PATA_DATA0 339
MX51_PAD_NANDF_D0__SD4_DAT7 340
MX51_PAD_NANDF_D0__USBH3_DATA7 341
MX51_PAD_CSI1_D8__CSI1_D8 342
MX51_PAD_CSI1_D8__GPIO3_12 343
MX51_PAD_CSI1_D9__CSI1_D9 344
MX51_PAD_CSI1_D9__GPIO3_13 345
MX51_PAD_CSI1_D10__CSI1_D10 346
MX51_PAD_CSI1_D11__CSI1_D11 347
MX51_PAD_CSI1_D12__CSI1_D12 348
MX51_PAD_CSI1_D13__CSI1_D13 349
MX51_PAD_CSI1_D14__CSI1_D14 350
MX51_PAD_CSI1_D15__CSI1_D15 351
MX51_PAD_CSI1_D16__CSI1_D16 352
MX51_PAD_CSI1_D17__CSI1_D17 353
MX51_PAD_CSI1_D18__CSI1_D18 354
MX51_PAD_CSI1_D19__CSI1_D19 355
MX51_PAD_CSI1_VSYNC__CSI1_VSYNC 356
MX51_PAD_CSI1_VSYNC__GPIO3_14 357
MX51_PAD_CSI1_HSYNC__CSI1_HSYNC 358
MX51_PAD_CSI1_HSYNC__GPIO3_15 359
MX51_PAD_CSI1_PIXCLK__CSI1_PIXCLK 360
MX51_PAD_CSI1_MCLK__CSI1_MCLK 361
MX51_PAD_CSI2_D12__CSI2_D12 362
MX51_PAD_CSI2_D12__GPIO4_9 363
MX51_PAD_CSI2_D13__CSI2_D13 364
MX51_PAD_CSI2_D13__GPIO4_10 365
MX51_PAD_CSI2_D14__CSI2_D14 366
MX51_PAD_CSI2_D15__CSI2_D15 367
MX51_PAD_CSI2_D16__CSI2_D16 368
MX51_PAD_CSI2_D17__CSI2_D17 369
MX51_PAD_CSI2_D18__CSI2_D18 370
MX51_PAD_CSI2_D18__GPIO4_11 371
MX51_PAD_CSI2_D19__CSI2_D19 372
MX51_PAD_CSI2_D19__GPIO4_12 373
MX51_PAD_CSI2_VSYNC__CSI2_VSYNC 374
MX51_PAD_CSI2_VSYNC__GPIO4_13 375
MX51_PAD_CSI2_HSYNC__CSI2_HSYNC 376
MX51_PAD_CSI2_HSYNC__GPIO4_14 377
MX51_PAD_CSI2_PIXCLK__CSI2_PIXCLK 378
MX51_PAD_CSI2_PIXCLK__GPIO4_15 379
MX51_PAD_I2C1_CLK__GPIO4_16 380
MX51_PAD_I2C1_CLK__I2C1_CLK 381
MX51_PAD_I2C1_DAT__GPIO4_17 382
MX51_PAD_I2C1_DAT__I2C1_DAT 383
MX51_PAD_AUD3_BB_TXD__AUD3_TXD 384
MX51_PAD_AUD3_BB_TXD__GPIO4_18 385
MX51_PAD_AUD3_BB_RXD__AUD3_RXD 386
MX51_PAD_AUD3_BB_RXD__GPIO4_19 387
MX51_PAD_AUD3_BB_RXD__UART3_RXD 388
MX51_PAD_AUD3_BB_CK__AUD3_TXC 389
MX51_PAD_AUD3_BB_CK__GPIO4_20 390
MX51_PAD_AUD3_BB_FS__AUD3_TXFS 391
MX51_PAD_AUD3_BB_FS__GPIO4_21 392
MX51_PAD_AUD3_BB_FS__UART3_TXD 393
MX51_PAD_CSPI1_MOSI__ECSPI1_MOSI 394
MX51_PAD_CSPI1_MOSI__GPIO4_22 395
MX51_PAD_CSPI1_MOSI__I2C1_SDA 396
MX51_PAD_CSPI1_MISO__AUD4_RXD 397
MX51_PAD_CSPI1_MISO__ECSPI1_MISO 398
MX51_PAD_CSPI1_MISO__GPIO4_23 399
MX51_PAD_CSPI1_SS0__AUD4_TXC 400
MX51_PAD_CSPI1_SS0__ECSPI1_SS0 401
MX51_PAD_CSPI1_SS0__GPIO4_24 402
MX51_PAD_CSPI1_SS1__AUD4_TXD 403
MX51_PAD_CSPI1_SS1__ECSPI1_SS1 404
MX51_PAD_CSPI1_SS1__GPIO4_25 405
MX51_PAD_CSPI1_RDY__AUD4_TXFS 406
MX51_PAD_CSPI1_RDY__ECSPI1_RDY 407
MX51_PAD_CSPI1_RDY__GPIO4_26 408
MX51_PAD_CSPI1_SCLK__ECSPI1_SCLK 409
MX51_PAD_CSPI1_SCLK__GPIO4_27 410
MX51_PAD_CSPI1_SCLK__I2C1_SCL 411
MX51_PAD_UART1_RXD__GPIO4_28 412
MX51_PAD_UART1_RXD__UART1_RXD 413
MX51_PAD_UART1_TXD__GPIO4_29 414
MX51_PAD_UART1_TXD__PWM2_PWMO 415
MX51_PAD_UART1_TXD__UART1_TXD 416
MX51_PAD_UART1_RTS__GPIO4_30 417
MX51_PAD_UART1_RTS__UART1_RTS 418
MX51_PAD_UART1_CTS__GPIO4_31 419
MX51_PAD_UART1_CTS__UART1_CTS 420
MX51_PAD_UART2_RXD__FIRI_TXD 421
MX51_PAD_UART2_RXD__GPIO1_20 422
MX51_PAD_UART2_RXD__UART2_RXD 423
MX51_PAD_UART2_TXD__FIRI_RXD 424
MX51_PAD_UART2_TXD__GPIO1_21 425
MX51_PAD_UART2_TXD__UART2_TXD 426
MX51_PAD_UART3_RXD__CSI1_D0 427
MX51_PAD_UART3_RXD__GPIO1_22 428
MX51_PAD_UART3_RXD__UART1_DTR 429
MX51_PAD_UART3_RXD__UART3_RXD 430
MX51_PAD_UART3_TXD__CSI1_D1 431
MX51_PAD_UART3_TXD__GPIO1_23 432
MX51_PAD_UART3_TXD__UART1_DSR 433
MX51_PAD_UART3_TXD__UART3_TXD 434
MX51_PAD_OWIRE_LINE__GPIO1_24 435
MX51_PAD_OWIRE_LINE__OWIRE_LINE 436
MX51_PAD_OWIRE_LINE__SPDIF_OUT 437
MX51_PAD_KEY_ROW0__KEY_ROW0 438
MX51_PAD_KEY_ROW1__KEY_ROW1 439
MX51_PAD_KEY_ROW2__KEY_ROW2 440
MX51_PAD_KEY_ROW3__KEY_ROW3 441
MX51_PAD_KEY_COL0__KEY_COL0 442
MX51_PAD_KEY_COL0__PLL1_BYP 443
MX51_PAD_KEY_COL1__KEY_COL1 444
MX51_PAD_KEY_COL1__PLL2_BYP 445
MX51_PAD_KEY_COL2__KEY_COL2 446
MX51_PAD_KEY_COL2__PLL3_BYP 447
MX51_PAD_KEY_COL3__KEY_COL3 448
MX51_PAD_KEY_COL4__I2C2_SCL 449
MX51_PAD_KEY_COL4__KEY_COL4 450
MX51_PAD_KEY_COL4__SPDIF_OUT1 451
MX51_PAD_KEY_COL4__UART1_RI 452
MX51_PAD_KEY_COL4__UART3_RTS 453
MX51_PAD_KEY_COL5__I2C2_SDA 454
MX51_PAD_KEY_COL5__KEY_COL5 455
MX51_PAD_KEY_COL5__UART1_DCD 456
MX51_PAD_KEY_COL5__UART3_CTS 457
MX51_PAD_USBH1_CLK__CSPI_SCLK 458
MX51_PAD_USBH1_CLK__GPIO1_25 459
MX51_PAD_USBH1_CLK__I2C2_SCL 460
MX51_PAD_USBH1_CLK__USBH1_CLK 461
MX51_PAD_USBH1_DIR__CSPI_MOSI 462
MX51_PAD_USBH1_DIR__GPIO1_26 463
MX51_PAD_USBH1_DIR__I2C2_SDA 464
MX51_PAD_USBH1_DIR__USBH1_DIR 465
MX51_PAD_USBH1_STP__CSPI_RDY 466
MX51_PAD_USBH1_STP__GPIO1_27 467
MX51_PAD_USBH1_STP__UART3_RXD 468
MX51_PAD_USBH1_STP__USBH1_STP 469
MX51_PAD_USBH1_NXT__CSPI_MISO 470
MX51_PAD_USBH1_NXT__GPIO1_28 471
MX51_PAD_USBH1_NXT__UART3_TXD 472
MX51_PAD_USBH1_NXT__USBH1_NXT 473
MX51_PAD_USBH1_DATA0__GPIO1_11 474
MX51_PAD_USBH1_DATA0__UART2_CTS 475
MX51_PAD_USBH1_DATA0__USBH1_DATA0 476
MX51_PAD_USBH1_DATA1__GPIO1_12 477
MX51_PAD_USBH1_DATA1__UART2_RXD 478
MX51_PAD_USBH1_DATA1__USBH1_DATA1 479
MX51_PAD_USBH1_DATA2__GPIO1_13 480
MX51_PAD_USBH1_DATA2__UART2_TXD 481
MX51_PAD_USBH1_DATA2__USBH1_DATA2 482
MX51_PAD_USBH1_DATA3__GPIO1_14 483
MX51_PAD_USBH1_DATA3__UART2_RTS 484
MX51_PAD_USBH1_DATA3__USBH1_DATA3 485
MX51_PAD_USBH1_DATA4__CSPI_SS0 486
MX51_PAD_USBH1_DATA4__GPIO1_15 487
MX51_PAD_USBH1_DATA4__USBH1_DATA4 488
MX51_PAD_USBH1_DATA5__CSPI_SS1 489
MX51_PAD_USBH1_DATA5__GPIO1_16 490
MX51_PAD_USBH1_DATA5__USBH1_DATA5 491
MX51_PAD_USBH1_DATA6__CSPI_SS3 492
MX51_PAD_USBH1_DATA6__GPIO1_17 493
MX51_PAD_USBH1_DATA6__USBH1_DATA6 494
MX51_PAD_USBH1_DATA7__ECSPI1_SS3 495
MX51_PAD_USBH1_DATA7__ECSPI2_SS3 496
MX51_PAD_USBH1_DATA7__GPIO1_18 497
MX51_PAD_USBH1_DATA7__USBH1_DATA7 498
MX51_PAD_DI1_PIN11__DI1_PIN11 499
MX51_PAD_DI1_PIN11__ECSPI1_SS2 500
MX51_PAD_DI1_PIN11__GPIO3_0 501
MX51_PAD_DI1_PIN12__DI1_PIN12 502
MX51_PAD_DI1_PIN12__GPIO3_1 503
MX51_PAD_DI1_PIN13__DI1_PIN13 504
MX51_PAD_DI1_PIN13__GPIO3_2 505
MX51_PAD_DI1_D0_CS__DI1_D0_CS 506
MX51_PAD_DI1_D0_CS__GPIO3_3 507
MX51_PAD_DI1_D1_CS__DI1_D1_CS 508
MX51_PAD_DI1_D1_CS__DISP1_PIN14 509
MX51_PAD_DI1_D1_CS__DISP1_PIN5 510
MX51_PAD_DI1_D1_CS__GPIO3_4 511
MX51_PAD_DISPB2_SER_DIN__DISP1_PIN1 512
MX51_PAD_DISPB2_SER_DIN__DISPB2_SER_DIN 513
MX51_PAD_DISPB2_SER_DIN__GPIO3_5 514
MX51_PAD_DISPB2_SER_DIO__DISP1_PIN6 515
MX51_PAD_DISPB2_SER_DIO__DISPB2_SER_DIO 516
MX51_PAD_DISPB2_SER_DIO__GPIO3_6 517
MX51_PAD_DISPB2_SER_CLK__DISP1_PIN17 518
MX51_PAD_DISPB2_SER_CLK__DISP1_PIN7 519
MX51_PAD_DISPB2_SER_CLK__DISPB2_SER_CLK 520
MX51_PAD_DISPB2_SER_CLK__GPIO3_7 521
MX51_PAD_DISPB2_SER_RS__DISP1_EXT_CLK 522
MX51_PAD_DISPB2_SER_RS__DISP1_PIN16 523
MX51_PAD_DISPB2_SER_RS__DISP1_PIN8 524
MX51_PAD_DISPB2_SER_RS__DISPB2_SER_RS 525
MX51_PAD_DISPB2_SER_RS__DISPB2_SER_RS 526
MX51_PAD_DISPB2_SER_RS__GPIO3_8 527
MX51_PAD_DISP1_DAT0__DISP1_DAT0 528
MX51_PAD_DISP1_DAT1__DISP1_DAT1 529
MX51_PAD_DISP1_DAT2__DISP1_DAT2 530
MX51_PAD_DISP1_DAT3__DISP1_DAT3 531
MX51_PAD_DISP1_DAT4__DISP1_DAT4 532
MX51_PAD_DISP1_DAT5__DISP1_DAT5 533
MX51_PAD_DISP1_DAT6__BOOT_USB_SRC 534
MX51_PAD_DISP1_DAT6__DISP1_DAT6 535
MX51_PAD_DISP1_DAT7__BOOT_EEPROM_CFG 536
MX51_PAD_DISP1_DAT7__DISP1_DAT7 537
MX51_PAD_DISP1_DAT8__BOOT_SRC0 538
MX51_PAD_DISP1_DAT8__DISP1_DAT8 539
MX51_PAD_DISP1_DAT9__BOOT_SRC1 540
MX51_PAD_DISP1_DAT9__DISP1_DAT9 541
MX51_PAD_DISP1_DAT10__BOOT_SPARE_SIZE 542
MX51_PAD_DISP1_DAT10__DISP1_DAT10 543
MX51_PAD_DISP1_DAT11__BOOT_LPB_FREQ2 544
MX51_PAD_DISP1_DAT11__DISP1_DAT11 545
MX51_PAD_DISP1_DAT12__BOOT_MLC_SEL 546
MX51_PAD_DISP1_DAT12__DISP1_DAT12 547
MX51_PAD_DISP1_DAT13__BOOT_MEM_CTL0 548
MX51_PAD_DISP1_DAT13__DISP1_DAT13 549
MX51_PAD_DISP1_DAT14__BOOT_MEM_CTL1 550
MX51_PAD_DISP1_DAT14__DISP1_DAT14 551
MX51_PAD_DISP1_DAT15__BOOT_BUS_WIDTH 552
MX51_PAD_DISP1_DAT15__DISP1_DAT15 553
MX51_PAD_DISP1_DAT16__BOOT_PAGE_SIZE0 554
MX51_PAD_DISP1_DAT16__DISP1_DAT16 555
MX51_PAD_DISP1_DAT17__BOOT_PAGE_SIZE1 556
MX51_PAD_DISP1_DAT17__DISP1_DAT17 557
MX51_PAD_DISP1_DAT18__BOOT_WEIM_MUXED0 558
MX51_PAD_DISP1_DAT18__DISP1_DAT18 559
MX51_PAD_DISP1_DAT18__DISP2_PIN11 560
MX51_PAD_DISP1_DAT18__DISP2_PIN5 561
MX51_PAD_DISP1_DAT19__BOOT_WEIM_MUXED1 562
MX51_PAD_DISP1_DAT19__DISP1_DAT19 563
MX51_PAD_DISP1_DAT19__DISP2_PIN12 564
MX51_PAD_DISP1_DAT19__DISP2_PIN6 565
MX51_PAD_DISP1_DAT20__BOOT_MEM_TYPE0 566
MX51_PAD_DISP1_DAT20__DISP1_DAT20 567
MX51_PAD_DISP1_DAT20__DISP2_PIN13 568
MX51_PAD_DISP1_DAT20__DISP2_PIN7 569
MX51_PAD_DISP1_DAT21__BOOT_MEM_TYPE1 570
MX51_PAD_DISP1_DAT21__DISP1_DAT21 571
MX51_PAD_DISP1_DAT21__DISP2_PIN14 572
MX51_PAD_DISP1_DAT21__DISP2_PIN8 573
MX51_PAD_DISP1_DAT22__BOOT_LPB_FREQ0 574
MX51_PAD_DISP1_DAT22__DISP1_DAT22 575
MX51_PAD_DISP1_DAT22__DISP2_D0_CS 576
MX51_PAD_DISP1_DAT22__DISP2_DAT16 577
MX51_PAD_DISP1_DAT23__BOOT_LPB_FREQ1 578
MX51_PAD_DISP1_DAT23__DISP1_DAT23 579
MX51_PAD_DISP1_DAT23__DISP2_D1_CS 580
MX51_PAD_DISP1_DAT23__DISP2_DAT17 581
MX51_PAD_DISP1_DAT23__DISP2_SER_CS 582
MX51_PAD_DI1_PIN3__DI1_PIN3 583
MX51_PAD_DI1_PIN2__DI1_PIN2 584
MX51_PAD_DI_GP2__DISP1_SER_CLK 585
MX51_PAD_DI_GP2__DISP2_WAIT 586
MX51_PAD_DI_GP3__CSI1_DATA_EN 587
MX51_PAD_DI_GP3__DISP1_SER_DIO 588
MX51_PAD_DI_GP3__FEC_TX_ER 589
MX51_PAD_DI2_PIN4__CSI2_DATA_EN 590
MX51_PAD_DI2_PIN4__DI2_PIN4 591
MX51_PAD_DI2_PIN4__FEC_CRS 592
MX51_PAD_DI2_PIN2__DI2_PIN2 593
MX51_PAD_DI2_PIN2__FEC_MDC 594
MX51_PAD_DI2_PIN3__DI2_PIN3 595
MX51_PAD_DI2_PIN3__FEC_MDIO 596
MX51_PAD_DI2_DISP_CLK__DI2_DISP_CLK 597
MX51_PAD_DI2_DISP_CLK__FEC_RDATA1 598
MX51_PAD_DI_GP4__DI2_PIN15 599
MX51_PAD_DI_GP4__DISP1_SER_DIN 600
MX51_PAD_DI_GP4__DISP2_PIN1 601
MX51_PAD_DI_GP4__FEC_RDATA2 602
MX51_PAD_DISP2_DAT0__DISP2_DAT0 603
MX51_PAD_DISP2_DAT0__FEC_RDATA3 604
MX51_PAD_DISP2_DAT0__KEY_COL6 605
MX51_PAD_DISP2_DAT0__UART3_RXD 606
MX51_PAD_DISP2_DAT0__USBH3_CLK 607
MX51_PAD_DISP2_DAT1__DISP2_DAT1 608
MX51_PAD_DISP2_DAT1__FEC_RX_ER 609
MX51_PAD_DISP2_DAT1__KEY_COL7 610
MX51_PAD_DISP2_DAT1__UART3_TXD 611
MX51_PAD_DISP2_DAT1__USBH3_DIR 612
MX51_PAD_DISP2_DAT2__DISP2_DAT2 613
MX51_PAD_DISP2_DAT3__DISP2_DAT3 614
MX51_PAD_DISP2_DAT4__DISP2_DAT4 615
MX51_PAD_DISP2_DAT5__DISP2_DAT5 616
MX51_PAD_DISP2_DAT6__DISP2_DAT6 617
MX51_PAD_DISP2_DAT6__FEC_TDATA1 618
MX51_PAD_DISP2_DAT6__GPIO1_19 619
MX51_PAD_DISP2_DAT6__KEY_ROW4 620
MX51_PAD_DISP2_DAT6__USBH3_STP 621
MX51_PAD_DISP2_DAT7__DISP2_DAT7 622
MX51_PAD_DISP2_DAT7__FEC_TDATA2 623
MX51_PAD_DISP2_DAT7__GPIO1_29 624
MX51_PAD_DISP2_DAT7__KEY_ROW5 625
MX51_PAD_DISP2_DAT7__USBH3_NXT 626
MX51_PAD_DISP2_DAT8__DISP2_DAT8 627
MX51_PAD_DISP2_DAT8__FEC_TDATA3 628
MX51_PAD_DISP2_DAT8__GPIO1_30 629
MX51_PAD_DISP2_DAT8__KEY_ROW6 630
MX51_PAD_DISP2_DAT8__USBH3_DATA0 631
MX51_PAD_DISP2_DAT9__AUD6_RXC 632
MX51_PAD_DISP2_DAT9__DISP2_DAT9 633
MX51_PAD_DISP2_DAT9__FEC_TX_EN 634
MX51_PAD_DISP2_DAT9__GPIO1_31 635
MX51_PAD_DISP2_DAT9__USBH3_DATA1 636
MX51_PAD_DISP2_DAT10__DISP2_DAT10 637
MX51_PAD_DISP2_DAT10__DISP2_SER_CS 638
MX51_PAD_DISP2_DAT10__FEC_COL 639
MX51_PAD_DISP2_DAT10__KEY_ROW7 640
MX51_PAD_DISP2_DAT10__USBH3_DATA2 641
MX51_PAD_DISP2_DAT11__AUD6_TXD 642
MX51_PAD_DISP2_DAT11__DISP2_DAT11 643
MX51_PAD_DISP2_DAT11__FEC_RX_CLK 644
MX51_PAD_DISP2_DAT11__GPIO1_10 645
MX51_PAD_DISP2_DAT11__USBH3_DATA3 646
MX51_PAD_DISP2_DAT12__AUD6_RXD 647
MX51_PAD_DISP2_DAT12__DISP2_DAT12 648
MX51_PAD_DISP2_DAT12__FEC_RX_DV 649
MX51_PAD_DISP2_DAT12__USBH3_DATA4 650
MX51_PAD_DISP2_DAT13__AUD6_TXC 651
MX51_PAD_DISP2_DAT13__DISP2_DAT13 652
MX51_PAD_DISP2_DAT13__FEC_TX_CLK 653
MX51_PAD_DISP2_DAT13__USBH3_DATA5 654
MX51_PAD_DISP2_DAT14__AUD6_TXFS 655
MX51_PAD_DISP2_DAT14__DISP2_DAT14 656
MX51_PAD_DISP2_DAT14__FEC_RDATA0 657
MX51_PAD_DISP2_DAT14__USBH3_DATA6 658
MX51_PAD_DISP2_DAT15__AUD6_RXFS 659
MX51_PAD_DISP2_DAT15__DISP1_SER_CS 660
MX51_PAD_DISP2_DAT15__DISP2_DAT15 661
MX51_PAD_DISP2_DAT15__FEC_TDATA0 662
MX51_PAD_DISP2_DAT15__USBH3_DATA7 663
MX51_PAD_SD1_CMD__AUD5_RXFS 664
MX51_PAD_SD1_CMD__CSPI_MOSI 665
MX51_PAD_SD1_CMD__SD1_CMD 666
MX51_PAD_SD1_CLK__AUD5_RXC 667
MX51_PAD_SD1_CLK__CSPI_SCLK 668
MX51_PAD_SD1_CLK__SD1_CLK 669
MX51_PAD_SD1_DATA0__AUD5_TXD 670
MX51_PAD_SD1_DATA0__CSPI_MISO 671
MX51_PAD_SD1_DATA0__SD1_DATA0 672
MX51_PAD_EIM_DA0__EIM_DA0 673
MX51_PAD_EIM_DA1__EIM_DA1 674
MX51_PAD_EIM_DA2__EIM_DA2 675
MX51_PAD_EIM_DA3__EIM_DA3 676
MX51_PAD_SD1_DATA1__AUD5_RXD 677
MX51_PAD_SD1_DATA1__SD1_DATA1 678
MX51_PAD_EIM_DA4__EIM_DA4 679
MX51_PAD_EIM_DA5__EIM_DA5 680
MX51_PAD_EIM_DA6__EIM_DA6 681
MX51_PAD_EIM_DA7__EIM_DA7 682
MX51_PAD_SD1_DATA2__AUD5_TXC 683
MX51_PAD_SD1_DATA2__SD1_DATA2 684
MX51_PAD_EIM_DA10__EIM_DA10 685
MX51_PAD_EIM_DA11__EIM_DA11 686
MX51_PAD_EIM_DA8__EIM_DA8 687
MX51_PAD_EIM_DA9__EIM_DA9 688
MX51_PAD_SD1_DATA3__AUD5_TXFS 689
MX51_PAD_SD1_DATA3__CSPI_SS1 690
MX51_PAD_SD1_DATA3__SD1_DATA3 691
MX51_PAD_GPIO1_0__CSPI_SS2 692
MX51_PAD_GPIO1_0__GPIO1_0 693
MX51_PAD_GPIO1_0__SD1_CD 694
MX51_PAD_GPIO1_1__CSPI_MISO 695
MX51_PAD_GPIO1_1__GPIO1_1 696
MX51_PAD_GPIO1_1__SD1_WP 697
MX51_PAD_EIM_DA12__EIM_DA12 698
MX51_PAD_EIM_DA13__EIM_DA13 699
MX51_PAD_EIM_DA14__EIM_DA14 700
MX51_PAD_EIM_DA15__EIM_DA15 701
MX51_PAD_SD2_CMD__CSPI_MOSI 702
MX51_PAD_SD2_CMD__I2C1_SCL 703
MX51_PAD_SD2_CMD__SD2_CMD 704
MX51_PAD_SD2_CLK__CSPI_SCLK 705
MX51_PAD_SD2_CLK__I2C1_SDA 706
MX51_PAD_SD2_CLK__SD2_CLK 707
MX51_PAD_SD2_DATA0__CSPI_MISO 708
MX51_PAD_SD2_DATA0__SD1_DAT4 709
MX51_PAD_SD2_DATA0__SD2_DATA0 710
MX51_PAD_SD2_DATA1__SD1_DAT5 711
MX51_PAD_SD2_DATA1__SD2_DATA1 712
MX51_PAD_SD2_DATA1__USBH3_H2_DP 713
MX51_PAD_SD2_DATA2__SD1_DAT6 714
MX51_PAD_SD2_DATA2__SD2_DATA2 715
MX51_PAD_SD2_DATA2__USBH3_H2_DM 716
MX51_PAD_SD2_DATA3__CSPI_SS2 717
MX51_PAD_SD2_DATA3__SD1_DAT7 718
MX51_PAD_SD2_DATA3__SD2_DATA3 719
MX51_PAD_GPIO1_2__CCM_OUT_2 720
MX51_PAD_GPIO1_2__GPIO1_2 721
MX51_PAD_GPIO1_2__I2C2_SCL 722
MX51_PAD_GPIO1_2__PLL1_BYP 723
MX51_PAD_GPIO1_2__PWM1_PWMO 724
MX51_PAD_GPIO1_3__GPIO1_3 725
MX51_PAD_GPIO1_3__I2C2_SDA 726
MX51_PAD_GPIO1_3__PLL2_BYP 727
MX51_PAD_GPIO1_3__PWM2_PWMO 728
MX51_PAD_PMIC_INT_REQ__PMIC_INT_REQ 729
MX51_PAD_PMIC_INT_REQ__PMIC_PMU_IRQ_B 730
MX51_PAD_GPIO1_4__DISP2_EXT_CLK 731
MX51_PAD_GPIO1_4__EIM_RDY 732
MX51_PAD_GPIO1_4__GPIO1_4 733
MX51_PAD_GPIO1_4__WDOG1_WDOG_B 734
MX51_PAD_GPIO1_5__CSI2_MCLK 735
MX51_PAD_GPIO1_5__DISP2_PIN16 736
MX51_PAD_GPIO1_5__GPIO1_5 737
MX51_PAD_GPIO1_5__WDOG2_WDOG_B 738
MX51_PAD_GPIO1_6__DISP2_PIN17 739
MX51_PAD_GPIO1_6__GPIO1_6 740
MX51_PAD_GPIO1_6__REF_EN_B 741
MX51_PAD_GPIO1_7__CCM_OUT_0 742
MX51_PAD_GPIO1_7__GPIO1_7 743
MX51_PAD_GPIO1_7__SD2_WP 744
MX51_PAD_GPIO1_7__SPDIF_OUT1 745
MX51_PAD_GPIO1_8__CSI2_DATA_EN 746
MX51_PAD_GPIO1_8__GPIO1_8 747
MX51_PAD_GPIO1_8__SD2_CD 748
MX51_PAD_GPIO1_8__USBH3_PWR 749
MX51_PAD_GPIO1_9__CCM_OUT_1 750
MX51_PAD_GPIO1_9__DISP2_D1_CS 751
MX51_PAD_GPIO1_9__DISP2_SER_CS 752
MX51_PAD_GPIO1_9__GPIO1_9 753
MX51_PAD_GPIO1_9__SD2_LCTL 754
MX51_PAD_GPIO1_9__USBH3_OC 755
* Freescale IMX53 IOMUX Controller
Please refer to fsl,imx-pinctrl.txt in this directory for common binding part
and usage.
Required properties:
- compatible: "fsl,imx53-iomuxc"
- fsl,pins: two integers array, represents a group of pins mux and config
setting. The format is fsl,pins = <PIN_FUNC_ID CONFIG>, PIN_FUNC_ID is a
pin working on a specific function, CONFIG is the pad setting value like
pull-up for this pin. Please refer to imx53 datasheet for the valid pad
config settings.
CONFIG bits definition:
PAD_CTL_HVE (1 << 13)
PAD_CTL_HYS (1 << 8)
PAD_CTL_PKE (1 << 7)
PAD_CTL_PUE (1 << 6)
PAD_CTL_PUS_100K_DOWN (0 << 4)
PAD_CTL_PUS_47K_UP (1 << 4)
PAD_CTL_PUS_100K_UP (2 << 4)
PAD_CTL_PUS_22K_UP (3 << 4)
PAD_CTL_ODE (1 << 3)
PAD_CTL_DSE_LOW (0 << 1)
PAD_CTL_DSE_MED (1 << 1)
PAD_CTL_DSE_HIGH (2 << 1)
PAD_CTL_DSE_MAX (3 << 1)
PAD_CTL_SRE_FAST (1 << 0)
PAD_CTL_SRE_SLOW (0 << 0)
See below for available PIN_FUNC_ID for imx53:
MX53_PAD_GPIO_19__KPP_COL_5 0
MX53_PAD_GPIO_19__GPIO4_5 1
MX53_PAD_GPIO_19__CCM_CLKO 2
MX53_PAD_GPIO_19__SPDIF_OUT1 3
MX53_PAD_GPIO_19__RTC_CE_RTC_EXT_TRIG2 4
MX53_PAD_GPIO_19__ECSPI1_RDY 5
MX53_PAD_GPIO_19__FEC_TDATA_3 6
MX53_PAD_GPIO_19__SRC_INT_BOOT 7
MX53_PAD_KEY_COL0__KPP_COL_0 8
MX53_PAD_KEY_COL0__GPIO4_6 9
MX53_PAD_KEY_COL0__AUDMUX_AUD5_TXC 10
MX53_PAD_KEY_COL0__UART4_TXD_MUX 11
MX53_PAD_KEY_COL0__ECSPI1_SCLK 12
MX53_PAD_KEY_COL0__FEC_RDATA_3 13
MX53_PAD_KEY_COL0__SRC_ANY_PU_RST 14
MX53_PAD_KEY_ROW0__KPP_ROW_0 15
MX53_PAD_KEY_ROW0__GPIO4_7 16
MX53_PAD_KEY_ROW0__AUDMUX_AUD5_TXD 17
MX53_PAD_KEY_ROW0__UART4_RXD_MUX 18
MX53_PAD_KEY_ROW0__ECSPI1_MOSI 19
MX53_PAD_KEY_ROW0__FEC_TX_ER 20
MX53_PAD_KEY_COL1__KPP_COL_1 21
MX53_PAD_KEY_COL1__GPIO4_8 22
MX53_PAD_KEY_COL1__AUDMUX_AUD5_TXFS 23
MX53_PAD_KEY_COL1__UART5_TXD_MUX 24
MX53_PAD_KEY_COL1__ECSPI1_MISO 25
MX53_PAD_KEY_COL1__FEC_RX_CLK 26
MX53_PAD_KEY_COL1__USBPHY1_TXREADY 27
MX53_PAD_KEY_ROW1__KPP_ROW_1 28
MX53_PAD_KEY_ROW1__GPIO4_9 29
MX53_PAD_KEY_ROW1__AUDMUX_AUD5_RXD 30
MX53_PAD_KEY_ROW1__UART5_RXD_MUX 31
MX53_PAD_KEY_ROW1__ECSPI1_SS0 32
MX53_PAD_KEY_ROW1__FEC_COL 33
MX53_PAD_KEY_ROW1__USBPHY1_RXVALID 34
MX53_PAD_KEY_COL2__KPP_COL_2 35
MX53_PAD_KEY_COL2__GPIO4_10 36
MX53_PAD_KEY_COL2__CAN1_TXCAN 37
MX53_PAD_KEY_COL2__FEC_MDIO 38
MX53_PAD_KEY_COL2__ECSPI1_SS1 39
MX53_PAD_KEY_COL2__FEC_RDATA_2 40
MX53_PAD_KEY_COL2__USBPHY1_RXACTIVE 41
MX53_PAD_KEY_ROW2__KPP_ROW_2 42
MX53_PAD_KEY_ROW2__GPIO4_11 43
MX53_PAD_KEY_ROW2__CAN1_RXCAN 44
MX53_PAD_KEY_ROW2__FEC_MDC 45
MX53_PAD_KEY_ROW2__ECSPI1_SS2 46
MX53_PAD_KEY_ROW2__FEC_TDATA_2 47
MX53_PAD_KEY_ROW2__USBPHY1_RXERROR 48
MX53_PAD_KEY_COL3__KPP_COL_3 49
MX53_PAD_KEY_COL3__GPIO4_12 50
MX53_PAD_KEY_COL3__USBOH3_H2_DP 51
MX53_PAD_KEY_COL3__SPDIF_IN1 52
MX53_PAD_KEY_COL3__I2C2_SCL 53
MX53_PAD_KEY_COL3__ECSPI1_SS3 54
MX53_PAD_KEY_COL3__FEC_CRS 55
MX53_PAD_KEY_COL3__USBPHY1_SIECLOCK 56
MX53_PAD_KEY_ROW3__KPP_ROW_3 57
MX53_PAD_KEY_ROW3__GPIO4_13 58
MX53_PAD_KEY_ROW3__USBOH3_H2_DM 59
MX53_PAD_KEY_ROW3__CCM_ASRC_EXT_CLK 60
MX53_PAD_KEY_ROW3__I2C2_SDA 61
MX53_PAD_KEY_ROW3__OSC32K_32K_OUT 62
MX53_PAD_KEY_ROW3__CCM_PLL4_BYP 63
MX53_PAD_KEY_ROW3__USBPHY1_LINESTATE_0 64
MX53_PAD_KEY_COL4__KPP_COL_4 65
MX53_PAD_KEY_COL4__GPIO4_14 66
MX53_PAD_KEY_COL4__CAN2_TXCAN 67
MX53_PAD_KEY_COL4__IPU_SISG_4 68
MX53_PAD_KEY_COL4__UART5_RTS 69
MX53_PAD_KEY_COL4__USBOH3_USBOTG_OC 70
MX53_PAD_KEY_COL4__USBPHY1_LINESTATE_1 71
MX53_PAD_KEY_ROW4__KPP_ROW_4 72
MX53_PAD_KEY_ROW4__GPIO4_15 73
MX53_PAD_KEY_ROW4__CAN2_RXCAN 74
MX53_PAD_KEY_ROW4__IPU_SISG_5 75
MX53_PAD_KEY_ROW4__UART5_CTS 76
MX53_PAD_KEY_ROW4__USBOH3_USBOTG_PWR 77
MX53_PAD_KEY_ROW4__USBPHY1_VBUSVALID 78
MX53_PAD_DI0_DISP_CLK__IPU_DI0_DISP_CLK 79
MX53_PAD_DI0_DISP_CLK__GPIO4_16 80
MX53_PAD_DI0_DISP_CLK__USBOH3_USBH2_DIR 81
MX53_PAD_DI0_DISP_CLK__SDMA_DEBUG_CORE_STATE_0 82
MX53_PAD_DI0_DISP_CLK__EMI_EMI_DEBUG_0 83
MX53_PAD_DI0_DISP_CLK__USBPHY1_AVALID 84
MX53_PAD_DI0_PIN15__IPU_DI0_PIN15 85
MX53_PAD_DI0_PIN15__GPIO4_17 86
MX53_PAD_DI0_PIN15__AUDMUX_AUD6_TXC 87
MX53_PAD_DI0_PIN15__SDMA_DEBUG_CORE_STATE_1 88
MX53_PAD_DI0_PIN15__EMI_EMI_DEBUG_1 89
MX53_PAD_DI0_PIN15__USBPHY1_BVALID 90
MX53_PAD_DI0_PIN2__IPU_DI0_PIN2 91
MX53_PAD_DI0_PIN2__GPIO4_18 92
MX53_PAD_DI0_PIN2__AUDMUX_AUD6_TXD 93
MX53_PAD_DI0_PIN2__SDMA_DEBUG_CORE_STATE_2 94
MX53_PAD_DI0_PIN2__EMI_EMI_DEBUG_2 95
MX53_PAD_DI0_PIN2__USBPHY1_ENDSESSION 96
MX53_PAD_DI0_PIN3__IPU_DI0_PIN3 97
MX53_PAD_DI0_PIN3__GPIO4_19 98
MX53_PAD_DI0_PIN3__AUDMUX_AUD6_TXFS 99
MX53_PAD_DI0_PIN3__SDMA_DEBUG_CORE_STATE_3 100
MX53_PAD_DI0_PIN3__EMI_EMI_DEBUG_3 101
MX53_PAD_DI0_PIN3__USBPHY1_IDDIG 102
MX53_PAD_DI0_PIN4__IPU_DI0_PIN4 103
MX53_PAD_DI0_PIN4__GPIO4_20 104
MX53_PAD_DI0_PIN4__AUDMUX_AUD6_RXD 105
MX53_PAD_DI0_PIN4__ESDHC1_WP 106
MX53_PAD_DI0_PIN4__SDMA_DEBUG_YIELD 107
MX53_PAD_DI0_PIN4__EMI_EMI_DEBUG_4 108
MX53_PAD_DI0_PIN4__USBPHY1_HOSTDISCONNECT 109
MX53_PAD_DISP0_DAT0__IPU_DISP0_DAT_0 110
MX53_PAD_DISP0_DAT0__GPIO4_21 111
MX53_PAD_DISP0_DAT0__CSPI_SCLK 112
MX53_PAD_DISP0_DAT0__USBOH3_USBH2_DATA_0 113
MX53_PAD_DISP0_DAT0__SDMA_DEBUG_CORE_RUN 114
MX53_PAD_DISP0_DAT0__EMI_EMI_DEBUG_5 115
MX53_PAD_DISP0_DAT0__USBPHY2_TXREADY 116
MX53_PAD_DISP0_DAT1__IPU_DISP0_DAT_1 117
MX53_PAD_DISP0_DAT1__GPIO4_22 118
MX53_PAD_DISP0_DAT1__CSPI_MOSI 119
MX53_PAD_DISP0_DAT1__USBOH3_USBH2_DATA_1 120
MX53_PAD_DISP0_DAT1__SDMA_DEBUG_EVENT_CHANNEL_SEL 121
MX53_PAD_DISP0_DAT1__EMI_EMI_DEBUG_6 122
MX53_PAD_DISP0_DAT1__USBPHY2_RXVALID 123
MX53_PAD_DISP0_DAT2__IPU_DISP0_DAT_2 124
MX53_PAD_DISP0_DAT2__GPIO4_23 125
MX53_PAD_DISP0_DAT2__CSPI_MISO 126
MX53_PAD_DISP0_DAT2__USBOH3_USBH2_DATA_2 127
MX53_PAD_DISP0_DAT2__SDMA_DEBUG_MODE 128
MX53_PAD_DISP0_DAT2__EMI_EMI_DEBUG_7 129
MX53_PAD_DISP0_DAT2__USBPHY2_RXACTIVE 130
MX53_PAD_DISP0_DAT3__IPU_DISP0_DAT_3 131
MX53_PAD_DISP0_DAT3__GPIO4_24 132
MX53_PAD_DISP0_DAT3__CSPI_SS0 133
MX53_PAD_DISP0_DAT3__USBOH3_USBH2_DATA_3 134
MX53_PAD_DISP0_DAT3__SDMA_DEBUG_BUS_ERROR 135
MX53_PAD_DISP0_DAT3__EMI_EMI_DEBUG_8 136
MX53_PAD_DISP0_DAT3__USBPHY2_RXERROR 137
MX53_PAD_DISP0_DAT4__IPU_DISP0_DAT_4 138
MX53_PAD_DISP0_DAT4__GPIO4_25 139
MX53_PAD_DISP0_DAT4__CSPI_SS1 140
MX53_PAD_DISP0_DAT4__USBOH3_USBH2_DATA_4 141
MX53_PAD_DISP0_DAT4__SDMA_DEBUG_BUS_RWB 142
MX53_PAD_DISP0_DAT4__EMI_EMI_DEBUG_9 143
MX53_PAD_DISP0_DAT4__USBPHY2_SIECLOCK 144
MX53_PAD_DISP0_DAT5__IPU_DISP0_DAT_5 145
MX53_PAD_DISP0_DAT5__GPIO4_26 146
MX53_PAD_DISP0_DAT5__CSPI_SS2 147
MX53_PAD_DISP0_DAT5__USBOH3_USBH2_DATA_5 148
MX53_PAD_DISP0_DAT5__SDMA_DEBUG_MATCHED_DMBUS 149
MX53_PAD_DISP0_DAT5__EMI_EMI_DEBUG_10 150
MX53_PAD_DISP0_DAT5__USBPHY2_LINESTATE_0 151
MX53_PAD_DISP0_DAT6__IPU_DISP0_DAT_6 152
MX53_PAD_DISP0_DAT6__GPIO4_27 153
MX53_PAD_DISP0_DAT6__CSPI_SS3 154
MX53_PAD_DISP0_DAT6__USBOH3_USBH2_DATA_6 155
MX53_PAD_DISP0_DAT6__SDMA_DEBUG_RTBUFFER_WRITE 156
MX53_PAD_DISP0_DAT6__EMI_EMI_DEBUG_11 157
MX53_PAD_DISP0_DAT6__USBPHY2_LINESTATE_1 158
MX53_PAD_DISP0_DAT7__IPU_DISP0_DAT_7 159
MX53_PAD_DISP0_DAT7__GPIO4_28 160
MX53_PAD_DISP0_DAT7__CSPI_RDY 161
MX53_PAD_DISP0_DAT7__USBOH3_USBH2_DATA_7 162
MX53_PAD_DISP0_DAT7__SDMA_DEBUG_EVENT_CHANNEL_0 163
MX53_PAD_DISP0_DAT7__EMI_EMI_DEBUG_12 164
MX53_PAD_DISP0_DAT7__USBPHY2_VBUSVALID 165
MX53_PAD_DISP0_DAT8__IPU_DISP0_DAT_8 166
MX53_PAD_DISP0_DAT8__GPIO4_29 167
MX53_PAD_DISP0_DAT8__PWM1_PWMO 168
MX53_PAD_DISP0_DAT8__WDOG1_WDOG_B 169
MX53_PAD_DISP0_DAT8__SDMA_DEBUG_EVENT_CHANNEL_1 170
MX53_PAD_DISP0_DAT8__EMI_EMI_DEBUG_13 171
MX53_PAD_DISP0_DAT8__USBPHY2_AVALID 172
MX53_PAD_DISP0_DAT9__IPU_DISP0_DAT_9 173
MX53_PAD_DISP0_DAT9__GPIO4_30 174
MX53_PAD_DISP0_DAT9__PWM2_PWMO 175
MX53_PAD_DISP0_DAT9__WDOG2_WDOG_B 176
MX53_PAD_DISP0_DAT9__SDMA_DEBUG_EVENT_CHANNEL_2 177
MX53_PAD_DISP0_DAT9__EMI_EMI_DEBUG_14 178
MX53_PAD_DISP0_DAT9__USBPHY2_VSTATUS_0 179
MX53_PAD_DISP0_DAT10__IPU_DISP0_DAT_10 180
MX53_PAD_DISP0_DAT10__GPIO4_31 181
MX53_PAD_DISP0_DAT10__USBOH3_USBH2_STP 182
MX53_PAD_DISP0_DAT10__SDMA_DEBUG_EVENT_CHANNEL_3 183
MX53_PAD_DISP0_DAT10__EMI_EMI_DEBUG_15 184
MX53_PAD_DISP0_DAT10__USBPHY2_VSTATUS_1 185
MX53_PAD_DISP0_DAT11__IPU_DISP0_DAT_11 186
MX53_PAD_DISP0_DAT11__GPIO5_5 187
MX53_PAD_DISP0_DAT11__USBOH3_USBH2_NXT 188
MX53_PAD_DISP0_DAT11__SDMA_DEBUG_EVENT_CHANNEL_4 189
MX53_PAD_DISP0_DAT11__EMI_EMI_DEBUG_16 190
MX53_PAD_DISP0_DAT11__USBPHY2_VSTATUS_2 191
MX53_PAD_DISP0_DAT12__IPU_DISP0_DAT_12 192
MX53_PAD_DISP0_DAT12__GPIO5_6 193
MX53_PAD_DISP0_DAT12__USBOH3_USBH2_CLK 194
MX53_PAD_DISP0_DAT12__SDMA_DEBUG_EVENT_CHANNEL_5 195
MX53_PAD_DISP0_DAT12__EMI_EMI_DEBUG_17 196
MX53_PAD_DISP0_DAT12__USBPHY2_VSTATUS_3 197
MX53_PAD_DISP0_DAT13__IPU_DISP0_DAT_13 198
MX53_PAD_DISP0_DAT13__GPIO5_7 199
MX53_PAD_DISP0_DAT13__AUDMUX_AUD5_RXFS 200
MX53_PAD_DISP0_DAT13__SDMA_DEBUG_EVT_CHN_LINES_0 201
MX53_PAD_DISP0_DAT13__EMI_EMI_DEBUG_18 202
MX53_PAD_DISP0_DAT13__USBPHY2_VSTATUS_4 203
MX53_PAD_DISP0_DAT14__IPU_DISP0_DAT_14 204
MX53_PAD_DISP0_DAT14__GPIO5_8 205
MX53_PAD_DISP0_DAT14__AUDMUX_AUD5_RXC 206
MX53_PAD_DISP0_DAT14__SDMA_DEBUG_EVT_CHN_LINES_1 207
MX53_PAD_DISP0_DAT14__EMI_EMI_DEBUG_19 208
MX53_PAD_DISP0_DAT14__USBPHY2_VSTATUS_5 209
MX53_PAD_DISP0_DAT15__IPU_DISP0_DAT_15 210
MX53_PAD_DISP0_DAT15__GPIO5_9 211
MX53_PAD_DISP0_DAT15__ECSPI1_SS1 212
MX53_PAD_DISP0_DAT15__ECSPI2_SS1 213
MX53_PAD_DISP0_DAT15__SDMA_DEBUG_EVT_CHN_LINES_2 214
MX53_PAD_DISP0_DAT15__EMI_EMI_DEBUG_20 215
MX53_PAD_DISP0_DAT15__USBPHY2_VSTATUS_6 216
MX53_PAD_DISP0_DAT16__IPU_DISP0_DAT_16 217
MX53_PAD_DISP0_DAT16__GPIO5_10 218
MX53_PAD_DISP0_DAT16__ECSPI2_MOSI 219
MX53_PAD_DISP0_DAT16__AUDMUX_AUD5_TXC 220
MX53_PAD_DISP0_DAT16__SDMA_EXT_EVENT_0 221
MX53_PAD_DISP0_DAT16__SDMA_DEBUG_EVT_CHN_LINES_3 222
MX53_PAD_DISP0_DAT16__EMI_EMI_DEBUG_21 223
MX53_PAD_DISP0_DAT16__USBPHY2_VSTATUS_7 224
MX53_PAD_DISP0_DAT17__IPU_DISP0_DAT_17 225
MX53_PAD_DISP0_DAT17__GPIO5_11 226
MX53_PAD_DISP0_DAT17__ECSPI2_MISO 227
MX53_PAD_DISP0_DAT17__AUDMUX_AUD5_TXD 228
MX53_PAD_DISP0_DAT17__SDMA_EXT_EVENT_1 229
MX53_PAD_DISP0_DAT17__SDMA_DEBUG_EVT_CHN_LINES_4 230
MX53_PAD_DISP0_DAT17__EMI_EMI_DEBUG_22 231
MX53_PAD_DISP0_DAT18__IPU_DISP0_DAT_18 232
MX53_PAD_DISP0_DAT18__GPIO5_12 233
MX53_PAD_DISP0_DAT18__ECSPI2_SS0 234
MX53_PAD_DISP0_DAT18__AUDMUX_AUD5_TXFS 235
MX53_PAD_DISP0_DAT18__AUDMUX_AUD4_RXFS 236
MX53_PAD_DISP0_DAT18__SDMA_DEBUG_EVT_CHN_LINES_5 237
MX53_PAD_DISP0_DAT18__EMI_EMI_DEBUG_23 238
MX53_PAD_DISP0_DAT18__EMI_WEIM_CS_2 239
MX53_PAD_DISP0_DAT19__IPU_DISP0_DAT_19 240
MX53_PAD_DISP0_DAT19__GPIO5_13 241
MX53_PAD_DISP0_DAT19__ECSPI2_SCLK 242
MX53_PAD_DISP0_DAT19__AUDMUX_AUD5_RXD 243
MX53_PAD_DISP0_DAT19__AUDMUX_AUD4_RXC 244
MX53_PAD_DISP0_DAT19__SDMA_DEBUG_EVT_CHN_LINES_6 245
MX53_PAD_DISP0_DAT19__EMI_EMI_DEBUG_24 246
MX53_PAD_DISP0_DAT19__EMI_WEIM_CS_3 247
MX53_PAD_DISP0_DAT20__IPU_DISP0_DAT_20 248
MX53_PAD_DISP0_DAT20__GPIO5_14 249
MX53_PAD_DISP0_DAT20__ECSPI1_SCLK 250
MX53_PAD_DISP0_DAT20__AUDMUX_AUD4_TXC 251
MX53_PAD_DISP0_DAT20__SDMA_DEBUG_EVT_CHN_LINES_7 252
MX53_PAD_DISP0_DAT20__EMI_EMI_DEBUG_25 253
MX53_PAD_DISP0_DAT20__SATA_PHY_TDI 254
MX53_PAD_DISP0_DAT21__IPU_DISP0_DAT_21 255
MX53_PAD_DISP0_DAT21__GPIO5_15 256
MX53_PAD_DISP0_DAT21__ECSPI1_MOSI 257
MX53_PAD_DISP0_DAT21__AUDMUX_AUD4_TXD 258
MX53_PAD_DISP0_DAT21__SDMA_DEBUG_BUS_DEVICE_0 259
MX53_PAD_DISP0_DAT21__EMI_EMI_DEBUG_26 260
MX53_PAD_DISP0_DAT21__SATA_PHY_TDO 261
MX53_PAD_DISP0_DAT22__IPU_DISP0_DAT_22 262
MX53_PAD_DISP0_DAT22__GPIO5_16 263
MX53_PAD_DISP0_DAT22__ECSPI1_MISO 264
MX53_PAD_DISP0_DAT22__AUDMUX_AUD4_TXFS 265
MX53_PAD_DISP0_DAT22__SDMA_DEBUG_BUS_DEVICE_1 266
MX53_PAD_DISP0_DAT22__EMI_EMI_DEBUG_27 267
MX53_PAD_DISP0_DAT22__SATA_PHY_TCK 268
MX53_PAD_DISP0_DAT23__IPU_DISP0_DAT_23 269
MX53_PAD_DISP0_DAT23__GPIO5_17 270
MX53_PAD_DISP0_DAT23__ECSPI1_SS0 271
MX53_PAD_DISP0_DAT23__AUDMUX_AUD4_RXD 272
MX53_PAD_DISP0_DAT23__SDMA_DEBUG_BUS_DEVICE_2 273
MX53_PAD_DISP0_DAT23__EMI_EMI_DEBUG_28 274
MX53_PAD_DISP0_DAT23__SATA_PHY_TMS 275
MX53_PAD_CSI0_PIXCLK__IPU_CSI0_PIXCLK 276
MX53_PAD_CSI0_PIXCLK__GPIO5_18 277
MX53_PAD_CSI0_PIXCLK__SDMA_DEBUG_PC_0 278
MX53_PAD_CSI0_PIXCLK__EMI_EMI_DEBUG_29 279
MX53_PAD_CSI0_MCLK__IPU_CSI0_HSYNC 280
MX53_PAD_CSI0_MCLK__GPIO5_19 281
MX53_PAD_CSI0_MCLK__CCM_CSI0_MCLK 282
MX53_PAD_CSI0_MCLK__SDMA_DEBUG_PC_1 283
MX53_PAD_CSI0_MCLK__EMI_EMI_DEBUG_30 284
MX53_PAD_CSI0_MCLK__TPIU_TRCTL 285
MX53_PAD_CSI0_DATA_EN__IPU_CSI0_DATA_EN 286
MX53_PAD_CSI0_DATA_EN__GPIO5_20 287
MX53_PAD_CSI0_DATA_EN__SDMA_DEBUG_PC_2 288
MX53_PAD_CSI0_DATA_EN__EMI_EMI_DEBUG_31 289
MX53_PAD_CSI0_DATA_EN__TPIU_TRCLK 290
MX53_PAD_CSI0_VSYNC__IPU_CSI0_VSYNC 291
MX53_PAD_CSI0_VSYNC__GPIO5_21 292
MX53_PAD_CSI0_VSYNC__SDMA_DEBUG_PC_3 293
MX53_PAD_CSI0_VSYNC__EMI_EMI_DEBUG_32 294
MX53_PAD_CSI0_VSYNC__TPIU_TRACE_0 295
MX53_PAD_CSI0_DAT4__IPU_CSI0_D_4 296
MX53_PAD_CSI0_DAT4__GPIO5_22 297
MX53_PAD_CSI0_DAT4__KPP_COL_5 298
MX53_PAD_CSI0_DAT4__ECSPI1_SCLK 299
MX53_PAD_CSI0_DAT4__USBOH3_USBH3_STP 300
MX53_PAD_CSI0_DAT4__AUDMUX_AUD3_TXC 301
MX53_PAD_CSI0_DAT4__EMI_EMI_DEBUG_33 302
MX53_PAD_CSI0_DAT4__TPIU_TRACE_1 303
MX53_PAD_CSI0_DAT5__IPU_CSI0_D_5 304
MX53_PAD_CSI0_DAT5__GPIO5_23 305
MX53_PAD_CSI0_DAT5__KPP_ROW_5 306
MX53_PAD_CSI0_DAT5__ECSPI1_MOSI 307
MX53_PAD_CSI0_DAT5__USBOH3_USBH3_NXT 308
MX53_PAD_CSI0_DAT5__AUDMUX_AUD3_TXD 309
MX53_PAD_CSI0_DAT5__EMI_EMI_DEBUG_34 310
MX53_PAD_CSI0_DAT5__TPIU_TRACE_2 311
MX53_PAD_CSI0_DAT6__IPU_CSI0_D_6 312
MX53_PAD_CSI0_DAT6__GPIO5_24 313
MX53_PAD_CSI0_DAT6__KPP_COL_6 314
MX53_PAD_CSI0_DAT6__ECSPI1_MISO 315
MX53_PAD_CSI0_DAT6__USBOH3_USBH3_CLK 316
MX53_PAD_CSI0_DAT6__AUDMUX_AUD3_TXFS 317
MX53_PAD_CSI0_DAT6__EMI_EMI_DEBUG_35 318
MX53_PAD_CSI0_DAT6__TPIU_TRACE_3 319
MX53_PAD_CSI0_DAT7__IPU_CSI0_D_7 320
MX53_PAD_CSI0_DAT7__GPIO5_25 321
MX53_PAD_CSI0_DAT7__KPP_ROW_6 322
MX53_PAD_CSI0_DAT7__ECSPI1_SS0 323
MX53_PAD_CSI0_DAT7__USBOH3_USBH3_DIR 324
MX53_PAD_CSI0_DAT7__AUDMUX_AUD3_RXD 325
MX53_PAD_CSI0_DAT7__EMI_EMI_DEBUG_36 326
MX53_PAD_CSI0_DAT7__TPIU_TRACE_4 327
MX53_PAD_CSI0_DAT8__IPU_CSI0_D_8 328
MX53_PAD_CSI0_DAT8__GPIO5_26 329
MX53_PAD_CSI0_DAT8__KPP_COL_7 330
MX53_PAD_CSI0_DAT8__ECSPI2_SCLK 331
MX53_PAD_CSI0_DAT8__USBOH3_USBH3_OC 332
MX53_PAD_CSI0_DAT8__I2C1_SDA 333
MX53_PAD_CSI0_DAT8__EMI_EMI_DEBUG_37 334
MX53_PAD_CSI0_DAT8__TPIU_TRACE_5 335
MX53_PAD_CSI0_DAT9__IPU_CSI0_D_9 336
MX53_PAD_CSI0_DAT9__GPIO5_27 337
MX53_PAD_CSI0_DAT9__KPP_ROW_7 338
MX53_PAD_CSI0_DAT9__ECSPI2_MOSI 339
MX53_PAD_CSI0_DAT9__USBOH3_USBH3_PWR 340
MX53_PAD_CSI0_DAT9__I2C1_SCL 341
MX53_PAD_CSI0_DAT9__EMI_EMI_DEBUG_38 342
MX53_PAD_CSI0_DAT9__TPIU_TRACE_6 343
MX53_PAD_CSI0_DAT10__IPU_CSI0_D_10 344
MX53_PAD_CSI0_DAT10__GPIO5_28 345
MX53_PAD_CSI0_DAT10__UART1_TXD_MUX 346
MX53_PAD_CSI0_DAT10__ECSPI2_MISO 347
MX53_PAD_CSI0_DAT10__AUDMUX_AUD3_RXC 348
MX53_PAD_CSI0_DAT10__SDMA_DEBUG_PC_4 349
MX53_PAD_CSI0_DAT10__EMI_EMI_DEBUG_39 350
MX53_PAD_CSI0_DAT10__TPIU_TRACE_7 351
MX53_PAD_CSI0_DAT11__IPU_CSI0_D_11 352
MX53_PAD_CSI0_DAT11__GPIO5_29 353
MX53_PAD_CSI0_DAT11__UART1_RXD_MUX 354
MX53_PAD_CSI0_DAT11__ECSPI2_SS0 355
MX53_PAD_CSI0_DAT11__AUDMUX_AUD3_RXFS 356
MX53_PAD_CSI0_DAT11__SDMA_DEBUG_PC_5 357
MX53_PAD_CSI0_DAT11__EMI_EMI_DEBUG_40 358
MX53_PAD_CSI0_DAT11__TPIU_TRACE_8 359
MX53_PAD_CSI0_DAT12__IPU_CSI0_D_12 360
MX53_PAD_CSI0_DAT12__GPIO5_30 361
MX53_PAD_CSI0_DAT12__UART4_TXD_MUX 362
MX53_PAD_CSI0_DAT12__USBOH3_USBH3_DATA_0 363
MX53_PAD_CSI0_DAT12__SDMA_DEBUG_PC_6 364
MX53_PAD_CSI0_DAT12__EMI_EMI_DEBUG_41 365
MX53_PAD_CSI0_DAT12__TPIU_TRACE_9 366
MX53_PAD_CSI0_DAT13__IPU_CSI0_D_13 367
MX53_PAD_CSI0_DAT13__GPIO5_31 368
MX53_PAD_CSI0_DAT13__UART4_RXD_MUX 369
MX53_PAD_CSI0_DAT13__USBOH3_USBH3_DATA_1 370
MX53_PAD_CSI0_DAT13__SDMA_DEBUG_PC_7 371
MX53_PAD_CSI0_DAT13__EMI_EMI_DEBUG_42 372
MX53_PAD_CSI0_DAT13__TPIU_TRACE_10 373
MX53_PAD_CSI0_DAT14__IPU_CSI0_D_14 374
MX53_PAD_CSI0_DAT14__GPIO6_0 375
MX53_PAD_CSI0_DAT14__UART5_TXD_MUX 376
MX53_PAD_CSI0_DAT14__USBOH3_USBH3_DATA_2 377
MX53_PAD_CSI0_DAT14__SDMA_DEBUG_PC_8 378
MX53_PAD_CSI0_DAT14__EMI_EMI_DEBUG_43 379
MX53_PAD_CSI0_DAT14__TPIU_TRACE_11 380
MX53_PAD_CSI0_DAT15__IPU_CSI0_D_15 381
MX53_PAD_CSI0_DAT15__GPIO6_1 382
MX53_PAD_CSI0_DAT15__UART5_RXD_MUX 383
MX53_PAD_CSI0_DAT15__USBOH3_USBH3_DATA_3 384
MX53_PAD_CSI0_DAT15__SDMA_DEBUG_PC_9 385
MX53_PAD_CSI0_DAT15__EMI_EMI_DEBUG_44 386
MX53_PAD_CSI0_DAT15__TPIU_TRACE_12 387
MX53_PAD_CSI0_DAT16__IPU_CSI0_D_16 388
MX53_PAD_CSI0_DAT16__GPIO6_2 389
MX53_PAD_CSI0_DAT16__UART4_RTS 390
MX53_PAD_CSI0_DAT16__USBOH3_USBH3_DATA_4 391
MX53_PAD_CSI0_DAT16__SDMA_DEBUG_PC_10 392
MX53_PAD_CSI0_DAT16__EMI_EMI_DEBUG_45 393
MX53_PAD_CSI0_DAT16__TPIU_TRACE_13 394
MX53_PAD_CSI0_DAT17__IPU_CSI0_D_17 395
MX53_PAD_CSI0_DAT17__GPIO6_3 396
MX53_PAD_CSI0_DAT17__UART4_CTS 397
MX53_PAD_CSI0_DAT17__USBOH3_USBH3_DATA_5 398
MX53_PAD_CSI0_DAT17__SDMA_DEBUG_PC_11 399
MX53_PAD_CSI0_DAT17__EMI_EMI_DEBUG_46 400
MX53_PAD_CSI0_DAT17__TPIU_TRACE_14 401
MX53_PAD_CSI0_DAT18__IPU_CSI0_D_18 402
MX53_PAD_CSI0_DAT18__GPIO6_4 403
MX53_PAD_CSI0_DAT18__UART5_RTS 404
MX53_PAD_CSI0_DAT18__USBOH3_USBH3_DATA_6 405
MX53_PAD_CSI0_DAT18__SDMA_DEBUG_PC_12 406
MX53_PAD_CSI0_DAT18__EMI_EMI_DEBUG_47 407
MX53_PAD_CSI0_DAT18__TPIU_TRACE_15 408
MX53_PAD_CSI0_DAT19__IPU_CSI0_D_19 409
MX53_PAD_CSI0_DAT19__GPIO6_5 410
MX53_PAD_CSI0_DAT19__UART5_CTS 411
MX53_PAD_CSI0_DAT19__USBOH3_USBH3_DATA_7 412
MX53_PAD_CSI0_DAT19__SDMA_DEBUG_PC_13 413
MX53_PAD_CSI0_DAT19__EMI_EMI_DEBUG_48 414
MX53_PAD_CSI0_DAT19__USBPHY2_BISTOK 415
MX53_PAD_EIM_A25__EMI_WEIM_A_25 416
MX53_PAD_EIM_A25__GPIO5_2 417
MX53_PAD_EIM_A25__ECSPI2_RDY 418
MX53_PAD_EIM_A25__IPU_DI1_PIN12 419
MX53_PAD_EIM_A25__CSPI_SS1 420
MX53_PAD_EIM_A25__IPU_DI0_D1_CS 421
MX53_PAD_EIM_A25__USBPHY1_BISTOK 422
MX53_PAD_EIM_EB2__EMI_WEIM_EB_2 423
MX53_PAD_EIM_EB2__GPIO2_30 424
MX53_PAD_EIM_EB2__CCM_DI1_EXT_CLK 425
MX53_PAD_EIM_EB2__IPU_SER_DISP1_CS 426
MX53_PAD_EIM_EB2__ECSPI1_SS0 427
MX53_PAD_EIM_EB2__I2C2_SCL 428
MX53_PAD_EIM_D16__EMI_WEIM_D_16 429
MX53_PAD_EIM_D16__GPIO3_16 430
MX53_PAD_EIM_D16__IPU_DI0_PIN5 431
MX53_PAD_EIM_D16__IPU_DISPB1_SER_CLK 432
MX53_PAD_EIM_D16__ECSPI1_SCLK 433
MX53_PAD_EIM_D16__I2C2_SDA 434
MX53_PAD_EIM_D17__EMI_WEIM_D_17 435
MX53_PAD_EIM_D17__GPIO3_17 436
MX53_PAD_EIM_D17__IPU_DI0_PIN6 437
MX53_PAD_EIM_D17__IPU_DISPB1_SER_DIN 438
MX53_PAD_EIM_D17__ECSPI1_MISO 439
MX53_PAD_EIM_D17__I2C3_SCL 440
MX53_PAD_EIM_D18__EMI_WEIM_D_18 441
MX53_PAD_EIM_D18__GPIO3_18 442
MX53_PAD_EIM_D18__IPU_DI0_PIN7 443
MX53_PAD_EIM_D18__IPU_DISPB1_SER_DIO 444
MX53_PAD_EIM_D18__ECSPI1_MOSI 445
MX53_PAD_EIM_D18__I2C3_SDA 446
MX53_PAD_EIM_D18__IPU_DI1_D0_CS 447
MX53_PAD_EIM_D19__EMI_WEIM_D_19 448
MX53_PAD_EIM_D19__GPIO3_19 449
MX53_PAD_EIM_D19__IPU_DI0_PIN8 450
MX53_PAD_EIM_D19__IPU_DISPB1_SER_RS 451
MX53_PAD_EIM_D19__ECSPI1_SS1 452
MX53_PAD_EIM_D19__EPIT1_EPITO 453
MX53_PAD_EIM_D19__UART1_CTS 454
MX53_PAD_EIM_D19__USBOH3_USBH2_OC 455
MX53_PAD_EIM_D20__EMI_WEIM_D_20 456
MX53_PAD_EIM_D20__GPIO3_20 457
MX53_PAD_EIM_D20__IPU_DI0_PIN16 458
MX53_PAD_EIM_D20__IPU_SER_DISP0_CS 459
MX53_PAD_EIM_D20__CSPI_SS0 460
MX53_PAD_EIM_D20__EPIT2_EPITO 461
MX53_PAD_EIM_D20__UART1_RTS 462
MX53_PAD_EIM_D20__USBOH3_USBH2_PWR 463
MX53_PAD_EIM_D21__EMI_WEIM_D_21 464
MX53_PAD_EIM_D21__GPIO3_21 465
MX53_PAD_EIM_D21__IPU_DI0_PIN17 466
MX53_PAD_EIM_D21__IPU_DISPB0_SER_CLK 467
MX53_PAD_EIM_D21__CSPI_SCLK 468
MX53_PAD_EIM_D21__I2C1_SCL 469
MX53_PAD_EIM_D21__USBOH3_USBOTG_OC 470
MX53_PAD_EIM_D22__EMI_WEIM_D_22 471
MX53_PAD_EIM_D22__GPIO3_22 472
MX53_PAD_EIM_D22__IPU_DI0_PIN1 473
MX53_PAD_EIM_D22__IPU_DISPB0_SER_DIN 474
MX53_PAD_EIM_D22__CSPI_MISO 475
MX53_PAD_EIM_D22__USBOH3_USBOTG_PWR 476
MX53_PAD_EIM_D23__EMI_WEIM_D_23 477
MX53_PAD_EIM_D23__GPIO3_23 478
MX53_PAD_EIM_D23__UART3_CTS 479
MX53_PAD_EIM_D23__UART1_DCD 480
MX53_PAD_EIM_D23__IPU_DI0_D0_CS 481
MX53_PAD_EIM_D23__IPU_DI1_PIN2 482
MX53_PAD_EIM_D23__IPU_CSI1_DATA_EN 483
MX53_PAD_EIM_D23__IPU_DI1_PIN14 484
MX53_PAD_EIM_EB3__EMI_WEIM_EB_3 485
MX53_PAD_EIM_EB3__GPIO2_31 486
MX53_PAD_EIM_EB3__UART3_RTS 487
MX53_PAD_EIM_EB3__UART1_RI 488
MX53_PAD_EIM_EB3__IPU_DI1_PIN3 489
MX53_PAD_EIM_EB3__IPU_CSI1_HSYNC 490
MX53_PAD_EIM_EB3__IPU_DI1_PIN16 491
MX53_PAD_EIM_D24__EMI_WEIM_D_24 492
MX53_PAD_EIM_D24__GPIO3_24 493
MX53_PAD_EIM_D24__UART3_TXD_MUX 494
MX53_PAD_EIM_D24__ECSPI1_SS2 495
MX53_PAD_EIM_D24__CSPI_SS2 496
MX53_PAD_EIM_D24__AUDMUX_AUD5_RXFS 497
MX53_PAD_EIM_D24__ECSPI2_SS2 498
MX53_PAD_EIM_D24__UART1_DTR 499
MX53_PAD_EIM_D25__EMI_WEIM_D_25 500
MX53_PAD_EIM_D25__GPIO3_25 501
MX53_PAD_EIM_D25__UART3_RXD_MUX 502
MX53_PAD_EIM_D25__ECSPI1_SS3 503
MX53_PAD_EIM_D25__CSPI_SS3 504
MX53_PAD_EIM_D25__AUDMUX_AUD5_RXC 505
MX53_PAD_EIM_D25__ECSPI2_SS3 506
MX53_PAD_EIM_D25__UART1_DSR 507
MX53_PAD_EIM_D26__EMI_WEIM_D_26 508
MX53_PAD_EIM_D26__GPIO3_26 509
MX53_PAD_EIM_D26__UART2_TXD_MUX 510
MX53_PAD_EIM_D26__FIRI_RXD 511
MX53_PAD_EIM_D26__IPU_CSI0_D_1 512
MX53_PAD_EIM_D26__IPU_DI1_PIN11 513
MX53_PAD_EIM_D26__IPU_SISG_2 514
MX53_PAD_EIM_D26__IPU_DISP1_DAT_22 515
MX53_PAD_EIM_D27__EMI_WEIM_D_27 516
MX53_PAD_EIM_D27__GPIO3_27 517
MX53_PAD_EIM_D27__UART2_RXD_MUX 518
MX53_PAD_EIM_D27__FIRI_TXD 519
MX53_PAD_EIM_D27__IPU_CSI0_D_0 520
MX53_PAD_EIM_D27__IPU_DI1_PIN13 521
MX53_PAD_EIM_D27__IPU_SISG_3 522
MX53_PAD_EIM_D27__IPU_DISP1_DAT_23 523
MX53_PAD_EIM_D28__EMI_WEIM_D_28 524
MX53_PAD_EIM_D28__GPIO3_28 525
MX53_PAD_EIM_D28__UART2_CTS 526
MX53_PAD_EIM_D28__IPU_DISPB0_SER_DIO 527
MX53_PAD_EIM_D28__CSPI_MOSI 528
MX53_PAD_EIM_D28__I2C1_SDA 529
MX53_PAD_EIM_D28__IPU_EXT_TRIG 530
MX53_PAD_EIM_D28__IPU_DI0_PIN13 531
MX53_PAD_EIM_D29__EMI_WEIM_D_29 532
MX53_PAD_EIM_D29__GPIO3_29 533
MX53_PAD_EIM_D29__UART2_RTS 534
MX53_PAD_EIM_D29__IPU_DISPB0_SER_RS 535
MX53_PAD_EIM_D29__CSPI_SS0 536
MX53_PAD_EIM_D29__IPU_DI1_PIN15 537
MX53_PAD_EIM_D29__IPU_CSI1_VSYNC 538
MX53_PAD_EIM_D29__IPU_DI0_PIN14 539
MX53_PAD_EIM_D30__EMI_WEIM_D_30 540
MX53_PAD_EIM_D30__GPIO3_30 541
MX53_PAD_EIM_D30__UART3_CTS 542
MX53_PAD_EIM_D30__IPU_CSI0_D_3 543
MX53_PAD_EIM_D30__IPU_DI0_PIN11 544
MX53_PAD_EIM_D30__IPU_DISP1_DAT_21 545
MX53_PAD_EIM_D30__USBOH3_USBH1_OC 546
MX53_PAD_EIM_D30__USBOH3_USBH2_OC 547
MX53_PAD_EIM_D31__EMI_WEIM_D_31 548
MX53_PAD_EIM_D31__GPIO3_31 549
MX53_PAD_EIM_D31__UART3_RTS 550
MX53_PAD_EIM_D31__IPU_CSI0_D_2 551
MX53_PAD_EIM_D31__IPU_DI0_PIN12 552
MX53_PAD_EIM_D31__IPU_DISP1_DAT_20 553
MX53_PAD_EIM_D31__USBOH3_USBH1_PWR 554
MX53_PAD_EIM_D31__USBOH3_USBH2_PWR 555
MX53_PAD_EIM_A24__EMI_WEIM_A_24 556
MX53_PAD_EIM_A24__GPIO5_4 557
MX53_PAD_EIM_A24__IPU_DISP1_DAT_19 558
MX53_PAD_EIM_A24__IPU_CSI1_D_19 559
MX53_PAD_EIM_A24__IPU_SISG_2 560
MX53_PAD_EIM_A24__USBPHY2_BVALID 561
MX53_PAD_EIM_A23__EMI_WEIM_A_23 562
MX53_PAD_EIM_A23__GPIO6_6 563
MX53_PAD_EIM_A23__IPU_DISP1_DAT_18 564
MX53_PAD_EIM_A23__IPU_CSI1_D_18 565
MX53_PAD_EIM_A23__IPU_SISG_3 566
MX53_PAD_EIM_A23__USBPHY2_ENDSESSION 567
MX53_PAD_EIM_A22__EMI_WEIM_A_22 568
MX53_PAD_EIM_A22__GPIO2_16 569
MX53_PAD_EIM_A22__IPU_DISP1_DAT_17 570
MX53_PAD_EIM_A22__IPU_CSI1_D_17 571
MX53_PAD_EIM_A22__SRC_BT_CFG1_7 572
MX53_PAD_EIM_A21__EMI_WEIM_A_21 573
MX53_PAD_EIM_A21__GPIO2_17 574
MX53_PAD_EIM_A21__IPU_DISP1_DAT_16 575
MX53_PAD_EIM_A21__IPU_CSI1_D_16 576
MX53_PAD_EIM_A21__SRC_BT_CFG1_6 577
MX53_PAD_EIM_A20__EMI_WEIM_A_20 578
MX53_PAD_EIM_A20__GPIO2_18 579
MX53_PAD_EIM_A20__IPU_DISP1_DAT_15 580
MX53_PAD_EIM_A20__IPU_CSI1_D_15 581
MX53_PAD_EIM_A20__SRC_BT_CFG1_5 582
MX53_PAD_EIM_A19__EMI_WEIM_A_19 583
MX53_PAD_EIM_A19__GPIO2_19 584
MX53_PAD_EIM_A19__IPU_DISP1_DAT_14 585
MX53_PAD_EIM_A19__IPU_CSI1_D_14 586
MX53_PAD_EIM_A19__SRC_BT_CFG1_4 587
MX53_PAD_EIM_A18__EMI_WEIM_A_18 588
MX53_PAD_EIM_A18__GPIO2_20 589
MX53_PAD_EIM_A18__IPU_DISP1_DAT_13 590
MX53_PAD_EIM_A18__IPU_CSI1_D_13 591
MX53_PAD_EIM_A18__SRC_BT_CFG1_3 592
MX53_PAD_EIM_A17__EMI_WEIM_A_17 593
MX53_PAD_EIM_A17__GPIO2_21 594
MX53_PAD_EIM_A17__IPU_DISP1_DAT_12 595
MX53_PAD_EIM_A17__IPU_CSI1_D_12 596
MX53_PAD_EIM_A17__SRC_BT_CFG1_2 597
MX53_PAD_EIM_A16__EMI_WEIM_A_16 598
MX53_PAD_EIM_A16__GPIO2_22 599
MX53_PAD_EIM_A16__IPU_DI1_DISP_CLK 600
MX53_PAD_EIM_A16__IPU_CSI1_PIXCLK 601
MX53_PAD_EIM_A16__SRC_BT_CFG1_1 602
MX53_PAD_EIM_CS0__EMI_WEIM_CS_0 603
MX53_PAD_EIM_CS0__GPIO2_23 604
MX53_PAD_EIM_CS0__ECSPI2_SCLK 605
MX53_PAD_EIM_CS0__IPU_DI1_PIN5 606
MX53_PAD_EIM_CS1__EMI_WEIM_CS_1 607
MX53_PAD_EIM_CS1__GPIO2_24 608
MX53_PAD_EIM_CS1__ECSPI2_MOSI 609
MX53_PAD_EIM_CS1__IPU_DI1_PIN6 610
MX53_PAD_EIM_OE__EMI_WEIM_OE 611
MX53_PAD_EIM_OE__GPIO2_25 612
MX53_PAD_EIM_OE__ECSPI2_MISO 613
MX53_PAD_EIM_OE__IPU_DI1_PIN7 614
MX53_PAD_EIM_OE__USBPHY2_IDDIG 615
MX53_PAD_EIM_RW__EMI_WEIM_RW 616
MX53_PAD_EIM_RW__GPIO2_26 617
MX53_PAD_EIM_RW__ECSPI2_SS0 618
MX53_PAD_EIM_RW__IPU_DI1_PIN8 619
MX53_PAD_EIM_RW__USBPHY2_HOSTDISCONNECT 620
MX53_PAD_EIM_LBA__EMI_WEIM_LBA 621
MX53_PAD_EIM_LBA__GPIO2_27 622
MX53_PAD_EIM_LBA__ECSPI2_SS1 623
MX53_PAD_EIM_LBA__IPU_DI1_PIN17 624
MX53_PAD_EIM_LBA__SRC_BT_CFG1_0 625
MX53_PAD_EIM_EB0__EMI_WEIM_EB_0 626
MX53_PAD_EIM_EB0__GPIO2_28 627
MX53_PAD_EIM_EB0__IPU_DISP1_DAT_11 628
MX53_PAD_EIM_EB0__IPU_CSI1_D_11 629
MX53_PAD_EIM_EB0__GPC_PMIC_RDY 630
MX53_PAD_EIM_EB0__SRC_BT_CFG2_7 631
MX53_PAD_EIM_EB1__EMI_WEIM_EB_1 632
MX53_PAD_EIM_EB1__GPIO2_29 633
MX53_PAD_EIM_EB1__IPU_DISP1_DAT_10 634
MX53_PAD_EIM_EB1__IPU_CSI1_D_10 635
MX53_PAD_EIM_EB1__SRC_BT_CFG2_6 636
MX53_PAD_EIM_DA0__EMI_NAND_WEIM_DA_0 637
MX53_PAD_EIM_DA0__GPIO3_0 638
MX53_PAD_EIM_DA0__IPU_DISP1_DAT_9 639
MX53_PAD_EIM_DA0__IPU_CSI1_D_9 640
MX53_PAD_EIM_DA0__SRC_BT_CFG2_5 641
MX53_PAD_EIM_DA1__EMI_NAND_WEIM_DA_1 642
MX53_PAD_EIM_DA1__GPIO3_1 643
MX53_PAD_EIM_DA1__IPU_DISP1_DAT_8 644
MX53_PAD_EIM_DA1__IPU_CSI1_D_8 645
MX53_PAD_EIM_DA1__SRC_BT_CFG2_4 646
MX53_PAD_EIM_DA2__EMI_NAND_WEIM_DA_2 647
MX53_PAD_EIM_DA2__GPIO3_2 648
MX53_PAD_EIM_DA2__IPU_DISP1_DAT_7 649
MX53_PAD_EIM_DA2__IPU_CSI1_D_7 650
MX53_PAD_EIM_DA2__SRC_BT_CFG2_3 651
MX53_PAD_EIM_DA3__EMI_NAND_WEIM_DA_3 652
MX53_PAD_EIM_DA3__GPIO3_3 653
MX53_PAD_EIM_DA3__IPU_DISP1_DAT_6 654
MX53_PAD_EIM_DA3__IPU_CSI1_D_6 655
MX53_PAD_EIM_DA3__SRC_BT_CFG2_2 656
MX53_PAD_EIM_DA4__EMI_NAND_WEIM_DA_4 657
MX53_PAD_EIM_DA4__GPIO3_4 658
MX53_PAD_EIM_DA4__IPU_DISP1_DAT_5 659
MX53_PAD_EIM_DA4__IPU_CSI1_D_5 660
MX53_PAD_EIM_DA4__SRC_BT_CFG3_7 661
MX53_PAD_EIM_DA5__EMI_NAND_WEIM_DA_5 662
MX53_PAD_EIM_DA5__GPIO3_5 663
MX53_PAD_EIM_DA5__IPU_DISP1_DAT_4 664
MX53_PAD_EIM_DA5__IPU_CSI1_D_4 665
MX53_PAD_EIM_DA5__SRC_BT_CFG3_6 666
MX53_PAD_EIM_DA6__EMI_NAND_WEIM_DA_6 667
MX53_PAD_EIM_DA6__GPIO3_6 668
MX53_PAD_EIM_DA6__IPU_DISP1_DAT_3 669
MX53_PAD_EIM_DA6__IPU_CSI1_D_3 670
MX53_PAD_EIM_DA6__SRC_BT_CFG3_5 671
MX53_PAD_EIM_DA7__EMI_NAND_WEIM_DA_7 672
MX53_PAD_EIM_DA7__GPIO3_7 673
MX53_PAD_EIM_DA7__IPU_DISP1_DAT_2 674
MX53_PAD_EIM_DA7__IPU_CSI1_D_2 675
MX53_PAD_EIM_DA7__SRC_BT_CFG3_4 676
MX53_PAD_EIM_DA8__EMI_NAND_WEIM_DA_8 677
MX53_PAD_EIM_DA8__GPIO3_8 678
MX53_PAD_EIM_DA8__IPU_DISP1_DAT_1 679
MX53_PAD_EIM_DA8__IPU_CSI1_D_1 680
MX53_PAD_EIM_DA8__SRC_BT_CFG3_3 681
MX53_PAD_EIM_DA9__EMI_NAND_WEIM_DA_9 682
MX53_PAD_EIM_DA9__GPIO3_9 683
MX53_PAD_EIM_DA9__IPU_DISP1_DAT_0 684
MX53_PAD_EIM_DA9__IPU_CSI1_D_0 685
MX53_PAD_EIM_DA9__SRC_BT_CFG3_2 686
MX53_PAD_EIM_DA10__EMI_NAND_WEIM_DA_10 687
MX53_PAD_EIM_DA10__GPIO3_10 688
MX53_PAD_EIM_DA10__IPU_DI1_PIN15 689
MX53_PAD_EIM_DA10__IPU_CSI1_DATA_EN 690
MX53_PAD_EIM_DA10__SRC_BT_CFG3_1 691
MX53_PAD_EIM_DA11__EMI_NAND_WEIM_DA_11 692
MX53_PAD_EIM_DA11__GPIO3_11 693
MX53_PAD_EIM_DA11__IPU_DI1_PIN2 694
MX53_PAD_EIM_DA11__IPU_CSI1_HSYNC 695
MX53_PAD_EIM_DA12__EMI_NAND_WEIM_DA_12 696
MX53_PAD_EIM_DA12__GPIO3_12 697
MX53_PAD_EIM_DA12__IPU_DI1_PIN3 698
MX53_PAD_EIM_DA12__IPU_CSI1_VSYNC 699
MX53_PAD_EIM_DA13__EMI_NAND_WEIM_DA_13 700
MX53_PAD_EIM_DA13__GPIO3_13 701
MX53_PAD_EIM_DA13__IPU_DI1_D0_CS 702
MX53_PAD_EIM_DA13__CCM_DI1_EXT_CLK 703
MX53_PAD_EIM_DA14__EMI_NAND_WEIM_DA_14 704
MX53_PAD_EIM_DA14__GPIO3_14 705
MX53_PAD_EIM_DA14__IPU_DI1_D1_CS 706
MX53_PAD_EIM_DA14__CCM_DI0_EXT_CLK 707
MX53_PAD_EIM_DA15__EMI_NAND_WEIM_DA_15 708
MX53_PAD_EIM_DA15__GPIO3_15 709
MX53_PAD_EIM_DA15__IPU_DI1_PIN1 710
MX53_PAD_EIM_DA15__IPU_DI1_PIN4 711
MX53_PAD_NANDF_WE_B__EMI_NANDF_WE_B 712
MX53_PAD_NANDF_WE_B__GPIO6_12 713
MX53_PAD_NANDF_RE_B__EMI_NANDF_RE_B 714
MX53_PAD_NANDF_RE_B__GPIO6_13 715
MX53_PAD_EIM_WAIT__EMI_WEIM_WAIT 716
MX53_PAD_EIM_WAIT__GPIO5_0 717
MX53_PAD_EIM_WAIT__EMI_WEIM_DTACK_B 718
MX53_PAD_LVDS1_TX3_P__GPIO6_22 719
MX53_PAD_LVDS1_TX3_P__LDB_LVDS1_TX3 720
MX53_PAD_LVDS1_TX2_P__GPIO6_24 721
MX53_PAD_LVDS1_TX2_P__LDB_LVDS1_TX2 722
MX53_PAD_LVDS1_CLK_P__GPIO6_26 723
MX53_PAD_LVDS1_CLK_P__LDB_LVDS1_CLK 724
MX53_PAD_LVDS1_TX1_P__GPIO6_28 725
MX53_PAD_LVDS1_TX1_P__LDB_LVDS1_TX1 726
MX53_PAD_LVDS1_TX0_P__GPIO6_30 727
MX53_PAD_LVDS1_TX0_P__LDB_LVDS1_TX0 728
MX53_PAD_LVDS0_TX3_P__GPIO7_22 729
MX53_PAD_LVDS0_TX3_P__LDB_LVDS0_TX3 730
MX53_PAD_LVDS0_CLK_P__GPIO7_24 731
MX53_PAD_LVDS0_CLK_P__LDB_LVDS0_CLK 732
MX53_PAD_LVDS0_TX2_P__GPIO7_26 733
MX53_PAD_LVDS0_TX2_P__LDB_LVDS0_TX2 734
MX53_PAD_LVDS0_TX1_P__GPIO7_28 735
MX53_PAD_LVDS0_TX1_P__LDB_LVDS0_TX1 736
MX53_PAD_LVDS0_TX0_P__GPIO7_30 737
MX53_PAD_LVDS0_TX0_P__LDB_LVDS0_TX0 738
MX53_PAD_GPIO_10__GPIO4_0 739
MX53_PAD_GPIO_10__OSC32k_32K_OUT 740
MX53_PAD_GPIO_11__GPIO4_1 741
MX53_PAD_GPIO_12__GPIO4_2 742
MX53_PAD_GPIO_13__GPIO4_3 743
MX53_PAD_GPIO_14__GPIO4_4 744
MX53_PAD_NANDF_CLE__EMI_NANDF_CLE 745
MX53_PAD_NANDF_CLE__GPIO6_7 746
MX53_PAD_NANDF_CLE__USBPHY1_VSTATUS_0 747
MX53_PAD_NANDF_ALE__EMI_NANDF_ALE 748
MX53_PAD_NANDF_ALE__GPIO6_8 749
MX53_PAD_NANDF_ALE__USBPHY1_VSTATUS_1 750
MX53_PAD_NANDF_WP_B__EMI_NANDF_WP_B 751
MX53_PAD_NANDF_WP_B__GPIO6_9 752
MX53_PAD_NANDF_WP_B__USBPHY1_VSTATUS_2 753
MX53_PAD_NANDF_RB0__EMI_NANDF_RB_0 754
MX53_PAD_NANDF_RB0__GPIO6_10 755
MX53_PAD_NANDF_RB0__USBPHY1_VSTATUS_3 756
MX53_PAD_NANDF_CS0__EMI_NANDF_CS_0 757
MX53_PAD_NANDF_CS0__GPIO6_11 758
MX53_PAD_NANDF_CS0__USBPHY1_VSTATUS_4 759
MX53_PAD_NANDF_CS1__EMI_NANDF_CS_1 760
MX53_PAD_NANDF_CS1__GPIO6_14 761
MX53_PAD_NANDF_CS1__MLB_MLBCLK 762
MX53_PAD_NANDF_CS1__USBPHY1_VSTATUS_5 763
MX53_PAD_NANDF_CS2__EMI_NANDF_CS_2 764
MX53_PAD_NANDF_CS2__GPIO6_15 765
MX53_PAD_NANDF_CS2__IPU_SISG_0 766
MX53_PAD_NANDF_CS2__ESAI1_TX0 767
MX53_PAD_NANDF_CS2__EMI_WEIM_CRE 768
MX53_PAD_NANDF_CS2__CCM_CSI0_MCLK 769
MX53_PAD_NANDF_CS2__MLB_MLBSIG 770
MX53_PAD_NANDF_CS2__USBPHY1_VSTATUS_6 771
MX53_PAD_NANDF_CS3__EMI_NANDF_CS_3 772
MX53_PAD_NANDF_CS3__GPIO6_16 773
MX53_PAD_NANDF_CS3__IPU_SISG_1 774
MX53_PAD_NANDF_CS3__ESAI1_TX1 775
MX53_PAD_NANDF_CS3__EMI_WEIM_A_26 776
MX53_PAD_NANDF_CS3__MLB_MLBDAT 777
MX53_PAD_NANDF_CS3__USBPHY1_VSTATUS_7 778
MX53_PAD_FEC_MDIO__FEC_MDIO 779
MX53_PAD_FEC_MDIO__GPIO1_22 780
MX53_PAD_FEC_MDIO__ESAI1_SCKR 781
MX53_PAD_FEC_MDIO__FEC_COL 782
MX53_PAD_FEC_MDIO__RTC_CE_RTC_PS2 783
MX53_PAD_FEC_MDIO__SDMA_DEBUG_BUS_DEVICE_3 784
MX53_PAD_FEC_MDIO__EMI_EMI_DEBUG_49 785
MX53_PAD_FEC_REF_CLK__FEC_TX_CLK 786
MX53_PAD_FEC_REF_CLK__GPIO1_23 787
MX53_PAD_FEC_REF_CLK__ESAI1_FSR 788
MX53_PAD_FEC_REF_CLK__SDMA_DEBUG_BUS_DEVICE_4 789
MX53_PAD_FEC_REF_CLK__EMI_EMI_DEBUG_50 790
MX53_PAD_FEC_RX_ER__FEC_RX_ER 791
MX53_PAD_FEC_RX_ER__GPIO1_24 792
MX53_PAD_FEC_RX_ER__ESAI1_HCKR 793
MX53_PAD_FEC_RX_ER__FEC_RX_CLK 794
MX53_PAD_FEC_RX_ER__RTC_CE_RTC_PS3 795
MX53_PAD_FEC_CRS_DV__FEC_RX_DV 796
MX53_PAD_FEC_CRS_DV__GPIO1_25 797
MX53_PAD_FEC_CRS_DV__ESAI1_SCKT 798
MX53_PAD_FEC_RXD1__FEC_RDATA_1 799
MX53_PAD_FEC_RXD1__GPIO1_26 800
MX53_PAD_FEC_RXD1__ESAI1_FST 801
MX53_PAD_FEC_RXD1__MLB_MLBSIG 802
MX53_PAD_FEC_RXD1__RTC_CE_RTC_PS1 803
MX53_PAD_FEC_RXD0__FEC_RDATA_0 804
MX53_PAD_FEC_RXD0__GPIO1_27 805
MX53_PAD_FEC_RXD0__ESAI1_HCKT 806
MX53_PAD_FEC_RXD0__OSC32k_32K_OUT 807
MX53_PAD_FEC_TX_EN__FEC_TX_EN 808
MX53_PAD_FEC_TX_EN__GPIO1_28 809
MX53_PAD_FEC_TX_EN__ESAI1_TX3_RX2 810
MX53_PAD_FEC_TXD1__FEC_TDATA_1 811
MX53_PAD_FEC_TXD1__GPIO1_29 812
MX53_PAD_FEC_TXD1__ESAI1_TX2_RX3 813
MX53_PAD_FEC_TXD1__MLB_MLBCLK 814
MX53_PAD_FEC_TXD1__RTC_CE_RTC_PRSC_CLK 815
MX53_PAD_FEC_TXD0__FEC_TDATA_0 816
MX53_PAD_FEC_TXD0__GPIO1_30 817
MX53_PAD_FEC_TXD0__ESAI1_TX4_RX1 818
MX53_PAD_FEC_TXD0__USBPHY2_DATAOUT_0 819
MX53_PAD_FEC_MDC__FEC_MDC 820
MX53_PAD_FEC_MDC__GPIO1_31 821
MX53_PAD_FEC_MDC__ESAI1_TX5_RX0 822
MX53_PAD_FEC_MDC__MLB_MLBDAT 823
MX53_PAD_FEC_MDC__RTC_CE_RTC_ALARM1_TRIG 824
MX53_PAD_FEC_MDC__USBPHY2_DATAOUT_1 825
MX53_PAD_PATA_DIOW__PATA_DIOW 826
MX53_PAD_PATA_DIOW__GPIO6_17 827
MX53_PAD_PATA_DIOW__UART1_TXD_MUX 828
MX53_PAD_PATA_DIOW__USBPHY2_DATAOUT_2 829
MX53_PAD_PATA_DMACK__PATA_DMACK 830
MX53_PAD_PATA_DMACK__GPIO6_18 831
MX53_PAD_PATA_DMACK__UART1_RXD_MUX 832
MX53_PAD_PATA_DMACK__USBPHY2_DATAOUT_3 833
MX53_PAD_PATA_DMARQ__PATA_DMARQ 834
MX53_PAD_PATA_DMARQ__GPIO7_0 835
MX53_PAD_PATA_DMARQ__UART2_TXD_MUX 836
MX53_PAD_PATA_DMARQ__CCM_CCM_OUT_0 837
MX53_PAD_PATA_DMARQ__USBPHY2_DATAOUT_4 838
MX53_PAD_PATA_BUFFER_EN__PATA_BUFFER_EN 839
MX53_PAD_PATA_BUFFER_EN__GPIO7_1 840
MX53_PAD_PATA_BUFFER_EN__UART2_RXD_MUX 841
MX53_PAD_PATA_BUFFER_EN__CCM_CCM_OUT_1 842
MX53_PAD_PATA_BUFFER_EN__USBPHY2_DATAOUT_5 843
MX53_PAD_PATA_INTRQ__PATA_INTRQ 844
MX53_PAD_PATA_INTRQ__GPIO7_2 845
MX53_PAD_PATA_INTRQ__UART2_CTS 846
MX53_PAD_PATA_INTRQ__CAN1_TXCAN 847
MX53_PAD_PATA_INTRQ__CCM_CCM_OUT_2 848
MX53_PAD_PATA_INTRQ__USBPHY2_DATAOUT_6 849
MX53_PAD_PATA_DIOR__PATA_DIOR 850
MX53_PAD_PATA_DIOR__GPIO7_3 851
MX53_PAD_PATA_DIOR__UART2_RTS 852
MX53_PAD_PATA_DIOR__CAN1_RXCAN 853
MX53_PAD_PATA_DIOR__USBPHY2_DATAOUT_7 854
MX53_PAD_PATA_RESET_B__PATA_PATA_RESET_B 855
MX53_PAD_PATA_RESET_B__GPIO7_4 856
MX53_PAD_PATA_RESET_B__ESDHC3_CMD 857
MX53_PAD_PATA_RESET_B__UART1_CTS 858
MX53_PAD_PATA_RESET_B__CAN2_TXCAN 859
MX53_PAD_PATA_RESET_B__USBPHY1_DATAOUT_0 860
MX53_PAD_PATA_IORDY__PATA_IORDY 861
MX53_PAD_PATA_IORDY__GPIO7_5 862
MX53_PAD_PATA_IORDY__ESDHC3_CLK 863
MX53_PAD_PATA_IORDY__UART1_RTS 864
MX53_PAD_PATA_IORDY__CAN2_RXCAN 865
MX53_PAD_PATA_IORDY__USBPHY1_DATAOUT_1 866
MX53_PAD_PATA_DA_0__PATA_DA_0 867
MX53_PAD_PATA_DA_0__GPIO7_6 868
MX53_PAD_PATA_DA_0__ESDHC3_RST 869
MX53_PAD_PATA_DA_0__OWIRE_LINE 870
MX53_PAD_PATA_DA_0__USBPHY1_DATAOUT_2 871
MX53_PAD_PATA_DA_1__PATA_DA_1 872
MX53_PAD_PATA_DA_1__GPIO7_7 873
MX53_PAD_PATA_DA_1__ESDHC4_CMD 874
MX53_PAD_PATA_DA_1__UART3_CTS 875
MX53_PAD_PATA_DA_1__USBPHY1_DATAOUT_3 876
MX53_PAD_PATA_DA_2__PATA_DA_2 877
MX53_PAD_PATA_DA_2__GPIO7_8 878
MX53_PAD_PATA_DA_2__ESDHC4_CLK 879
MX53_PAD_PATA_DA_2__UART3_RTS 880
MX53_PAD_PATA_DA_2__USBPHY1_DATAOUT_4 881
MX53_PAD_PATA_CS_0__PATA_CS_0 882
MX53_PAD_PATA_CS_0__GPIO7_9 883
MX53_PAD_PATA_CS_0__UART3_TXD_MUX 884
MX53_PAD_PATA_CS_0__USBPHY1_DATAOUT_5 885
MX53_PAD_PATA_CS_1__PATA_CS_1 886
MX53_PAD_PATA_CS_1__GPIO7_10 887
MX53_PAD_PATA_CS_1__UART3_RXD_MUX 888
MX53_PAD_PATA_CS_1__USBPHY1_DATAOUT_6 889
MX53_PAD_PATA_DATA0__PATA_DATA_0 890
MX53_PAD_PATA_DATA0__GPIO2_0 891
MX53_PAD_PATA_DATA0__EMI_NANDF_D_0 892
MX53_PAD_PATA_DATA0__ESDHC3_DAT4 893
MX53_PAD_PATA_DATA0__GPU3d_GPU_DEBUG_OUT_0 894
MX53_PAD_PATA_DATA0__IPU_DIAG_BUS_0 895
MX53_PAD_PATA_DATA0__USBPHY1_DATAOUT_7 896
MX53_PAD_PATA_DATA1__PATA_DATA_1 897
MX53_PAD_PATA_DATA1__GPIO2_1 898
MX53_PAD_PATA_DATA1__EMI_NANDF_D_1 899
MX53_PAD_PATA_DATA1__ESDHC3_DAT5 900
MX53_PAD_PATA_DATA1__GPU3d_GPU_DEBUG_OUT_1 901
MX53_PAD_PATA_DATA1__IPU_DIAG_BUS_1 902
MX53_PAD_PATA_DATA2__PATA_DATA_2 903
MX53_PAD_PATA_DATA2__GPIO2_2 904
MX53_PAD_PATA_DATA2__EMI_NANDF_D_2 905
MX53_PAD_PATA_DATA2__ESDHC3_DAT6 906
MX53_PAD_PATA_DATA2__GPU3d_GPU_DEBUG_OUT_2 907
MX53_PAD_PATA_DATA2__IPU_DIAG_BUS_2 908
MX53_PAD_PATA_DATA3__PATA_DATA_3 909
MX53_PAD_PATA_DATA3__GPIO2_3 910
MX53_PAD_PATA_DATA3__EMI_NANDF_D_3 911
MX53_PAD_PATA_DATA3__ESDHC3_DAT7 912
MX53_PAD_PATA_DATA3__GPU3d_GPU_DEBUG_OUT_3 913
MX53_PAD_PATA_DATA3__IPU_DIAG_BUS_3 914
MX53_PAD_PATA_DATA4__PATA_DATA_4 915
MX53_PAD_PATA_DATA4__GPIO2_4 916
MX53_PAD_PATA_DATA4__EMI_NANDF_D_4 917
MX53_PAD_PATA_DATA4__ESDHC4_DAT4 918
MX53_PAD_PATA_DATA4__GPU3d_GPU_DEBUG_OUT_4 919
MX53_PAD_PATA_DATA4__IPU_DIAG_BUS_4 920
MX53_PAD_PATA_DATA5__PATA_DATA_5 921
MX53_PAD_PATA_DATA5__GPIO2_5 922
MX53_PAD_PATA_DATA5__EMI_NANDF_D_5 923
MX53_PAD_PATA_DATA5__ESDHC4_DAT5 924
MX53_PAD_PATA_DATA5__GPU3d_GPU_DEBUG_OUT_5 925
MX53_PAD_PATA_DATA5__IPU_DIAG_BUS_5 926
MX53_PAD_PATA_DATA6__PATA_DATA_6 927
MX53_PAD_PATA_DATA6__GPIO2_6 928
MX53_PAD_PATA_DATA6__EMI_NANDF_D_6 929
MX53_PAD_PATA_DATA6__ESDHC4_DAT6 930
MX53_PAD_PATA_DATA6__GPU3d_GPU_DEBUG_OUT_6 931
MX53_PAD_PATA_DATA6__IPU_DIAG_BUS_6 932
MX53_PAD_PATA_DATA7__PATA_DATA_7 933
MX53_PAD_PATA_DATA7__GPIO2_7 934
MX53_PAD_PATA_DATA7__EMI_NANDF_D_7 935
MX53_PAD_PATA_DATA7__ESDHC4_DAT7 936
MX53_PAD_PATA_DATA7__GPU3d_GPU_DEBUG_OUT_7 937
MX53_PAD_PATA_DATA7__IPU_DIAG_BUS_7 938
MX53_PAD_PATA_DATA8__PATA_DATA_8 939
MX53_PAD_PATA_DATA8__GPIO2_8 940
MX53_PAD_PATA_DATA8__ESDHC1_DAT4 941
MX53_PAD_PATA_DATA8__EMI_NANDF_D_8 942
MX53_PAD_PATA_DATA8__ESDHC3_DAT0 943
MX53_PAD_PATA_DATA8__GPU3d_GPU_DEBUG_OUT_8 944
MX53_PAD_PATA_DATA8__IPU_DIAG_BUS_8 945
MX53_PAD_PATA_DATA9__PATA_DATA_9 946
MX53_PAD_PATA_DATA9__GPIO2_9 947
MX53_PAD_PATA_DATA9__ESDHC1_DAT5 948
MX53_PAD_PATA_DATA9__EMI_NANDF_D_9 949
MX53_PAD_PATA_DATA9__ESDHC3_DAT1 950
MX53_PAD_PATA_DATA9__GPU3d_GPU_DEBUG_OUT_9 951
MX53_PAD_PATA_DATA9__IPU_DIAG_BUS_9 952
MX53_PAD_PATA_DATA10__PATA_DATA_10 953
MX53_PAD_PATA_DATA10__GPIO2_10 954
MX53_PAD_PATA_DATA10__ESDHC1_DAT6 955
MX53_PAD_PATA_DATA10__EMI_NANDF_D_10 956
MX53_PAD_PATA_DATA10__ESDHC3_DAT2 957
MX53_PAD_PATA_DATA10__GPU3d_GPU_DEBUG_OUT_10 958
MX53_PAD_PATA_DATA10__IPU_DIAG_BUS_10 959
MX53_PAD_PATA_DATA11__PATA_DATA_11 960
MX53_PAD_PATA_DATA11__GPIO2_11 961
MX53_PAD_PATA_DATA11__ESDHC1_DAT7 962
MX53_PAD_PATA_DATA11__EMI_NANDF_D_11 963
MX53_PAD_PATA_DATA11__ESDHC3_DAT3 964
MX53_PAD_PATA_DATA11__GPU3d_GPU_DEBUG_OUT_11 965
MX53_PAD_PATA_DATA11__IPU_DIAG_BUS_11 966
MX53_PAD_PATA_DATA12__PATA_DATA_12 967
MX53_PAD_PATA_DATA12__GPIO2_12 968
MX53_PAD_PATA_DATA12__ESDHC2_DAT4 969
MX53_PAD_PATA_DATA12__EMI_NANDF_D_12 970
MX53_PAD_PATA_DATA12__ESDHC4_DAT0 971
MX53_PAD_PATA_DATA12__GPU3d_GPU_DEBUG_OUT_12 972
MX53_PAD_PATA_DATA12__IPU_DIAG_BUS_12 973
MX53_PAD_PATA_DATA13__PATA_DATA_13 974
MX53_PAD_PATA_DATA13__GPIO2_13 975
MX53_PAD_PATA_DATA13__ESDHC2_DAT5 976
MX53_PAD_PATA_DATA13__EMI_NANDF_D_13 977
MX53_PAD_PATA_DATA13__ESDHC4_DAT1 978
MX53_PAD_PATA_DATA13__GPU3d_GPU_DEBUG_OUT_13 979
MX53_PAD_PATA_DATA13__IPU_DIAG_BUS_13 980
MX53_PAD_PATA_DATA14__PATA_DATA_14 981
MX53_PAD_PATA_DATA14__GPIO2_14 982
MX53_PAD_PATA_DATA14__ESDHC2_DAT6 983
MX53_PAD_PATA_DATA14__EMI_NANDF_D_14 984
MX53_PAD_PATA_DATA14__ESDHC4_DAT2 985
MX53_PAD_PATA_DATA14__GPU3d_GPU_DEBUG_OUT_14 986
MX53_PAD_PATA_DATA14__IPU_DIAG_BUS_14 987
MX53_PAD_PATA_DATA15__PATA_DATA_15 988
MX53_PAD_PATA_DATA15__GPIO2_15 989
MX53_PAD_PATA_DATA15__ESDHC2_DAT7 990
MX53_PAD_PATA_DATA15__EMI_NANDF_D_15 991
MX53_PAD_PATA_DATA15__ESDHC4_DAT3 992
MX53_PAD_PATA_DATA15__GPU3d_GPU_DEBUG_OUT_15 993
MX53_PAD_PATA_DATA15__IPU_DIAG_BUS_15 994
MX53_PAD_SD1_DATA0__ESDHC1_DAT0 995
MX53_PAD_SD1_DATA0__GPIO1_16 996
MX53_PAD_SD1_DATA0__GPT_CAPIN1 997
MX53_PAD_SD1_DATA0__CSPI_MISO 998
MX53_PAD_SD1_DATA0__CCM_PLL3_BYP 999
MX53_PAD_SD1_DATA1__ESDHC1_DAT1 1000
MX53_PAD_SD1_DATA1__GPIO1_17 1001
MX53_PAD_SD1_DATA1__GPT_CAPIN2 1002
MX53_PAD_SD1_DATA1__CSPI_SS0 1003
MX53_PAD_SD1_DATA1__CCM_PLL4_BYP 1004
MX53_PAD_SD1_CMD__ESDHC1_CMD 1005
MX53_PAD_SD1_CMD__GPIO1_18 1006
MX53_PAD_SD1_CMD__GPT_CMPOUT1 1007
MX53_PAD_SD1_CMD__CSPI_MOSI 1008
MX53_PAD_SD1_CMD__CCM_PLL1_BYP 1009
MX53_PAD_SD1_DATA2__ESDHC1_DAT2 1010
MX53_PAD_SD1_DATA2__GPIO1_19 1011
MX53_PAD_SD1_DATA2__GPT_CMPOUT2 1012
MX53_PAD_SD1_DATA2__PWM2_PWMO 1013
MX53_PAD_SD1_DATA2__WDOG1_WDOG_B 1014
MX53_PAD_SD1_DATA2__CSPI_SS1 1015
MX53_PAD_SD1_DATA2__WDOG1_WDOG_RST_B_DEB 1016
MX53_PAD_SD1_DATA2__CCM_PLL2_BYP 1017
MX53_PAD_SD1_CLK__ESDHC1_CLK 1018
MX53_PAD_SD1_CLK__GPIO1_20 1019
MX53_PAD_SD1_CLK__OSC32k_32K_OUT 1020
MX53_PAD_SD1_CLK__GPT_CLKIN 1021
MX53_PAD_SD1_CLK__CSPI_SCLK 1022
MX53_PAD_SD1_CLK__SATA_PHY_DTB_0 1023
MX53_PAD_SD1_DATA3__ESDHC1_DAT3 1024
MX53_PAD_SD1_DATA3__GPIO1_21 1025
MX53_PAD_SD1_DATA3__GPT_CMPOUT3 1026
MX53_PAD_SD1_DATA3__PWM1_PWMO 1027
MX53_PAD_SD1_DATA3__WDOG2_WDOG_B 1028
MX53_PAD_SD1_DATA3__CSPI_SS2 1029
MX53_PAD_SD1_DATA3__WDOG2_WDOG_RST_B_DEB 1030
MX53_PAD_SD1_DATA3__SATA_PHY_DTB_1 1031
MX53_PAD_SD2_CLK__ESDHC2_CLK 1032
MX53_PAD_SD2_CLK__GPIO1_10 1033
MX53_PAD_SD2_CLK__KPP_COL_5 1034
MX53_PAD_SD2_CLK__AUDMUX_AUD4_RXFS 1035
MX53_PAD_SD2_CLK__CSPI_SCLK 1036
MX53_PAD_SD2_CLK__SCC_RANDOM_V 1037
MX53_PAD_SD2_CMD__ESDHC2_CMD 1038
MX53_PAD_SD2_CMD__GPIO1_11 1039
MX53_PAD_SD2_CMD__KPP_ROW_5 1040
MX53_PAD_SD2_CMD__AUDMUX_AUD4_RXC 1041
MX53_PAD_SD2_CMD__CSPI_MOSI 1042
MX53_PAD_SD2_CMD__SCC_RANDOM 1043
MX53_PAD_SD2_DATA3__ESDHC2_DAT3 1044
MX53_PAD_SD2_DATA3__GPIO1_12 1045
MX53_PAD_SD2_DATA3__KPP_COL_6 1046
MX53_PAD_SD2_DATA3__AUDMUX_AUD4_TXC 1047
MX53_PAD_SD2_DATA3__CSPI_SS2 1048
MX53_PAD_SD2_DATA3__SJC_DONE 1049
MX53_PAD_SD2_DATA2__ESDHC2_DAT2 1050
MX53_PAD_SD2_DATA2__GPIO1_13 1051
MX53_PAD_SD2_DATA2__KPP_ROW_6 1052
MX53_PAD_SD2_DATA2__AUDMUX_AUD4_TXD 1053
MX53_PAD_SD2_DATA2__CSPI_SS1 1054
MX53_PAD_SD2_DATA2__SJC_FAIL 1055
MX53_PAD_SD2_DATA1__ESDHC2_DAT1 1056
MX53_PAD_SD2_DATA1__GPIO1_14 1057
MX53_PAD_SD2_DATA1__KPP_COL_7 1058
MX53_PAD_SD2_DATA1__AUDMUX_AUD4_TXFS 1059
MX53_PAD_SD2_DATA1__CSPI_SS0 1060
MX53_PAD_SD2_DATA1__RTIC_SEC_VIO 1061
MX53_PAD_SD2_DATA0__ESDHC2_DAT0 1062
MX53_PAD_SD2_DATA0__GPIO1_15 1063
MX53_PAD_SD2_DATA0__KPP_ROW_7 1064
MX53_PAD_SD2_DATA0__AUDMUX_AUD4_RXD 1065
MX53_PAD_SD2_DATA0__CSPI_MISO 1066
MX53_PAD_SD2_DATA0__RTIC_DONE_INT 1067
MX53_PAD_GPIO_0__CCM_CLKO 1068
MX53_PAD_GPIO_0__GPIO1_0 1069
MX53_PAD_GPIO_0__KPP_COL_5 1070
MX53_PAD_GPIO_0__CCM_SSI_EXT1_CLK 1071
MX53_PAD_GPIO_0__EPIT1_EPITO 1072
MX53_PAD_GPIO_0__SRTC_ALARM_DEB 1073
MX53_PAD_GPIO_0__USBOH3_USBH1_PWR 1074
MX53_PAD_GPIO_0__CSU_TD 1075
MX53_PAD_GPIO_1__ESAI1_SCKR 1076
MX53_PAD_GPIO_1__GPIO1_1 1077
MX53_PAD_GPIO_1__KPP_ROW_5 1078
MX53_PAD_GPIO_1__CCM_SSI_EXT2_CLK 1079
MX53_PAD_GPIO_1__PWM2_PWMO 1080
MX53_PAD_GPIO_1__WDOG2_WDOG_B 1081
MX53_PAD_GPIO_1__ESDHC1_CD 1082
MX53_PAD_GPIO_1__SRC_TESTER_ACK 1083
MX53_PAD_GPIO_9__ESAI1_FSR 1084
MX53_PAD_GPIO_9__GPIO1_9 1085
MX53_PAD_GPIO_9__KPP_COL_6 1086
MX53_PAD_GPIO_9__CCM_REF_EN_B 1087
MX53_PAD_GPIO_9__PWM1_PWMO 1088
MX53_PAD_GPIO_9__WDOG1_WDOG_B 1089
MX53_PAD_GPIO_9__ESDHC1_WP 1090
MX53_PAD_GPIO_9__SCC_FAIL_STATE 1091
MX53_PAD_GPIO_3__ESAI1_HCKR 1092
MX53_PAD_GPIO_3__GPIO1_3 1093
MX53_PAD_GPIO_3__I2C3_SCL 1094
MX53_PAD_GPIO_3__DPLLIP1_TOG_EN 1095
MX53_PAD_GPIO_3__CCM_CLKO2 1096
MX53_PAD_GPIO_3__OBSERVE_MUX_OBSRV_INT_OUT0 1097
MX53_PAD_GPIO_3__USBOH3_USBH1_OC 1098
MX53_PAD_GPIO_3__MLB_MLBCLK 1099
MX53_PAD_GPIO_6__ESAI1_SCKT 1100
MX53_PAD_GPIO_6__GPIO1_6 1101
MX53_PAD_GPIO_6__I2C3_SDA 1102
MX53_PAD_GPIO_6__CCM_CCM_OUT_0 1103
MX53_PAD_GPIO_6__CSU_CSU_INT_DEB 1104
MX53_PAD_GPIO_6__OBSERVE_MUX_OBSRV_INT_OUT1 1105
MX53_PAD_GPIO_6__ESDHC2_LCTL 1106
MX53_PAD_GPIO_6__MLB_MLBSIG 1107
MX53_PAD_GPIO_2__ESAI1_FST 1108
MX53_PAD_GPIO_2__GPIO1_2 1109
MX53_PAD_GPIO_2__KPP_ROW_6 1110
MX53_PAD_GPIO_2__CCM_CCM_OUT_1 1111
MX53_PAD_GPIO_2__CSU_CSU_ALARM_AUT_0 1112
MX53_PAD_GPIO_2__OBSERVE_MUX_OBSRV_INT_OUT2 1113
MX53_PAD_GPIO_2__ESDHC2_WP 1114
MX53_PAD_GPIO_2__MLB_MLBDAT 1115
MX53_PAD_GPIO_4__ESAI1_HCKT 1116
MX53_PAD_GPIO_4__GPIO1_4 1117
MX53_PAD_GPIO_4__KPP_COL_7 1118
MX53_PAD_GPIO_4__CCM_CCM_OUT_2 1119
MX53_PAD_GPIO_4__CSU_CSU_ALARM_AUT_1 1120
MX53_PAD_GPIO_4__OBSERVE_MUX_OBSRV_INT_OUT3 1121
MX53_PAD_GPIO_4__ESDHC2_CD 1122
MX53_PAD_GPIO_4__SCC_SEC_STATE 1123
MX53_PAD_GPIO_5__ESAI1_TX2_RX3 1124
MX53_PAD_GPIO_5__GPIO1_5 1125
MX53_PAD_GPIO_5__KPP_ROW_7 1126
MX53_PAD_GPIO_5__CCM_CLKO 1127
MX53_PAD_GPIO_5__CSU_CSU_ALARM_AUT_2 1128
MX53_PAD_GPIO_5__OBSERVE_MUX_OBSRV_INT_OUT4 1129
MX53_PAD_GPIO_5__I2C3_SCL 1130
MX53_PAD_GPIO_5__CCM_PLL1_BYP 1131
MX53_PAD_GPIO_7__ESAI1_TX4_RX1 1132
MX53_PAD_GPIO_7__GPIO1_7 1133
MX53_PAD_GPIO_7__EPIT1_EPITO 1134
MX53_PAD_GPIO_7__CAN1_TXCAN 1135
MX53_PAD_GPIO_7__UART2_TXD_MUX 1136
MX53_PAD_GPIO_7__FIRI_RXD 1137
MX53_PAD_GPIO_7__SPDIF_PLOCK 1138
MX53_PAD_GPIO_7__CCM_PLL2_BYP 1139
MX53_PAD_GPIO_8__ESAI1_TX5_RX0 1140
MX53_PAD_GPIO_8__GPIO1_8 1141
MX53_PAD_GPIO_8__EPIT2_EPITO 1142
MX53_PAD_GPIO_8__CAN1_RXCAN 1143
MX53_PAD_GPIO_8__UART2_RXD_MUX 1144
MX53_PAD_GPIO_8__FIRI_TXD 1145
MX53_PAD_GPIO_8__SPDIF_SRCLK 1146
MX53_PAD_GPIO_8__CCM_PLL3_BYP 1147
MX53_PAD_GPIO_16__ESAI1_TX3_RX2 1148
MX53_PAD_GPIO_16__GPIO7_11 1149
MX53_PAD_GPIO_16__TZIC_PWRFAIL_INT 1150
MX53_PAD_GPIO_16__RTC_CE_RTC_EXT_TRIG1 1151
MX53_PAD_GPIO_16__SPDIF_IN1 1152
MX53_PAD_GPIO_16__I2C3_SDA 1153
MX53_PAD_GPIO_16__SJC_DE_B 1154
MX53_PAD_GPIO_17__ESAI1_TX0 1155
MX53_PAD_GPIO_17__GPIO7_12 1156
MX53_PAD_GPIO_17__SDMA_EXT_EVENT_0 1157
MX53_PAD_GPIO_17__GPC_PMIC_RDY 1158
MX53_PAD_GPIO_17__RTC_CE_RTC_FSV_TRIG 1159
MX53_PAD_GPIO_17__SPDIF_OUT1 1160
MX53_PAD_GPIO_17__IPU_SNOOP2 1161
MX53_PAD_GPIO_17__SJC_JTAG_ACT 1162
MX53_PAD_GPIO_18__ESAI1_TX1 1163
MX53_PAD_GPIO_18__GPIO7_13 1164
MX53_PAD_GPIO_18__SDMA_EXT_EVENT_1 1165
MX53_PAD_GPIO_18__OWIRE_LINE 1166
MX53_PAD_GPIO_18__RTC_CE_RTC_ALARM2_TRIG 1167
MX53_PAD_GPIO_18__CCM_ASRC_EXT_CLK 1168
MX53_PAD_GPIO_18__ESDHC1_LCTL 1169
MX53_PAD_GPIO_18__SRC_SYSTEM_RST 1170
* Freescale IMX6Q IOMUX Controller
Please refer to fsl,imx-pinctrl.txt in this directory for common binding part
and usage.
Required properties:
- compatible: "fsl,imx6q-iomuxc"
- fsl,pins: two integers array, represents a group of pins mux and config
setting. The format is fsl,pins = <PIN_FUNC_ID CONFIG>, PIN_FUNC_ID is a
pin working on a specific function, CONFIG is the pad setting value like
pull-up for this pin. Please refer to imx6q datasheet for the valid pad
config settings.
CONFIG bits definition:
PAD_CTL_HYS (1 << 16)
PAD_CTL_PUS_100K_DOWN (0 << 14)
PAD_CTL_PUS_47K_UP (1 << 14)
PAD_CTL_PUS_100K_UP (2 << 14)
PAD_CTL_PUS_22K_UP (3 << 14)
PAD_CTL_PUE (1 << 13)
PAD_CTL_PKE (1 << 12)
PAD_CTL_ODE (1 << 11)
PAD_CTL_SPEED_LOW (1 << 6)
PAD_CTL_SPEED_MED (2 << 6)
PAD_CTL_SPEED_HIGH (3 << 6)
PAD_CTL_DSE_DISABLE (0 << 3)
PAD_CTL_DSE_240ohm (1 << 3)
PAD_CTL_DSE_120ohm (2 << 3)
PAD_CTL_DSE_80ohm (3 << 3)
PAD_CTL_DSE_60ohm (4 << 3)
PAD_CTL_DSE_48ohm (5 << 3)
PAD_CTL_DSE_40ohm (6 << 3)
PAD_CTL_DSE_34ohm (7 << 3)
PAD_CTL_SRE_FAST (1 << 0)
PAD_CTL_SRE_SLOW (0 << 0)
See below for available PIN_FUNC_ID for imx6q:
MX6Q_PAD_SD2_DAT1__USDHC2_DAT1 0
MX6Q_PAD_SD2_DAT1__ECSPI5_SS0 1
MX6Q_PAD_SD2_DAT1__WEIM_WEIM_CS_2 2
MX6Q_PAD_SD2_DAT1__AUDMUX_AUD4_TXFS 3
MX6Q_PAD_SD2_DAT1__KPP_COL_7 4
MX6Q_PAD_SD2_DAT1__GPIO_1_14 5
MX6Q_PAD_SD2_DAT1__CCM_WAIT 6
MX6Q_PAD_SD2_DAT1__ANATOP_TESTO_0 7
MX6Q_PAD_SD2_DAT2__USDHC2_DAT2 8
MX6Q_PAD_SD2_DAT2__ECSPI5_SS1 9
MX6Q_PAD_SD2_DAT2__WEIM_WEIM_CS_3 10
MX6Q_PAD_SD2_DAT2__AUDMUX_AUD4_TXD 11
MX6Q_PAD_SD2_DAT2__KPP_ROW_6 12
MX6Q_PAD_SD2_DAT2__GPIO_1_13 13
MX6Q_PAD_SD2_DAT2__CCM_STOP 14
MX6Q_PAD_SD2_DAT2__ANATOP_TESTO_1 15
MX6Q_PAD_SD2_DAT0__USDHC2_DAT0 16
MX6Q_PAD_SD2_DAT0__ECSPI5_MISO 17
MX6Q_PAD_SD2_DAT0__AUDMUX_AUD4_RXD 18
MX6Q_PAD_SD2_DAT0__KPP_ROW_7 19
MX6Q_PAD_SD2_DAT0__GPIO_1_15 20
MX6Q_PAD_SD2_DAT0__DCIC2_DCIC_OUT 21
MX6Q_PAD_SD2_DAT0__TESTO_2 22
MX6Q_PAD_RGMII_TXC__USBOH3_H2_DATA 23
MX6Q_PAD_RGMII_TXC__ENET_RGMII_TXC 24
MX6Q_PAD_RGMII_TXC__SPDIF_SPDIF_EXTCLK 25
MX6Q_PAD_RGMII_TXC__GPIO_6_19 26
MX6Q_PAD_RGMII_TXC__MIPI_CORE_DPHY_IN_0 27
MX6Q_PAD_RGMII_TXC__ANATOP_24M_OUT 28
MX6Q_PAD_RGMII_TD0__MIPI_HSI_CRL_TX_RDY 29
MX6Q_PAD_RGMII_TD0__ENET_RGMII_TD0 30
MX6Q_PAD_RGMII_TD0__GPIO_6_20 31
MX6Q_PAD_RGMII_TD0__MIPI_CORE_DPHY_IN_1 32
MX6Q_PAD_RGMII_TD1__MIPI_HSI_CRL_RX_FLG 33
MX6Q_PAD_RGMII_TD1__ENET_RGMII_TD1 34
MX6Q_PAD_RGMII_TD1__GPIO_6_21 35
MX6Q_PAD_RGMII_TD1__MIPI_CORE_DPHY_IN_2 36
MX6Q_PAD_RGMII_TD1__CCM_PLL3_BYP 37
MX6Q_PAD_RGMII_TD2__MIPI_HSI_CRL_RX_DTA 38
MX6Q_PAD_RGMII_TD2__ENET_RGMII_TD2 39
MX6Q_PAD_RGMII_TD2__GPIO_6_22 40
MX6Q_PAD_RGMII_TD2__MIPI_CORE_DPHY_IN_3 41
MX6Q_PAD_RGMII_TD2__CCM_PLL2_BYP 42
MX6Q_PAD_RGMII_TD3__MIPI_HSI_CRL_RX_WAK 43
MX6Q_PAD_RGMII_TD3__ENET_RGMII_TD3 44
MX6Q_PAD_RGMII_TD3__GPIO_6_23 45
MX6Q_PAD_RGMII_TD3__MIPI_CORE_DPHY_IN_4 46
MX6Q_PAD_RGMII_RX_CTL__USBOH3_H3_DATA 47
MX6Q_PAD_RGMII_RX_CTL__RGMII_RX_CTL 48
MX6Q_PAD_RGMII_RX_CTL__GPIO_6_24 49
MX6Q_PAD_RGMII_RX_CTL__MIPI_DPHY_IN_5 50
MX6Q_PAD_RGMII_RD0__MIPI_HSI_CRL_RX_RDY 51
MX6Q_PAD_RGMII_RD0__ENET_RGMII_RD0 52
MX6Q_PAD_RGMII_RD0__GPIO_6_25 53
MX6Q_PAD_RGMII_RD0__MIPI_CORE_DPHY_IN_6 54
MX6Q_PAD_RGMII_TX_CTL__USBOH3_H2_STROBE 55
MX6Q_PAD_RGMII_TX_CTL__RGMII_TX_CTL 56
MX6Q_PAD_RGMII_TX_CTL__GPIO_6_26 57
MX6Q_PAD_RGMII_TX_CTL__CORE_DPHY_IN_7 58
MX6Q_PAD_RGMII_TX_CTL__ANATOP_REF_OUT 59
MX6Q_PAD_RGMII_RD1__MIPI_HSI_CTRL_TX_FL 60
MX6Q_PAD_RGMII_RD1__ENET_RGMII_RD1 61
MX6Q_PAD_RGMII_RD1__GPIO_6_27 62
MX6Q_PAD_RGMII_RD1__CORE_DPHY_TEST_IN_8 63
MX6Q_PAD_RGMII_RD1__SJC_FAIL 64
MX6Q_PAD_RGMII_RD2__MIPI_HSI_CRL_TX_DTA 65
MX6Q_PAD_RGMII_RD2__ENET_RGMII_RD2 66
MX6Q_PAD_RGMII_RD2__GPIO_6_28 67
MX6Q_PAD_RGMII_RD2__MIPI_CORE_DPHY_IN_9 68
MX6Q_PAD_RGMII_RD3__MIPI_HSI_CRL_TX_WAK 69
MX6Q_PAD_RGMII_RD3__ENET_RGMII_RD3 70
MX6Q_PAD_RGMII_RD3__GPIO_6_29 71
MX6Q_PAD_RGMII_RD3__MIPI_CORE_DPHY_IN10 72
MX6Q_PAD_RGMII_RXC__USBOH3_H3_STROBE 73
MX6Q_PAD_RGMII_RXC__ENET_RGMII_RXC 74
MX6Q_PAD_RGMII_RXC__GPIO_6_30 75
MX6Q_PAD_RGMII_RXC__MIPI_CORE_DPHY_IN11 76
MX6Q_PAD_EIM_A25__WEIM_WEIM_A_25 77
MX6Q_PAD_EIM_A25__ECSPI4_SS1 78
MX6Q_PAD_EIM_A25__ECSPI2_RDY 79
MX6Q_PAD_EIM_A25__IPU1_DI1_PIN12 80
MX6Q_PAD_EIM_A25__IPU1_DI0_D1_CS 81
MX6Q_PAD_EIM_A25__GPIO_5_2 82
MX6Q_PAD_EIM_A25__HDMI_TX_CEC_LINE 83
MX6Q_PAD_EIM_A25__PL301_PER1_HBURST_0 84
MX6Q_PAD_EIM_EB2__WEIM_WEIM_EB_2 85
MX6Q_PAD_EIM_EB2__ECSPI1_SS0 86
MX6Q_PAD_EIM_EB2__CCM_DI1_EXT_CLK 87
MX6Q_PAD_EIM_EB2__IPU2_CSI1_D_19 88
MX6Q_PAD_EIM_EB2__HDMI_TX_DDC_SCL 89
MX6Q_PAD_EIM_EB2__GPIO_2_30 90
MX6Q_PAD_EIM_EB2__I2C2_SCL 91
MX6Q_PAD_EIM_EB2__SRC_BT_CFG_30 92
MX6Q_PAD_EIM_D16__WEIM_WEIM_D_16 93
MX6Q_PAD_EIM_D16__ECSPI1_SCLK 94
MX6Q_PAD_EIM_D16__IPU1_DI0_PIN5 95
MX6Q_PAD_EIM_D16__IPU2_CSI1_D_18 96
MX6Q_PAD_EIM_D16__HDMI_TX_DDC_SDA 97
MX6Q_PAD_EIM_D16__GPIO_3_16 98
MX6Q_PAD_EIM_D16__I2C2_SDA 99
MX6Q_PAD_EIM_D17__WEIM_WEIM_D_17 100
MX6Q_PAD_EIM_D17__ECSPI1_MISO 101
MX6Q_PAD_EIM_D17__IPU1_DI0_PIN6 102
MX6Q_PAD_EIM_D17__IPU2_CSI1_PIXCLK 103
MX6Q_PAD_EIM_D17__DCIC1_DCIC_OUT 104
MX6Q_PAD_EIM_D17__GPIO_3_17 105
MX6Q_PAD_EIM_D17__I2C3_SCL 106
MX6Q_PAD_EIM_D17__PL301_PER1_HBURST_1 107
MX6Q_PAD_EIM_D18__WEIM_WEIM_D_18 108
MX6Q_PAD_EIM_D18__ECSPI1_MOSI 109
MX6Q_PAD_EIM_D18__IPU1_DI0_PIN7 110
MX6Q_PAD_EIM_D18__IPU2_CSI1_D_17 111
MX6Q_PAD_EIM_D18__IPU1_DI1_D0_CS 112
MX6Q_PAD_EIM_D18__GPIO_3_18 113
MX6Q_PAD_EIM_D18__I2C3_SDA 114
MX6Q_PAD_EIM_D18__PL301_PER1_HBURST_2 115
MX6Q_PAD_EIM_D19__WEIM_WEIM_D_19 116
MX6Q_PAD_EIM_D19__ECSPI1_SS1 117
MX6Q_PAD_EIM_D19__IPU1_DI0_PIN8 118
MX6Q_PAD_EIM_D19__IPU2_CSI1_D_16 119
MX6Q_PAD_EIM_D19__UART1_CTS 120
MX6Q_PAD_EIM_D19__GPIO_3_19 121
MX6Q_PAD_EIM_D19__EPIT1_EPITO 122
MX6Q_PAD_EIM_D19__PL301_PER1_HRESP 123
MX6Q_PAD_EIM_D20__WEIM_WEIM_D_20 124
MX6Q_PAD_EIM_D20__ECSPI4_SS0 125
MX6Q_PAD_EIM_D20__IPU1_DI0_PIN16 126
MX6Q_PAD_EIM_D20__IPU2_CSI1_D_15 127
MX6Q_PAD_EIM_D20__UART1_RTS 128
MX6Q_PAD_EIM_D20__GPIO_3_20 129
MX6Q_PAD_EIM_D20__EPIT2_EPITO 130
MX6Q_PAD_EIM_D21__WEIM_WEIM_D_21 131
MX6Q_PAD_EIM_D21__ECSPI4_SCLK 132
MX6Q_PAD_EIM_D21__IPU1_DI0_PIN17 133
MX6Q_PAD_EIM_D21__IPU2_CSI1_D_11 134
MX6Q_PAD_EIM_D21__USBOH3_USBOTG_OC 135
MX6Q_PAD_EIM_D21__GPIO_3_21 136
MX6Q_PAD_EIM_D21__I2C1_SCL 137
MX6Q_PAD_EIM_D21__SPDIF_IN1 138
MX6Q_PAD_EIM_D22__WEIM_WEIM_D_22 139
MX6Q_PAD_EIM_D22__ECSPI4_MISO 140
MX6Q_PAD_EIM_D22__IPU1_DI0_PIN1 141
MX6Q_PAD_EIM_D22__IPU2_CSI1_D_10 142
MX6Q_PAD_EIM_D22__USBOH3_USBOTG_PWR 143
MX6Q_PAD_EIM_D22__GPIO_3_22 144
MX6Q_PAD_EIM_D22__SPDIF_OUT1 145
MX6Q_PAD_EIM_D22__PL301_PER1_HWRITE 146
MX6Q_PAD_EIM_D23__WEIM_WEIM_D_23 147
MX6Q_PAD_EIM_D23__IPU1_DI0_D0_CS 148
MX6Q_PAD_EIM_D23__UART3_CTS 149
MX6Q_PAD_EIM_D23__UART1_DCD 150
MX6Q_PAD_EIM_D23__IPU2_CSI1_DATA_EN 151
MX6Q_PAD_EIM_D23__GPIO_3_23 152
MX6Q_PAD_EIM_D23__IPU1_DI1_PIN2 153
MX6Q_PAD_EIM_D23__IPU1_DI1_PIN14 154
MX6Q_PAD_EIM_EB3__WEIM_WEIM_EB_3 155
MX6Q_PAD_EIM_EB3__ECSPI4_RDY 156
MX6Q_PAD_EIM_EB3__UART3_RTS 157
MX6Q_PAD_EIM_EB3__UART1_RI 158
MX6Q_PAD_EIM_EB3__IPU2_CSI1_HSYNC 159
MX6Q_PAD_EIM_EB3__GPIO_2_31 160
MX6Q_PAD_EIM_EB3__IPU1_DI1_PIN3 161
MX6Q_PAD_EIM_EB3__SRC_BT_CFG_31 162
MX6Q_PAD_EIM_D24__WEIM_WEIM_D_24 163
MX6Q_PAD_EIM_D24__ECSPI4_SS2 164
MX6Q_PAD_EIM_D24__UART3_TXD 165
MX6Q_PAD_EIM_D24__ECSPI1_SS2 166
MX6Q_PAD_EIM_D24__ECSPI2_SS2 167
MX6Q_PAD_EIM_D24__GPIO_3_24 168
MX6Q_PAD_EIM_D24__AUDMUX_AUD5_RXFS 169
MX6Q_PAD_EIM_D24__UART1_DTR 170
MX6Q_PAD_EIM_D25__WEIM_WEIM_D_25 171
MX6Q_PAD_EIM_D25__ECSPI4_SS3 172
MX6Q_PAD_EIM_D25__UART3_RXD 173
MX6Q_PAD_EIM_D25__ECSPI1_SS3 174
MX6Q_PAD_EIM_D25__ECSPI2_SS3 175
MX6Q_PAD_EIM_D25__GPIO_3_25 176
MX6Q_PAD_EIM_D25__AUDMUX_AUD5_RXC 177
MX6Q_PAD_EIM_D25__UART1_DSR 178
MX6Q_PAD_EIM_D26__WEIM_WEIM_D_26 179
MX6Q_PAD_EIM_D26__IPU1_DI1_PIN11 180
MX6Q_PAD_EIM_D26__IPU1_CSI0_D_1 181
MX6Q_PAD_EIM_D26__IPU2_CSI1_D_14 182
MX6Q_PAD_EIM_D26__UART2_TXD 183
MX6Q_PAD_EIM_D26__GPIO_3_26 184
MX6Q_PAD_EIM_D26__IPU1_SISG_2 185
MX6Q_PAD_EIM_D26__IPU1_DISP1_DAT_22 186
MX6Q_PAD_EIM_D27__WEIM_WEIM_D_27 187
MX6Q_PAD_EIM_D27__IPU1_DI1_PIN13 188
MX6Q_PAD_EIM_D27__IPU1_CSI0_D_0 189
MX6Q_PAD_EIM_D27__IPU2_CSI1_D_13 190
MX6Q_PAD_EIM_D27__UART2_RXD 191
MX6Q_PAD_EIM_D27__GPIO_3_27 192
MX6Q_PAD_EIM_D27__IPU1_SISG_3 193
MX6Q_PAD_EIM_D27__IPU1_DISP1_DAT_23 194
MX6Q_PAD_EIM_D28__WEIM_WEIM_D_28 195
MX6Q_PAD_EIM_D28__I2C1_SDA 196
MX6Q_PAD_EIM_D28__ECSPI4_MOSI 197
MX6Q_PAD_EIM_D28__IPU2_CSI1_D_12 198
MX6Q_PAD_EIM_D28__UART2_CTS 199
MX6Q_PAD_EIM_D28__GPIO_3_28 200
MX6Q_PAD_EIM_D28__IPU1_EXT_TRIG 201
MX6Q_PAD_EIM_D28__IPU1_DI0_PIN13 202
MX6Q_PAD_EIM_D29__WEIM_WEIM_D_29 203
MX6Q_PAD_EIM_D29__IPU1_DI1_PIN15 204
MX6Q_PAD_EIM_D29__ECSPI4_SS0 205
MX6Q_PAD_EIM_D29__UART2_RTS 206
MX6Q_PAD_EIM_D29__GPIO_3_29 207
MX6Q_PAD_EIM_D29__IPU2_CSI1_VSYNC 208
MX6Q_PAD_EIM_D29__IPU1_DI0_PIN14 209
MX6Q_PAD_EIM_D30__WEIM_WEIM_D_30 210
MX6Q_PAD_EIM_D30__IPU1_DISP1_DAT_21 211
MX6Q_PAD_EIM_D30__IPU1_DI0_PIN11 212
MX6Q_PAD_EIM_D30__IPU1_CSI0_D_3 213
MX6Q_PAD_EIM_D30__UART3_CTS 214
MX6Q_PAD_EIM_D30__GPIO_3_30 215
MX6Q_PAD_EIM_D30__USBOH3_USBH1_OC 216
MX6Q_PAD_EIM_D30__PL301_PER1_HPROT_0 217
MX6Q_PAD_EIM_D31__WEIM_WEIM_D_31 218
MX6Q_PAD_EIM_D31__IPU1_DISP1_DAT_20 219
MX6Q_PAD_EIM_D31__IPU1_DI0_PIN12 220
MX6Q_PAD_EIM_D31__IPU1_CSI0_D_2 221
MX6Q_PAD_EIM_D31__UART3_RTS 222
MX6Q_PAD_EIM_D31__GPIO_3_31 223
MX6Q_PAD_EIM_D31__USBOH3_USBH1_PWR 224
MX6Q_PAD_EIM_D31__PL301_PER1_HPROT_1 225
MX6Q_PAD_EIM_A24__WEIM_WEIM_A_24 226
MX6Q_PAD_EIM_A24__IPU1_DISP1_DAT_19 227
MX6Q_PAD_EIM_A24__IPU2_CSI1_D_19 228
MX6Q_PAD_EIM_A24__IPU2_SISG_2 229
MX6Q_PAD_EIM_A24__IPU1_SISG_2 230
MX6Q_PAD_EIM_A24__GPIO_5_4 231
MX6Q_PAD_EIM_A24__PL301_PER1_HPROT_2 232
MX6Q_PAD_EIM_A24__SRC_BT_CFG_24 233
MX6Q_PAD_EIM_A23__WEIM_WEIM_A_23 234
MX6Q_PAD_EIM_A23__IPU1_DISP1_DAT_18 235
MX6Q_PAD_EIM_A23__IPU2_CSI1_D_18 236
MX6Q_PAD_EIM_A23__IPU2_SISG_3 237
MX6Q_PAD_EIM_A23__IPU1_SISG_3 238
MX6Q_PAD_EIM_A23__GPIO_6_6 239
MX6Q_PAD_EIM_A23__PL301_PER1_HPROT_3 240
MX6Q_PAD_EIM_A23__SRC_BT_CFG_23 241
MX6Q_PAD_EIM_A22__WEIM_WEIM_A_22 242
MX6Q_PAD_EIM_A22__IPU1_DISP1_DAT_17 243
MX6Q_PAD_EIM_A22__IPU2_CSI1_D_17 244
MX6Q_PAD_EIM_A22__GPIO_2_16 245
MX6Q_PAD_EIM_A22__TPSMP_HDATA_0 246
MX6Q_PAD_EIM_A22__SRC_BT_CFG_22 247
MX6Q_PAD_EIM_A21__WEIM_WEIM_A_21 248
MX6Q_PAD_EIM_A21__IPU1_DISP1_DAT_16 249
MX6Q_PAD_EIM_A21__IPU2_CSI1_D_16 250
MX6Q_PAD_EIM_A21__RESERVED_RESERVED 251
MX6Q_PAD_EIM_A21__MIPI_CORE_DPHY_OUT_18 252
MX6Q_PAD_EIM_A21__GPIO_2_17 253
MX6Q_PAD_EIM_A21__TPSMP_HDATA_1 254
MX6Q_PAD_EIM_A21__SRC_BT_CFG_21 255
MX6Q_PAD_EIM_A20__WEIM_WEIM_A_20 256
MX6Q_PAD_EIM_A20__IPU1_DISP1_DAT_15 257
MX6Q_PAD_EIM_A20__IPU2_CSI1_D_15 258
MX6Q_PAD_EIM_A20__RESERVED_RESERVED 259
MX6Q_PAD_EIM_A20__MIPI_CORE_DPHY_OUT_19 260
MX6Q_PAD_EIM_A20__GPIO_2_18 261
MX6Q_PAD_EIM_A20__TPSMP_HDATA_2 262
MX6Q_PAD_EIM_A20__SRC_BT_CFG_20 263
MX6Q_PAD_EIM_A19__WEIM_WEIM_A_19 264
MX6Q_PAD_EIM_A19__IPU1_DISP1_DAT_14 265
MX6Q_PAD_EIM_A19__IPU2_CSI1_D_14 266
MX6Q_PAD_EIM_A19__RESERVED_RESERVED 267
MX6Q_PAD_EIM_A19__MIPI_CORE_DPHY_OUT_20 268
MX6Q_PAD_EIM_A19__GPIO_2_19 269
MX6Q_PAD_EIM_A19__TPSMP_HDATA_3 270
MX6Q_PAD_EIM_A19__SRC_BT_CFG_19 271
MX6Q_PAD_EIM_A18__WEIM_WEIM_A_18 272
MX6Q_PAD_EIM_A18__IPU1_DISP1_DAT_13 273
MX6Q_PAD_EIM_A18__IPU2_CSI1_D_13 274
MX6Q_PAD_EIM_A18__RESERVED_RESERVED 275
MX6Q_PAD_EIM_A18__MIPI_CORE_DPHY_OUT_21 276
MX6Q_PAD_EIM_A18__GPIO_2_20 277
MX6Q_PAD_EIM_A18__TPSMP_HDATA_4 278
MX6Q_PAD_EIM_A18__SRC_BT_CFG_18 279
MX6Q_PAD_EIM_A17__WEIM_WEIM_A_17 280
MX6Q_PAD_EIM_A17__IPU1_DISP1_DAT_12 281
MX6Q_PAD_EIM_A17__IPU2_CSI1_D_12 282
MX6Q_PAD_EIM_A17__RESERVED_RESERVED 283
MX6Q_PAD_EIM_A17__MIPI_CORE_DPHY_OUT_22 284
MX6Q_PAD_EIM_A17__GPIO_2_21 285
MX6Q_PAD_EIM_A17__TPSMP_HDATA_5 286
MX6Q_PAD_EIM_A17__SRC_BT_CFG_17 287
MX6Q_PAD_EIM_A16__WEIM_WEIM_A_16 288
MX6Q_PAD_EIM_A16__IPU1_DI1_DISP_CLK 289
MX6Q_PAD_EIM_A16__IPU2_CSI1_PIXCLK 290
MX6Q_PAD_EIM_A16__MIPI_CORE_DPHY_OUT_23 291
MX6Q_PAD_EIM_A16__GPIO_2_22 292
MX6Q_PAD_EIM_A16__TPSMP_HDATA_6 293
MX6Q_PAD_EIM_A16__SRC_BT_CFG_16 294
MX6Q_PAD_EIM_CS0__WEIM_WEIM_CS_0 295
MX6Q_PAD_EIM_CS0__IPU1_DI1_PIN5 296
MX6Q_PAD_EIM_CS0__ECSPI2_SCLK 297
MX6Q_PAD_EIM_CS0__MIPI_CORE_DPHY_OUT_24 298
MX6Q_PAD_EIM_CS0__GPIO_2_23 299
MX6Q_PAD_EIM_CS0__TPSMP_HDATA_7 300
MX6Q_PAD_EIM_CS1__WEIM_WEIM_CS_1 301
MX6Q_PAD_EIM_CS1__IPU1_DI1_PIN6 302
MX6Q_PAD_EIM_CS1__ECSPI2_MOSI 303
MX6Q_PAD_EIM_CS1__MIPI_CORE_DPHY_OUT_25 304
MX6Q_PAD_EIM_CS1__GPIO_2_24 305
MX6Q_PAD_EIM_CS1__TPSMP_HDATA_8 306
MX6Q_PAD_EIM_OE__WEIM_WEIM_OE 307
MX6Q_PAD_EIM_OE__IPU1_DI1_PIN7 308
MX6Q_PAD_EIM_OE__ECSPI2_MISO 309
MX6Q_PAD_EIM_OE__MIPI_CORE_DPHY_OUT_26 310
MX6Q_PAD_EIM_OE__GPIO_2_25 311
MX6Q_PAD_EIM_OE__TPSMP_HDATA_9 312
MX6Q_PAD_EIM_RW__WEIM_WEIM_RW 313
MX6Q_PAD_EIM_RW__IPU1_DI1_PIN8 314
MX6Q_PAD_EIM_RW__ECSPI2_SS0 315
MX6Q_PAD_EIM_RW__MIPI_CORE_DPHY_OUT_27 316
MX6Q_PAD_EIM_RW__GPIO_2_26 317
MX6Q_PAD_EIM_RW__TPSMP_HDATA_10 318
MX6Q_PAD_EIM_RW__SRC_BT_CFG_29 319
MX6Q_PAD_EIM_LBA__WEIM_WEIM_LBA 320
MX6Q_PAD_EIM_LBA__IPU1_DI1_PIN17 321
MX6Q_PAD_EIM_LBA__ECSPI2_SS1 322
MX6Q_PAD_EIM_LBA__GPIO_2_27 323
MX6Q_PAD_EIM_LBA__TPSMP_HDATA_11 324
MX6Q_PAD_EIM_LBA__SRC_BT_CFG_26 325
MX6Q_PAD_EIM_EB0__WEIM_WEIM_EB_0 326
MX6Q_PAD_EIM_EB0__IPU1_DISP1_DAT_11 327
MX6Q_PAD_EIM_EB0__IPU2_CSI1_D_11 328
MX6Q_PAD_EIM_EB0__MIPI_CORE_DPHY_OUT_0 329
MX6Q_PAD_EIM_EB0__CCM_PMIC_RDY 330
MX6Q_PAD_EIM_EB0__GPIO_2_28 331
MX6Q_PAD_EIM_EB0__TPSMP_HDATA_12 332
MX6Q_PAD_EIM_EB0__SRC_BT_CFG_27 333
MX6Q_PAD_EIM_EB1__WEIM_WEIM_EB_1 334
MX6Q_PAD_EIM_EB1__IPU1_DISP1_DAT_10 335
MX6Q_PAD_EIM_EB1__IPU2_CSI1_D_10 336
MX6Q_PAD_EIM_EB1__MIPI_CORE_DPHY__OUT_1 337
MX6Q_PAD_EIM_EB1__GPIO_2_29 338
MX6Q_PAD_EIM_EB1__TPSMP_HDATA_13 339
MX6Q_PAD_EIM_EB1__SRC_BT_CFG_28 340
MX6Q_PAD_EIM_DA0__WEIM_WEIM_DA_A_0 341
MX6Q_PAD_EIM_DA0__IPU1_DISP1_DAT_9 342
MX6Q_PAD_EIM_DA0__IPU2_CSI1_D_9 343
MX6Q_PAD_EIM_DA0__MIPI_CORE_DPHY__OUT_2 344
MX6Q_PAD_EIM_DA0__GPIO_3_0 345
MX6Q_PAD_EIM_DA0__TPSMP_HDATA_14 346
MX6Q_PAD_EIM_DA0__SRC_BT_CFG_0 347
MX6Q_PAD_EIM_DA1__WEIM_WEIM_DA_A_1 348
MX6Q_PAD_EIM_DA1__IPU1_DISP1_DAT_8 349
MX6Q_PAD_EIM_DA1__IPU2_CSI1_D_8 350
MX6Q_PAD_EIM_DA1__MIPI_CORE_DPHY_OUT_3 351
MX6Q_PAD_EIM_DA1__USBPHY1_TX_LS_MODE 352
MX6Q_PAD_EIM_DA1__GPIO_3_1 353
MX6Q_PAD_EIM_DA1__TPSMP_HDATA_15 354
MX6Q_PAD_EIM_DA1__SRC_BT_CFG_1 355
MX6Q_PAD_EIM_DA2__WEIM_WEIM_DA_A_2 356
MX6Q_PAD_EIM_DA2__IPU1_DISP1_DAT_7 357
MX6Q_PAD_EIM_DA2__IPU2_CSI1_D_7 358
MX6Q_PAD_EIM_DA2__MIPI_CORE_DPHY_OUT_4 359
MX6Q_PAD_EIM_DA2__USBPHY1_TX_HS_MODE 360
MX6Q_PAD_EIM_DA2__GPIO_3_2 361
MX6Q_PAD_EIM_DA2__TPSMP_HDATA_16 362
MX6Q_PAD_EIM_DA2__SRC_BT_CFG_2 363
MX6Q_PAD_EIM_DA3__WEIM_WEIM_DA_A_3 364
MX6Q_PAD_EIM_DA3__IPU1_DISP1_DAT_6 365
MX6Q_PAD_EIM_DA3__IPU2_CSI1_D_6 366
MX6Q_PAD_EIM_DA3__MIPI_CORE_DPHY_OUT_5 367
MX6Q_PAD_EIM_DA3__USBPHY1_TX_HIZ 368
MX6Q_PAD_EIM_DA3__GPIO_3_3 369
MX6Q_PAD_EIM_DA3__TPSMP_HDATA_17 370
MX6Q_PAD_EIM_DA3__SRC_BT_CFG_3 371
MX6Q_PAD_EIM_DA4__WEIM_WEIM_DA_A_4 372
MX6Q_PAD_EIM_DA4__IPU1_DISP1_DAT_5 373
MX6Q_PAD_EIM_DA4__IPU2_CSI1_D_5 374
MX6Q_PAD_EIM_DA4__MIPI_CORE_DPHY_OUT_6 375
MX6Q_PAD_EIM_DA4__ANATOP_USBPHY1_TX_EN 376
MX6Q_PAD_EIM_DA4__GPIO_3_4 377
MX6Q_PAD_EIM_DA4__TPSMP_HDATA_18 378
MX6Q_PAD_EIM_DA4__SRC_BT_CFG_4 379
MX6Q_PAD_EIM_DA5__WEIM_WEIM_DA_A_5 380
MX6Q_PAD_EIM_DA5__IPU1_DISP1_DAT_4 381
MX6Q_PAD_EIM_DA5__IPU2_CSI1_D_4 382
MX6Q_PAD_EIM_DA5__MIPI_CORE_DPHY_OUT_7 383
MX6Q_PAD_EIM_DA5__ANATOP_USBPHY1_TX_DP 384
MX6Q_PAD_EIM_DA5__GPIO_3_5 385
MX6Q_PAD_EIM_DA5__TPSMP_HDATA_19 386
MX6Q_PAD_EIM_DA5__SRC_BT_CFG_5 387
MX6Q_PAD_EIM_DA6__WEIM_WEIM_DA_A_6 388
MX6Q_PAD_EIM_DA6__IPU1_DISP1_DAT_3 389
MX6Q_PAD_EIM_DA6__IPU2_CSI1_D_3 390
MX6Q_PAD_EIM_DA6__MIPI_CORE_DPHY_OUT_8 391
MX6Q_PAD_EIM_DA6__ANATOP_USBPHY1_TX_DN 392
MX6Q_PAD_EIM_DA6__GPIO_3_6 393
MX6Q_PAD_EIM_DA6__TPSMP_HDATA_20 394
MX6Q_PAD_EIM_DA6__SRC_BT_CFG_6 395
MX6Q_PAD_EIM_DA7__WEIM_WEIM_DA_A_7 396
MX6Q_PAD_EIM_DA7__IPU1_DISP1_DAT_2 397
MX6Q_PAD_EIM_DA7__IPU2_CSI1_D_2 398
MX6Q_PAD_EIM_DA7__MIPI_CORE_DPHY_OUT_9 399
MX6Q_PAD_EIM_DA7__GPIO_3_7 400
MX6Q_PAD_EIM_DA7__TPSMP_HDATA_21 401
MX6Q_PAD_EIM_DA7__SRC_BT_CFG_7 402
MX6Q_PAD_EIM_DA8__WEIM_WEIM_DA_A_8 403
MX6Q_PAD_EIM_DA8__IPU1_DISP1_DAT_1 404
MX6Q_PAD_EIM_DA8__IPU2_CSI1_D_1 405
MX6Q_PAD_EIM_DA8__MIPI_CORE_DPHY_OUT_10 406
MX6Q_PAD_EIM_DA8__GPIO_3_8 407
MX6Q_PAD_EIM_DA8__TPSMP_HDATA_22 408
MX6Q_PAD_EIM_DA8__SRC_BT_CFG_8 409
MX6Q_PAD_EIM_DA9__WEIM_WEIM_DA_A_9 410
MX6Q_PAD_EIM_DA9__IPU1_DISP1_DAT_0 411
MX6Q_PAD_EIM_DA9__IPU2_CSI1_D_0 412
MX6Q_PAD_EIM_DA9__MIPI_CORE_DPHY_OUT_11 413
MX6Q_PAD_EIM_DA9__GPIO_3_9 414
MX6Q_PAD_EIM_DA9__TPSMP_HDATA_23 415
MX6Q_PAD_EIM_DA9__SRC_BT_CFG_9 416
MX6Q_PAD_EIM_DA10__WEIM_WEIM_DA_A_10 417
MX6Q_PAD_EIM_DA10__IPU1_DI1_PIN15 418
MX6Q_PAD_EIM_DA10__IPU2_CSI1_DATA_EN 419
MX6Q_PAD_EIM_DA10__MIPI_CORE_DPHY_OUT12 420
MX6Q_PAD_EIM_DA10__GPIO_3_10 421
MX6Q_PAD_EIM_DA10__TPSMP_HDATA_24 422
MX6Q_PAD_EIM_DA10__SRC_BT_CFG_10 423
MX6Q_PAD_EIM_DA11__WEIM_WEIM_DA_A_11 424
MX6Q_PAD_EIM_DA11__IPU1_DI1_PIN2 425
MX6Q_PAD_EIM_DA11__IPU2_CSI1_HSYNC 426
MX6Q_PAD_EIM_DA11__MIPI_CORE_DPHY_OUT13 427
MX6Q_PAD_EIM_DA11__SDMA_DBG_EVT_CHN_6 428
MX6Q_PAD_EIM_DA11__GPIO_3_11 429
MX6Q_PAD_EIM_DA11__TPSMP_HDATA_25 430
MX6Q_PAD_EIM_DA11__SRC_BT_CFG_11 431
MX6Q_PAD_EIM_DA12__WEIM_WEIM_DA_A_12 432
MX6Q_PAD_EIM_DA12__IPU1_DI1_PIN3 433
MX6Q_PAD_EIM_DA12__IPU2_CSI1_VSYNC 434
MX6Q_PAD_EIM_DA12__MIPI_CORE_DPHY_OUT14 435
MX6Q_PAD_EIM_DA12__SDMA_DEBUG_EVT_CHN_3 436
MX6Q_PAD_EIM_DA12__GPIO_3_12 437
MX6Q_PAD_EIM_DA12__TPSMP_HDATA_26 438
MX6Q_PAD_EIM_DA12__SRC_BT_CFG_12 439
MX6Q_PAD_EIM_DA13__WEIM_WEIM_DA_A_13 440
MX6Q_PAD_EIM_DA13__IPU1_DI1_D0_CS 441
MX6Q_PAD_EIM_DA13__CCM_DI1_EXT_CLK 442
MX6Q_PAD_EIM_DA13__MIPI_CORE_DPHY_OUT15 443
MX6Q_PAD_EIM_DA13__SDMA_DEBUG_EVT_CHN_4 444
MX6Q_PAD_EIM_DA13__GPIO_3_13 445
MX6Q_PAD_EIM_DA13__TPSMP_HDATA_27 446
MX6Q_PAD_EIM_DA13__SRC_BT_CFG_13 447
MX6Q_PAD_EIM_DA14__WEIM_WEIM_DA_A_14 448
MX6Q_PAD_EIM_DA14__IPU1_DI1_D1_CS 449
MX6Q_PAD_EIM_DA14__CCM_DI0_EXT_CLK 450
MX6Q_PAD_EIM_DA14__MIPI_CORE_DPHY_OUT16 451
MX6Q_PAD_EIM_DA14__SDMA_DEBUG_EVT_CHN_5 452
MX6Q_PAD_EIM_DA14__GPIO_3_14 453
MX6Q_PAD_EIM_DA14__TPSMP_HDATA_28 454
MX6Q_PAD_EIM_DA14__SRC_BT_CFG_14 455
MX6Q_PAD_EIM_DA15__WEIM_WEIM_DA_A_15 456
MX6Q_PAD_EIM_DA15__IPU1_DI1_PIN1 457
MX6Q_PAD_EIM_DA15__IPU1_DI1_PIN4 458
MX6Q_PAD_EIM_DA15__MIPI_CORE_DPHY_OUT17 459
MX6Q_PAD_EIM_DA15__GPIO_3_15 460
MX6Q_PAD_EIM_DA15__TPSMP_HDATA_29 461
MX6Q_PAD_EIM_DA15__SRC_BT_CFG_15 462
MX6Q_PAD_EIM_WAIT__WEIM_WEIM_WAIT 463
MX6Q_PAD_EIM_WAIT__WEIM_WEIM_DTACK_B 464
MX6Q_PAD_EIM_WAIT__GPIO_5_0 465
MX6Q_PAD_EIM_WAIT__TPSMP_HDATA_30 466
MX6Q_PAD_EIM_WAIT__SRC_BT_CFG_25 467
MX6Q_PAD_EIM_BCLK__WEIM_WEIM_BCLK 468
MX6Q_PAD_EIM_BCLK__IPU1_DI1_PIN16 469
MX6Q_PAD_EIM_BCLK__GPIO_6_31 470
MX6Q_PAD_EIM_BCLK__TPSMP_HDATA_31 471
MX6Q_PAD_DI0_DISP_CLK__IPU1_DI0_DSP_CLK 472
MX6Q_PAD_DI0_DISP_CLK__IPU2_DI0_DSP_CLK 473
MX6Q_PAD_DI0_DISP_CLK__MIPI_CR_DPY_OT28 474
MX6Q_PAD_DI0_DISP_CLK__SDMA_DBG_CR_STA0 475
MX6Q_PAD_DI0_DISP_CLK__GPIO_4_16 476
MX6Q_PAD_DI0_DISP_CLK__MMDC_DEBUG_0 477
MX6Q_PAD_DI0_PIN15__IPU1_DI0_PIN15 478
MX6Q_PAD_DI0_PIN15__IPU2_DI0_PIN15 479
MX6Q_PAD_DI0_PIN15__AUDMUX_AUD6_TXC 480
MX6Q_PAD_DI0_PIN15__MIPI_CR_DPHY_OUT_29 481
MX6Q_PAD_DI0_PIN15__SDMA_DBG_CORE_STA_1 482
MX6Q_PAD_DI0_PIN15__GPIO_4_17 483
MX6Q_PAD_DI0_PIN15__MMDC_MMDC_DEBUG_1 484
MX6Q_PAD_DI0_PIN2__IPU1_DI0_PIN2 485
MX6Q_PAD_DI0_PIN2__IPU2_DI0_PIN2 486
MX6Q_PAD_DI0_PIN2__AUDMUX_AUD6_TXD 487
MX6Q_PAD_DI0_PIN2__MIPI_CR_DPHY_OUT_30 488
MX6Q_PAD_DI0_PIN2__SDMA_DBG_CORE_STA_2 489
MX6Q_PAD_DI0_PIN2__GPIO_4_18 490
MX6Q_PAD_DI0_PIN2__MMDC_DEBUG_2 491
MX6Q_PAD_DI0_PIN2__PL301_PER1_HADDR_9 492
MX6Q_PAD_DI0_PIN3__IPU1_DI0_PIN3 493
MX6Q_PAD_DI0_PIN3__IPU2_DI0_PIN3 494
MX6Q_PAD_DI0_PIN3__AUDMUX_AUD6_TXFS 495
MX6Q_PAD_DI0_PIN3__MIPI_CORE_DPHY_OUT31 496
MX6Q_PAD_DI0_PIN3__SDMA_DBG_CORE_STA_3 497
MX6Q_PAD_DI0_PIN3__GPIO_4_19 498
MX6Q_PAD_DI0_PIN3__MMDC_MMDC_DEBUG_3 499
MX6Q_PAD_DI0_PIN3__PL301_PER1_HADDR_10 500
MX6Q_PAD_DI0_PIN4__IPU1_DI0_PIN4 501
MX6Q_PAD_DI0_PIN4__IPU2_DI0_PIN4 502
MX6Q_PAD_DI0_PIN4__AUDMUX_AUD6_RXD 503
MX6Q_PAD_DI0_PIN4__USDHC1_WP 504
MX6Q_PAD_DI0_PIN4__SDMA_DEBUG_YIELD 505
MX6Q_PAD_DI0_PIN4__GPIO_4_20 506
MX6Q_PAD_DI0_PIN4__MMDC_MMDC_DEBUG_4 507
MX6Q_PAD_DI0_PIN4__PL301_PER1_HADDR_11 508
MX6Q_PAD_DISP0_DAT0__IPU1_DISP0_DAT_0 509
MX6Q_PAD_DISP0_DAT0__IPU2_DISP0_DAT_0 510
MX6Q_PAD_DISP0_DAT0__ECSPI3_SCLK 511
MX6Q_PAD_DISP0_DAT0__USDHC1_USDHC_DBG_0 512
MX6Q_PAD_DISP0_DAT0__SDMA_DBG_CORE_RUN 513
MX6Q_PAD_DISP0_DAT0__GPIO_4_21 514
MX6Q_PAD_DISP0_DAT0__MMDC_MMDC_DEBUG_5 515
MX6Q_PAD_DISP0_DAT1__IPU1_DISP0_DAT_1 516
MX6Q_PAD_DISP0_DAT1__IPU2_DISP0_DAT_1 517
MX6Q_PAD_DISP0_DAT1__ECSPI3_MOSI 518
MX6Q_PAD_DISP0_DAT1__USDHC1_USDHC_DBG_1 519
MX6Q_PAD_DISP0_DAT1__SDMA_DBG_EVT_CHNSL 520
MX6Q_PAD_DISP0_DAT1__GPIO_4_22 521
MX6Q_PAD_DISP0_DAT1__MMDC_DEBUG_6 522
MX6Q_PAD_DISP0_DAT1__PL301_PER1_HADR_12 523
MX6Q_PAD_DISP0_DAT2__IPU1_DISP0_DAT_2 524
MX6Q_PAD_DISP0_DAT2__IPU2_DISP0_DAT_2 525
MX6Q_PAD_DISP0_DAT2__ECSPI3_MISO 526
MX6Q_PAD_DISP0_DAT2__USDHC1_USDHC_DBG_2 527
MX6Q_PAD_DISP0_DAT2__SDMA_DEBUG_MODE 528
MX6Q_PAD_DISP0_DAT2__GPIO_4_23 529
MX6Q_PAD_DISP0_DAT2__MMDC_DEBUG_7 530
MX6Q_PAD_DISP0_DAT2__PL301_PER1_HADR_13 531
MX6Q_PAD_DISP0_DAT3__IPU1_DISP0_DAT_3 532
MX6Q_PAD_DISP0_DAT3__IPU2_DISP0_DAT_3 533
MX6Q_PAD_DISP0_DAT3__ECSPI3_SS0 534
MX6Q_PAD_DISP0_DAT3__USDHC1_USDHC_DBG_3 535
MX6Q_PAD_DISP0_DAT3__SDMA_DBG_BUS_ERROR 536
MX6Q_PAD_DISP0_DAT3__GPIO_4_24 537
MX6Q_PAD_DISP0_DAT3__MMDC_MMDC_DBG_8 538
MX6Q_PAD_DISP0_DAT3__PL301_PER1_HADR_14 539
MX6Q_PAD_DISP0_DAT4__IPU1_DISP0_DAT_4 540
MX6Q_PAD_DISP0_DAT4__IPU2_DISP0_DAT_4 541
MX6Q_PAD_DISP0_DAT4__ECSPI3_SS1 542
MX6Q_PAD_DISP0_DAT4__USDHC1_USDHC_DBG_4 543
MX6Q_PAD_DISP0_DAT4__SDMA_DEBUG_BUS_RWB 544
MX6Q_PAD_DISP0_DAT4__GPIO_4_25 545
MX6Q_PAD_DISP0_DAT4__MMDC_MMDC_DEBUG_9 546
MX6Q_PAD_DISP0_DAT4__PL301_PER1_HADR_15 547
MX6Q_PAD_DISP0_DAT5__IPU1_DISP0_DAT_5 548
MX6Q_PAD_DISP0_DAT5__IPU2_DISP0_DAT_5 549
MX6Q_PAD_DISP0_DAT5__ECSPI3_SS2 550
MX6Q_PAD_DISP0_DAT5__AUDMUX_AUD6_RXFS 551
MX6Q_PAD_DISP0_DAT5__SDMA_DBG_MCH_DMBUS 552
MX6Q_PAD_DISP0_DAT5__GPIO_4_26 553
MX6Q_PAD_DISP0_DAT5__MMDC_DEBUG_10 554
MX6Q_PAD_DISP0_DAT5__PL301_PER1_HADR_16 555
MX6Q_PAD_DISP0_DAT6__IPU1_DISP0_DAT_6 556
MX6Q_PAD_DISP0_DAT6__IPU2_DISP0_DAT_6 557
MX6Q_PAD_DISP0_DAT6__ECSPI3_SS3 558
MX6Q_PAD_DISP0_DAT6__AUDMUX_AUD6_RXC 559
MX6Q_PAD_DISP0_DAT6__SDMA_DBG_RTBUF_WRT 560
MX6Q_PAD_DISP0_DAT6__GPIO_4_27 561
MX6Q_PAD_DISP0_DAT6__MMDC_DEBUG_11 562
MX6Q_PAD_DISP0_DAT6__PL301_PER1_HADR_17 563
MX6Q_PAD_DISP0_DAT7__IPU1_DISP0_DAT_7 564
MX6Q_PAD_DISP0_DAT7__IPU2_DISP0_DAT_7 565
MX6Q_PAD_DISP0_DAT7__ECSPI3_RDY 566
MX6Q_PAD_DISP0_DAT7__USDHC1_USDHC_DBG_5 567
MX6Q_PAD_DISP0_DAT7__SDMA_DBG_EVT_CHN_0 568
MX6Q_PAD_DISP0_DAT7__GPIO_4_28 569
MX6Q_PAD_DISP0_DAT7__MMDC_DEBUG_12 570
MX6Q_PAD_DISP0_DAT7__PL301_PER1_HADR_18 571
MX6Q_PAD_DISP0_DAT8__IPU1_DISP0_DAT_8 572
MX6Q_PAD_DISP0_DAT8__IPU2_DISP0_DAT_8 573
MX6Q_PAD_DISP0_DAT8__PWM1_PWMO 574
MX6Q_PAD_DISP0_DAT8__WDOG1_WDOG_B 575
MX6Q_PAD_DISP0_DAT8__SDMA_DBG_EVT_CHN_1 576
MX6Q_PAD_DISP0_DAT8__GPIO_4_29 577
MX6Q_PAD_DISP0_DAT8__MMDC_DEBUG_13 578
MX6Q_PAD_DISP0_DAT8__PL301_PER1_HADR_19 579
MX6Q_PAD_DISP0_DAT9__IPU1_DISP0_DAT_9 580
MX6Q_PAD_DISP0_DAT9__IPU2_DISP0_DAT_9 581
MX6Q_PAD_DISP0_DAT9__PWM2_PWMO 582
MX6Q_PAD_DISP0_DAT9__WDOG2_WDOG_B 583
MX6Q_PAD_DISP0_DAT9__SDMA_DBG_EVT_CHN_2 584
MX6Q_PAD_DISP0_DAT9__GPIO_4_30 585
MX6Q_PAD_DISP0_DAT9__MMDC_DEBUG_14 586
MX6Q_PAD_DISP0_DAT9__PL301_PER1_HADR_20 587
MX6Q_PAD_DISP0_DAT10__IPU1_DISP0_DAT_10 588
MX6Q_PAD_DISP0_DAT10__IPU2_DISP0_DAT_10 589
MX6Q_PAD_DISP0_DAT10__USDHC1_DBG_6 590
MX6Q_PAD_DISP0_DAT10__SDMA_DBG_EVT_CHN3 591
MX6Q_PAD_DISP0_DAT10__GPIO_4_31 592
MX6Q_PAD_DISP0_DAT10__MMDC_DEBUG_15 593
MX6Q_PAD_DISP0_DAT10__PL301_PER1_HADR21 594
MX6Q_PAD_DISP0_DAT11__IPU1_DISP0_DAT_11 595
MX6Q_PAD_DISP0_DAT11__IPU2_DISP0_DAT_11 596
MX6Q_PAD_DISP0_DAT11__USDHC1_USDHC_DBG7 597
MX6Q_PAD_DISP0_DAT11__SDMA_DBG_EVT_CHN4 598
MX6Q_PAD_DISP0_DAT11__GPIO_5_5 599
MX6Q_PAD_DISP0_DAT11__MMDC_DEBUG_16 600
MX6Q_PAD_DISP0_DAT11__PL301_PER1_HADR22 601
MX6Q_PAD_DISP0_DAT12__IPU1_DISP0_DAT_12 602
MX6Q_PAD_DISP0_DAT12__IPU2_DISP0_DAT_12 603
MX6Q_PAD_DISP0_DAT12__RESERVED_RESERVED 604
MX6Q_PAD_DISP0_DAT12__SDMA_DBG_EVT_CHN5 605
MX6Q_PAD_DISP0_DAT12__GPIO_5_6 606
MX6Q_PAD_DISP0_DAT12__MMDC_DEBUG_17 607
MX6Q_PAD_DISP0_DAT12__PL301_PER1_HADR23 608
MX6Q_PAD_DISP0_DAT13__IPU1_DISP0_DAT_13 609
MX6Q_PAD_DISP0_DAT13__IPU2_DISP0_DAT_13 610
MX6Q_PAD_DISP0_DAT13__AUDMUX_AUD5_RXFS 611
MX6Q_PAD_DISP0_DAT13__SDMA_DBG_EVT_CHN0 612
MX6Q_PAD_DISP0_DAT13__GPIO_5_7 613
MX6Q_PAD_DISP0_DAT13__MMDC_DEBUG_18 614
MX6Q_PAD_DISP0_DAT13__PL301_PER1_HADR24 615
MX6Q_PAD_DISP0_DAT14__IPU1_DISP0_DAT_14 616
MX6Q_PAD_DISP0_DAT14__IPU2_DISP0_DAT_14 617
MX6Q_PAD_DISP0_DAT14__AUDMUX_AUD5_RXC 618
MX6Q_PAD_DISP0_DAT14__SDMA_DBG_EVT_CHN1 619
MX6Q_PAD_DISP0_DAT14__GPIO_5_8 620
MX6Q_PAD_DISP0_DAT14__MMDC_DEBUG_19 621
MX6Q_PAD_DISP0_DAT15__IPU1_DISP0_DAT_15 622
MX6Q_PAD_DISP0_DAT15__IPU2_DISP0_DAT_15 623
MX6Q_PAD_DISP0_DAT15__ECSPI1_SS1 624
MX6Q_PAD_DISP0_DAT15__ECSPI2_SS1 625
MX6Q_PAD_DISP0_DAT15__SDMA_DBG_EVT_CHN2 626
MX6Q_PAD_DISP0_DAT15__GPIO_5_9 627
MX6Q_PAD_DISP0_DAT15__MMDC_DEBUG_20 628
MX6Q_PAD_DISP0_DAT15__PL301_PER1_HADR25 629
MX6Q_PAD_DISP0_DAT16__IPU1_DISP0_DAT_16 630
MX6Q_PAD_DISP0_DAT16__IPU2_DISP0_DAT_16 631
MX6Q_PAD_DISP0_DAT16__ECSPI2_MOSI 632
MX6Q_PAD_DISP0_DAT16__AUDMUX_AUD5_TXC 633
MX6Q_PAD_DISP0_DAT16__SDMA_EXT_EVENT_0 634
MX6Q_PAD_DISP0_DAT16__GPIO_5_10 635
MX6Q_PAD_DISP0_DAT16__MMDC_DEBUG_21 636
MX6Q_PAD_DISP0_DAT16__PL301_PER1_HADR26 637
MX6Q_PAD_DISP0_DAT17__IPU1_DISP0_DAT_17 638
MX6Q_PAD_DISP0_DAT17__IPU2_DISP0_DAT_17 639
MX6Q_PAD_DISP0_DAT17__ECSPI2_MISO 640
MX6Q_PAD_DISP0_DAT17__AUDMUX_AUD5_TXD 641
MX6Q_PAD_DISP0_DAT17__SDMA_EXT_EVENT_1 642
MX6Q_PAD_DISP0_DAT17__GPIO_5_11 643
MX6Q_PAD_DISP0_DAT17__MMDC_DEBUG_22 644
MX6Q_PAD_DISP0_DAT17__PL301_PER1_HADR27 645
MX6Q_PAD_DISP0_DAT18__IPU1_DISP0_DAT_18 646
MX6Q_PAD_DISP0_DAT18__IPU2_DISP0_DAT_18 647
MX6Q_PAD_DISP0_DAT18__ECSPI2_SS0 648
MX6Q_PAD_DISP0_DAT18__AUDMUX_AUD5_TXFS 649
MX6Q_PAD_DISP0_DAT18__AUDMUX_AUD4_RXFS 650
MX6Q_PAD_DISP0_DAT18__GPIO_5_12 651
MX6Q_PAD_DISP0_DAT18__MMDC_DEBUG_23 652
MX6Q_PAD_DISP0_DAT18__WEIM_WEIM_CS_2 653
MX6Q_PAD_DISP0_DAT19__IPU1_DISP0_DAT_19 654
MX6Q_PAD_DISP0_DAT19__IPU2_DISP0_DAT_19 655
MX6Q_PAD_DISP0_DAT19__ECSPI2_SCLK 656
MX6Q_PAD_DISP0_DAT19__AUDMUX_AUD5_RXD 657
MX6Q_PAD_DISP0_DAT19__AUDMUX_AUD4_RXC 658
MX6Q_PAD_DISP0_DAT19__GPIO_5_13 659
MX6Q_PAD_DISP0_DAT19__MMDC_DEBUG_24 660
MX6Q_PAD_DISP0_DAT19__WEIM_WEIM_CS_3 661
MX6Q_PAD_DISP0_DAT20__IPU1_DISP0_DAT_20 662
MX6Q_PAD_DISP0_DAT20__IPU2_DISP0_DAT_20 663
MX6Q_PAD_DISP0_DAT20__ECSPI1_SCLK 664
MX6Q_PAD_DISP0_DAT20__AUDMUX_AUD4_TXC 665
MX6Q_PAD_DISP0_DAT20__SDMA_DBG_EVT_CHN7 666
MX6Q_PAD_DISP0_DAT20__GPIO_5_14 667
MX6Q_PAD_DISP0_DAT20__MMDC_DEBUG_25 668
MX6Q_PAD_DISP0_DAT20__PL301_PER1_HADR28 669
MX6Q_PAD_DISP0_DAT21__IPU1_DISP0_DAT_21 670
MX6Q_PAD_DISP0_DAT21__IPU2_DISP0_DAT_21 671
MX6Q_PAD_DISP0_DAT21__ECSPI1_MOSI 672
MX6Q_PAD_DISP0_DAT21__AUDMUX_AUD4_TXD 673
MX6Q_PAD_DISP0_DAT21__SDMA_DBG_BUS_DEV0 674
MX6Q_PAD_DISP0_DAT21__GPIO_5_15 675
MX6Q_PAD_DISP0_DAT21__MMDC_DEBUG_26 676
MX6Q_PAD_DISP0_DAT21__PL301_PER1_HADR29 677
MX6Q_PAD_DISP0_DAT22__IPU1_DISP0_DAT_22 678
MX6Q_PAD_DISP0_DAT22__IPU2_DISP0_DAT_22 679
MX6Q_PAD_DISP0_DAT22__ECSPI1_MISO 680
MX6Q_PAD_DISP0_DAT22__AUDMUX_AUD4_TXFS 681
MX6Q_PAD_DISP0_DAT22__SDMA_DBG_BUS_DEV1 682
MX6Q_PAD_DISP0_DAT22__GPIO_5_16 683
MX6Q_PAD_DISP0_DAT22__MMDC_DEBUG_27 684
MX6Q_PAD_DISP0_DAT22__PL301_PER1_HADR30 685
MX6Q_PAD_DISP0_DAT23__IPU1_DISP0_DAT_23 686
MX6Q_PAD_DISP0_DAT23__IPU2_DISP0_DAT_23 687
MX6Q_PAD_DISP0_DAT23__ECSPI1_SS0 688
MX6Q_PAD_DISP0_DAT23__AUDMUX_AUD4_RXD 689
MX6Q_PAD_DISP0_DAT23__SDMA_DBG_BUS_DEV2 690
MX6Q_PAD_DISP0_DAT23__GPIO_5_17 691
MX6Q_PAD_DISP0_DAT23__MMDC_DEBUG_28 692
MX6Q_PAD_DISP0_DAT23__PL301_PER1_HADR31 693
MX6Q_PAD_ENET_MDIO__RESERVED_RESERVED 694
MX6Q_PAD_ENET_MDIO__ENET_MDIO 695
MX6Q_PAD_ENET_MDIO__ESAI1_SCKR 696
MX6Q_PAD_ENET_MDIO__SDMA_DEBUG_BUS_DEV3 697
MX6Q_PAD_ENET_MDIO__ENET_1588_EVT1_OUT 698
MX6Q_PAD_ENET_MDIO__GPIO_1_22 699
MX6Q_PAD_ENET_MDIO__SPDIF_PLOCK 700
MX6Q_PAD_ENET_REF_CLK__RESERVED_RSRVED 701
MX6Q_PAD_ENET_REF_CLK__ENET_TX_CLK 702
MX6Q_PAD_ENET_REF_CLK__ESAI1_FSR 703
MX6Q_PAD_ENET_REF_CLK__SDMA_DBGBUS_DEV4 704
MX6Q_PAD_ENET_REF_CLK__GPIO_1_23 705
MX6Q_PAD_ENET_REF_CLK__SPDIF_SRCLK 706
MX6Q_PAD_ENET_REF_CLK__USBPHY1_RX_SQH 707
MX6Q_PAD_ENET_RX_ER__ENET_RX_ER 708
MX6Q_PAD_ENET_RX_ER__ESAI1_HCKR 709
MX6Q_PAD_ENET_RX_ER__SPDIF_IN1 710
MX6Q_PAD_ENET_RX_ER__ENET_1588_EVT2_OUT 711
MX6Q_PAD_ENET_RX_ER__GPIO_1_24 712
MX6Q_PAD_ENET_RX_ER__PHY_TDI 713
MX6Q_PAD_ENET_RX_ER__USBPHY1_RX_HS_RXD 714
MX6Q_PAD_ENET_CRS_DV__RESERVED_RSRVED 715
MX6Q_PAD_ENET_CRS_DV__ENET_RX_EN 716
MX6Q_PAD_ENET_CRS_DV__ESAI1_SCKT 717
MX6Q_PAD_ENET_CRS_DV__SPDIF_EXTCLK 718
MX6Q_PAD_ENET_CRS_DV__GPIO_1_25 719
MX6Q_PAD_ENET_CRS_DV__PHY_TDO 720
MX6Q_PAD_ENET_CRS_DV__USBPHY1_RX_FS_RXD 721
MX6Q_PAD_ENET_RXD1__MLB_MLBSIG 722
MX6Q_PAD_ENET_RXD1__ENET_RDATA_1 723
MX6Q_PAD_ENET_RXD1__ESAI1_FST 724
MX6Q_PAD_ENET_RXD1__ENET_1588_EVT3_OUT 725
MX6Q_PAD_ENET_RXD1__GPIO_1_26 726
MX6Q_PAD_ENET_RXD1__PHY_TCK 727
MX6Q_PAD_ENET_RXD1__USBPHY1_RX_DISCON 728
MX6Q_PAD_ENET_RXD0__OSC32K_32K_OUT 729
MX6Q_PAD_ENET_RXD0__ENET_RDATA_0 730
MX6Q_PAD_ENET_RXD0__ESAI1_HCKT 731
MX6Q_PAD_ENET_RXD0__SPDIF_OUT1 732
MX6Q_PAD_ENET_RXD0__GPIO_1_27 733
MX6Q_PAD_ENET_RXD0__PHY_TMS 734
MX6Q_PAD_ENET_RXD0__USBPHY1_PLL_CK20DIV 735
MX6Q_PAD_ENET_TX_EN__RESERVED_RSRVED 736
MX6Q_PAD_ENET_TX_EN__ENET_TX_EN 737
MX6Q_PAD_ENET_TX_EN__ESAI1_TX3_RX2 738
MX6Q_PAD_ENET_TX_EN__GPIO_1_28 739
MX6Q_PAD_ENET_TX_EN__SATA_PHY_TDI 740
MX6Q_PAD_ENET_TX_EN__USBPHY2_RX_SQH 741
MX6Q_PAD_ENET_TXD1__MLB_MLBCLK 742
MX6Q_PAD_ENET_TXD1__ENET_TDATA_1 743
MX6Q_PAD_ENET_TXD1__ESAI1_TX2_RX3 744
MX6Q_PAD_ENET_TXD1__ENET_1588_EVENT0_IN 745
MX6Q_PAD_ENET_TXD1__GPIO_1_29 746
MX6Q_PAD_ENET_TXD1__SATA_PHY_TDO 747
MX6Q_PAD_ENET_TXD1__USBPHY2_RX_HS_RXD 748
MX6Q_PAD_ENET_TXD0__RESERVED_RSRVED 749
MX6Q_PAD_ENET_TXD0__ENET_TDATA_0 750
MX6Q_PAD_ENET_TXD0__ESAI1_TX4_RX1 751
MX6Q_PAD_ENET_TXD0__GPIO_1_30 752
MX6Q_PAD_ENET_TXD0__SATA_PHY_TCK 753
MX6Q_PAD_ENET_TXD0__USBPHY2_RX_FS_RXD 754
MX6Q_PAD_ENET_MDC__MLB_MLBDAT 755
MX6Q_PAD_ENET_MDC__ENET_MDC 756
MX6Q_PAD_ENET_MDC__ESAI1_TX5_RX0 757
MX6Q_PAD_ENET_MDC__ENET_1588_EVENT1_IN 758
MX6Q_PAD_ENET_MDC__GPIO_1_31 759
MX6Q_PAD_ENET_MDC__SATA_PHY_TMS 760
MX6Q_PAD_ENET_MDC__USBPHY2_RX_DISCON 761
MX6Q_PAD_DRAM_D40__MMDC_DRAM_D_40 762
MX6Q_PAD_DRAM_D41__MMDC_DRAM_D_41 763
MX6Q_PAD_DRAM_D42__MMDC_DRAM_D_42 764
MX6Q_PAD_DRAM_D43__MMDC_DRAM_D_43 765
MX6Q_PAD_DRAM_D44__MMDC_DRAM_D_44 766
MX6Q_PAD_DRAM_D45__MMDC_DRAM_D_45 767
MX6Q_PAD_DRAM_D46__MMDC_DRAM_D_46 768
MX6Q_PAD_DRAM_D47__MMDC_DRAM_D_47 769
MX6Q_PAD_DRAM_SDQS5__MMDC_DRAM_SDQS_5 770
MX6Q_PAD_DRAM_DQM5__MMDC_DRAM_DQM_5 771
MX6Q_PAD_DRAM_D32__MMDC_DRAM_D_32 772
MX6Q_PAD_DRAM_D33__MMDC_DRAM_D_33 773
MX6Q_PAD_DRAM_D34__MMDC_DRAM_D_34 774
MX6Q_PAD_DRAM_D35__MMDC_DRAM_D_35 775
MX6Q_PAD_DRAM_D36__MMDC_DRAM_D_36 776
MX6Q_PAD_DRAM_D37__MMDC_DRAM_D_37 777
MX6Q_PAD_DRAM_D38__MMDC_DRAM_D_38 778
MX6Q_PAD_DRAM_D39__MMDC_DRAM_D_39 779
MX6Q_PAD_DRAM_DQM4__MMDC_DRAM_DQM_4 780
MX6Q_PAD_DRAM_SDQS4__MMDC_DRAM_SDQS_4 781
MX6Q_PAD_DRAM_D24__MMDC_DRAM_D_24 782
MX6Q_PAD_DRAM_D25__MMDC_DRAM_D_25 783
MX6Q_PAD_DRAM_D26__MMDC_DRAM_D_26 784
MX6Q_PAD_DRAM_D27__MMDC_DRAM_D_27 785
MX6Q_PAD_DRAM_D28__MMDC_DRAM_D_28 786
MX6Q_PAD_DRAM_D29__MMDC_DRAM_D_29 787
MX6Q_PAD_DRAM_SDQS3__MMDC_DRAM_SDQS_3 788
MX6Q_PAD_DRAM_D30__MMDC_DRAM_D_30 789
MX6Q_PAD_DRAM_D31__MMDC_DRAM_D_31 790
MX6Q_PAD_DRAM_DQM3__MMDC_DRAM_DQM_3 791
MX6Q_PAD_DRAM_D16__MMDC_DRAM_D_16 792
MX6Q_PAD_DRAM_D17__MMDC_DRAM_D_17 793
MX6Q_PAD_DRAM_D18__MMDC_DRAM_D_18 794
MX6Q_PAD_DRAM_D19__MMDC_DRAM_D_19 795
MX6Q_PAD_DRAM_D20__MMDC_DRAM_D_20 796
MX6Q_PAD_DRAM_D21__MMDC_DRAM_D_21 797
MX6Q_PAD_DRAM_D22__MMDC_DRAM_D_22 798
MX6Q_PAD_DRAM_SDQS2__MMDC_DRAM_SDQS_2 799
MX6Q_PAD_DRAM_D23__MMDC_DRAM_D_23 800
MX6Q_PAD_DRAM_DQM2__MMDC_DRAM_DQM_2 801
MX6Q_PAD_DRAM_A0__MMDC_DRAM_A_0 802
MX6Q_PAD_DRAM_A1__MMDC_DRAM_A_1 803
MX6Q_PAD_DRAM_A2__MMDC_DRAM_A_2 804
MX6Q_PAD_DRAM_A3__MMDC_DRAM_A_3 805
MX6Q_PAD_DRAM_A4__MMDC_DRAM_A_4 806
MX6Q_PAD_DRAM_A5__MMDC_DRAM_A_5 807
MX6Q_PAD_DRAM_A6__MMDC_DRAM_A_6 808
MX6Q_PAD_DRAM_A7__MMDC_DRAM_A_7 809
MX6Q_PAD_DRAM_A8__MMDC_DRAM_A_8 810
MX6Q_PAD_DRAM_A9__MMDC_DRAM_A_9 811
MX6Q_PAD_DRAM_A10__MMDC_DRAM_A_10 812
MX6Q_PAD_DRAM_A11__MMDC_DRAM_A_11 813
MX6Q_PAD_DRAM_A12__MMDC_DRAM_A_12 814
MX6Q_PAD_DRAM_A13__MMDC_DRAM_A_13 815
MX6Q_PAD_DRAM_A14__MMDC_DRAM_A_14 816
MX6Q_PAD_DRAM_A15__MMDC_DRAM_A_15 817
MX6Q_PAD_DRAM_CAS__MMDC_DRAM_CAS 818
MX6Q_PAD_DRAM_CS0__MMDC_DRAM_CS_0 819
MX6Q_PAD_DRAM_CS1__MMDC_DRAM_CS_1 820
MX6Q_PAD_DRAM_RAS__MMDC_DRAM_RAS 821
MX6Q_PAD_DRAM_RESET__MMDC_DRAM_RESET 822
MX6Q_PAD_DRAM_SDBA0__MMDC_DRAM_SDBA_0 823
MX6Q_PAD_DRAM_SDBA1__MMDC_DRAM_SDBA_1 824
MX6Q_PAD_DRAM_SDCLK_0__MMDC_DRAM_SDCLK0 825
MX6Q_PAD_DRAM_SDBA2__MMDC_DRAM_SDBA_2 826
MX6Q_PAD_DRAM_SDCKE0__MMDC_DRAM_SDCKE_0 827
MX6Q_PAD_DRAM_SDCLK_1__MMDC_DRAM_SDCLK1 828
MX6Q_PAD_DRAM_SDCKE1__MMDC_DRAM_SDCKE_1 829
MX6Q_PAD_DRAM_SDODT0__MMDC_DRAM_ODT_0 830
MX6Q_PAD_DRAM_SDODT1__MMDC_DRAM_ODT_1 831
MX6Q_PAD_DRAM_SDWE__MMDC_DRAM_SDWE 832
MX6Q_PAD_DRAM_D0__MMDC_DRAM_D_0 833
MX6Q_PAD_DRAM_D1__MMDC_DRAM_D_1 834
MX6Q_PAD_DRAM_D2__MMDC_DRAM_D_2 835
MX6Q_PAD_DRAM_D3__MMDC_DRAM_D_3 836
MX6Q_PAD_DRAM_D4__MMDC_DRAM_D_4 837
MX6Q_PAD_DRAM_D5__MMDC_DRAM_D_5 838
MX6Q_PAD_DRAM_SDQS0__MMDC_DRAM_SDQS_0 839
MX6Q_PAD_DRAM_D6__MMDC_DRAM_D_6 840
MX6Q_PAD_DRAM_D7__MMDC_DRAM_D_7 841
MX6Q_PAD_DRAM_DQM0__MMDC_DRAM_DQM_0 842
MX6Q_PAD_DRAM_D8__MMDC_DRAM_D_8 843
MX6Q_PAD_DRAM_D9__MMDC_DRAM_D_9 844
MX6Q_PAD_DRAM_D10__MMDC_DRAM_D_10 845
MX6Q_PAD_DRAM_D11__MMDC_DRAM_D_11 846
MX6Q_PAD_DRAM_D12__MMDC_DRAM_D_12 847
MX6Q_PAD_DRAM_D13__MMDC_DRAM_D_13 848
MX6Q_PAD_DRAM_D14__MMDC_DRAM_D_14 849
MX6Q_PAD_DRAM_SDQS1__MMDC_DRAM_SDQS_1 850
MX6Q_PAD_DRAM_D15__MMDC_DRAM_D_15 851
MX6Q_PAD_DRAM_DQM1__MMDC_DRAM_DQM_1 852
MX6Q_PAD_DRAM_D48__MMDC_DRAM_D_48 853
MX6Q_PAD_DRAM_D49__MMDC_DRAM_D_49 854
MX6Q_PAD_DRAM_D50__MMDC_DRAM_D_50 855
MX6Q_PAD_DRAM_D51__MMDC_DRAM_D_51 856
MX6Q_PAD_DRAM_D52__MMDC_DRAM_D_52 857
MX6Q_PAD_DRAM_D53__MMDC_DRAM_D_53 858
MX6Q_PAD_DRAM_D54__MMDC_DRAM_D_54 859
MX6Q_PAD_DRAM_D55__MMDC_DRAM_D_55 860
MX6Q_PAD_DRAM_SDQS6__MMDC_DRAM_SDQS_6 861
MX6Q_PAD_DRAM_DQM6__MMDC_DRAM_DQM_6 862
MX6Q_PAD_DRAM_D56__MMDC_DRAM_D_56 863
MX6Q_PAD_DRAM_SDQS7__MMDC_DRAM_SDQS_7 864
MX6Q_PAD_DRAM_D57__MMDC_DRAM_D_57 865
MX6Q_PAD_DRAM_D58__MMDC_DRAM_D_58 866
MX6Q_PAD_DRAM_D59__MMDC_DRAM_D_59 867
MX6Q_PAD_DRAM_D60__MMDC_DRAM_D_60 868
MX6Q_PAD_DRAM_DQM7__MMDC_DRAM_DQM_7 869
MX6Q_PAD_DRAM_D61__MMDC_DRAM_D_61 870
MX6Q_PAD_DRAM_D62__MMDC_DRAM_D_62 871
MX6Q_PAD_DRAM_D63__MMDC_DRAM_D_63 872
MX6Q_PAD_KEY_COL0__ECSPI1_SCLK 873
MX6Q_PAD_KEY_COL0__ENET_RDATA_3 874
MX6Q_PAD_KEY_COL0__AUDMUX_AUD5_TXC 875
MX6Q_PAD_KEY_COL0__KPP_COL_0 876
MX6Q_PAD_KEY_COL0__UART4_TXD 877
MX6Q_PAD_KEY_COL0__GPIO_4_6 878
MX6Q_PAD_KEY_COL0__DCIC1_DCIC_OUT 879
MX6Q_PAD_KEY_COL0__SRC_ANY_PU_RST 880
MX6Q_PAD_KEY_ROW0__ECSPI1_MOSI 881
MX6Q_PAD_KEY_ROW0__ENET_TDATA_3 882
MX6Q_PAD_KEY_ROW0__AUDMUX_AUD5_TXD 883
MX6Q_PAD_KEY_ROW0__KPP_ROW_0 884
MX6Q_PAD_KEY_ROW0__UART4_RXD 885
MX6Q_PAD_KEY_ROW0__GPIO_4_7 886
MX6Q_PAD_KEY_ROW0__DCIC2_DCIC_OUT 887
MX6Q_PAD_KEY_ROW0__PL301_PER1_HADR_0 888
MX6Q_PAD_KEY_COL1__ECSPI1_MISO 889
MX6Q_PAD_KEY_COL1__ENET_MDIO 890
MX6Q_PAD_KEY_COL1__AUDMUX_AUD5_TXFS 891
MX6Q_PAD_KEY_COL1__KPP_COL_1 892
MX6Q_PAD_KEY_COL1__UART5_TXD 893
MX6Q_PAD_KEY_COL1__GPIO_4_8 894
MX6Q_PAD_KEY_COL1__USDHC1_VSELECT 895
MX6Q_PAD_KEY_COL1__PL301MX_PER1_HADR_1 896
MX6Q_PAD_KEY_ROW1__ECSPI1_SS0 897
MX6Q_PAD_KEY_ROW1__ENET_COL 898
MX6Q_PAD_KEY_ROW1__AUDMUX_AUD5_RXD 899
MX6Q_PAD_KEY_ROW1__KPP_ROW_1 900
MX6Q_PAD_KEY_ROW1__UART5_RXD 901
MX6Q_PAD_KEY_ROW1__GPIO_4_9 902
MX6Q_PAD_KEY_ROW1__USDHC2_VSELECT 903
MX6Q_PAD_KEY_ROW1__PL301_PER1_HADDR_2 904
MX6Q_PAD_KEY_COL2__ECSPI1_SS1 905
MX6Q_PAD_KEY_COL2__ENET_RDATA_2 906
MX6Q_PAD_KEY_COL2__CAN1_TXCAN 907
MX6Q_PAD_KEY_COL2__KPP_COL_2 908
MX6Q_PAD_KEY_COL2__ENET_MDC 909
MX6Q_PAD_KEY_COL2__GPIO_4_10 910
MX6Q_PAD_KEY_COL2__USBOH3_H1_PWRCTL_WKP 911
MX6Q_PAD_KEY_COL2__PL301_PER1_HADDR_3 912
MX6Q_PAD_KEY_ROW2__ECSPI1_SS2 913
MX6Q_PAD_KEY_ROW2__ENET_TDATA_2 914
MX6Q_PAD_KEY_ROW2__CAN1_RXCAN 915
MX6Q_PAD_KEY_ROW2__KPP_ROW_2 916
MX6Q_PAD_KEY_ROW2__USDHC2_VSELECT 917
MX6Q_PAD_KEY_ROW2__GPIO_4_11 918
MX6Q_PAD_KEY_ROW2__HDMI_TX_CEC_LINE 919
MX6Q_PAD_KEY_ROW2__PL301_PER1_HADR_4 920
MX6Q_PAD_KEY_COL3__ECSPI1_SS3 921
MX6Q_PAD_KEY_COL3__ENET_CRS 922
MX6Q_PAD_KEY_COL3__HDMI_TX_DDC_SCL 923
MX6Q_PAD_KEY_COL3__KPP_COL_3 924
MX6Q_PAD_KEY_COL3__I2C2_SCL 925
MX6Q_PAD_KEY_COL3__GPIO_4_12 926
MX6Q_PAD_KEY_COL3__SPDIF_IN1 927
MX6Q_PAD_KEY_COL3__PL301_PER1_HADR_5 928
MX6Q_PAD_KEY_ROW3__OSC32K_32K_OUT 929
MX6Q_PAD_KEY_ROW3__ASRC_ASRC_EXT_CLK 930
MX6Q_PAD_KEY_ROW3__HDMI_TX_DDC_SDA 931
MX6Q_PAD_KEY_ROW3__KPP_ROW_3 932
MX6Q_PAD_KEY_ROW3__I2C2_SDA 933
MX6Q_PAD_KEY_ROW3__GPIO_4_13 934
MX6Q_PAD_KEY_ROW3__USDHC1_VSELECT 935
MX6Q_PAD_KEY_ROW3__PL301_PER1_HADR_6 936
MX6Q_PAD_KEY_COL4__CAN2_TXCAN 937
MX6Q_PAD_KEY_COL4__IPU1_SISG_4 938
MX6Q_PAD_KEY_COL4__USBOH3_USBOTG_OC 939
MX6Q_PAD_KEY_COL4__KPP_COL_4 940
MX6Q_PAD_KEY_COL4__UART5_RTS 941
MX6Q_PAD_KEY_COL4__GPIO_4_14 942
MX6Q_PAD_KEY_COL4__MMDC_DEBUG_49 943
MX6Q_PAD_KEY_COL4__PL301_PER1_HADDR_7 944
MX6Q_PAD_KEY_ROW4__CAN2_RXCAN 945
MX6Q_PAD_KEY_ROW4__IPU1_SISG_5 946
MX6Q_PAD_KEY_ROW4__USBOH3_USBOTG_PWR 947
MX6Q_PAD_KEY_ROW4__KPP_ROW_4 948
MX6Q_PAD_KEY_ROW4__UART5_CTS 949
MX6Q_PAD_KEY_ROW4__GPIO_4_15 950
MX6Q_PAD_KEY_ROW4__MMDC_DEBUG_50 951
MX6Q_PAD_KEY_ROW4__PL301_PER1_HADR_8 952
MX6Q_PAD_GPIO_0__CCM_CLKO 953
MX6Q_PAD_GPIO_0__KPP_COL_5 954
MX6Q_PAD_GPIO_0__ASRC_ASRC_EXT_CLK 955
MX6Q_PAD_GPIO_0__EPIT1_EPITO 956
MX6Q_PAD_GPIO_0__GPIO_1_0 957
MX6Q_PAD_GPIO_0__USBOH3_USBH1_PWR 958
MX6Q_PAD_GPIO_0__SNVS_HP_WRAP_SNVS_VIO5 959
MX6Q_PAD_GPIO_1__ESAI1_SCKR 960
MX6Q_PAD_GPIO_1__WDOG2_WDOG_B 961
MX6Q_PAD_GPIO_1__KPP_ROW_5 962
MX6Q_PAD_GPIO_1__PWM2_PWMO 963
MX6Q_PAD_GPIO_1__GPIO_1_1 964
MX6Q_PAD_GPIO_1__USDHC1_CD 965
MX6Q_PAD_GPIO_1__SRC_TESTER_ACK 966
MX6Q_PAD_GPIO_9__ESAI1_FSR 967
MX6Q_PAD_GPIO_9__WDOG1_WDOG_B 968
MX6Q_PAD_GPIO_9__KPP_COL_6 969
MX6Q_PAD_GPIO_9__CCM_REF_EN_B 970
MX6Q_PAD_GPIO_9__PWM1_PWMO 971
MX6Q_PAD_GPIO_9__GPIO_1_9 972
MX6Q_PAD_GPIO_9__USDHC1_WP 973
MX6Q_PAD_GPIO_9__SRC_EARLY_RST 974
MX6Q_PAD_GPIO_3__ESAI1_HCKR 975
MX6Q_PAD_GPIO_3__OBSERVE_MUX_INT_OUT0 976
MX6Q_PAD_GPIO_3__I2C3_SCL 977
MX6Q_PAD_GPIO_3__ANATOP_24M_OUT 978
MX6Q_PAD_GPIO_3__CCM_CLKO2 979
MX6Q_PAD_GPIO_3__GPIO_1_3 980
MX6Q_PAD_GPIO_3__USBOH3_USBH1_OC 981
MX6Q_PAD_GPIO_3__MLB_MLBCLK 982
MX6Q_PAD_GPIO_6__ESAI1_SCKT 983
MX6Q_PAD_GPIO_6__OBSERVE_MUX_INT_OUT1 984
MX6Q_PAD_GPIO_6__I2C3_SDA 985
MX6Q_PAD_GPIO_6__CCM_CCM_OUT_0 986
MX6Q_PAD_GPIO_6__CSU_CSU_INT_DEB 987
MX6Q_PAD_GPIO_6__GPIO_1_6 988
MX6Q_PAD_GPIO_6__USDHC2_LCTL 989
MX6Q_PAD_GPIO_6__MLB_MLBSIG 990
MX6Q_PAD_GPIO_2__ESAI1_FST 991
MX6Q_PAD_GPIO_2__OBSERVE_MUX_INT_OUT2 992
MX6Q_PAD_GPIO_2__KPP_ROW_6 993
MX6Q_PAD_GPIO_2__CCM_CCM_OUT_1 994
MX6Q_PAD_GPIO_2__CSU_CSU_ALARM_AUT_0 995
MX6Q_PAD_GPIO_2__GPIO_1_2 996
MX6Q_PAD_GPIO_2__USDHC2_WP 997
MX6Q_PAD_GPIO_2__MLB_MLBDAT 998
MX6Q_PAD_GPIO_4__ESAI1_HCKT 999
MX6Q_PAD_GPIO_4__OBSERVE_MUX_INT_OUT3 1000
MX6Q_PAD_GPIO_4__KPP_COL_7 1001
MX6Q_PAD_GPIO_4__CCM_CCM_OUT_2 1002
MX6Q_PAD_GPIO_4__CSU_CSU_ALARM_AUT_1 1003
MX6Q_PAD_GPIO_4__GPIO_1_4 1004
MX6Q_PAD_GPIO_4__USDHC2_CD 1005
MX6Q_PAD_GPIO_4__OCOTP_CRL_WRAR_FUSE_LA 1006
MX6Q_PAD_GPIO_5__ESAI1_TX2_RX3 1007
MX6Q_PAD_GPIO_5__OBSERVE_MUX_INT_OUT4 1008
MX6Q_PAD_GPIO_5__KPP_ROW_7 1009
MX6Q_PAD_GPIO_5__CCM_CLKO 1010
MX6Q_PAD_GPIO_5__CSU_CSU_ALARM_AUT_2 1011
MX6Q_PAD_GPIO_5__GPIO_1_5 1012
MX6Q_PAD_GPIO_5__I2C3_SCL 1013
MX6Q_PAD_GPIO_5__CHEETAH_EVENTI 1014
MX6Q_PAD_GPIO_7__ESAI1_TX4_RX1 1015
MX6Q_PAD_GPIO_7__ECSPI5_RDY 1016
MX6Q_PAD_GPIO_7__EPIT1_EPITO 1017
MX6Q_PAD_GPIO_7__CAN1_TXCAN 1018
MX6Q_PAD_GPIO_7__UART2_TXD 1019
MX6Q_PAD_GPIO_7__GPIO_1_7 1020
MX6Q_PAD_GPIO_7__SPDIF_PLOCK 1021
MX6Q_PAD_GPIO_7__USBOH3_OTGUSB_HST_MODE 1022
MX6Q_PAD_GPIO_8__ESAI1_TX5_RX0 1023
MX6Q_PAD_GPIO_8__ANATOP_ANATOP_32K_OUT 1024
MX6Q_PAD_GPIO_8__EPIT2_EPITO 1025
MX6Q_PAD_GPIO_8__CAN1_RXCAN 1026
MX6Q_PAD_GPIO_8__UART2_RXD 1027
MX6Q_PAD_GPIO_8__GPIO_1_8 1028
MX6Q_PAD_GPIO_8__SPDIF_SRCLK 1029
MX6Q_PAD_GPIO_8__USBOH3_OTG_PWRCTL_WAK 1030
MX6Q_PAD_GPIO_16__ESAI1_TX3_RX2 1031
MX6Q_PAD_GPIO_16__ENET_1588_EVENT2_IN 1032
MX6Q_PAD_GPIO_16__ENET_ETHERNET_REF_OUT 1033
MX6Q_PAD_GPIO_16__USDHC1_LCTL 1034
MX6Q_PAD_GPIO_16__SPDIF_IN1 1035
MX6Q_PAD_GPIO_16__GPIO_7_11 1036
MX6Q_PAD_GPIO_16__I2C3_SDA 1037
MX6Q_PAD_GPIO_16__SJC_DE_B 1038
MX6Q_PAD_GPIO_17__ESAI1_TX0 1039
MX6Q_PAD_GPIO_17__ENET_1588_EVENT3_IN 1040
MX6Q_PAD_GPIO_17__CCM_PMIC_RDY 1041
MX6Q_PAD_GPIO_17__SDMA_SDMA_EXT_EVENT_0 1042
MX6Q_PAD_GPIO_17__SPDIF_OUT1 1043
MX6Q_PAD_GPIO_17__GPIO_7_12 1044
MX6Q_PAD_GPIO_17__SJC_JTAG_ACT 1045
MX6Q_PAD_GPIO_18__ESAI1_TX1 1046
MX6Q_PAD_GPIO_18__ENET_RX_CLK 1047
MX6Q_PAD_GPIO_18__USDHC3_VSELECT 1048
MX6Q_PAD_GPIO_18__SDMA_SDMA_EXT_EVENT_1 1049
MX6Q_PAD_GPIO_18__ASRC_ASRC_EXT_CLK 1050
MX6Q_PAD_GPIO_18__GPIO_7_13 1051
MX6Q_PAD_GPIO_18__SNVS_HP_WRA_SNVS_VIO5 1052
MX6Q_PAD_GPIO_18__SRC_SYSTEM_RST 1053
MX6Q_PAD_GPIO_19__KPP_COL_5 1054
MX6Q_PAD_GPIO_19__ENET_1588_EVENT0_OUT 1055
MX6Q_PAD_GPIO_19__SPDIF_OUT1 1056
MX6Q_PAD_GPIO_19__CCM_CLKO 1057
MX6Q_PAD_GPIO_19__ECSPI1_RDY 1058
MX6Q_PAD_GPIO_19__GPIO_4_5 1059
MX6Q_PAD_GPIO_19__ENET_TX_ER 1060
MX6Q_PAD_GPIO_19__SRC_INT_BOOT 1061
MX6Q_PAD_CSI0_PIXCLK__IPU1_CSI0_PIXCLK 1062
MX6Q_PAD_CSI0_PIXCLK__PCIE_CTRL_MUX_12 1063
MX6Q_PAD_CSI0_PIXCLK__SDMA_DEBUG_PC_0 1064
MX6Q_PAD_CSI0_PIXCLK__GPIO_5_18 1065
MX6Q_PAD_CSI0_PIXCLK___MMDC_DEBUG_29 1066
MX6Q_PAD_CSI0_PIXCLK__CHEETAH_EVENTO 1067
MX6Q_PAD_CSI0_MCLK__IPU1_CSI0_HSYNC 1068
MX6Q_PAD_CSI0_MCLK__PCIE_CTRL_MUX_13 1069
MX6Q_PAD_CSI0_MCLK__CCM_CLKO 1070
MX6Q_PAD_CSI0_MCLK__SDMA_DEBUG_PC_1 1071
MX6Q_PAD_CSI0_MCLK__GPIO_5_19 1072
MX6Q_PAD_CSI0_MCLK__MMDC_MMDC_DEBUG_30 1073
MX6Q_PAD_CSI0_MCLK__CHEETAH_TRCTL 1074
MX6Q_PAD_CSI0_DATA_EN__IPU1_CSI0_DA_EN 1075
MX6Q_PAD_CSI0_DATA_EN__WEIM_WEIM_D_0 1076
MX6Q_PAD_CSI0_DATA_EN__PCIE_CTRL_MUX_14 1077
MX6Q_PAD_CSI0_DATA_EN__SDMA_DEBUG_PC_2 1078
MX6Q_PAD_CSI0_DATA_EN__GPIO_5_20 1079
MX6Q_PAD_CSI0_DATA_EN__MMDC_DEBUG_31 1080
MX6Q_PAD_CSI0_DATA_EN__CHEETAH_TRCLK 1081
MX6Q_PAD_CSI0_VSYNC__IPU1_CSI0_VSYNC 1082
MX6Q_PAD_CSI0_VSYNC__WEIM_WEIM_D_1 1083
MX6Q_PAD_CSI0_VSYNC__PCIE_CTRL_MUX_15 1084
MX6Q_PAD_CSI0_VSYNC__SDMA_DEBUG_PC_3 1085
MX6Q_PAD_CSI0_VSYNC__GPIO_5_21 1086
MX6Q_PAD_CSI0_VSYNC__MMDC_DEBUG_32 1087
MX6Q_PAD_CSI0_VSYNC__CHEETAH_TRACE_0 1088
MX6Q_PAD_CSI0_DAT4__IPU1_CSI0_D_4 1089
MX6Q_PAD_CSI0_DAT4__WEIM_WEIM_D_2 1090
MX6Q_PAD_CSI0_DAT4__ECSPI1_SCLK 1091
MX6Q_PAD_CSI0_DAT4__KPP_COL_5 1092
MX6Q_PAD_CSI0_DAT4__AUDMUX_AUD3_TXC 1093
MX6Q_PAD_CSI0_DAT4__GPIO_5_22 1094
MX6Q_PAD_CSI0_DAT4__MMDC_DEBUG_43 1095
MX6Q_PAD_CSI0_DAT4__CHEETAH_TRACE_1 1096
MX6Q_PAD_CSI0_DAT5__IPU1_CSI0_D_5 1097
MX6Q_PAD_CSI0_DAT5__WEIM_WEIM_D_3 1098
MX6Q_PAD_CSI0_DAT5__ECSPI1_MOSI 1099
MX6Q_PAD_CSI0_DAT5__KPP_ROW_5 1100
MX6Q_PAD_CSI0_DAT5__AUDMUX_AUD3_TXD 1101
MX6Q_PAD_CSI0_DAT5__GPIO_5_23 1102
MX6Q_PAD_CSI0_DAT5__MMDC_MMDC_DEBUG_44 1103
MX6Q_PAD_CSI0_DAT5__CHEETAH_TRACE_2 1104
MX6Q_PAD_CSI0_DAT6__IPU1_CSI0_D_6 1105
MX6Q_PAD_CSI0_DAT6__WEIM_WEIM_D_4 1106
MX6Q_PAD_CSI0_DAT6__ECSPI1_MISO 1107
MX6Q_PAD_CSI0_DAT6__KPP_COL_6 1108
MX6Q_PAD_CSI0_DAT6__AUDMUX_AUD3_TXFS 1109
MX6Q_PAD_CSI0_DAT6__GPIO_5_24 1110
MX6Q_PAD_CSI0_DAT6__MMDC_MMDC_DEBUG_45 1111
MX6Q_PAD_CSI0_DAT6__CHEETAH_TRACE_3 1112
MX6Q_PAD_CSI0_DAT7__IPU1_CSI0_D_7 1113
MX6Q_PAD_CSI0_DAT7__WEIM_WEIM_D_5 1114
MX6Q_PAD_CSI0_DAT7__ECSPI1_SS0 1115
MX6Q_PAD_CSI0_DAT7__KPP_ROW_6 1116
MX6Q_PAD_CSI0_DAT7__AUDMUX_AUD3_RXD 1117
MX6Q_PAD_CSI0_DAT7__GPIO_5_25 1118
MX6Q_PAD_CSI0_DAT7__MMDC_MMDC_DEBUG_46 1119
MX6Q_PAD_CSI0_DAT7__CHEETAH_TRACE_4 1120
MX6Q_PAD_CSI0_DAT8__IPU1_CSI0_D_8 1121
MX6Q_PAD_CSI0_DAT8__WEIM_WEIM_D_6 1122
MX6Q_PAD_CSI0_DAT8__ECSPI2_SCLK 1123
MX6Q_PAD_CSI0_DAT8__KPP_COL_7 1124
MX6Q_PAD_CSI0_DAT8__I2C1_SDA 1125
MX6Q_PAD_CSI0_DAT8__GPIO_5_26 1126
MX6Q_PAD_CSI0_DAT8__MMDC_MMDC_DEBUG_47 1127
MX6Q_PAD_CSI0_DAT8__CHEETAH_TRACE_5 1128
MX6Q_PAD_CSI0_DAT9__IPU1_CSI0_D_9 1129
MX6Q_PAD_CSI0_DAT9__WEIM_WEIM_D_7 1130
MX6Q_PAD_CSI0_DAT9__ECSPI2_MOSI 1131
MX6Q_PAD_CSI0_DAT9__KPP_ROW_7 1132
MX6Q_PAD_CSI0_DAT9__I2C1_SCL 1133
MX6Q_PAD_CSI0_DAT9__GPIO_5_27 1134
MX6Q_PAD_CSI0_DAT9__MMDC_MMDC_DEBUG_48 1135
MX6Q_PAD_CSI0_DAT9__CHEETAH_TRACE_6 1136
MX6Q_PAD_CSI0_DAT10__IPU1_CSI0_D_10 1137
MX6Q_PAD_CSI0_DAT10__AUDMUX_AUD3_RXC 1138
MX6Q_PAD_CSI0_DAT10__ECSPI2_MISO 1139
MX6Q_PAD_CSI0_DAT10__UART1_TXD 1140
MX6Q_PAD_CSI0_DAT10__SDMA_DEBUG_PC_4 1141
MX6Q_PAD_CSI0_DAT10__GPIO_5_28 1142
MX6Q_PAD_CSI0_DAT10__MMDC_MMDC_DEBUG_33 1143
MX6Q_PAD_CSI0_DAT10__CHEETAH_TRACE_7 1144
MX6Q_PAD_CSI0_DAT11__IPU1_CSI0_D_11 1145
MX6Q_PAD_CSI0_DAT11__AUDMUX_AUD3_RXFS 1146
MX6Q_PAD_CSI0_DAT11__ECSPI2_SS0 1147
MX6Q_PAD_CSI0_DAT11__UART1_RXD 1148
MX6Q_PAD_CSI0_DAT11__SDMA_DEBUG_PC_5 1149
MX6Q_PAD_CSI0_DAT11__GPIO_5_29 1150
MX6Q_PAD_CSI0_DAT11__MMDC_MMDC_DEBUG_34 1151
MX6Q_PAD_CSI0_DAT11__CHEETAH_TRACE_8 1152
MX6Q_PAD_CSI0_DAT12__IPU1_CSI0_D_12 1153
MX6Q_PAD_CSI0_DAT12__WEIM_WEIM_D_8 1154
MX6Q_PAD_CSI0_DAT12__PCIE_CTRL_MUX_16 1155
MX6Q_PAD_CSI0_DAT12__UART4_TXD 1156
MX6Q_PAD_CSI0_DAT12__SDMA_DEBUG_PC_6 1157
MX6Q_PAD_CSI0_DAT12__GPIO_5_30 1158
MX6Q_PAD_CSI0_DAT12__MMDC_MMDC_DEBUG_35 1159
MX6Q_PAD_CSI0_DAT12__CHEETAH_TRACE_9 1160
MX6Q_PAD_CSI0_DAT13__IPU1_CSI0_D_13 1161
MX6Q_PAD_CSI0_DAT13__WEIM_WEIM_D_9 1162
MX6Q_PAD_CSI0_DAT13__PCIE_CTRL_MUX_17 1163
MX6Q_PAD_CSI0_DAT13__UART4_RXD 1164
MX6Q_PAD_CSI0_DAT13__SDMA_DEBUG_PC_7 1165
MX6Q_PAD_CSI0_DAT13__GPIO_5_31 1166
MX6Q_PAD_CSI0_DAT13__MMDC_MMDC_DEBUG_36 1167
MX6Q_PAD_CSI0_DAT13__CHEETAH_TRACE_10 1168
MX6Q_PAD_CSI0_DAT14__IPU1_CSI0_D_14 1169
MX6Q_PAD_CSI0_DAT14__WEIM_WEIM_D_10 1170
MX6Q_PAD_CSI0_DAT14__PCIE_CTRL_MUX_18 1171
MX6Q_PAD_CSI0_DAT14__UART5_TXD 1172
MX6Q_PAD_CSI0_DAT14__SDMA_DEBUG_PC_8 1173
MX6Q_PAD_CSI0_DAT14__GPIO_6_0 1174
MX6Q_PAD_CSI0_DAT14__MMDC_MMDC_DEBUG_37 1175
MX6Q_PAD_CSI0_DAT14__CHEETAH_TRACE_11 1176
MX6Q_PAD_CSI0_DAT15__IPU1_CSI0_D_15 1177
MX6Q_PAD_CSI0_DAT15__WEIM_WEIM_D_11 1178
MX6Q_PAD_CSI0_DAT15__PCIE_CTRL_MUX_19 1179
MX6Q_PAD_CSI0_DAT15__UART5_RXD 1180
MX6Q_PAD_CSI0_DAT15__SDMA_DEBUG_PC_9 1181
MX6Q_PAD_CSI0_DAT15__GPIO_6_1 1182
MX6Q_PAD_CSI0_DAT15__MMDC_MMDC_DEBUG_38 1183
MX6Q_PAD_CSI0_DAT15__CHEETAH_TRACE_12 1184
MX6Q_PAD_CSI0_DAT16__IPU1_CSI0_D_16 1185
MX6Q_PAD_CSI0_DAT16__WEIM_WEIM_D_12 1186
MX6Q_PAD_CSI0_DAT16__PCIE_CTRL_MUX_20 1187
MX6Q_PAD_CSI0_DAT16__UART4_RTS 1188
MX6Q_PAD_CSI0_DAT16__SDMA_DEBUG_PC_10 1189
MX6Q_PAD_CSI0_DAT16__GPIO_6_2 1190
MX6Q_PAD_CSI0_DAT16__MMDC_MMDC_DEBUG_39 1191
MX6Q_PAD_CSI0_DAT16__CHEETAH_TRACE_13 1192
MX6Q_PAD_CSI0_DAT17__IPU1_CSI0_D_17 1193
MX6Q_PAD_CSI0_DAT17__WEIM_WEIM_D_13 1194
MX6Q_PAD_CSI0_DAT17__PCIE_CTRL_MUX_21 1195
MX6Q_PAD_CSI0_DAT17__UART4_CTS 1196
MX6Q_PAD_CSI0_DAT17__SDMA_DEBUG_PC_11 1197
MX6Q_PAD_CSI0_DAT17__GPIO_6_3 1198
MX6Q_PAD_CSI0_DAT17__MMDC_MMDC_DEBUG_40 1199
MX6Q_PAD_CSI0_DAT17__CHEETAH_TRACE_14 1200
MX6Q_PAD_CSI0_DAT18__IPU1_CSI0_D_18 1201
MX6Q_PAD_CSI0_DAT18__WEIM_WEIM_D_14 1202
MX6Q_PAD_CSI0_DAT18__PCIE_CTRL_MUX_22 1203
MX6Q_PAD_CSI0_DAT18__UART5_RTS 1204
MX6Q_PAD_CSI0_DAT18__SDMA_DEBUG_PC_12 1205
MX6Q_PAD_CSI0_DAT18__GPIO_6_4 1206
MX6Q_PAD_CSI0_DAT18__MMDC_MMDC_DEBUG_41 1207
MX6Q_PAD_CSI0_DAT18__CHEETAH_TRACE_15 1208
MX6Q_PAD_CSI0_DAT19__IPU1_CSI0_D_19 1209
MX6Q_PAD_CSI0_DAT19__WEIM_WEIM_D_15 1210
MX6Q_PAD_CSI0_DAT19__PCIE_CTRL_MUX_23 1211
MX6Q_PAD_CSI0_DAT19__UART5_CTS 1212
MX6Q_PAD_CSI0_DAT19__SDMA_DEBUG_PC_13 1213
MX6Q_PAD_CSI0_DAT19__GPIO_6_5 1214
MX6Q_PAD_CSI0_DAT19__MMDC_MMDC_DEBUG_42 1215
MX6Q_PAD_CSI0_DAT19__ANATOP_TESTO_9 1216
MX6Q_PAD_JTAG_TMS__SJC_TMS 1217
MX6Q_PAD_JTAG_MOD__SJC_MOD 1218
MX6Q_PAD_JTAG_TRSTB__SJC_TRSTB 1219
MX6Q_PAD_JTAG_TDI__SJC_TDI 1220
MX6Q_PAD_JTAG_TCK__SJC_TCK 1221
MX6Q_PAD_JTAG_TDO__SJC_TDO 1222
MX6Q_PAD_LVDS1_TX3_P__LDB_LVDS1_TX3 1223
MX6Q_PAD_LVDS1_TX2_P__LDB_LVDS1_TX2 1224
MX6Q_PAD_LVDS1_CLK_P__LDB_LVDS1_CLK 1225
MX6Q_PAD_LVDS1_TX1_P__LDB_LVDS1_TX1 1226
MX6Q_PAD_LVDS1_TX0_P__LDB_LVDS1_TX0 1227
MX6Q_PAD_LVDS0_TX3_P__LDB_LVDS0_TX3 1228
MX6Q_PAD_LVDS0_CLK_P__LDB_LVDS0_CLK 1229
MX6Q_PAD_LVDS0_TX2_P__LDB_LVDS0_TX2 1230
MX6Q_PAD_LVDS0_TX1_P__LDB_LVDS0_TX1 1231
MX6Q_PAD_LVDS0_TX0_P__LDB_LVDS0_TX0 1232
MX6Q_PAD_TAMPER__SNVS_LP_WRAP_SNVS_TD1 1233
MX6Q_PAD_PMIC_ON_REQ__SNVS_LPWRAP_WKALM 1234
MX6Q_PAD_PMIC_STBY_REQ__CCM_PMIC_STBYRQ 1235
MX6Q_PAD_POR_B__SRC_POR_B 1236
MX6Q_PAD_BOOT_MODE1__SRC_BOOT_MODE_1 1237
MX6Q_PAD_RESET_IN_B__SRC_RESET_B 1238
MX6Q_PAD_BOOT_MODE0__SRC_BOOT_MODE_0 1239
MX6Q_PAD_TEST_MODE__TCU_TEST_MODE 1240
MX6Q_PAD_SD3_DAT7__USDHC3_DAT7 1241
MX6Q_PAD_SD3_DAT7__UART1_TXD 1242
MX6Q_PAD_SD3_DAT7__PCIE_CTRL_MUX_24 1243
MX6Q_PAD_SD3_DAT7__USBOH3_UH3_DFD_OUT_0 1244
MX6Q_PAD_SD3_DAT7__USBOH3_UH2_DFD_OUT_0 1245
MX6Q_PAD_SD3_DAT7__GPIO_6_17 1246
MX6Q_PAD_SD3_DAT7__MIPI_CORE_DPHY_IN_12 1247
MX6Q_PAD_SD3_DAT7__USBPHY2_CLK20DIV 1248
MX6Q_PAD_SD3_DAT6__USDHC3_DAT6 1249
MX6Q_PAD_SD3_DAT6__UART1_RXD 1250
MX6Q_PAD_SD3_DAT6__PCIE_CTRL_MUX_25 1251
MX6Q_PAD_SD3_DAT6__USBOH3_UH3_DFD_OUT_1 1252
MX6Q_PAD_SD3_DAT6__USBOH3_UH2_DFD_OUT_1 1253
MX6Q_PAD_SD3_DAT6__GPIO_6_18 1254
MX6Q_PAD_SD3_DAT6__MIPI_CORE_DPHY_IN_13 1255
MX6Q_PAD_SD3_DAT6__ANATOP_TESTO_10 1256
MX6Q_PAD_SD3_DAT5__USDHC3_DAT5 1257
MX6Q_PAD_SD3_DAT5__UART2_TXD 1258
MX6Q_PAD_SD3_DAT5__PCIE_CTRL_MUX_26 1259
MX6Q_PAD_SD3_DAT5__USBOH3_UH3_DFD_OUT_2 1260
MX6Q_PAD_SD3_DAT5__USBOH3_UH2_DFD_OUT_2 1261
MX6Q_PAD_SD3_DAT5__GPIO_7_0 1262
MX6Q_PAD_SD3_DAT5__MIPI_CORE_DPHY_IN_14 1263
MX6Q_PAD_SD3_DAT5__ANATOP_TESTO_11 1264
MX6Q_PAD_SD3_DAT4__USDHC3_DAT4 1265
MX6Q_PAD_SD3_DAT4__UART2_RXD 1266
MX6Q_PAD_SD3_DAT4__PCIE_CTRL_MUX_27 1267
MX6Q_PAD_SD3_DAT4__USBOH3_UH3_DFD_OUT_3 1268
MX6Q_PAD_SD3_DAT4__USBOH3_UH2_DFD_OUT_3 1269
MX6Q_PAD_SD3_DAT4__GPIO_7_1 1270
MX6Q_PAD_SD3_DAT4__MIPI_CORE_DPHY_IN_15 1271
MX6Q_PAD_SD3_DAT4__ANATOP_TESTO_12 1272
MX6Q_PAD_SD3_CMD__USDHC3_CMD 1273
MX6Q_PAD_SD3_CMD__UART2_CTS 1274
MX6Q_PAD_SD3_CMD__CAN1_TXCAN 1275
MX6Q_PAD_SD3_CMD__USBOH3_UH3_DFD_OUT_4 1276
MX6Q_PAD_SD3_CMD__USBOH3_UH2_DFD_OUT_4 1277
MX6Q_PAD_SD3_CMD__GPIO_7_2 1278
MX6Q_PAD_SD3_CMD__MIPI_CORE_DPHY_IN_16 1279
MX6Q_PAD_SD3_CMD__ANATOP_TESTO_13 1280
MX6Q_PAD_SD3_CLK__USDHC3_CLK 1281
MX6Q_PAD_SD3_CLK__UART2_RTS 1282
MX6Q_PAD_SD3_CLK__CAN1_RXCAN 1283
MX6Q_PAD_SD3_CLK__USBOH3_UH3_DFD_OUT_5 1284
MX6Q_PAD_SD3_CLK__USBOH3_UH2_DFD_OUT_5 1285
MX6Q_PAD_SD3_CLK__GPIO_7_3 1286
MX6Q_PAD_SD3_CLK__MIPI_CORE_DPHY_IN_17 1287
MX6Q_PAD_SD3_CLK__ANATOP_TESTO_14 1288
MX6Q_PAD_SD3_DAT0__USDHC3_DAT0 1289
MX6Q_PAD_SD3_DAT0__UART1_CTS 1290
MX6Q_PAD_SD3_DAT0__CAN2_TXCAN 1291
MX6Q_PAD_SD3_DAT0__USBOH3_UH3_DFD_OUT_6 1292
MX6Q_PAD_SD3_DAT0__USBOH3_UH2_DFD_OUT_6 1293
MX6Q_PAD_SD3_DAT0__GPIO_7_4 1294
MX6Q_PAD_SD3_DAT0__MIPI_CORE_DPHY_IN_18 1295
MX6Q_PAD_SD3_DAT0__ANATOP_TESTO_15 1296
MX6Q_PAD_SD3_DAT1__USDHC3_DAT1 1297
MX6Q_PAD_SD3_DAT1__UART1_RTS 1298
MX6Q_PAD_SD3_DAT1__CAN2_RXCAN 1299
MX6Q_PAD_SD3_DAT1__USBOH3_UH3_DFD_OUT_7 1300
MX6Q_PAD_SD3_DAT1__USBOH3_UH2_DFD_OUT_7 1301
MX6Q_PAD_SD3_DAT1__GPIO_7_5 1302
MX6Q_PAD_SD3_DAT1__MIPI_CORE_DPHY_IN_19 1303
MX6Q_PAD_SD3_DAT1__ANATOP_TESTI_0 1304
MX6Q_PAD_SD3_DAT2__USDHC3_DAT2 1305
MX6Q_PAD_SD3_DAT2__PCIE_CTRL_MUX_28 1306
MX6Q_PAD_SD3_DAT2__USBOH3_UH3_DFD_OUT_8 1307
MX6Q_PAD_SD3_DAT2__USBOH3_UH2_DFD_OUT_8 1308
MX6Q_PAD_SD3_DAT2__GPIO_7_6 1309
MX6Q_PAD_SD3_DAT2__MIPI_CORE_DPHY_IN_20 1310
MX6Q_PAD_SD3_DAT2__ANATOP_TESTI_1 1311
MX6Q_PAD_SD3_DAT3__USDHC3_DAT3 1312
MX6Q_PAD_SD3_DAT3__UART3_CTS 1313
MX6Q_PAD_SD3_DAT3__PCIE_CTRL_MUX_29 1314
MX6Q_PAD_SD3_DAT3__USBOH3_UH3_DFD_OUT_9 1315
MX6Q_PAD_SD3_DAT3__USBOH3_UH2_DFD_OUT_9 1316
MX6Q_PAD_SD3_DAT3__GPIO_7_7 1317
MX6Q_PAD_SD3_DAT3__MIPI_CORE_DPHY_IN_21 1318
MX6Q_PAD_SD3_DAT3__ANATOP_TESTI_2 1319
MX6Q_PAD_SD3_RST__USDHC3_RST 1320
MX6Q_PAD_SD3_RST__UART3_RTS 1321
MX6Q_PAD_SD3_RST__PCIE_CTRL_MUX_30 1322
MX6Q_PAD_SD3_RST__USBOH3_UH3_DFD_OUT_10 1323
MX6Q_PAD_SD3_RST__USBOH3_UH2_DFD_OUT_10 1324
MX6Q_PAD_SD3_RST__GPIO_7_8 1325
MX6Q_PAD_SD3_RST__MIPI_CORE_DPHY_IN_22 1326
MX6Q_PAD_SD3_RST__ANATOP_ANATOP_TESTI_3 1327
MX6Q_PAD_NANDF_CLE__RAWNAND_CLE 1328
MX6Q_PAD_NANDF_CLE__IPU2_SISG_4 1329
MX6Q_PAD_NANDF_CLE__PCIE_CTRL_MUX_31 1330
MX6Q_PAD_NANDF_CLE__USBOH3_UH3_DFD_OT11 1331
MX6Q_PAD_NANDF_CLE__USBOH3_UH2_DFD_OT11 1332
MX6Q_PAD_NANDF_CLE__GPIO_6_7 1333
MX6Q_PAD_NANDF_CLE__MIPI_CORE_DPHY_IN23 1334
MX6Q_PAD_NANDF_CLE__TPSMP_HTRANS_0 1335
MX6Q_PAD_NANDF_ALE__RAWNAND_ALE 1336
MX6Q_PAD_NANDF_ALE__USDHC4_RST 1337
MX6Q_PAD_NANDF_ALE__PCIE_CTRL_MUX_0 1338
MX6Q_PAD_NANDF_ALE__USBOH3_UH3_DFD_OT12 1339
MX6Q_PAD_NANDF_ALE__USBOH3_UH2_DFD_OT12 1340
MX6Q_PAD_NANDF_ALE__GPIO_6_8 1341
MX6Q_PAD_NANDF_ALE__MIPI_CR_DPHY_IN_24 1342
MX6Q_PAD_NANDF_ALE__TPSMP_HTRANS_1 1343
MX6Q_PAD_NANDF_WP_B__RAWNAND_RESETN 1344
MX6Q_PAD_NANDF_WP_B__IPU2_SISG_5 1345
MX6Q_PAD_NANDF_WP_B__PCIE_CTRL__MUX_1 1346
MX6Q_PAD_NANDF_WP_B__USBOH3_UH3_DFDOT13 1347
MX6Q_PAD_NANDF_WP_B__USBOH3_UH2_DFDOT13 1348
MX6Q_PAD_NANDF_WP_B__GPIO_6_9 1349
MX6Q_PAD_NANDF_WP_B__MIPI_CR_DPHY_OUT32 1350
MX6Q_PAD_NANDF_WP_B__PL301_PER1_HSIZE_0 1351
MX6Q_PAD_NANDF_RB0__RAWNAND_READY0 1352
MX6Q_PAD_NANDF_RB0__IPU2_DI0_PIN1 1353
MX6Q_PAD_NANDF_RB0__PCIE_CTRL_MUX_2 1354
MX6Q_PAD_NANDF_RB0__USBOH3_UH3_DFD_OT14 1355
MX6Q_PAD_NANDF_RB0__USBOH3_UH2_DFD_OT14 1356
MX6Q_PAD_NANDF_RB0__GPIO_6_10 1357
MX6Q_PAD_NANDF_RB0__MIPI_CR_DPHY_OUT_33 1358
MX6Q_PAD_NANDF_RB0__PL301_PER1_HSIZE_1 1359
MX6Q_PAD_NANDF_CS0__RAWNAND_CE0N 1360
MX6Q_PAD_NANDF_CS0__USBOH3_UH3_DFD_OT15 1361
MX6Q_PAD_NANDF_CS0__USBOH3_UH2_DFD_OT15 1362
MX6Q_PAD_NANDF_CS0__GPIO_6_11 1363
MX6Q_PAD_NANDF_CS0__PL301_PER1_HSIZE_2 1364
MX6Q_PAD_NANDF_CS1__RAWNAND_CE1N 1365
MX6Q_PAD_NANDF_CS1__USDHC4_VSELECT 1366
MX6Q_PAD_NANDF_CS1__USDHC3_VSELECT 1367
MX6Q_PAD_NANDF_CS1__PCIE_CTRL_MUX_3 1368
MX6Q_PAD_NANDF_CS1__GPIO_6_14 1369
MX6Q_PAD_NANDF_CS1__PL301_PER1_HRDYOUT 1370
MX6Q_PAD_NANDF_CS2__RAWNAND_CE2N 1371
MX6Q_PAD_NANDF_CS2__IPU1_SISG_0 1372
MX6Q_PAD_NANDF_CS2__ESAI1_TX0 1373
MX6Q_PAD_NANDF_CS2__WEIM_WEIM_CRE 1374
MX6Q_PAD_NANDF_CS2__CCM_CLKO2 1375
MX6Q_PAD_NANDF_CS2__GPIO_6_15 1376
MX6Q_PAD_NANDF_CS2__IPU2_SISG_0 1377
MX6Q_PAD_NANDF_CS3__RAWNAND_CE3N 1378
MX6Q_PAD_NANDF_CS3__IPU1_SISG_1 1379
MX6Q_PAD_NANDF_CS3__ESAI1_TX1 1380
MX6Q_PAD_NANDF_CS3__WEIM_WEIM_A_26 1381
MX6Q_PAD_NANDF_CS3__PCIE_CTRL_MUX_4 1382
MX6Q_PAD_NANDF_CS3__GPIO_6_16 1383
MX6Q_PAD_NANDF_CS3__IPU2_SISG_1 1384
MX6Q_PAD_NANDF_CS3__TPSMP_CLK 1385
MX6Q_PAD_SD4_CMD__USDHC4_CMD 1386
MX6Q_PAD_SD4_CMD__RAWNAND_RDN 1387
MX6Q_PAD_SD4_CMD__UART3_TXD 1388
MX6Q_PAD_SD4_CMD__PCIE_CTRL_MUX_5 1389
MX6Q_PAD_SD4_CMD__GPIO_7_9 1390
MX6Q_PAD_SD4_CMD__TPSMP_HDATA_DIR 1391
MX6Q_PAD_SD4_CLK__USDHC4_CLK 1392
MX6Q_PAD_SD4_CLK__RAWNAND_WRN 1393
MX6Q_PAD_SD4_CLK__UART3_RXD 1394
MX6Q_PAD_SD4_CLK__PCIE_CTRL_MUX_6 1395
MX6Q_PAD_SD4_CLK__GPIO_7_10 1396
MX6Q_PAD_NANDF_D0__RAWNAND_D0 1397
MX6Q_PAD_NANDF_D0__USDHC1_DAT4 1398
MX6Q_PAD_NANDF_D0__GPU3D_GPU_DBG_OUT_0 1399
MX6Q_PAD_NANDF_D0__USBOH3_UH2_DFD_OUT16 1400
MX6Q_PAD_NANDF_D0__USBOH3_UH3_DFD_OUT16 1401
MX6Q_PAD_NANDF_D0__GPIO_2_0 1402
MX6Q_PAD_NANDF_D0__IPU1_IPU_DIAG_BUS_0 1403
MX6Q_PAD_NANDF_D0__IPU2_IPU_DIAG_BUS_0 1404
MX6Q_PAD_NANDF_D1__RAWNAND_D1 1405
MX6Q_PAD_NANDF_D1__USDHC1_DAT5 1406
MX6Q_PAD_NANDF_D1__GPU3D_GPU_DEBUG_OUT1 1407
MX6Q_PAD_NANDF_D1__USBOH3_UH2_DFD_OUT17 1408
MX6Q_PAD_NANDF_D1__USBOH3_UH3_DFD_OUT17 1409
MX6Q_PAD_NANDF_D1__GPIO_2_1 1410
MX6Q_PAD_NANDF_D1__IPU1_IPU_DIAG_BUS_1 1411
MX6Q_PAD_NANDF_D1__IPU2_IPU_DIAG_BUS_1 1412
MX6Q_PAD_NANDF_D2__RAWNAND_D2 1413
MX6Q_PAD_NANDF_D2__USDHC1_DAT6 1414
MX6Q_PAD_NANDF_D2__GPU3D_GPU_DBG_OUT_2 1415
MX6Q_PAD_NANDF_D2__USBOH3_UH2_DFD_OUT18 1416
MX6Q_PAD_NANDF_D2__USBOH3_UH3_DFD_OUT18 1417
MX6Q_PAD_NANDF_D2__GPIO_2_2 1418
MX6Q_PAD_NANDF_D2__IPU1_IPU_DIAG_BUS_2 1419
MX6Q_PAD_NANDF_D2__IPU2_IPU_DIAG_BUS_2 1420
MX6Q_PAD_NANDF_D3__RAWNAND_D3 1421
MX6Q_PAD_NANDF_D3__USDHC1_DAT7 1422
MX6Q_PAD_NANDF_D3__GPU3D_GPU_DBG_OUT_3 1423
MX6Q_PAD_NANDF_D3__USBOH3_UH2_DFD_OUT19 1424
MX6Q_PAD_NANDF_D3__USBOH3_UH3_DFD_OUT19 1425
MX6Q_PAD_NANDF_D3__GPIO_2_3 1426
MX6Q_PAD_NANDF_D3__IPU1_IPU_DIAG_BUS_3 1427
MX6Q_PAD_NANDF_D3__IPU2_IPU_DIAG_BUS_3 1428
MX6Q_PAD_NANDF_D4__RAWNAND_D4 1429
MX6Q_PAD_NANDF_D4__USDHC2_DAT4 1430
MX6Q_PAD_NANDF_D4__GPU3D_GPU_DBG_OUT_4 1431
MX6Q_PAD_NANDF_D4__USBOH3_UH2_DFD_OUT20 1432
MX6Q_PAD_NANDF_D4__USBOH3_UH3_DFD_OUT20 1433
MX6Q_PAD_NANDF_D4__GPIO_2_4 1434
MX6Q_PAD_NANDF_D4__IPU1_IPU_DIAG_BUS_4 1435
MX6Q_PAD_NANDF_D4__IPU2_IPU_DIAG_BUS_4 1436
MX6Q_PAD_NANDF_D5__RAWNAND_D5 1437
MX6Q_PAD_NANDF_D5__USDHC2_DAT5 1438
MX6Q_PAD_NANDF_D5__GPU3D_GPU_DBG_OUT_5 1439
MX6Q_PAD_NANDF_D5__USBOH3_UH2_DFD_OUT21 1440
MX6Q_PAD_NANDF_D5__USBOH3_UH3_DFD_OUT21 1441
MX6Q_PAD_NANDF_D5__GPIO_2_5 1442
MX6Q_PAD_NANDF_D5__IPU1_IPU_DIAG_BUS_5 1443
MX6Q_PAD_NANDF_D5__IPU2_IPU_DIAG_BUS_5 1444
MX6Q_PAD_NANDF_D6__RAWNAND_D6 1445
MX6Q_PAD_NANDF_D6__USDHC2_DAT6 1446
MX6Q_PAD_NANDF_D6__GPU3D_GPU_DBG_OUT_6 1447
MX6Q_PAD_NANDF_D6__USBOH3_UH2_DFD_OUT22 1448
MX6Q_PAD_NANDF_D6__USBOH3_UH3_DFD_OUT22 1449
MX6Q_PAD_NANDF_D6__GPIO_2_6 1450
MX6Q_PAD_NANDF_D6__IPU1_IPU_DIAG_BUS_6 1451
MX6Q_PAD_NANDF_D6__IPU2_IPU_DIAG_BUS_6 1452
MX6Q_PAD_NANDF_D7__RAWNAND_D7 1453
MX6Q_PAD_NANDF_D7__USDHC2_DAT7 1454
MX6Q_PAD_NANDF_D7__GPU3D_GPU_DBG_OUT_7 1455
MX6Q_PAD_NANDF_D7__USBOH3_UH2_DFD_OUT23 1456
MX6Q_PAD_NANDF_D7__USBOH3_UH3_DFD_OUT23 1457
MX6Q_PAD_NANDF_D7__GPIO_2_7 1458
MX6Q_PAD_NANDF_D7__IPU1_IPU_DIAG_BUS_7 1459
MX6Q_PAD_NANDF_D7__IPU2_IPU_DIAG_BUS_7 1460
MX6Q_PAD_SD4_DAT0__RAWNAND_D8 1461
MX6Q_PAD_SD4_DAT0__USDHC4_DAT0 1462
MX6Q_PAD_SD4_DAT0__RAWNAND_DQS 1463
MX6Q_PAD_SD4_DAT0__USBOH3_UH2_DFD_OUT24 1464
MX6Q_PAD_SD4_DAT0__USBOH3_UH3_DFD_OUT24 1465
MX6Q_PAD_SD4_DAT0__GPIO_2_8 1466
MX6Q_PAD_SD4_DAT0__IPU1_IPU_DIAG_BUS_8 1467
MX6Q_PAD_SD4_DAT0__IPU2_IPU_DIAG_BUS_8 1468
MX6Q_PAD_SD4_DAT1__RAWNAND_D9 1469
MX6Q_PAD_SD4_DAT1__USDHC4_DAT1 1470
MX6Q_PAD_SD4_DAT1__PWM3_PWMO 1471
MX6Q_PAD_SD4_DAT1__USBOH3_UH2_DFD_OUT25 1472
MX6Q_PAD_SD4_DAT1__USBOH3_UH3_DFD_OUT25 1473
MX6Q_PAD_SD4_DAT1__GPIO_2_9 1474
MX6Q_PAD_SD4_DAT1__IPU1_IPU_DIAG_BUS_9 1475
MX6Q_PAD_SD4_DAT1__IPU2_IPU_DIAG_BUS_9 1476
MX6Q_PAD_SD4_DAT2__RAWNAND_D10 1477
MX6Q_PAD_SD4_DAT2__USDHC4_DAT2 1478
MX6Q_PAD_SD4_DAT2__PWM4_PWMO 1479
MX6Q_PAD_SD4_DAT2__USBOH3_UH2_DFD_OUT26 1480
MX6Q_PAD_SD4_DAT2__USBOH3_UH3_DFD_OUT26 1481
MX6Q_PAD_SD4_DAT2__GPIO_2_10 1482
MX6Q_PAD_SD4_DAT2__IPU1_IPU_DIAG_BUS_10 1483
MX6Q_PAD_SD4_DAT2__IPU2_IPU_DIAG_BUS_10 1484
MX6Q_PAD_SD4_DAT3__RAWNAND_D11 1485
MX6Q_PAD_SD4_DAT3__USDHC4_DAT3 1486
MX6Q_PAD_SD4_DAT3__USBOH3_UH2_DFD_OUT27 1487
MX6Q_PAD_SD4_DAT3__USBOH3_UH3_DFD_OUT27 1488
MX6Q_PAD_SD4_DAT3__GPIO_2_11 1489
MX6Q_PAD_SD4_DAT3__IPU1_IPU_DIAG_BUS_11 1490
MX6Q_PAD_SD4_DAT3__IPU2_IPU_DIAG_BUS_11 1491
MX6Q_PAD_SD4_DAT4__RAWNAND_D12 1492
MX6Q_PAD_SD4_DAT4__USDHC4_DAT4 1493
MX6Q_PAD_SD4_DAT4__UART2_RXD 1494
MX6Q_PAD_SD4_DAT4__USBOH3_UH2_DFD_OUT28 1495
MX6Q_PAD_SD4_DAT4__USBOH3_UH3_DFD_OUT28 1496
MX6Q_PAD_SD4_DAT4__GPIO_2_12 1497
MX6Q_PAD_SD4_DAT4__IPU1_IPU_DIAG_BUS_12 1498
MX6Q_PAD_SD4_DAT4__IPU2_IPU_DIAG_BUS_12 1499
MX6Q_PAD_SD4_DAT5__RAWNAND_D13 1500
MX6Q_PAD_SD4_DAT5__USDHC4_DAT5 1501
MX6Q_PAD_SD4_DAT5__UART2_RTS 1502
MX6Q_PAD_SD4_DAT5__USBOH3_UH2_DFD_OUT29 1503
MX6Q_PAD_SD4_DAT5__USBOH3_UH3_DFD_OUT29 1504
MX6Q_PAD_SD4_DAT5__GPIO_2_13 1505
MX6Q_PAD_SD4_DAT5__IPU1_IPU_DIAG_BUS_13 1506
MX6Q_PAD_SD4_DAT5__IPU2_IPU_DIAG_BUS_13 1507
MX6Q_PAD_SD4_DAT6__RAWNAND_D14 1508
MX6Q_PAD_SD4_DAT6__USDHC4_DAT6 1509
MX6Q_PAD_SD4_DAT6__UART2_CTS 1510
MX6Q_PAD_SD4_DAT6__USBOH3_UH2_DFD_OUT30 1511
MX6Q_PAD_SD4_DAT6__USBOH3_UH3_DFD_OUT30 1512
MX6Q_PAD_SD4_DAT6__GPIO_2_14 1513
MX6Q_PAD_SD4_DAT6__IPU1_IPU_DIAG_BUS_14 1514
MX6Q_PAD_SD4_DAT6__IPU2_IPU_DIAG_BUS_14 1515
MX6Q_PAD_SD4_DAT7__RAWNAND_D15 1516
MX6Q_PAD_SD4_DAT7__USDHC4_DAT7 1517
MX6Q_PAD_SD4_DAT7__UART2_TXD 1518
MX6Q_PAD_SD4_DAT7__USBOH3_UH2_DFD_OUT31 1519
MX6Q_PAD_SD4_DAT7__USBOH3_UH3_DFD_OUT31 1520
MX6Q_PAD_SD4_DAT7__GPIO_2_15 1521
MX6Q_PAD_SD4_DAT7__IPU1_IPU_DIAG_BUS_15 1522
MX6Q_PAD_SD4_DAT7__IPU2_IPU_DIAG_BUS_15 1523
MX6Q_PAD_SD1_DAT1__USDHC1_DAT1 1524
MX6Q_PAD_SD1_DAT1__ECSPI5_SS0 1525
MX6Q_PAD_SD1_DAT1__PWM3_PWMO 1526
MX6Q_PAD_SD1_DAT1__GPT_CAPIN2 1527
MX6Q_PAD_SD1_DAT1__PCIE_CTRL_MUX_7 1528
MX6Q_PAD_SD1_DAT1__GPIO_1_17 1529
MX6Q_PAD_SD1_DAT1__HDMI_TX_OPHYDTB_0 1530
MX6Q_PAD_SD1_DAT1__ANATOP_TESTO_8 1531
MX6Q_PAD_SD1_DAT0__USDHC1_DAT0 1532
MX6Q_PAD_SD1_DAT0__ECSPI5_MISO 1533
MX6Q_PAD_SD1_DAT0__CAAM_WRAP_RNG_OSCOBS 1534
MX6Q_PAD_SD1_DAT0__GPT_CAPIN1 1535
MX6Q_PAD_SD1_DAT0__PCIE_CTRL_MUX_8 1536
MX6Q_PAD_SD1_DAT0__GPIO_1_16 1537
MX6Q_PAD_SD1_DAT0__HDMI_TX_OPHYDTB_1 1538
MX6Q_PAD_SD1_DAT0__ANATOP_TESTO_7 1539
MX6Q_PAD_SD1_DAT3__USDHC1_DAT3 1540
MX6Q_PAD_SD1_DAT3__ECSPI5_SS2 1541
MX6Q_PAD_SD1_DAT3__GPT_CMPOUT3 1542
MX6Q_PAD_SD1_DAT3__PWM1_PWMO 1543
MX6Q_PAD_SD1_DAT3__WDOG2_WDOG_B 1544
MX6Q_PAD_SD1_DAT3__GPIO_1_21 1545
MX6Q_PAD_SD1_DAT3__WDOG2_WDOG_RST_B_DEB 1546
MX6Q_PAD_SD1_DAT3__ANATOP_TESTO_6 1547
MX6Q_PAD_SD1_CMD__USDHC1_CMD 1548
MX6Q_PAD_SD1_CMD__ECSPI5_MOSI 1549
MX6Q_PAD_SD1_CMD__PWM4_PWMO 1550
MX6Q_PAD_SD1_CMD__GPT_CMPOUT1 1551
MX6Q_PAD_SD1_CMD__GPIO_1_18 1552
MX6Q_PAD_SD1_CMD__ANATOP_TESTO_5 1553
MX6Q_PAD_SD1_DAT2__USDHC1_DAT2 1554
MX6Q_PAD_SD1_DAT2__ECSPI5_SS1 1555
MX6Q_PAD_SD1_DAT2__GPT_CMPOUT2 1556
MX6Q_PAD_SD1_DAT2__PWM2_PWMO 1557
MX6Q_PAD_SD1_DAT2__WDOG1_WDOG_B 1558
MX6Q_PAD_SD1_DAT2__GPIO_1_19 1559
MX6Q_PAD_SD1_DAT2__WDOG1_WDOG_RST_B_DEB 1560
MX6Q_PAD_SD1_DAT2__ANATOP_TESTO_4 1561
MX6Q_PAD_SD1_CLK__USDHC1_CLK 1562
MX6Q_PAD_SD1_CLK__ECSPI5_SCLK 1563
MX6Q_PAD_SD1_CLK__OSC32K_32K_OUT 1564
MX6Q_PAD_SD1_CLK__GPT_CLKIN 1565
MX6Q_PAD_SD1_CLK__GPIO_1_20 1566
MX6Q_PAD_SD1_CLK__PHY_DTB_0 1567
MX6Q_PAD_SD1_CLK__SATA_PHY_DTB_0 1568
MX6Q_PAD_SD2_CLK__USDHC2_CLK 1569
MX6Q_PAD_SD2_CLK__ECSPI5_SCLK 1570
MX6Q_PAD_SD2_CLK__KPP_COL_5 1571
MX6Q_PAD_SD2_CLK__AUDMUX_AUD4_RXFS 1572
MX6Q_PAD_SD2_CLK__PCIE_CTRL_MUX_9 1573
MX6Q_PAD_SD2_CLK__GPIO_1_10 1574
MX6Q_PAD_SD2_CLK__PHY_DTB_1 1575
MX6Q_PAD_SD2_CLK__SATA_PHY_DTB_1 1576
MX6Q_PAD_SD2_CMD__USDHC2_CMD 1577
MX6Q_PAD_SD2_CMD__ECSPI5_MOSI 1578
MX6Q_PAD_SD2_CMD__KPP_ROW_5 1579
MX6Q_PAD_SD2_CMD__AUDMUX_AUD4_RXC 1580
MX6Q_PAD_SD2_CMD__PCIE_CTRL_MUX_10 1581
MX6Q_PAD_SD2_CMD__GPIO_1_11 1582
MX6Q_PAD_SD2_DAT3__USDHC2_DAT3 1583
MX6Q_PAD_SD2_DAT3__ECSPI5_SS3 1584
MX6Q_PAD_SD2_DAT3__KPP_COL_6 1585
MX6Q_PAD_SD2_DAT3__AUDMUX_AUD4_TXC 1586
MX6Q_PAD_SD2_DAT3__PCIE_CTRL_MUX_11 1587
MX6Q_PAD_SD2_DAT3__GPIO_1_12 1588
MX6Q_PAD_SD2_DAT3__SJC_DONE 1589
MX6Q_PAD_SD2_DAT3__ANATOP_TESTO_3 1590
* Freescale MXS Pin Controller
The pins controlled by mxs pin controller are organized in banks, each bank
has 32 pins. Each pin has 4 multiplexing functions, and generally, the 4th
function is GPIO. The configuration on the pins includes drive strength,
voltage and pull-up.
Required properties:
- compatible: "fsl,imx23-pinctrl" or "fsl,imx28-pinctrl"
- reg: Should contain the register physical address and length for the
pin controller.
Please refer to pinctrl-bindings.txt in this directory for details of the
common pinctrl bindings used by client devices.
The node of mxs pin controller acts as a container for an arbitrary number of
subnodes. Each of these subnodes represents some desired configuration for
a group of pins, and only affects those parameters that are explicitly listed.
In other words, a subnode that describes a drive strength parameter implies no
information about pull-up. For this reason, even seemingly boolean values are
actually tristates in this binding: unspecified, off, or on. Unspecified is
represented as an absent property, and off/on are represented as integer
values 0 and 1.
Those subnodes under mxs pin controller node will fall into two categories.
One is to set up a group of pins for a function, both mux selection and pin
configurations, and it's called group node in the binding document. The other
one is to adjust the pin configuration for some particular pins that need a
different configuration than what is defined in group node. The binding
document calls this type of node config node.
On mxs, there is no hardware pin group. The pin group in this binding only
means a group of pins put together for particular peripheral to work in
particular function, like SSP0 functioning as mmc0-8bit. That said, the
group node should include all the pins needed for one function rather than
having these pins defined in several group nodes. It also means each of
"pinctrl-*" phandle in client device node should only have one group node
pointed in there, while the phandle can have multiple config node referenced
there to adjust configurations for some pins in the group.
Required subnode-properties:
- fsl,pinmux-ids: An integer array. Each integer in the array specify a pin
with given mux function, with bank, pin and mux packed as below.
[15..12] : bank number
[11..4] : pin number
[3..0] : mux selection
This integer with mux selection packed is used as an entity by both group
and config nodes to identify a pin. The mux selection in the integer takes
effects only on group node, and will get ignored by driver with config node,
since config node is only meant to set up pin configurations.
Valid values for these integers are listed below.
- reg: Should be the index of the group nodes for same function. This property
is required only for group nodes, and should not be present in any config
nodes.
Optional subnode-properties:
- fsl,drive-strength: Integer.
0: 4 mA
1: 8 mA
2: 12 mA
3: 16 mA
- fsl,voltage: Integer.
0: 1.8 V
1: 3.3 V
- fsl,pull-up: Integer.
0: Disable the internal pull-up
1: Enable the internal pull-up
Examples:
pinctrl@80018000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,imx28-pinctrl";
reg = <0x80018000 2000>;
mmc0_8bit_pins_a: mmc0-8bit@0 {
reg = <0>;
fsl,pinmux-ids = <
0x2000 0x2010 0x2020 0x2030
0x2040 0x2050 0x2060 0x2070
0x2080 0x2090 0x20a0>;
fsl,drive-strength = <1>;
fsl,voltage = <1>;
fsl,pull-up = <1>;
};
mmc_cd_cfg: mmc-cd-cfg {
fsl,pinmux-ids = <0x2090>;
fsl,pull-up = <0>;
};
mmc_sck_cfg: mmc-sck-cfg {
fsl,pinmux-ids = <0x20a0>;
fsl,drive-strength = <2>;
fsl,pull-up = <0>;
};
};
In this example, group node mmc0-8bit defines a group of pins for mxs SSP0
to function as a 8-bit mmc device, with 8mA, 3.3V and pull-up configurations
applied on all these pins. And config nodes mmc-cd-cfg and mmc-sck-cfg are
adjusting the configuration for pins card-detection and clock from what group
node mmc0-8bit defines. Only the configuration properties to be adjusted need
to be listed in the config nodes.
Valid values for i.MX28 pinmux-id:
pinmux id
------ --
MX28_PAD_GPMI_D00__GPMI_D0 0x0000
MX28_PAD_GPMI_D01__GPMI_D1 0x0010
MX28_PAD_GPMI_D02__GPMI_D2 0x0020
MX28_PAD_GPMI_D03__GPMI_D3 0x0030
MX28_PAD_GPMI_D04__GPMI_D4 0x0040
MX28_PAD_GPMI_D05__GPMI_D5 0x0050
MX28_PAD_GPMI_D06__GPMI_D6 0x0060
MX28_PAD_GPMI_D07__GPMI_D7 0x0070
MX28_PAD_GPMI_CE0N__GPMI_CE0N 0x0100
MX28_PAD_GPMI_CE1N__GPMI_CE1N 0x0110
MX28_PAD_GPMI_CE2N__GPMI_CE2N 0x0120
MX28_PAD_GPMI_CE3N__GPMI_CE3N 0x0130
MX28_PAD_GPMI_RDY0__GPMI_READY0 0x0140
MX28_PAD_GPMI_RDY1__GPMI_READY1 0x0150
MX28_PAD_GPMI_RDY2__GPMI_READY2 0x0160
MX28_PAD_GPMI_RDY3__GPMI_READY3 0x0170
MX28_PAD_GPMI_RDN__GPMI_RDN 0x0180
MX28_PAD_GPMI_WRN__GPMI_WRN 0x0190
MX28_PAD_GPMI_ALE__GPMI_ALE 0x01a0
MX28_PAD_GPMI_CLE__GPMI_CLE 0x01b0
MX28_PAD_GPMI_RESETN__GPMI_RESETN 0x01c0
MX28_PAD_LCD_D00__LCD_D0 0x1000
MX28_PAD_LCD_D01__LCD_D1 0x1010
MX28_PAD_LCD_D02__LCD_D2 0x1020
MX28_PAD_LCD_D03__LCD_D3 0x1030
MX28_PAD_LCD_D04__LCD_D4 0x1040
MX28_PAD_LCD_D05__LCD_D5 0x1050
MX28_PAD_LCD_D06__LCD_D6 0x1060
MX28_PAD_LCD_D07__LCD_D7 0x1070
MX28_PAD_LCD_D08__LCD_D8 0x1080
MX28_PAD_LCD_D09__LCD_D9 0x1090
MX28_PAD_LCD_D10__LCD_D10 0x10a0
MX28_PAD_LCD_D11__LCD_D11 0x10b0
MX28_PAD_LCD_D12__LCD_D12 0x10c0
MX28_PAD_LCD_D13__LCD_D13 0x10d0
MX28_PAD_LCD_D14__LCD_D14 0x10e0
MX28_PAD_LCD_D15__LCD_D15 0x10f0
MX28_PAD_LCD_D16__LCD_D16 0x1100
MX28_PAD_LCD_D17__LCD_D17 0x1110
MX28_PAD_LCD_D18__LCD_D18 0x1120
MX28_PAD_LCD_D19__LCD_D19 0x1130
MX28_PAD_LCD_D20__LCD_D20 0x1140
MX28_PAD_LCD_D21__LCD_D21 0x1150
MX28_PAD_LCD_D22__LCD_D22 0x1160
MX28_PAD_LCD_D23__LCD_D23 0x1170
MX28_PAD_LCD_RD_E__LCD_RD_E 0x1180
MX28_PAD_LCD_WR_RWN__LCD_WR_RWN 0x1190
MX28_PAD_LCD_RS__LCD_RS 0x11a0
MX28_PAD_LCD_CS__LCD_CS 0x11b0
MX28_PAD_LCD_VSYNC__LCD_VSYNC 0x11c0
MX28_PAD_LCD_HSYNC__LCD_HSYNC 0x11d0
MX28_PAD_LCD_DOTCLK__LCD_DOTCLK 0x11e0
MX28_PAD_LCD_ENABLE__LCD_ENABLE 0x11f0
MX28_PAD_SSP0_DATA0__SSP0_D0 0x2000
MX28_PAD_SSP0_DATA1__SSP0_D1 0x2010
MX28_PAD_SSP0_DATA2__SSP0_D2 0x2020
MX28_PAD_SSP0_DATA3__SSP0_D3 0x2030
MX28_PAD_SSP0_DATA4__SSP0_D4 0x2040
MX28_PAD_SSP0_DATA5__SSP0_D5 0x2050
MX28_PAD_SSP0_DATA6__SSP0_D6 0x2060
MX28_PAD_SSP0_DATA7__SSP0_D7 0x2070
MX28_PAD_SSP0_CMD__SSP0_CMD 0x2080
MX28_PAD_SSP0_DETECT__SSP0_CARD_DETECT 0x2090
MX28_PAD_SSP0_SCK__SSP0_SCK 0x20a0
MX28_PAD_SSP1_SCK__SSP1_SCK 0x20c0
MX28_PAD_SSP1_CMD__SSP1_CMD 0x20d0
MX28_PAD_SSP1_DATA0__SSP1_D0 0x20e0
MX28_PAD_SSP1_DATA3__SSP1_D3 0x20f0
MX28_PAD_SSP2_SCK__SSP2_SCK 0x2100
MX28_PAD_SSP2_MOSI__SSP2_CMD 0x2110
MX28_PAD_SSP2_MISO__SSP2_D0 0x2120
MX28_PAD_SSP2_SS0__SSP2_D3 0x2130
MX28_PAD_SSP2_SS1__SSP2_D4 0x2140
MX28_PAD_SSP2_SS2__SSP2_D5 0x2150
MX28_PAD_SSP3_SCK__SSP3_SCK 0x2180
MX28_PAD_SSP3_MOSI__SSP3_CMD 0x2190
MX28_PAD_SSP3_MISO__SSP3_D0 0x21a0
MX28_PAD_SSP3_SS0__SSP3_D3 0x21b0
MX28_PAD_AUART0_RX__AUART0_RX 0x3000
MX28_PAD_AUART0_TX__AUART0_TX 0x3010
MX28_PAD_AUART0_CTS__AUART0_CTS 0x3020
MX28_PAD_AUART0_RTS__AUART0_RTS 0x3030
MX28_PAD_AUART1_RX__AUART1_RX 0x3040
MX28_PAD_AUART1_TX__AUART1_TX 0x3050
MX28_PAD_AUART1_CTS__AUART1_CTS 0x3060
MX28_PAD_AUART1_RTS__AUART1_RTS 0x3070
MX28_PAD_AUART2_RX__AUART2_RX 0x3080
MX28_PAD_AUART2_TX__AUART2_TX 0x3090
MX28_PAD_AUART2_CTS__AUART2_CTS 0x30a0
MX28_PAD_AUART2_RTS__AUART2_RTS 0x30b0
MX28_PAD_AUART3_RX__AUART3_RX 0x30c0
MX28_PAD_AUART3_TX__AUART3_TX 0x30d0
MX28_PAD_AUART3_CTS__AUART3_CTS 0x30e0
MX28_PAD_AUART3_RTS__AUART3_RTS 0x30f0
MX28_PAD_PWM0__PWM_0 0x3100
MX28_PAD_PWM1__PWM_1 0x3110
MX28_PAD_PWM2__PWM_2 0x3120
MX28_PAD_SAIF0_MCLK__SAIF0_MCLK 0x3140
MX28_PAD_SAIF0_LRCLK__SAIF0_LRCLK 0x3150
MX28_PAD_SAIF0_BITCLK__SAIF0_BITCLK 0x3160
MX28_PAD_SAIF0_SDATA0__SAIF0_SDATA0 0x3170
MX28_PAD_I2C0_SCL__I2C0_SCL 0x3180
MX28_PAD_I2C0_SDA__I2C0_SDA 0x3190
MX28_PAD_SAIF1_SDATA0__SAIF1_SDATA0 0x31a0
MX28_PAD_SPDIF__SPDIF_TX 0x31b0
MX28_PAD_PWM3__PWM_3 0x31c0
MX28_PAD_PWM4__PWM_4 0x31d0
MX28_PAD_LCD_RESET__LCD_RESET 0x31e0
MX28_PAD_ENET0_MDC__ENET0_MDC 0x4000
MX28_PAD_ENET0_MDIO__ENET0_MDIO 0x4010
MX28_PAD_ENET0_RX_EN__ENET0_RX_EN 0x4020
MX28_PAD_ENET0_RXD0__ENET0_RXD0 0x4030
MX28_PAD_ENET0_RXD1__ENET0_RXD1 0x4040
MX28_PAD_ENET0_TX_CLK__ENET0_TX_CLK 0x4050
MX28_PAD_ENET0_TX_EN__ENET0_TX_EN 0x4060
MX28_PAD_ENET0_TXD0__ENET0_TXD0 0x4070
MX28_PAD_ENET0_TXD1__ENET0_TXD1 0x4080
MX28_PAD_ENET0_RXD2__ENET0_RXD2 0x4090
MX28_PAD_ENET0_RXD3__ENET0_RXD3 0x40a0
MX28_PAD_ENET0_TXD2__ENET0_TXD2 0x40b0
MX28_PAD_ENET0_TXD3__ENET0_TXD3 0x40c0
MX28_PAD_ENET0_RX_CLK__ENET0_RX_CLK 0x40d0
MX28_PAD_ENET0_COL__ENET0_COL 0x40e0
MX28_PAD_ENET0_CRS__ENET0_CRS 0x40f0
MX28_PAD_ENET_CLK__CLKCTRL_ENET 0x4100
MX28_PAD_JTAG_RTCK__JTAG_RTCK 0x4140
MX28_PAD_EMI_D00__EMI_DATA0 0x5000
MX28_PAD_EMI_D01__EMI_DATA1 0x5010
MX28_PAD_EMI_D02__EMI_DATA2 0x5020
MX28_PAD_EMI_D03__EMI_DATA3 0x5030
MX28_PAD_EMI_D04__EMI_DATA4 0x5040
MX28_PAD_EMI_D05__EMI_DATA5 0x5050
MX28_PAD_EMI_D06__EMI_DATA6 0x5060
MX28_PAD_EMI_D07__EMI_DATA7 0x5070
MX28_PAD_EMI_D08__EMI_DATA8 0x5080
MX28_PAD_EMI_D09__EMI_DATA9 0x5090
MX28_PAD_EMI_D10__EMI_DATA10 0x50a0
MX28_PAD_EMI_D11__EMI_DATA11 0x50b0
MX28_PAD_EMI_D12__EMI_DATA12 0x50c0
MX28_PAD_EMI_D13__EMI_DATA13 0x50d0
MX28_PAD_EMI_D14__EMI_DATA14 0x50e0
MX28_PAD_EMI_D15__EMI_DATA15 0x50f0
MX28_PAD_EMI_ODT0__EMI_ODT0 0x5100
MX28_PAD_EMI_DQM0__EMI_DQM0 0x5110
MX28_PAD_EMI_ODT1__EMI_ODT1 0x5120
MX28_PAD_EMI_DQM1__EMI_DQM1 0x5130
MX28_PAD_EMI_DDR_OPEN_FB__EMI_DDR_OPEN_FEEDBACK 0x5140
MX28_PAD_EMI_CLK__EMI_CLK 0x5150
MX28_PAD_EMI_DQS0__EMI_DQS0 0x5160
MX28_PAD_EMI_DQS1__EMI_DQS1 0x5170
MX28_PAD_EMI_DDR_OPEN__EMI_DDR_OPEN 0x51a0
MX28_PAD_EMI_A00__EMI_ADDR0 0x6000
MX28_PAD_EMI_A01__EMI_ADDR1 0x6010
MX28_PAD_EMI_A02__EMI_ADDR2 0x6020
MX28_PAD_EMI_A03__EMI_ADDR3 0x6030
MX28_PAD_EMI_A04__EMI_ADDR4 0x6040
MX28_PAD_EMI_A05__EMI_ADDR5 0x6050
MX28_PAD_EMI_A06__EMI_ADDR6 0x6060
MX28_PAD_EMI_A07__EMI_ADDR7 0x6070
MX28_PAD_EMI_A08__EMI_ADDR8 0x6080
MX28_PAD_EMI_A09__EMI_ADDR9 0x6090
MX28_PAD_EMI_A10__EMI_ADDR10 0x60a0
MX28_PAD_EMI_A11__EMI_ADDR11 0x60b0
MX28_PAD_EMI_A12__EMI_ADDR12 0x60c0
MX28_PAD_EMI_A13__EMI_ADDR13 0x60d0
MX28_PAD_EMI_A14__EMI_ADDR14 0x60e0
MX28_PAD_EMI_BA0__EMI_BA0 0x6100
MX28_PAD_EMI_BA1__EMI_BA1 0x6110
MX28_PAD_EMI_BA2__EMI_BA2 0x6120
MX28_PAD_EMI_CASN__EMI_CASN 0x6130
MX28_PAD_EMI_RASN__EMI_RASN 0x6140
MX28_PAD_EMI_WEN__EMI_WEN 0x6150
MX28_PAD_EMI_CE0N__EMI_CE0N 0x6160
MX28_PAD_EMI_CE1N__EMI_CE1N 0x6170
MX28_PAD_EMI_CKE__EMI_CKE 0x6180
MX28_PAD_GPMI_D00__SSP1_D0 0x0001
MX28_PAD_GPMI_D01__SSP1_D1 0x0011
MX28_PAD_GPMI_D02__SSP1_D2 0x0021
MX28_PAD_GPMI_D03__SSP1_D3 0x0031
MX28_PAD_GPMI_D04__SSP1_D4 0x0041
MX28_PAD_GPMI_D05__SSP1_D5 0x0051
MX28_PAD_GPMI_D06__SSP1_D6 0x0061
MX28_PAD_GPMI_D07__SSP1_D7 0x0071
MX28_PAD_GPMI_CE0N__SSP3_D0 0x0101
MX28_PAD_GPMI_CE1N__SSP3_D3 0x0111
MX28_PAD_GPMI_CE2N__CAN1_TX 0x0121
MX28_PAD_GPMI_CE3N__CAN1_RX 0x0131
MX28_PAD_GPMI_RDY0__SSP1_CARD_DETECT 0x0141
MX28_PAD_GPMI_RDY1__SSP1_CMD 0x0151
MX28_PAD_GPMI_RDY2__CAN0_TX 0x0161
MX28_PAD_GPMI_RDY3__CAN0_RX 0x0171
MX28_PAD_GPMI_RDN__SSP3_SCK 0x0181
MX28_PAD_GPMI_WRN__SSP1_SCK 0x0191
MX28_PAD_GPMI_ALE__SSP3_D1 0x01a1
MX28_PAD_GPMI_CLE__SSP3_D2 0x01b1
MX28_PAD_GPMI_RESETN__SSP3_CMD 0x01c1
MX28_PAD_LCD_D03__ETM_DA8 0x1031
MX28_PAD_LCD_D04__ETM_DA9 0x1041
MX28_PAD_LCD_D08__ETM_DA3 0x1081
MX28_PAD_LCD_D09__ETM_DA4 0x1091
MX28_PAD_LCD_D20__ENET1_1588_EVENT2_OUT 0x1141
MX28_PAD_LCD_D21__ENET1_1588_EVENT2_IN 0x1151
MX28_PAD_LCD_D22__ENET1_1588_EVENT3_OUT 0x1161
MX28_PAD_LCD_D23__ENET1_1588_EVENT3_IN 0x1171
MX28_PAD_LCD_RD_E__LCD_VSYNC 0x1181
MX28_PAD_LCD_WR_RWN__LCD_HSYNC 0x1191
MX28_PAD_LCD_RS__LCD_DOTCLK 0x11a1
MX28_PAD_LCD_CS__LCD_ENABLE 0x11b1
MX28_PAD_LCD_VSYNC__SAIF1_SDATA0 0x11c1
MX28_PAD_LCD_HSYNC__SAIF1_SDATA1 0x11d1
MX28_PAD_LCD_DOTCLK__SAIF1_MCLK 0x11e1
MX28_PAD_SSP0_DATA4__SSP2_D0 0x2041
MX28_PAD_SSP0_DATA5__SSP2_D3 0x2051
MX28_PAD_SSP0_DATA6__SSP2_CMD 0x2061
MX28_PAD_SSP0_DATA7__SSP2_SCK 0x2071
MX28_PAD_SSP1_SCK__SSP2_D1 0x20c1
MX28_PAD_SSP1_CMD__SSP2_D2 0x20d1
MX28_PAD_SSP1_DATA0__SSP2_D6 0x20e1
MX28_PAD_SSP1_DATA3__SSP2_D7 0x20f1
MX28_PAD_SSP2_SCK__AUART2_RX 0x2101
MX28_PAD_SSP2_MOSI__AUART2_TX 0x2111
MX28_PAD_SSP2_MISO__AUART3_RX 0x2121
MX28_PAD_SSP2_SS0__AUART3_TX 0x2131
MX28_PAD_SSP2_SS1__SSP2_D1 0x2141
MX28_PAD_SSP2_SS2__SSP2_D2 0x2151
MX28_PAD_SSP3_SCK__AUART4_TX 0x2181
MX28_PAD_SSP3_MOSI__AUART4_RX 0x2191
MX28_PAD_SSP3_MISO__AUART4_RTS 0x21a1
MX28_PAD_SSP3_SS0__AUART4_CTS 0x21b1
MX28_PAD_AUART0_RX__I2C0_SCL 0x3001
MX28_PAD_AUART0_TX__I2C0_SDA 0x3011
MX28_PAD_AUART0_CTS__AUART4_RX 0x3021
MX28_PAD_AUART0_RTS__AUART4_TX 0x3031
MX28_PAD_AUART1_RX__SSP2_CARD_DETECT 0x3041
MX28_PAD_AUART1_TX__SSP3_CARD_DETECT 0x3051
MX28_PAD_AUART1_CTS__USB0_OVERCURRENT 0x3061
MX28_PAD_AUART1_RTS__USB0_ID 0x3071
MX28_PAD_AUART2_RX__SSP3_D1 0x3081
MX28_PAD_AUART2_TX__SSP3_D2 0x3091
MX28_PAD_AUART2_CTS__I2C1_SCL 0x30a1
MX28_PAD_AUART2_RTS__I2C1_SDA 0x30b1
MX28_PAD_AUART3_RX__CAN0_TX 0x30c1
MX28_PAD_AUART3_TX__CAN0_RX 0x30d1
MX28_PAD_AUART3_CTS__CAN1_TX 0x30e1
MX28_PAD_AUART3_RTS__CAN1_RX 0x30f1
MX28_PAD_PWM0__I2C1_SCL 0x3101
MX28_PAD_PWM1__I2C1_SDA 0x3111
MX28_PAD_PWM2__USB0_ID 0x3121
MX28_PAD_SAIF0_MCLK__PWM_3 0x3141
MX28_PAD_SAIF0_LRCLK__PWM_4 0x3151
MX28_PAD_SAIF0_BITCLK__PWM_5 0x3161
MX28_PAD_SAIF0_SDATA0__PWM_6 0x3171
MX28_PAD_I2C0_SCL__TIMROT_ROTARYA 0x3181
MX28_PAD_I2C0_SDA__TIMROT_ROTARYB 0x3191
MX28_PAD_SAIF1_SDATA0__PWM_7 0x31a1
MX28_PAD_LCD_RESET__LCD_VSYNC 0x31e1
MX28_PAD_ENET0_MDC__GPMI_CE4N 0x4001
MX28_PAD_ENET0_MDIO__GPMI_CE5N 0x4011
MX28_PAD_ENET0_RX_EN__GPMI_CE6N 0x4021
MX28_PAD_ENET0_RXD0__GPMI_CE7N 0x4031
MX28_PAD_ENET0_RXD1__GPMI_READY4 0x4041
MX28_PAD_ENET0_TX_CLK__HSADC_TRIGGER 0x4051
MX28_PAD_ENET0_TX_EN__GPMI_READY5 0x4061
MX28_PAD_ENET0_TXD0__GPMI_READY6 0x4071
MX28_PAD_ENET0_TXD1__GPMI_READY7 0x4081
MX28_PAD_ENET0_RXD2__ENET1_RXD0 0x4091
MX28_PAD_ENET0_RXD3__ENET1_RXD1 0x40a1
MX28_PAD_ENET0_TXD2__ENET1_TXD0 0x40b1
MX28_PAD_ENET0_TXD3__ENET1_TXD1 0x40c1
MX28_PAD_ENET0_RX_CLK__ENET0_RX_ER 0x40d1
MX28_PAD_ENET0_COL__ENET1_TX_EN 0x40e1
MX28_PAD_ENET0_CRS__ENET1_RX_EN 0x40f1
MX28_PAD_GPMI_CE2N__ENET0_RX_ER 0x0122
MX28_PAD_GPMI_CE3N__SAIF1_MCLK 0x0132
MX28_PAD_GPMI_RDY0__USB0_ID 0x0142
MX28_PAD_GPMI_RDY2__ENET0_TX_ER 0x0162
MX28_PAD_GPMI_RDY3__HSADC_TRIGGER 0x0172
MX28_PAD_GPMI_ALE__SSP3_D4 0x01a2
MX28_PAD_GPMI_CLE__SSP3_D5 0x01b2
MX28_PAD_LCD_D00__ETM_DA0 0x1002
MX28_PAD_LCD_D01__ETM_DA1 0x1012
MX28_PAD_LCD_D02__ETM_DA2 0x1022
MX28_PAD_LCD_D03__ETM_DA3 0x1032
MX28_PAD_LCD_D04__ETM_DA4 0x1042
MX28_PAD_LCD_D05__ETM_DA5 0x1052
MX28_PAD_LCD_D06__ETM_DA6 0x1062
MX28_PAD_LCD_D07__ETM_DA7 0x1072
MX28_PAD_LCD_D08__ETM_DA8 0x1082
MX28_PAD_LCD_D09__ETM_DA9 0x1092
MX28_PAD_LCD_D10__ETM_DA10 0x10a2
MX28_PAD_LCD_D11__ETM_DA11 0x10b2
MX28_PAD_LCD_D12__ETM_DA12 0x10c2
MX28_PAD_LCD_D13__ETM_DA13 0x10d2
MX28_PAD_LCD_D14__ETM_DA14 0x10e2
MX28_PAD_LCD_D15__ETM_DA15 0x10f2
MX28_PAD_LCD_D16__ETM_DA7 0x1102
MX28_PAD_LCD_D17__ETM_DA6 0x1112
MX28_PAD_LCD_D18__ETM_DA5 0x1122
MX28_PAD_LCD_D19__ETM_DA4 0x1132
MX28_PAD_LCD_D20__ETM_DA3 0x1142
MX28_PAD_LCD_D21__ETM_DA2 0x1152
MX28_PAD_LCD_D22__ETM_DA1 0x1162
MX28_PAD_LCD_D23__ETM_DA0 0x1172
MX28_PAD_LCD_RD_E__ETM_TCTL 0x1182
MX28_PAD_LCD_WR_RWN__ETM_TCLK 0x1192
MX28_PAD_LCD_HSYNC__ETM_TCTL 0x11d2
MX28_PAD_LCD_DOTCLK__ETM_TCLK 0x11e2
MX28_PAD_SSP1_SCK__ENET0_1588_EVENT2_OUT 0x20c2
MX28_PAD_SSP1_CMD__ENET0_1588_EVENT2_IN 0x20d2
MX28_PAD_SSP1_DATA0__ENET0_1588_EVENT3_OUT 0x20e2
MX28_PAD_SSP1_DATA3__ENET0_1588_EVENT3_IN 0x20f2
MX28_PAD_SSP2_SCK__SAIF0_SDATA1 0x2102
MX28_PAD_SSP2_MOSI__SAIF0_SDATA2 0x2112
MX28_PAD_SSP2_MISO__SAIF1_SDATA1 0x2122
MX28_PAD_SSP2_SS0__SAIF1_SDATA2 0x2132
MX28_PAD_SSP2_SS1__USB1_OVERCURRENT 0x2142
MX28_PAD_SSP2_SS2__USB0_OVERCURRENT 0x2152
MX28_PAD_SSP3_SCK__ENET1_1588_EVENT0_OUT 0x2182
MX28_PAD_SSP3_MOSI__ENET1_1588_EVENT0_IN 0x2192
MX28_PAD_SSP3_MISO__ENET1_1588_EVENT1_OUT 0x21a2
MX28_PAD_SSP3_SS0__ENET1_1588_EVENT1_IN 0x21b2
MX28_PAD_AUART0_RX__DUART_CTS 0x3002
MX28_PAD_AUART0_TX__DUART_RTS 0x3012
MX28_PAD_AUART0_CTS__DUART_RX 0x3022
MX28_PAD_AUART0_RTS__DUART_TX 0x3032
MX28_PAD_AUART1_RX__PWM_0 0x3042
MX28_PAD_AUART1_TX__PWM_1 0x3052
MX28_PAD_AUART1_CTS__TIMROT_ROTARYA 0x3062
MX28_PAD_AUART1_RTS__TIMROT_ROTARYB 0x3072
MX28_PAD_AUART2_RX__SSP3_D4 0x3082
MX28_PAD_AUART2_TX__SSP3_D5 0x3092
MX28_PAD_AUART2_CTS__SAIF1_BITCLK 0x30a2
MX28_PAD_AUART2_RTS__SAIF1_LRCLK 0x30b2
MX28_PAD_AUART3_RX__ENET0_1588_EVENT0_OUT 0x30c2
MX28_PAD_AUART3_TX__ENET0_1588_EVENT0_IN 0x30d2
MX28_PAD_AUART3_CTS__ENET0_1588_EVENT1_OUT 0x30e2
MX28_PAD_AUART3_RTS__ENET0_1588_EVENT1_IN 0x30f2
MX28_PAD_PWM0__DUART_RX 0x3102
MX28_PAD_PWM1__DUART_TX 0x3112
MX28_PAD_PWM2__USB1_OVERCURRENT 0x3122
MX28_PAD_SAIF0_MCLK__AUART4_CTS 0x3142
MX28_PAD_SAIF0_LRCLK__AUART4_RTS 0x3152
MX28_PAD_SAIF0_BITCLK__AUART4_RX 0x3162
MX28_PAD_SAIF0_SDATA0__AUART4_TX 0x3172
MX28_PAD_I2C0_SCL__DUART_RX 0x3182
MX28_PAD_I2C0_SDA__DUART_TX 0x3192
MX28_PAD_SAIF1_SDATA0__SAIF0_SDATA1 0x31a2
MX28_PAD_SPDIF__ENET1_RX_ER 0x31b2
MX28_PAD_ENET0_MDC__SAIF0_SDATA1 0x4002
MX28_PAD_ENET0_MDIO__SAIF0_SDATA2 0x4012
MX28_PAD_ENET0_RX_EN__SAIF1_SDATA1 0x4022
MX28_PAD_ENET0_RXD0__SAIF1_SDATA2 0x4032
MX28_PAD_ENET0_TX_CLK__ENET0_1588_EVENT2_OUT 0x4052
MX28_PAD_ENET0_RXD2__ENET0_1588_EVENT0_OUT 0x4092
MX28_PAD_ENET0_RXD3__ENET0_1588_EVENT0_IN 0x40a2
MX28_PAD_ENET0_TXD2__ENET0_1588_EVENT1_OUT 0x40b2
MX28_PAD_ENET0_TXD3__ENET0_1588_EVENT1_IN 0x40c2
MX28_PAD_ENET0_RX_CLK__ENET0_1588_EVENT2_IN 0x40d2
MX28_PAD_ENET0_COL__ENET0_1588_EVENT3_OUT 0x40e2
MX28_PAD_ENET0_CRS__ENET0_1588_EVENT3_IN 0x40f2
MX28_PAD_GPMI_D00__GPIO_0_0 0x0003
MX28_PAD_GPMI_D01__GPIO_0_1 0x0013
MX28_PAD_GPMI_D02__GPIO_0_2 0x0023
MX28_PAD_GPMI_D03__GPIO_0_3 0x0033
MX28_PAD_GPMI_D04__GPIO_0_4 0x0043
MX28_PAD_GPMI_D05__GPIO_0_5 0x0053
MX28_PAD_GPMI_D06__GPIO_0_6 0x0063
MX28_PAD_GPMI_D07__GPIO_0_7 0x0073
MX28_PAD_GPMI_CE0N__GPIO_0_16 0x0103
MX28_PAD_GPMI_CE1N__GPIO_0_17 0x0113
MX28_PAD_GPMI_CE2N__GPIO_0_18 0x0123
MX28_PAD_GPMI_CE3N__GPIO_0_19 0x0133
MX28_PAD_GPMI_RDY0__GPIO_0_20 0x0143
MX28_PAD_GPMI_RDY1__GPIO_0_21 0x0153
MX28_PAD_GPMI_RDY2__GPIO_0_22 0x0163
MX28_PAD_GPMI_RDY3__GPIO_0_23 0x0173
MX28_PAD_GPMI_RDN__GPIO_0_24 0x0183
MX28_PAD_GPMI_WRN__GPIO_0_25 0x0193
MX28_PAD_GPMI_ALE__GPIO_0_26 0x01a3
MX28_PAD_GPMI_CLE__GPIO_0_27 0x01b3
MX28_PAD_GPMI_RESETN__GPIO_0_28 0x01c3
MX28_PAD_LCD_D00__GPIO_1_0 0x1003
MX28_PAD_LCD_D01__GPIO_1_1 0x1013
MX28_PAD_LCD_D02__GPIO_1_2 0x1023
MX28_PAD_LCD_D03__GPIO_1_3 0x1033
MX28_PAD_LCD_D04__GPIO_1_4 0x1043
MX28_PAD_LCD_D05__GPIO_1_5 0x1053
MX28_PAD_LCD_D06__GPIO_1_6 0x1063
MX28_PAD_LCD_D07__GPIO_1_7 0x1073
MX28_PAD_LCD_D08__GPIO_1_8 0x1083
MX28_PAD_LCD_D09__GPIO_1_9 0x1093
MX28_PAD_LCD_D10__GPIO_1_10 0x10a3
MX28_PAD_LCD_D11__GPIO_1_11 0x10b3
MX28_PAD_LCD_D12__GPIO_1_12 0x10c3
MX28_PAD_LCD_D13__GPIO_1_13 0x10d3
MX28_PAD_LCD_D14__GPIO_1_14 0x10e3
MX28_PAD_LCD_D15__GPIO_1_15 0x10f3
MX28_PAD_LCD_D16__GPIO_1_16 0x1103
MX28_PAD_LCD_D17__GPIO_1_17 0x1113
MX28_PAD_LCD_D18__GPIO_1_18 0x1123
MX28_PAD_LCD_D19__GPIO_1_19 0x1133
MX28_PAD_LCD_D20__GPIO_1_20 0x1143
MX28_PAD_LCD_D21__GPIO_1_21 0x1153
MX28_PAD_LCD_D22__GPIO_1_22 0x1163
MX28_PAD_LCD_D23__GPIO_1_23 0x1173
MX28_PAD_LCD_RD_E__GPIO_1_24 0x1183
MX28_PAD_LCD_WR_RWN__GPIO_1_25 0x1193
MX28_PAD_LCD_RS__GPIO_1_26 0x11a3
MX28_PAD_LCD_CS__GPIO_1_27 0x11b3
MX28_PAD_LCD_VSYNC__GPIO_1_28 0x11c3
MX28_PAD_LCD_HSYNC__GPIO_1_29 0x11d3
MX28_PAD_LCD_DOTCLK__GPIO_1_30 0x11e3
MX28_PAD_LCD_ENABLE__GPIO_1_31 0x11f3
MX28_PAD_SSP0_DATA0__GPIO_2_0 0x2003
MX28_PAD_SSP0_DATA1__GPIO_2_1 0x2013
MX28_PAD_SSP0_DATA2__GPIO_2_2 0x2023
MX28_PAD_SSP0_DATA3__GPIO_2_3 0x2033
MX28_PAD_SSP0_DATA4__GPIO_2_4 0x2043
MX28_PAD_SSP0_DATA5__GPIO_2_5 0x2053
MX28_PAD_SSP0_DATA6__GPIO_2_6 0x2063
MX28_PAD_SSP0_DATA7__GPIO_2_7 0x2073
MX28_PAD_SSP0_CMD__GPIO_2_8 0x2083
MX28_PAD_SSP0_DETECT__GPIO_2_9 0x2093
MX28_PAD_SSP0_SCK__GPIO_2_10 0x20a3
MX28_PAD_SSP1_SCK__GPIO_2_12 0x20c3
MX28_PAD_SSP1_CMD__GPIO_2_13 0x20d3
MX28_PAD_SSP1_DATA0__GPIO_2_14 0x20e3
MX28_PAD_SSP1_DATA3__GPIO_2_15 0x20f3
MX28_PAD_SSP2_SCK__GPIO_2_16 0x2103
MX28_PAD_SSP2_MOSI__GPIO_2_17 0x2113
MX28_PAD_SSP2_MISO__GPIO_2_18 0x2123
MX28_PAD_SSP2_SS0__GPIO_2_19 0x2133
MX28_PAD_SSP2_SS1__GPIO_2_20 0x2143
MX28_PAD_SSP2_SS2__GPIO_2_21 0x2153
MX28_PAD_SSP3_SCK__GPIO_2_24 0x2183
MX28_PAD_SSP3_MOSI__GPIO_2_25 0x2193
MX28_PAD_SSP3_MISO__GPIO_2_26 0x21a3
MX28_PAD_SSP3_SS0__GPIO_2_27 0x21b3
MX28_PAD_AUART0_RX__GPIO_3_0 0x3003
MX28_PAD_AUART0_TX__GPIO_3_1 0x3013
MX28_PAD_AUART0_CTS__GPIO_3_2 0x3023
MX28_PAD_AUART0_RTS__GPIO_3_3 0x3033
MX28_PAD_AUART1_RX__GPIO_3_4 0x3043
MX28_PAD_AUART1_TX__GPIO_3_5 0x3053
MX28_PAD_AUART1_CTS__GPIO_3_6 0x3063
MX28_PAD_AUART1_RTS__GPIO_3_7 0x3073
MX28_PAD_AUART2_RX__GPIO_3_8 0x3083
MX28_PAD_AUART2_TX__GPIO_3_9 0x3093
MX28_PAD_AUART2_CTS__GPIO_3_10 0x30a3
MX28_PAD_AUART2_RTS__GPIO_3_11 0x30b3
MX28_PAD_AUART3_RX__GPIO_3_12 0x30c3
MX28_PAD_AUART3_TX__GPIO_3_13 0x30d3
MX28_PAD_AUART3_CTS__GPIO_3_14 0x30e3
MX28_PAD_AUART3_RTS__GPIO_3_15 0x30f3
MX28_PAD_PWM0__GPIO_3_16 0x3103
MX28_PAD_PWM1__GPIO_3_17 0x3113
MX28_PAD_PWM2__GPIO_3_18 0x3123
MX28_PAD_SAIF0_MCLK__GPIO_3_20 0x3143
MX28_PAD_SAIF0_LRCLK__GPIO_3_21 0x3153
MX28_PAD_SAIF0_BITCLK__GPIO_3_22 0x3163
MX28_PAD_SAIF0_SDATA0__GPIO_3_23 0x3173
MX28_PAD_I2C0_SCL__GPIO_3_24 0x3183
MX28_PAD_I2C0_SDA__GPIO_3_25 0x3193
MX28_PAD_SAIF1_SDATA0__GPIO_3_26 0x31a3
MX28_PAD_SPDIF__GPIO_3_27 0x31b3
MX28_PAD_PWM3__GPIO_3_28 0x31c3
MX28_PAD_PWM4__GPIO_3_29 0x31d3
MX28_PAD_LCD_RESET__GPIO_3_30 0x31e3
MX28_PAD_ENET0_MDC__GPIO_4_0 0x4003
MX28_PAD_ENET0_MDIO__GPIO_4_1 0x4013
MX28_PAD_ENET0_RX_EN__GPIO_4_2 0x4023
MX28_PAD_ENET0_RXD0__GPIO_4_3 0x4033
MX28_PAD_ENET0_RXD1__GPIO_4_4 0x4043
MX28_PAD_ENET0_TX_CLK__GPIO_4_5 0x4053
MX28_PAD_ENET0_TX_EN__GPIO_4_6 0x4063
MX28_PAD_ENET0_TXD0__GPIO_4_7 0x4073
MX28_PAD_ENET0_TXD1__GPIO_4_8 0x4083
MX28_PAD_ENET0_RXD2__GPIO_4_9 0x4093
MX28_PAD_ENET0_RXD3__GPIO_4_10 0x40a3
MX28_PAD_ENET0_TXD2__GPIO_4_11 0x40b3
MX28_PAD_ENET0_TXD3__GPIO_4_12 0x40c3
MX28_PAD_ENET0_RX_CLK__GPIO_4_13 0x40d3
MX28_PAD_ENET0_COL__GPIO_4_14 0x40e3
MX28_PAD_ENET0_CRS__GPIO_4_15 0x40f3
MX28_PAD_ENET_CLK__GPIO_4_16 0x4103
MX28_PAD_JTAG_RTCK__GPIO_4_20 0x4143
Valid values for i.MX23 pinmux-id:
pinmux id
------ --
MX23_PAD_GPMI_D00__GPMI_D00 0x0000
MX23_PAD_GPMI_D01__GPMI_D01 0x0010
MX23_PAD_GPMI_D02__GPMI_D02 0x0020
MX23_PAD_GPMI_D03__GPMI_D03 0x0030
MX23_PAD_GPMI_D04__GPMI_D04 0x0040
MX23_PAD_GPMI_D05__GPMI_D05 0x0050
MX23_PAD_GPMI_D06__GPMI_D06 0x0060
MX23_PAD_GPMI_D07__GPMI_D07 0x0070
MX23_PAD_GPMI_D08__GPMI_D08 0x0080
MX23_PAD_GPMI_D09__GPMI_D09 0x0090
MX23_PAD_GPMI_D10__GPMI_D10 0x00a0
MX23_PAD_GPMI_D11__GPMI_D11 0x00b0
MX23_PAD_GPMI_D12__GPMI_D12 0x00c0
MX23_PAD_GPMI_D13__GPMI_D13 0x00d0
MX23_PAD_GPMI_D14__GPMI_D14 0x00e0
MX23_PAD_GPMI_D15__GPMI_D15 0x00f0
MX23_PAD_GPMI_CLE__GPMI_CLE 0x0100
MX23_PAD_GPMI_ALE__GPMI_ALE 0x0110
MX23_PAD_GPMI_CE2N__GPMI_CE2N 0x0120
MX23_PAD_GPMI_RDY0__GPMI_RDY0 0x0130
MX23_PAD_GPMI_RDY1__GPMI_RDY1 0x0140
MX23_PAD_GPMI_RDY2__GPMI_RDY2 0x0150
MX23_PAD_GPMI_RDY3__GPMI_RDY3 0x0160
MX23_PAD_GPMI_WPN__GPMI_WPN 0x0170
MX23_PAD_GPMI_WRN__GPMI_WRN 0x0180
MX23_PAD_GPMI_RDN__GPMI_RDN 0x0190
MX23_PAD_AUART1_CTS__AUART1_CTS 0x01a0
MX23_PAD_AUART1_RTS__AUART1_RTS 0x01b0
MX23_PAD_AUART1_RX__AUART1_RX 0x01c0
MX23_PAD_AUART1_TX__AUART1_TX 0x01d0
MX23_PAD_I2C_SCL__I2C_SCL 0x01e0
MX23_PAD_I2C_SDA__I2C_SDA 0x01f0
MX23_PAD_LCD_D00__LCD_D00 0x1000
MX23_PAD_LCD_D01__LCD_D01 0x1010
MX23_PAD_LCD_D02__LCD_D02 0x1020
MX23_PAD_LCD_D03__LCD_D03 0x1030
MX23_PAD_LCD_D04__LCD_D04 0x1040
MX23_PAD_LCD_D05__LCD_D05 0x1050
MX23_PAD_LCD_D06__LCD_D06 0x1060
MX23_PAD_LCD_D07__LCD_D07 0x1070
MX23_PAD_LCD_D08__LCD_D08 0x1080
MX23_PAD_LCD_D09__LCD_D09 0x1090
MX23_PAD_LCD_D10__LCD_D10 0x10a0
MX23_PAD_LCD_D11__LCD_D11 0x10b0
MX23_PAD_LCD_D12__LCD_D12 0x10c0
MX23_PAD_LCD_D13__LCD_D13 0x10d0
MX23_PAD_LCD_D14__LCD_D14 0x10e0
MX23_PAD_LCD_D15__LCD_D15 0x10f0
MX23_PAD_LCD_D16__LCD_D16 0x1100
MX23_PAD_LCD_D17__LCD_D17 0x1110
MX23_PAD_LCD_RESET__LCD_RESET 0x1120
MX23_PAD_LCD_RS__LCD_RS 0x1130
MX23_PAD_LCD_WR__LCD_WR 0x1140
MX23_PAD_LCD_CS__LCD_CS 0x1150
MX23_PAD_LCD_DOTCK__LCD_DOTCK 0x1160
MX23_PAD_LCD_ENABLE__LCD_ENABLE 0x1170
MX23_PAD_LCD_HSYNC__LCD_HSYNC 0x1180
MX23_PAD_LCD_VSYNC__LCD_VSYNC 0x1190
MX23_PAD_PWM0__PWM0 0x11a0
MX23_PAD_PWM1__PWM1 0x11b0
MX23_PAD_PWM2__PWM2 0x11c0
MX23_PAD_PWM3__PWM3 0x11d0
MX23_PAD_PWM4__PWM4 0x11e0
MX23_PAD_SSP1_CMD__SSP1_CMD 0x2000
MX23_PAD_SSP1_DETECT__SSP1_DETECT 0x2010
MX23_PAD_SSP1_DATA0__SSP1_DATA0 0x2020
MX23_PAD_SSP1_DATA1__SSP1_DATA1 0x2030
MX23_PAD_SSP1_DATA2__SSP1_DATA2 0x2040
MX23_PAD_SSP1_DATA3__SSP1_DATA3 0x2050
MX23_PAD_SSP1_SCK__SSP1_SCK 0x2060
MX23_PAD_ROTARYA__ROTARYA 0x2070
MX23_PAD_ROTARYB__ROTARYB 0x2080
MX23_PAD_EMI_A00__EMI_A00 0x2090
MX23_PAD_EMI_A01__EMI_A01 0x20a0
MX23_PAD_EMI_A02__EMI_A02 0x20b0
MX23_PAD_EMI_A03__EMI_A03 0x20c0
MX23_PAD_EMI_A04__EMI_A04 0x20d0
MX23_PAD_EMI_A05__EMI_A05 0x20e0
MX23_PAD_EMI_A06__EMI_A06 0x20f0
MX23_PAD_EMI_A07__EMI_A07 0x2100
MX23_PAD_EMI_A08__EMI_A08 0x2110
MX23_PAD_EMI_A09__EMI_A09 0x2120
MX23_PAD_EMI_A10__EMI_A10 0x2130
MX23_PAD_EMI_A11__EMI_A11 0x2140
MX23_PAD_EMI_A12__EMI_A12 0x2150
MX23_PAD_EMI_BA0__EMI_BA0 0x2160
MX23_PAD_EMI_BA1__EMI_BA1 0x2170
MX23_PAD_EMI_CASN__EMI_CASN 0x2180
MX23_PAD_EMI_CE0N__EMI_CE0N 0x2190
MX23_PAD_EMI_CE1N__EMI_CE1N 0x21a0
MX23_PAD_GPMI_CE1N__GPMI_CE1N 0x21b0
MX23_PAD_GPMI_CE0N__GPMI_CE0N 0x21c0
MX23_PAD_EMI_CKE__EMI_CKE 0x21d0
MX23_PAD_EMI_RASN__EMI_RASN 0x21e0
MX23_PAD_EMI_WEN__EMI_WEN 0x21f0
MX23_PAD_EMI_D00__EMI_D00 0x3000
MX23_PAD_EMI_D01__EMI_D01 0x3010
MX23_PAD_EMI_D02__EMI_D02 0x3020
MX23_PAD_EMI_D03__EMI_D03 0x3030
MX23_PAD_EMI_D04__EMI_D04 0x3040
MX23_PAD_EMI_D05__EMI_D05 0x3050
MX23_PAD_EMI_D06__EMI_D06 0x3060
MX23_PAD_EMI_D07__EMI_D07 0x3070
MX23_PAD_EMI_D08__EMI_D08 0x3080
MX23_PAD_EMI_D09__EMI_D09 0x3090
MX23_PAD_EMI_D10__EMI_D10 0x30a0
MX23_PAD_EMI_D11__EMI_D11 0x30b0
MX23_PAD_EMI_D12__EMI_D12 0x30c0
MX23_PAD_EMI_D13__EMI_D13 0x30d0
MX23_PAD_EMI_D14__EMI_D14 0x30e0
MX23_PAD_EMI_D15__EMI_D15 0x30f0
MX23_PAD_EMI_DQM0__EMI_DQM0 0x3100
MX23_PAD_EMI_DQM1__EMI_DQM1 0x3110
MX23_PAD_EMI_DQS0__EMI_DQS0 0x3120
MX23_PAD_EMI_DQS1__EMI_DQS1 0x3130
MX23_PAD_EMI_CLK__EMI_CLK 0x3140
MX23_PAD_EMI_CLKN__EMI_CLKN 0x3150
MX23_PAD_GPMI_D00__LCD_D8 0x0001
MX23_PAD_GPMI_D01__LCD_D9 0x0011
MX23_PAD_GPMI_D02__LCD_D10 0x0021
MX23_PAD_GPMI_D03__LCD_D11 0x0031
MX23_PAD_GPMI_D04__LCD_D12 0x0041
MX23_PAD_GPMI_D05__LCD_D13 0x0051
MX23_PAD_GPMI_D06__LCD_D14 0x0061
MX23_PAD_GPMI_D07__LCD_D15 0x0071
MX23_PAD_GPMI_D08__LCD_D18 0x0081
MX23_PAD_GPMI_D09__LCD_D19 0x0091
MX23_PAD_GPMI_D10__LCD_D20 0x00a1
MX23_PAD_GPMI_D11__LCD_D21 0x00b1
MX23_PAD_GPMI_D12__LCD_D22 0x00c1
MX23_PAD_GPMI_D13__LCD_D23 0x00d1
MX23_PAD_GPMI_D14__AUART2_RX 0x00e1
MX23_PAD_GPMI_D15__AUART2_TX 0x00f1
MX23_PAD_GPMI_CLE__LCD_D16 0x0101
MX23_PAD_GPMI_ALE__LCD_D17 0x0111
MX23_PAD_GPMI_CE2N__ATA_A2 0x0121
MX23_PAD_AUART1_RTS__IR_CLK 0x01b1
MX23_PAD_AUART1_RX__IR_RX 0x01c1
MX23_PAD_AUART1_TX__IR_TX 0x01d1
MX23_PAD_I2C_SCL__GPMI_RDY2 0x01e1
MX23_PAD_I2C_SDA__GPMI_CE2N 0x01f1
MX23_PAD_LCD_D00__ETM_DA8 0x1001
MX23_PAD_LCD_D01__ETM_DA9 0x1011
MX23_PAD_LCD_D02__ETM_DA10 0x1021
MX23_PAD_LCD_D03__ETM_DA11 0x1031
MX23_PAD_LCD_D04__ETM_DA12 0x1041
MX23_PAD_LCD_D05__ETM_DA13 0x1051
MX23_PAD_LCD_D06__ETM_DA14 0x1061
MX23_PAD_LCD_D07__ETM_DA15 0x1071
MX23_PAD_LCD_D08__ETM_DA0 0x1081
MX23_PAD_LCD_D09__ETM_DA1 0x1091
MX23_PAD_LCD_D10__ETM_DA2 0x10a1
MX23_PAD_LCD_D11__ETM_DA3 0x10b1
MX23_PAD_LCD_D12__ETM_DA4 0x10c1
MX23_PAD_LCD_D13__ETM_DA5 0x10d1
MX23_PAD_LCD_D14__ETM_DA6 0x10e1
MX23_PAD_LCD_D15__ETM_DA7 0x10f1
MX23_PAD_LCD_RESET__ETM_TCTL 0x1121
MX23_PAD_LCD_RS__ETM_TCLK 0x1131
MX23_PAD_LCD_DOTCK__GPMI_RDY3 0x1161
MX23_PAD_LCD_ENABLE__I2C_SCL 0x1171
MX23_PAD_LCD_HSYNC__I2C_SDA 0x1181
MX23_PAD_LCD_VSYNC__LCD_BUSY 0x1191
MX23_PAD_PWM0__ROTARYA 0x11a1
MX23_PAD_PWM1__ROTARYB 0x11b1
MX23_PAD_PWM2__GPMI_RDY3 0x11c1
MX23_PAD_PWM3__ETM_TCTL 0x11d1
MX23_PAD_PWM4__ETM_TCLK 0x11e1
MX23_PAD_SSP1_DETECT__GPMI_CE3N 0x2011
MX23_PAD_SSP1_DATA1__I2C_SCL 0x2031
MX23_PAD_SSP1_DATA2__I2C_SDA 0x2041
MX23_PAD_ROTARYA__AUART2_RTS 0x2071
MX23_PAD_ROTARYB__AUART2_CTS 0x2081
MX23_PAD_GPMI_D00__SSP2_DATA0 0x0002
MX23_PAD_GPMI_D01__SSP2_DATA1 0x0012
MX23_PAD_GPMI_D02__SSP2_DATA2 0x0022
MX23_PAD_GPMI_D03__SSP2_DATA3 0x0032
MX23_PAD_GPMI_D04__SSP2_DATA4 0x0042
MX23_PAD_GPMI_D05__SSP2_DATA5 0x0052
MX23_PAD_GPMI_D06__SSP2_DATA6 0x0062
MX23_PAD_GPMI_D07__SSP2_DATA7 0x0072
MX23_PAD_GPMI_D08__SSP1_DATA4 0x0082
MX23_PAD_GPMI_D09__SSP1_DATA5 0x0092
MX23_PAD_GPMI_D10__SSP1_DATA6 0x00a2
MX23_PAD_GPMI_D11__SSP1_DATA7 0x00b2
MX23_PAD_GPMI_D15__GPMI_CE3N 0x00f2
MX23_PAD_GPMI_RDY0__SSP2_DETECT 0x0132
MX23_PAD_GPMI_RDY1__SSP2_CMD 0x0142
MX23_PAD_GPMI_WRN__SSP2_SCK 0x0182
MX23_PAD_AUART1_CTS__SSP1_DATA4 0x01a2
MX23_PAD_AUART1_RTS__SSP1_DATA5 0x01b2
MX23_PAD_AUART1_RX__SSP1_DATA6 0x01c2
MX23_PAD_AUART1_TX__SSP1_DATA7 0x01d2
MX23_PAD_I2C_SCL__AUART1_TX 0x01e2
MX23_PAD_I2C_SDA__AUART1_RX 0x01f2
MX23_PAD_LCD_D08__SAIF2_SDATA0 0x1082
MX23_PAD_LCD_D09__SAIF1_SDATA0 0x1092
MX23_PAD_LCD_D10__SAIF_MCLK_BITCLK 0x10a2
MX23_PAD_LCD_D11__SAIF_LRCLK 0x10b2
MX23_PAD_LCD_D12__SAIF2_SDATA1 0x10c2
MX23_PAD_LCD_D13__SAIF2_SDATA2 0x10d2
MX23_PAD_LCD_D14__SAIF1_SDATA2 0x10e2
MX23_PAD_LCD_D15__SAIF1_SDATA1 0x10f2
MX23_PAD_LCD_D16__SAIF_ALT_BITCLK 0x1102
MX23_PAD_LCD_RESET__GPMI_CE3N 0x1122
MX23_PAD_PWM0__DUART_RX 0x11a2
MX23_PAD_PWM1__DUART_TX 0x11b2
MX23_PAD_PWM3__AUART1_CTS 0x11d2
MX23_PAD_PWM4__AUART1_RTS 0x11e2
MX23_PAD_SSP1_CMD__JTAG_TDO 0x2002
MX23_PAD_SSP1_DETECT__USB_OTG_ID 0x2012
MX23_PAD_SSP1_DATA0__JTAG_TDI 0x2022
MX23_PAD_SSP1_DATA1__JTAG_TCLK 0x2032
MX23_PAD_SSP1_DATA2__JTAG_RTCK 0x2042
MX23_PAD_SSP1_DATA3__JTAG_TMS 0x2052
MX23_PAD_SSP1_SCK__JTAG_TRST 0x2062
MX23_PAD_ROTARYA__SPDIF 0x2072
MX23_PAD_ROTARYB__GPMI_CE3N 0x2082
MX23_PAD_GPMI_D00__GPIO_0_0 0x0003
MX23_PAD_GPMI_D01__GPIO_0_1 0x0013
MX23_PAD_GPMI_D02__GPIO_0_2 0x0023
MX23_PAD_GPMI_D03__GPIO_0_3 0x0033
MX23_PAD_GPMI_D04__GPIO_0_4 0x0043
MX23_PAD_GPMI_D05__GPIO_0_5 0x0053
MX23_PAD_GPMI_D06__GPIO_0_6 0x0063
MX23_PAD_GPMI_D07__GPIO_0_7 0x0073
MX23_PAD_GPMI_D08__GPIO_0_8 0x0083
MX23_PAD_GPMI_D09__GPIO_0_9 0x0093
MX23_PAD_GPMI_D10__GPIO_0_10 0x00a3
MX23_PAD_GPMI_D11__GPIO_0_11 0x00b3
MX23_PAD_GPMI_D12__GPIO_0_12 0x00c3
MX23_PAD_GPMI_D13__GPIO_0_13 0x00d3
MX23_PAD_GPMI_D14__GPIO_0_14 0x00e3
MX23_PAD_GPMI_D15__GPIO_0_15 0x00f3
MX23_PAD_GPMI_CLE__GPIO_0_16 0x0103
MX23_PAD_GPMI_ALE__GPIO_0_17 0x0113
MX23_PAD_GPMI_CE2N__GPIO_0_18 0x0123
MX23_PAD_GPMI_RDY0__GPIO_0_19 0x0133
MX23_PAD_GPMI_RDY1__GPIO_0_20 0x0143
MX23_PAD_GPMI_RDY2__GPIO_0_21 0x0153
MX23_PAD_GPMI_RDY3__GPIO_0_22 0x0163
MX23_PAD_GPMI_WPN__GPIO_0_23 0x0173
MX23_PAD_GPMI_WRN__GPIO_0_24 0x0183
MX23_PAD_GPMI_RDN__GPIO_0_25 0x0193
MX23_PAD_AUART1_CTS__GPIO_0_26 0x01a3
MX23_PAD_AUART1_RTS__GPIO_0_27 0x01b3
MX23_PAD_AUART1_RX__GPIO_0_28 0x01c3
MX23_PAD_AUART1_TX__GPIO_0_29 0x01d3
MX23_PAD_I2C_SCL__GPIO_0_30 0x01e3
MX23_PAD_I2C_SDA__GPIO_0_31 0x01f3
MX23_PAD_LCD_D00__GPIO_1_0 0x1003
MX23_PAD_LCD_D01__GPIO_1_1 0x1013
MX23_PAD_LCD_D02__GPIO_1_2 0x1023
MX23_PAD_LCD_D03__GPIO_1_3 0x1033
MX23_PAD_LCD_D04__GPIO_1_4 0x1043
MX23_PAD_LCD_D05__GPIO_1_5 0x1053
MX23_PAD_LCD_D06__GPIO_1_6 0x1063
MX23_PAD_LCD_D07__GPIO_1_7 0x1073
MX23_PAD_LCD_D08__GPIO_1_8 0x1083
MX23_PAD_LCD_D09__GPIO_1_9 0x1093
MX23_PAD_LCD_D10__GPIO_1_10 0x10a3
MX23_PAD_LCD_D11__GPIO_1_11 0x10b3
MX23_PAD_LCD_D12__GPIO_1_12 0x10c3
MX23_PAD_LCD_D13__GPIO_1_13 0x10d3
MX23_PAD_LCD_D14__GPIO_1_14 0x10e3
MX23_PAD_LCD_D15__GPIO_1_15 0x10f3
MX23_PAD_LCD_D16__GPIO_1_16 0x1103
MX23_PAD_LCD_D17__GPIO_1_17 0x1113
MX23_PAD_LCD_RESET__GPIO_1_18 0x1123
MX23_PAD_LCD_RS__GPIO_1_19 0x1133
MX23_PAD_LCD_WR__GPIO_1_20 0x1143
MX23_PAD_LCD_CS__GPIO_1_21 0x1153
MX23_PAD_LCD_DOTCK__GPIO_1_22 0x1163
MX23_PAD_LCD_ENABLE__GPIO_1_23 0x1173
MX23_PAD_LCD_HSYNC__GPIO_1_24 0x1183
MX23_PAD_LCD_VSYNC__GPIO_1_25 0x1193
MX23_PAD_PWM0__GPIO_1_26 0x11a3
MX23_PAD_PWM1__GPIO_1_27 0x11b3
MX23_PAD_PWM2__GPIO_1_28 0x11c3
MX23_PAD_PWM3__GPIO_1_29 0x11d3
MX23_PAD_PWM4__GPIO_1_30 0x11e3
MX23_PAD_SSP1_CMD__GPIO_2_0 0x2003
MX23_PAD_SSP1_DETECT__GPIO_2_1 0x2013
MX23_PAD_SSP1_DATA0__GPIO_2_2 0x2023
MX23_PAD_SSP1_DATA1__GPIO_2_3 0x2033
MX23_PAD_SSP1_DATA2__GPIO_2_4 0x2043
MX23_PAD_SSP1_DATA3__GPIO_2_5 0x2053
MX23_PAD_SSP1_SCK__GPIO_2_6 0x2063
MX23_PAD_ROTARYA__GPIO_2_7 0x2073
MX23_PAD_ROTARYB__GPIO_2_8 0x2083
MX23_PAD_EMI_A00__GPIO_2_9 0x2093
MX23_PAD_EMI_A01__GPIO_2_10 0x20a3
MX23_PAD_EMI_A02__GPIO_2_11 0x20b3
MX23_PAD_EMI_A03__GPIO_2_12 0x20c3
MX23_PAD_EMI_A04__GPIO_2_13 0x20d3
MX23_PAD_EMI_A05__GPIO_2_14 0x20e3
MX23_PAD_EMI_A06__GPIO_2_15 0x20f3
MX23_PAD_EMI_A07__GPIO_2_16 0x2103
MX23_PAD_EMI_A08__GPIO_2_17 0x2113
MX23_PAD_EMI_A09__GPIO_2_18 0x2123
MX23_PAD_EMI_A10__GPIO_2_19 0x2133
MX23_PAD_EMI_A11__GPIO_2_20 0x2143
MX23_PAD_EMI_A12__GPIO_2_21 0x2153
MX23_PAD_EMI_BA0__GPIO_2_22 0x2163
MX23_PAD_EMI_BA1__GPIO_2_23 0x2173
MX23_PAD_EMI_CASN__GPIO_2_24 0x2183
MX23_PAD_EMI_CE0N__GPIO_2_25 0x2193
MX23_PAD_EMI_CE1N__GPIO_2_26 0x21a3
MX23_PAD_GPMI_CE1N__GPIO_2_27 0x21b3
MX23_PAD_GPMI_CE0N__GPIO_2_28 0x21c3
MX23_PAD_EMI_CKE__GPIO_2_29 0x21d3
MX23_PAD_EMI_RASN__GPIO_2_30 0x21e3
MX23_PAD_EMI_WEN__GPIO_2_31 0x21f3
NVIDIA Tegra20 pinmux controller
Required properties:
- compatible: "nvidia,tegra20-pinmux"
- reg: Should contain the register physical address and length for each of
the tri-state, mux, pull-up/down, and pad control register sets.
Please refer to pinctrl-bindings.txt in this directory for details of the
common pinctrl bindings used by client devices, including the meaning of the
phrase "pin configuration node".
Tegra's pin configuration nodes act as a container for an abitrary number of
subnodes. Each of these subnodes represents some desired configuration for a
pin, a group, or a list of pins or groups. This configuration can include the
mux function to select on those pin(s)/group(s), and various pin configuration
parameters, such as pull-up, tristate, drive strength, etc.
The name of each subnode is not important; all subnodes should be enumerated
and processed purely based on their content.
Each subnode only affects those parameters that are explicitly listed. In
other words, a subnode that lists a mux function but no pin configuration
parameters implies no information about any pin configuration parameters.
Similarly, a pin subnode that describes a pullup parameter implies no
information about e.g. the mux function or tristate parameter. For this
reason, even seemingly boolean values are actually tristates in this binding:
unspecified, off, or on. Unspecified is represented as an absent property,
and off/on are represented as integer values 0 and 1.
Required subnode-properties:
- nvidia,pins : An array of strings. Each string contains the name of a pin or
group. Valid values for these names are listed below.
Optional subnode-properties:
- nvidia,function: A string containing the name of the function to mux to the
pin or group. Valid values for function names are listed below. See the Tegra
TRM to determine which are valid for each pin or group.
- nvidia,pull: Integer, representing the pull-down/up to apply to the pin.
0: none, 1: down, 2: up.
- nvidia,tristate: Integer.
0: drive, 1: tristate.
- nvidia,high-speed-mode: Integer. Enable high speed mode the pins.
0: no, 1: yes.
- nvidia,schmitt: Integer. Enables Schmitt Trigger on the input.
0: no, 1: yes.
- nvidia,low-power-mode: Integer. Valid values 0-3. 0 is least power, 3 is
most power. Controls the drive power or current. See "Low Power Mode"
or "LPMD1" and "LPMD0" in the Tegra TRM.
- nvidia,pull-down-strength: Integer. Controls drive strength. 0 is weakest.
The range of valid values depends on the pingroup. See "CAL_DRVDN" in the
Tegra TRM.
- nvidia,pull-up-strength: Integer. Controls drive strength. 0 is weakest.
The range of valid values depends on the pingroup. See "CAL_DRVUP" in the
Tegra TRM.
- nvidia,slew-rate-rising: Integer. Controls rising signal slew rate. 0 is
fastest. The range of valid values depends on the pingroup. See
"DRVDN_SLWR" in the Tegra TRM.
- nvidia,slew-rate-falling: Integer. Controls falling signal slew rate. 0 is
fastest. The range of valid values depends on the pingroup. See
"DRVUP_SLWF" in the Tegra TRM.
Note that many of these properties are only valid for certain specific pins
or groups. See the Tegra TRM and various pinmux spreadsheets for complete
details regarding which groups support which functionality. The Linux pinctrl
driver may also be a useful reference, since it consolidates, disambiguates,
and corrects data from all those sources.
Valid values for pin and group names are:
mux groups:
These all support nvidia,function, nvidia,tristate, and many support
nvidia,pull.
ata, atb, atc, atd, ate, cdev1, cdev2, crtp, csus, dap1, dap2, dap3, dap4,
ddc, dta, dtb, dtc, dtd, dte, dtf, gma, gmb, gmc, gmd, gme, gpu, gpu7,
gpv, hdint, i2cp, irrx, irtx, kbca, kbcb, kbcc, kbcd, kbce, kbcf, lcsn,
ld0, ld1, ld2, ld3, ld4, ld5, ld6, ld7, ld8, ld9, ld10, ld11, ld12, ld13,
ld14, ld15, ld16, ld17, ldc, ldi, lhp0, lhp1, lhp2, lhs, lm0, lm1, lpp,
lpw0, lpw1, lpw2, lsc0, lsc1, lsck, lsda, lsdi, lspi, lvp0, lvp1, lvs,
owc, pmc, pta, rm, sdb, sdc, sdd, sdio1, slxa, slxc, slxd, slxk, spdi,
spdo, spia, spib, spic, spid, spie, spif, spig, spih, uaa, uab, uac, uad,
uca, ucb, uda.
tristate groups:
These only support nvidia,pull.
ck32, ddrc, pmca, pmcb, pmcc, pmcd, pmce, xm2c, xm2d, ls, lc, ld17_0,
ld19_18, ld21_20, ld23_22.
drive groups:
With some exceptions, these support nvidia,high-speed-mode,
nvidia,schmitt, nvidia,low-power-mode, nvidia,pull-down-strength,
nvidia,pull-up-strength, nvidia,slew_rate-rising, nvidia,slew_rate-falling.
drive_ao1, drive_ao2, drive_at1, drive_at2, drive_cdev1, drive_cdev2,
drive_csus, drive_dap1, drive_dap2, drive_dap3, drive_dap4, drive_dbg,
drive_lcd1, drive_lcd2, drive_sdmmc2, drive_sdmmc3, drive_spi, drive_uaa,
drive_uab, drive_uart2, drive_uart3, drive_vi1, drive_vi2, drive_xm2a,
drive_xm2c, drive_xm2d, drive_xm2clk, drive_sdio1, drive_crt, drive_ddc,
drive_gma, drive_gmb, drive_gmc, drive_gmd, drive_gme, drive_owr,
drive_uda.
Example:
pinctrl@70000000 {
compatible = "nvidia,tegra20-pinmux";
reg = < 0x70000014 0x10 /* Tri-state registers */
0x70000080 0x20 /* Mux registers */
0x700000a0 0x14 /* Pull-up/down registers */
0x70000868 0xa8 >; /* Pad control registers */
};
Example board file extract:
pinctrl@70000000 {
sdio4_default: sdio4_default {
atb {
nvidia,pins = "atb", "gma", "gme";
nvidia,function = "sdio4";
nvidia,pull = <0>;
nvidia,tristate = <0>;
};
};
};
sdhci@c8000600 {
pinctrl-names = "default";
pinctrl-0 = <&sdio4_default>;
};
NVIDIA Tegra30 pinmux controller
The Tegra30 pinctrl binding is very similar to the Tegra20 pinctrl binding,
as described in nvidia,tegra20-pinmux.txt. In fact, this document assumes
that binding as a baseline, and only documents the differences between the
two bindings.
Required properties:
- compatible: "nvidia,tegra30-pinmux"
- reg: Should contain the register physical address and length for each of
the pad control and mux registers.
Tegra30 adds the following optional properties for pin configuration subnodes:
- nvidia,enable-input: Integer. Enable the pin's input path. 0: no, 1: yes.
- nvidia,open-drain: Integer. Enable open drain mode. 0: no, 1: yes.
- nvidia,lock: Integer. Lock the pin configuration against further changes
until reset. 0: no, 1: yes.
- nvidia,io-reset: Integer. Reset the IO path. 0: no, 1: yes.
As with Tegra20, see the Tegra TRM for complete details regarding which groups
support which functionality.
Valid values for pin and group names are:
per-pin mux groups:
These all support nvidia,function, nvidia,tristate, nvidia,pull,
nvidia,enable-input, nvidia,lock. Some support nvidia,open-drain,
nvidia,io-reset.
clk_32k_out_pa0, uart3_cts_n_pa1, dap2_fs_pa2, dap2_sclk_pa3,
dap2_din_pa4, dap2_dout_pa5, sdmmc3_clk_pa6, sdmmc3_cmd_pa7, gmi_a17_pb0,
gmi_a18_pb1, lcd_pwr0_pb2, lcd_pclk_pb3, sdmmc3_dat3_pb4, sdmmc3_dat2_pb5,
sdmmc3_dat1_pb6, sdmmc3_dat0_pb7, uart3_rts_n_pc0, lcd_pwr1_pc1,
uart2_txd_pc2, uart2_rxd_pc3, gen1_i2c_scl_pc4, gen1_i2c_sda_pc5,
lcd_pwr2_pc6, gmi_wp_n_pc7, sdmmc3_dat5_pd0, sdmmc3_dat4_pd1, lcd_dc1_pd2,
sdmmc3_dat6_pd3, sdmmc3_dat7_pd4, vi_d1_pd5, vi_vsync_pd6, vi_hsync_pd7,
lcd_d0_pe0, lcd_d1_pe1, lcd_d2_pe2, lcd_d3_pe3, lcd_d4_pe4, lcd_d5_pe5,
lcd_d6_pe6, lcd_d7_pe7, lcd_d8_pf0, lcd_d9_pf1, lcd_d10_pf2, lcd_d11_pf3,
lcd_d12_pf4, lcd_d13_pf5, lcd_d14_pf6, lcd_d15_pf7, gmi_ad0_pg0,
gmi_ad1_pg1, gmi_ad2_pg2, gmi_ad3_pg3, gmi_ad4_pg4, gmi_ad5_pg5,
gmi_ad6_pg6, gmi_ad7_pg7, gmi_ad8_ph0, gmi_ad9_ph1, gmi_ad10_ph2,
gmi_ad11_ph3, gmi_ad12_ph4, gmi_ad13_ph5, gmi_ad14_ph6, gmi_ad15_ph7,
gmi_wr_n_pi0, gmi_oe_n_pi1, gmi_dqs_pi2, gmi_cs6_n_pi3, gmi_rst_n_pi4,
gmi_iordy_pi5, gmi_cs7_n_pi6, gmi_wait_pi7, gmi_cs0_n_pj0, lcd_de_pj1,
gmi_cs1_n_pj2, lcd_hsync_pj3, lcd_vsync_pj4, uart2_cts_n_pj5,
uart2_rts_n_pj6, gmi_a16_pj7, gmi_adv_n_pk0, gmi_clk_pk1, gmi_cs4_n_pk2,
gmi_cs2_n_pk3, gmi_cs3_n_pk4, spdif_out_pk5, spdif_in_pk6, gmi_a19_pk7,
vi_d2_pl0, vi_d3_pl1, vi_d4_pl2, vi_d5_pl3, vi_d6_pl4, vi_d7_pl5,
vi_d8_pl6, vi_d9_pl7, lcd_d16_pm0, lcd_d17_pm1, lcd_d18_pm2, lcd_d19_pm3,
lcd_d20_pm4, lcd_d21_pm5, lcd_d22_pm6, lcd_d23_pm7, dap1_fs_pn0,
dap1_din_pn1, dap1_dout_pn2, dap1_sclk_pn3, lcd_cs0_n_pn4, lcd_sdout_pn5,
lcd_dc0_pn6, hdmi_int_pn7, ulpi_data7_po0, ulpi_data0_po1, ulpi_data1_po2,
ulpi_data2_po3, ulpi_data3_po4, ulpi_data4_po5, ulpi_data5_po6,
ulpi_data6_po7, dap3_fs_pp0, dap3_din_pp1, dap3_dout_pp2, dap3_sclk_pp3,
dap4_fs_pp4, dap4_din_pp5, dap4_dout_pp6, dap4_sclk_pp7, kb_col0_pq0,
kb_col1_pq1, kb_col2_pq2, kb_col3_pq3, kb_col4_pq4, kb_col5_pq5,
kb_col6_pq6, kb_col7_pq7, kb_row0_pr0, kb_row1_pr1, kb_row2_pr2,
kb_row3_pr3, kb_row4_pr4, kb_row5_pr5, kb_row6_pr6, kb_row7_pr7,
kb_row8_ps0, kb_row9_ps1, kb_row10_ps2, kb_row11_ps3, kb_row12_ps4,
kb_row13_ps5, kb_row14_ps6, kb_row15_ps7, vi_pclk_pt0, vi_mclk_pt1,
vi_d10_pt2, vi_d11_pt3, vi_d0_pt4, gen2_i2c_scl_pt5, gen2_i2c_sda_pt6,
sdmmc4_cmd_pt7, pu0, pu1, pu2, pu3, pu4, pu5, pu6, jtag_rtck_pu7, pv0,
pv1, pv2, pv3, ddc_scl_pv4, ddc_sda_pv5, crt_hsync_pv6, crt_vsync_pv7,
lcd_cs1_n_pw0, lcd_m1_pw1, spi2_cs1_n_pw2, spi2_cs2_n_pw3, clk1_out_pw4,
clk2_out_pw5, uart3_txd_pw6, uart3_rxd_pw7, spi2_mosi_px0, spi2_miso_px1,
spi2_sck_px2, spi2_cs0_n_px3, spi1_mosi_px4, spi1_sck_px5, spi1_cs0_n_px6,
spi1_miso_px7, ulpi_clk_py0, ulpi_dir_py1, ulpi_nxt_py2, ulpi_stp_py3,
sdmmc1_dat3_py4, sdmmc1_dat2_py5, sdmmc1_dat1_py6, sdmmc1_dat0_py7,
sdmmc1_clk_pz0, sdmmc1_cmd_pz1, lcd_sdin_pz2, lcd_wr_n_pz3, lcd_sck_pz4,
sys_clk_req_pz5, pwr_i2c_scl_pz6, pwr_i2c_sda_pz7, sdmmc4_dat0_paa0,
sdmmc4_dat1_paa1, sdmmc4_dat2_paa2, sdmmc4_dat3_paa3, sdmmc4_dat4_paa4,
sdmmc4_dat5_paa5, sdmmc4_dat6_paa6, sdmmc4_dat7_paa7, pbb0,
cam_i2c_scl_pbb1, cam_i2c_sda_pbb2, pbb3, pbb4, pbb5, pbb6, pbb7,
cam_mclk_pcc0, pcc1, pcc2, sdmmc4_rst_n_pcc3, sdmmc4_clk_pcc4,
clk2_req_pcc5, pex_l2_rst_n_pcc6, pex_l2_clkreq_n_pcc7,
pex_l0_prsnt_n_pdd0, pex_l0_rst_n_pdd1, pex_l0_clkreq_n_pdd2,
pex_wake_n_pdd3, pex_l1_prsnt_n_pdd4, pex_l1_rst_n_pdd5,
pex_l1_clkreq_n_pdd6, pex_l2_prsnt_n_pdd7, clk3_out_pee0, clk3_req_pee1,
clk1_req_pee2, hdmi_cec_pee3, clk_32k_in, core_pwr_req, cpu_pwr_req, owr,
pwr_int_n.
drive groups:
These all support nvidia,pull-down-strength, nvidia,pull-up-strength,
nvidia,slew_rate-rising, nvidia,slew_rate-falling. Most but not all
support nvidia,high-speed-mode, nvidia,schmitt, nvidia,low-power-mode.
ao1, ao2, at1, at2, at3, at4, at5, cdev1, cdev2, cec, crt, csus, dap1,
dap2, dap3, dap4, dbg, ddc, dev3, gma, gmb, gmc, gmd, gme, gmf, gmg,
gmh, gpv, lcd1, lcd2, owr, sdio1, sdio2, sdio3, spi, uaa, uab, uart2,
uart3, uda, vi1.
Example:
pinctrl@70000000 {
compatible = "nvidia,tegra30-pinmux";
reg = < 0x70000868 0xd0 /* Pad control registers */
0x70003000 0x3e0 >; /* Mux registers */
};
Example board file extract:
pinctrl@70000000 {
sdmmc4_default: pinmux {
sdmmc4_clk_pcc4 {
nvidia,pins = "sdmmc4_clk_pcc4",
"sdmmc4_rst_n_pcc3";
nvidia,function = "sdmmc4";
nvidia,pull = <0>;
nvidia,tristate = <0>;
};
sdmmc4_dat0_paa0 {
nvidia,pins = "sdmmc4_dat0_paa0",
"sdmmc4_dat1_paa1",
"sdmmc4_dat2_paa2",
"sdmmc4_dat3_paa3",
"sdmmc4_dat4_paa4",
"sdmmc4_dat5_paa5",
"sdmmc4_dat6_paa6",
"sdmmc4_dat7_paa7";
nvidia,function = "sdmmc4";
nvidia,pull = <2>;
nvidia,tristate = <0>;
};
};
};
sdhci@78000400 {
pinctrl-names = "default";
pinctrl-0 = <&sdmmc4_default>;
};
== Introduction ==
Hardware modules that control pin multiplexing or configuration parameters
such as pull-up/down, tri-state, drive-strength etc are designated as pin
controllers. Each pin controller must be represented as a node in device tree,
just like any other hardware module.
Hardware modules whose signals are affected by pin configuration are
designated client devices. Again, each client device must be represented as a
node in device tree, just like any other hardware module.
For a client device to operate correctly, certain pin controllers must
set up certain specific pin configurations. Some client devices need a
single static pin configuration, e.g. set up during initialization. Others
need to reconfigure pins at run-time, for example to tri-state pins when the
device is inactive. Hence, each client device can define a set of named
states. The number and names of those states is defined by the client device's
own binding.
The common pinctrl bindings defined in this file provide an infrastructure
for client device device tree nodes to map those state names to the pin
configuration used by those states.
Note that pin controllers themselves may also be client devices of themselves.
For example, a pin controller may set up its own "active" state when the
driver loads. This would allow representing a board's static pin configuration
in a single place, rather than splitting it across multiple client device
nodes. The decision to do this or not somewhat rests with the author of
individual board device tree files, and any requirements imposed by the
bindings for the individual client devices in use by that board, i.e. whether
they require certain specific named states for dynamic pin configuration.
== Pinctrl client devices ==
For each client device individually, every pin state is assigned an integer
ID. These numbers start at 0, and are contiguous. For each state ID, a unique
property exists to define the pin configuration. Each state may also be
assigned a name. When names are used, another property exists to map from
those names to the integer IDs.
Each client device's own binding determines the set of states the must be
defined in its device tree node, and whether to define the set of state
IDs that must be provided, or whether to define the set of state names that
must be provided.
Required properties:
pinctrl-0: List of phandles, each pointing at a pin configuration
node. These referenced pin configuration nodes must be child
nodes of the pin controller that they configure. Multiple
entries may exist in this list so that multiple pin
controllers may be configured, or so that a state may be built
from multiple nodes for a single pin controller, each
contributing part of the overall configuration. See the next
section of this document for details of the format of these
pin configuration nodes.
In some cases, it may be useful to define a state, but for it
to be empty. This may be required when a common IP block is
used in an SoC either without a pin controller, or where the
pin controller does not affect the HW module in question. If
the binding for that IP block requires certain pin states to
exist, they must still be defined, but may be left empty.
Optional properties:
pinctrl-1: List of phandles, each pointing at a pin configuration
node within a pin controller.
...
pinctrl-n: List of phandles, each pointing at a pin configuration
node within a pin controller.
pinctrl-names: The list of names to assign states. List entry 0 defines the
name for integer state ID 0, list entry 1 for state ID 1, and
so on.
For example:
/* For a client device requiring named states */
device {
pinctrl-names = "active", "idle";
pinctrl-0 = <&state_0_node_a>;
pinctrl-1 = <&state_1_node_a &state_1_node_b>;
};
/* For the same device if using state IDs */
device {
pinctrl-0 = <&state_0_node_a>;
pinctrl-1 = <&state_1_node_a &state_1_node_b>;
};
/*
* For an IP block whose binding supports pin configuration,
* but in use on an SoC that doesn't have any pin control hardware
*/
device {
pinctrl-names = "active", "idle";
pinctrl-0 = <>;
pinctrl-1 = <>;
};
== Pin controller devices ==
Pin controller devices should contain the pin configuration nodes that client
devices reference.
For example:
pincontroller {
... /* Standard DT properties for the device itself elided */
state_0_node_a {
...
};
state_1_node_a {
...
};
state_1_node_b {
...
};
}
The contents of each of those pin configuration child nodes is defined
entirely by the binding for the individual pin controller device. There
exists no common standard for this content.
The pin configuration nodes need not be direct children of the pin controller
device; they may be grandchildren, for example. Whether this is legal, and
whether there is any interaction between the child and intermediate parent
nodes, is again defined entirely by the binding for the individual pin
controller device.
NVIDIA Tegra 2 pinmux controller
Required properties:
- compatible : "nvidia,tegra20-pinmux"
...@@ -280,3 +280,7 @@ REGULATOR ...@@ -280,3 +280,7 @@ REGULATOR
CLOCK CLOCK
devm_clk_get() devm_clk_get()
devm_clk_put() devm_clk_put()
PINCTRL
devm_pinctrl_get()
devm_pinctrl_put()
...@@ -152,11 +152,9 @@ static const struct foo_group foo_groups[] = { ...@@ -152,11 +152,9 @@ static const struct foo_group foo_groups[] = {
}; };
static int foo_list_groups(struct pinctrl_dev *pctldev, unsigned selector) static int foo_get_groups_count(struct pinctrl_dev *pctldev)
{ {
if (selector >= ARRAY_SIZE(foo_groups)) return ARRAY_SIZE(foo_groups);
return -EINVAL;
return 0;
} }
static const char *foo_get_group_name(struct pinctrl_dev *pctldev, static const char *foo_get_group_name(struct pinctrl_dev *pctldev,
...@@ -175,7 +173,7 @@ static int foo_get_group_pins(struct pinctrl_dev *pctldev, unsigned selector, ...@@ -175,7 +173,7 @@ static int foo_get_group_pins(struct pinctrl_dev *pctldev, unsigned selector,
} }
static struct pinctrl_ops foo_pctrl_ops = { static struct pinctrl_ops foo_pctrl_ops = {
.list_groups = foo_list_groups, .get_groups_count = foo_get_groups_count,
.get_group_name = foo_get_group_name, .get_group_name = foo_get_group_name,
.get_group_pins = foo_get_group_pins, .get_group_pins = foo_get_group_pins,
}; };
...@@ -186,13 +184,12 @@ static struct pinctrl_desc foo_desc = { ...@@ -186,13 +184,12 @@ static struct pinctrl_desc foo_desc = {
.pctlops = &foo_pctrl_ops, .pctlops = &foo_pctrl_ops,
}; };
The pin control subsystem will call the .list_groups() function repeatedly The pin control subsystem will call the .get_groups_count() function to
beginning on 0 until it returns non-zero to determine legal selectors, then determine total number of legal selectors, then it will call the other functions
it will call the other functions to retrieve the name and pins of the group. to retrieve the name and pins of the group. Maintaining the data structure of
Maintaining the data structure of the groups is up to the driver, this is the groups is up to the driver, this is just a simple example - in practice you
just a simple example - in practice you may need more entries in your group may need more entries in your group structure, for example specific register
structure, for example specific register ranges associated with each group ranges associated with each group and so on.
and so on.
Pin configuration Pin configuration
...@@ -606,11 +603,9 @@ static const struct foo_group foo_groups[] = { ...@@ -606,11 +603,9 @@ static const struct foo_group foo_groups[] = {
}; };
static int foo_list_groups(struct pinctrl_dev *pctldev, unsigned selector) static int foo_get_groups_count(struct pinctrl_dev *pctldev)
{ {
if (selector >= ARRAY_SIZE(foo_groups)) return ARRAY_SIZE(foo_groups);
return -EINVAL;
return 0;
} }
static const char *foo_get_group_name(struct pinctrl_dev *pctldev, static const char *foo_get_group_name(struct pinctrl_dev *pctldev,
...@@ -629,7 +624,7 @@ static int foo_get_group_pins(struct pinctrl_dev *pctldev, unsigned selector, ...@@ -629,7 +624,7 @@ static int foo_get_group_pins(struct pinctrl_dev *pctldev, unsigned selector,
} }
static struct pinctrl_ops foo_pctrl_ops = { static struct pinctrl_ops foo_pctrl_ops = {
.list_groups = foo_list_groups, .get_groups_count = foo_get_groups_count,
.get_group_name = foo_get_group_name, .get_group_name = foo_get_group_name,
.get_group_pins = foo_get_group_pins, .get_group_pins = foo_get_group_pins,
}; };
...@@ -640,7 +635,7 @@ struct foo_pmx_func { ...@@ -640,7 +635,7 @@ struct foo_pmx_func {
const unsigned num_groups; const unsigned num_groups;
}; };
static const char * const spi0_groups[] = { "spi0_1_grp" }; static const char * const spi0_groups[] = { "spi0_0_grp", "spi0_1_grp" };
static const char * const i2c0_groups[] = { "i2c0_grp" }; static const char * const i2c0_groups[] = { "i2c0_grp" };
static const char * const mmc0_groups[] = { "mmc0_1_grp", "mmc0_2_grp", static const char * const mmc0_groups[] = { "mmc0_1_grp", "mmc0_2_grp",
"mmc0_3_grp" }; "mmc0_3_grp" };
...@@ -663,11 +658,9 @@ static const struct foo_pmx_func foo_functions[] = { ...@@ -663,11 +658,9 @@ static const struct foo_pmx_func foo_functions[] = {
}, },
}; };
int foo_list_funcs(struct pinctrl_dev *pctldev, unsigned selector) int foo_get_functions_count(struct pinctrl_dev *pctldev)
{ {
if (selector >= ARRAY_SIZE(foo_functions)) return ARRAY_SIZE(foo_functions);
return -EINVAL;
return 0;
} }
const char *foo_get_fname(struct pinctrl_dev *pctldev, unsigned selector) const char *foo_get_fname(struct pinctrl_dev *pctldev, unsigned selector)
...@@ -703,7 +696,7 @@ void foo_disable(struct pinctrl_dev *pctldev, unsigned selector, ...@@ -703,7 +696,7 @@ void foo_disable(struct pinctrl_dev *pctldev, unsigned selector,
} }
struct pinmux_ops foo_pmxops = { struct pinmux_ops foo_pmxops = {
.list_functions = foo_list_funcs, .get_functions_count = foo_get_functions_count,
.get_function_name = foo_get_fname, .get_function_name = foo_get_fname,
.get_function_groups = foo_get_groups, .get_function_groups = foo_get_groups,
.enable = foo_enable, .enable = foo_enable,
...@@ -786,7 +779,7 @@ and spi on the second function mapping: ...@@ -786,7 +779,7 @@ and spi on the second function mapping:
#include <linux/pinctrl/machine.h> #include <linux/pinctrl/machine.h>
static const struct pinctrl_map __initdata mapping[] = { static const struct pinctrl_map mapping[] __initconst = {
{ {
.dev_name = "foo-spi.0", .dev_name = "foo-spi.0",
.name = PINCTRL_STATE_DEFAULT, .name = PINCTRL_STATE_DEFAULT,
...@@ -952,13 +945,13 @@ case), we define a mapping like this: ...@@ -952,13 +945,13 @@ case), we define a mapping like this:
The result of grabbing this mapping from the device with something like The result of grabbing this mapping from the device with something like
this (see next paragraph): this (see next paragraph):
p = pinctrl_get(dev); p = devm_pinctrl_get(dev);
s = pinctrl_lookup_state(p, "8bit"); s = pinctrl_lookup_state(p, "8bit");
ret = pinctrl_select_state(p, s); ret = pinctrl_select_state(p, s);
or more simply: or more simply:
p = pinctrl_get_select(dev, "8bit"); p = devm_pinctrl_get_select(dev, "8bit");
Will be that you activate all the three bottom records in the mapping at Will be that you activate all the three bottom records in the mapping at
once. Since they share the same name, pin controller device, function and once. Since they share the same name, pin controller device, function and
...@@ -992,7 +985,7 @@ foo_probe() ...@@ -992,7 +985,7 @@ foo_probe()
/* Allocate a state holder named "foo" etc */ /* Allocate a state holder named "foo" etc */
struct foo_state *foo = ...; struct foo_state *foo = ...;
foo->p = pinctrl_get(&device); foo->p = devm_pinctrl_get(&device);
if (IS_ERR(foo->p)) { if (IS_ERR(foo->p)) {
/* FIXME: clean up "foo" here */ /* FIXME: clean up "foo" here */
return PTR_ERR(foo->p); return PTR_ERR(foo->p);
...@@ -1000,24 +993,17 @@ foo_probe() ...@@ -1000,24 +993,17 @@ foo_probe()
foo->s = pinctrl_lookup_state(foo->p, PINCTRL_STATE_DEFAULT); foo->s = pinctrl_lookup_state(foo->p, PINCTRL_STATE_DEFAULT);
if (IS_ERR(foo->s)) { if (IS_ERR(foo->s)) {
pinctrl_put(foo->p);
/* FIXME: clean up "foo" here */ /* FIXME: clean up "foo" here */
return PTR_ERR(s); return PTR_ERR(s);
} }
ret = pinctrl_select_state(foo->s); ret = pinctrl_select_state(foo->s);
if (ret < 0) { if (ret < 0) {
pinctrl_put(foo->p);
/* FIXME: clean up "foo" here */ /* FIXME: clean up "foo" here */
return ret; return ret;
} }
} }
foo_remove()
{
pinctrl_put(state->p);
}
This get/lookup/select/put sequence can just as well be handled by bus drivers This get/lookup/select/put sequence can just as well be handled by bus drivers
if you don't want each and every driver to handle it and you know the if you don't want each and every driver to handle it and you know the
arrangement on your bus. arrangement on your bus.
...@@ -1029,6 +1015,11 @@ The semantics of the pinctrl APIs are: ...@@ -1029,6 +1015,11 @@ The semantics of the pinctrl APIs are:
kernel memory to hold the pinmux state. All mapping table parsing or similar kernel memory to hold the pinmux state. All mapping table parsing or similar
slow operations take place within this API. slow operations take place within this API.
- devm_pinctrl_get() is a variant of pinctrl_get() that causes pinctrl_put()
to be called automatically on the retrieved pointer when the associated
device is removed. It is recommended to use this function over plain
pinctrl_get().
- pinctrl_lookup_state() is called in process context to obtain a handle to a - pinctrl_lookup_state() is called in process context to obtain a handle to a
specific state for a the client device. This operation may be slow too. specific state for a the client device. This operation may be slow too.
...@@ -1041,14 +1032,30 @@ The semantics of the pinctrl APIs are: ...@@ -1041,14 +1032,30 @@ The semantics of the pinctrl APIs are:
- pinctrl_put() frees all information associated with a pinctrl handle. - pinctrl_put() frees all information associated with a pinctrl handle.
- devm_pinctrl_put() is a variant of pinctrl_put() that may be used to
explicitly destroy a pinctrl object returned by devm_pinctrl_get().
However, use of this function will be rare, due to the automatic cleanup
that will occur even without calling it.
pinctrl_get() must be paired with a plain pinctrl_put().
pinctrl_get() may not be paired with devm_pinctrl_put().
devm_pinctrl_get() can optionally be paired with devm_pinctrl_put().
devm_pinctrl_get() may not be paired with plain pinctrl_put().
Usually the pin control core handled the get/put pair and call out to the Usually the pin control core handled the get/put pair and call out to the
device drivers bookkeeping operations, like checking available functions and device drivers bookkeeping operations, like checking available functions and
the associated pins, whereas the enable/disable pass on to the pin controller the associated pins, whereas the enable/disable pass on to the pin controller
driver which takes care of activating and/or deactivating the mux setting by driver which takes care of activating and/or deactivating the mux setting by
quickly poking some registers. quickly poking some registers.
The pins are allocated for your device when you issue the pinctrl_get() call, The pins are allocated for your device when you issue the devm_pinctrl_get()
after this you should be able to see this in the debugfs listing of all pins. call, after this you should be able to see this in the debugfs listing of all
pins.
NOTE: the pinctrl system will return -EPROBE_DEFER if it cannot find the
requested pinctrl handles, for example if the pinctrl driver has not yet
registered. Thus make sure that the error path in your driver gracefully
cleans up and is ready to retry the probing later in the startup process.
System pin control hogging System pin control hogging
...@@ -1094,13 +1101,13 @@ it, disables and releases it, and muxes it in on the pins defined by group B: ...@@ -1094,13 +1101,13 @@ it, disables and releases it, and muxes it in on the pins defined by group B:
#include <linux/pinctrl/consumer.h> #include <linux/pinctrl/consumer.h>
foo_switch() struct pinctrl *p;
{ struct pinctrl_state *s1, *s2;
struct pinctrl *p;
struct pinctrl_state *s1, *s2;
foo_probe()
{
/* Setup */ /* Setup */
p = pinctrl_get(&device); p = devm_pinctrl_get(&device);
if (IS_ERR(p)) if (IS_ERR(p))
... ...
...@@ -1111,7 +1118,10 @@ foo_switch() ...@@ -1111,7 +1118,10 @@ foo_switch()
s2 = pinctrl_lookup_state(foo->p, "pos-B"); s2 = pinctrl_lookup_state(foo->p, "pos-B");
if (IS_ERR(s2)) if (IS_ERR(s2))
... ...
}
foo_switch()
{
/* Enable on position A */ /* Enable on position A */
ret = pinctrl_select_state(s1); ret = pinctrl_select_state(s1);
if (ret < 0) if (ret < 0)
...@@ -1125,8 +1135,6 @@ foo_switch() ...@@ -1125,8 +1135,6 @@ foo_switch()
... ...
... ...
pinctrl_put(p);
} }
The above has to be done from process context. The above has to be done from process context.
...@@ -1260,3 +1260,44 @@ int of_alias_get_id(struct device_node *np, const char *stem) ...@@ -1260,3 +1260,44 @@ int of_alias_get_id(struct device_node *np, const char *stem)
return id; return id;
} }
EXPORT_SYMBOL_GPL(of_alias_get_id); EXPORT_SYMBOL_GPL(of_alias_get_id);
const __be32 *of_prop_next_u32(struct property *prop, const __be32 *cur,
u32 *pu)
{
const void *curv = cur;
if (!prop)
return NULL;
if (!cur) {
curv = prop->value;
goto out_val;
}
curv += sizeof(*cur);
if (curv >= prop->value + prop->length)
return NULL;
out_val:
*pu = be32_to_cpup(curv);
return curv;
}
EXPORT_SYMBOL_GPL(of_prop_next_u32);
const char *of_prop_next_string(struct property *prop, const char *cur)
{
const void *curv = cur;
if (!prop)
return NULL;
if (!cur)
return prop->value;
curv += strlen(cur) + 1;
if (curv >= prop->value + prop->length)
return NULL;
return curv;
}
EXPORT_SYMBOL_GPL(of_prop_next_string);
...@@ -4,7 +4,6 @@ ...@@ -4,7 +4,6 @@
config PINCTRL config PINCTRL
bool bool
depends on EXPERIMENTAL
if PINCTRL if PINCTRL
...@@ -27,6 +26,35 @@ config DEBUG_PINCTRL ...@@ -27,6 +26,35 @@ config DEBUG_PINCTRL
help help
Say Y here to add some extra checks and diagnostics to PINCTRL calls. Say Y here to add some extra checks and diagnostics to PINCTRL calls.
config PINCTRL_IMX
bool
select PINMUX
select PINCONF
config PINCTRL_IMX51
bool "IMX51 pinctrl driver"
depends on OF
depends on SOC_IMX51
select PINCTRL_IMX
help
Say Y here to enable the imx51 pinctrl driver
config PINCTRL_IMX53
bool "IMX53 pinctrl driver"
depends on OF
depends on SOC_IMX53
select PINCTRL_IMX
help
Say Y here to enable the imx53 pinctrl driver
config PINCTRL_IMX6Q
bool "IMX6Q pinctrl driver"
depends on OF
depends on SOC_IMX6Q
select PINCTRL_IMX
help
Say Y here to enable the imx6q pinctrl driver
config PINCTRL_PXA3xx config PINCTRL_PXA3xx
bool bool
select PINMUX select PINMUX
...@@ -37,6 +65,21 @@ config PINCTRL_MMP2 ...@@ -37,6 +65,21 @@ config PINCTRL_MMP2
select PINCTRL_PXA3xx select PINCTRL_PXA3xx
select PINCONF select PINCONF
config PINCTRL_MXS
bool
config PINCTRL_IMX23
bool
select PINMUX
select PINCONF
select PINCTRL_MXS
config PINCTRL_IMX28
bool
select PINMUX
select PINCONF
select PINCTRL_MXS
config PINCTRL_PXA168 config PINCTRL_PXA168
bool "PXA168 pin controller driver" bool "PXA168 pin controller driver"
depends on ARCH_MMP depends on ARCH_MMP
......
...@@ -5,9 +5,19 @@ ccflags-$(CONFIG_DEBUG_PINCTRL) += -DDEBUG ...@@ -5,9 +5,19 @@ ccflags-$(CONFIG_DEBUG_PINCTRL) += -DDEBUG
obj-$(CONFIG_PINCTRL) += core.o obj-$(CONFIG_PINCTRL) += core.o
obj-$(CONFIG_PINMUX) += pinmux.o obj-$(CONFIG_PINMUX) += pinmux.o
obj-$(CONFIG_PINCONF) += pinconf.o obj-$(CONFIG_PINCONF) += pinconf.o
ifeq ($(CONFIG_OF),y)
obj-$(CONFIG_PINCTRL) += devicetree.o
endif
obj-$(CONFIG_GENERIC_PINCONF) += pinconf-generic.o obj-$(CONFIG_GENERIC_PINCONF) += pinconf-generic.o
obj-$(CONFIG_PINCTRL_IMX) += pinctrl-imx.o
obj-$(CONFIG_PINCTRL_IMX51) += pinctrl-imx51.o
obj-$(CONFIG_PINCTRL_IMX53) += pinctrl-imx53.o
obj-$(CONFIG_PINCTRL_IMX6Q) += pinctrl-imx6q.o
obj-$(CONFIG_PINCTRL_PXA3xx) += pinctrl-pxa3xx.o obj-$(CONFIG_PINCTRL_PXA3xx) += pinctrl-pxa3xx.o
obj-$(CONFIG_PINCTRL_MMP2) += pinctrl-mmp2.o obj-$(CONFIG_PINCTRL_MMP2) += pinctrl-mmp2.o
obj-$(CONFIG_PINCTRL_MXS) += pinctrl-mxs.o
obj-$(CONFIG_PINCTRL_IMX23) += pinctrl-imx23.o
obj-$(CONFIG_PINCTRL_IMX28) += pinctrl-imx28.o
obj-$(CONFIG_PINCTRL_PXA168) += pinctrl-pxa168.o obj-$(CONFIG_PINCTRL_PXA168) += pinctrl-pxa168.o
obj-$(CONFIG_PINCTRL_PXA910) += pinctrl-pxa910.o obj-$(CONFIG_PINCTRL_PXA910) += pinctrl-pxa910.o
obj-$(CONFIG_PINCTRL_SIRF) += pinctrl-sirf.o obj-$(CONFIG_PINCTRL_SIRF) += pinctrl-sirf.o
......
...@@ -23,9 +23,11 @@ ...@@ -23,9 +23,11 @@
#include <linux/sysfs.h> #include <linux/sysfs.h>
#include <linux/debugfs.h> #include <linux/debugfs.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/pinctrl/consumer.h>
#include <linux/pinctrl/pinctrl.h> #include <linux/pinctrl/pinctrl.h>
#include <linux/pinctrl/machine.h> #include <linux/pinctrl/machine.h>
#include "core.h" #include "core.h"
#include "devicetree.h"
#include "pinmux.h" #include "pinmux.h"
#include "pinconf.h" #include "pinconf.h"
...@@ -41,11 +43,13 @@ struct pinctrl_maps { ...@@ -41,11 +43,13 @@ struct pinctrl_maps {
unsigned num_maps; unsigned num_maps;
}; };
static bool pinctrl_dummy_state;
/* Mutex taken by all entry points */ /* Mutex taken by all entry points */
DEFINE_MUTEX(pinctrl_mutex); DEFINE_MUTEX(pinctrl_mutex);
/* Global list of pin control devices (struct pinctrl_dev) */ /* Global list of pin control devices (struct pinctrl_dev) */
static LIST_HEAD(pinctrldev_list); LIST_HEAD(pinctrldev_list);
/* List of pin controller handles (struct pinctrl) */ /* List of pin controller handles (struct pinctrl) */
static LIST_HEAD(pinctrl_list); static LIST_HEAD(pinctrl_list);
...@@ -59,6 +63,19 @@ static LIST_HEAD(pinctrl_maps); ...@@ -59,6 +63,19 @@ static LIST_HEAD(pinctrl_maps);
_i_ < _maps_node_->num_maps; \ _i_ < _maps_node_->num_maps; \
i++, _map_ = &_maps_node_->maps[_i_]) i++, _map_ = &_maps_node_->maps[_i_])
/**
* pinctrl_provide_dummies() - indicate if pinctrl provides dummy state support
*
* Usually this function is called by platforms without pinctrl driver support
* but run with some shared drivers using pinctrl APIs.
* After calling this function, the pinctrl core will return successfully
* with creating a dummy state for the driver to keep going smoothly.
*/
void pinctrl_provide_dummies(void)
{
pinctrl_dummy_state = true;
}
const char *pinctrl_dev_get_name(struct pinctrl_dev *pctldev) const char *pinctrl_dev_get_name(struct pinctrl_dev *pctldev)
{ {
/* We're not allowed to register devices without name */ /* We're not allowed to register devices without name */
...@@ -123,6 +140,25 @@ int pin_get_from_name(struct pinctrl_dev *pctldev, const char *name) ...@@ -123,6 +140,25 @@ int pin_get_from_name(struct pinctrl_dev *pctldev, const char *name)
return -EINVAL; return -EINVAL;
} }
/**
* pin_get_name_from_id() - look up a pin name from a pin id
* @pctldev: the pin control device to lookup the pin on
* @name: the name of the pin to look up
*/
const char *pin_get_name(struct pinctrl_dev *pctldev, const unsigned pin)
{
const struct pin_desc *desc;
desc = pin_desc_get(pctldev, pin);
if (desc == NULL) {
dev_err(pctldev->dev, "failed to get pin(%d) name\n",
pin);
return NULL;
}
return desc->name;
}
/** /**
* pin_is_valid() - check if pin exists on controller * pin_is_valid() - check if pin exists on controller
* @pctldev: the pin control device to check the pin on * @pctldev: the pin control device to check the pin on
...@@ -255,7 +291,8 @@ pinctrl_match_gpio_range(struct pinctrl_dev *pctldev, unsigned gpio) ...@@ -255,7 +291,8 @@ pinctrl_match_gpio_range(struct pinctrl_dev *pctldev, unsigned gpio)
* *
* Find the pin controller handling a certain GPIO pin from the pinspace of * Find the pin controller handling a certain GPIO pin from the pinspace of
* the GPIO subsystem, return the device and the matching GPIO range. Returns * the GPIO subsystem, return the device and the matching GPIO range. Returns
* negative if the GPIO range could not be found in any device. * -EPROBE_DEFER if the GPIO range could not be found in any device since it
* may still have not been registered.
*/ */
static int pinctrl_get_device_gpio_range(unsigned gpio, static int pinctrl_get_device_gpio_range(unsigned gpio,
struct pinctrl_dev **outdev, struct pinctrl_dev **outdev,
...@@ -275,7 +312,7 @@ static int pinctrl_get_device_gpio_range(unsigned gpio, ...@@ -275,7 +312,7 @@ static int pinctrl_get_device_gpio_range(unsigned gpio,
} }
} }
return -EINVAL; return -EPROBE_DEFER;
} }
/** /**
...@@ -318,9 +355,10 @@ int pinctrl_get_group_selector(struct pinctrl_dev *pctldev, ...@@ -318,9 +355,10 @@ int pinctrl_get_group_selector(struct pinctrl_dev *pctldev,
const char *pin_group) const char *pin_group)
{ {
const struct pinctrl_ops *pctlops = pctldev->desc->pctlops; const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
unsigned ngroups = pctlops->get_groups_count(pctldev);
unsigned group_selector = 0; unsigned group_selector = 0;
while (pctlops->list_groups(pctldev, group_selector) >= 0) { while (group_selector < ngroups) {
const char *gname = pctlops->get_group_name(pctldev, const char *gname = pctlops->get_group_name(pctldev,
group_selector); group_selector);
if (!strcmp(gname, pin_group)) { if (!strcmp(gname, pin_group)) {
...@@ -360,7 +398,7 @@ int pinctrl_request_gpio(unsigned gpio) ...@@ -360,7 +398,7 @@ int pinctrl_request_gpio(unsigned gpio)
ret = pinctrl_get_device_gpio_range(gpio, &pctldev, &range); ret = pinctrl_get_device_gpio_range(gpio, &pctldev, &range);
if (ret) { if (ret) {
mutex_unlock(&pinctrl_mutex); mutex_unlock(&pinctrl_mutex);
return -EINVAL; return ret;
} }
/* Convert to the pin controllers number space */ /* Convert to the pin controllers number space */
...@@ -516,11 +554,14 @@ static int add_setting(struct pinctrl *p, struct pinctrl_map const *map) ...@@ -516,11 +554,14 @@ static int add_setting(struct pinctrl *p, struct pinctrl_map const *map)
setting->pctldev = get_pinctrl_dev_from_devname(map->ctrl_dev_name); setting->pctldev = get_pinctrl_dev_from_devname(map->ctrl_dev_name);
if (setting->pctldev == NULL) { if (setting->pctldev == NULL) {
dev_err(p->dev, "unknown pinctrl device %s in map entry", dev_info(p->dev, "unknown pinctrl device %s in map entry, deferring probe",
map->ctrl_dev_name); map->ctrl_dev_name);
kfree(setting); kfree(setting);
/* Eventually, this should trigger deferred probe */ /*
return -ENODEV; * OK let us guess that the driver is not there yet, and
* let's defer obtaining this pinctrl handle to later...
*/
return -EPROBE_DEFER;
} }
switch (map->type) { switch (map->type) {
...@@ -579,6 +620,13 @@ static struct pinctrl *create_pinctrl(struct device *dev) ...@@ -579,6 +620,13 @@ static struct pinctrl *create_pinctrl(struct device *dev)
} }
p->dev = dev; p->dev = dev;
INIT_LIST_HEAD(&p->states); INIT_LIST_HEAD(&p->states);
INIT_LIST_HEAD(&p->dt_maps);
ret = pinctrl_dt_to_map(p);
if (ret < 0) {
kfree(p);
return ERR_PTR(ret);
}
devname = dev_name(dev); devname = dev_name(dev);
...@@ -662,6 +710,8 @@ static void pinctrl_put_locked(struct pinctrl *p, bool inlist) ...@@ -662,6 +710,8 @@ static void pinctrl_put_locked(struct pinctrl *p, bool inlist)
kfree(state); kfree(state);
} }
pinctrl_dt_free_maps(p);
if (inlist) if (inlist)
list_del(&p->node); list_del(&p->node);
kfree(p); kfree(p);
...@@ -685,8 +735,18 @@ static struct pinctrl_state *pinctrl_lookup_state_locked(struct pinctrl *p, ...@@ -685,8 +735,18 @@ static struct pinctrl_state *pinctrl_lookup_state_locked(struct pinctrl *p,
struct pinctrl_state *state; struct pinctrl_state *state;
state = find_state(p, name); state = find_state(p, name);
if (!state) if (!state) {
if (pinctrl_dummy_state) {
/* create dummy state */
dev_dbg(p->dev, "using pinctrl dummy state (%s)\n",
name);
state = create_state(p, name);
if (IS_ERR(state))
return state;
} else {
return ERR_PTR(-ENODEV); return ERR_PTR(-ENODEV);
}
}
return state; return state;
} }
...@@ -787,15 +847,63 @@ int pinctrl_select_state(struct pinctrl *p, struct pinctrl_state *state) ...@@ -787,15 +847,63 @@ int pinctrl_select_state(struct pinctrl *p, struct pinctrl_state *state)
} }
EXPORT_SYMBOL_GPL(pinctrl_select_state); EXPORT_SYMBOL_GPL(pinctrl_select_state);
static void devm_pinctrl_release(struct device *dev, void *res)
{
pinctrl_put(*(struct pinctrl **)res);
}
/** /**
* pinctrl_register_mappings() - register a set of pin controller mappings * struct devm_pinctrl_get() - Resource managed pinctrl_get()
* @maps: the pincontrol mappings table to register. This should probably be * @dev: the device to obtain the handle for
* marked with __initdata so it can be discarded after boot. This *
* function will perform a shallow copy for the mapping entries. * If there is a need to explicitly destroy the returned struct pinctrl,
* @num_maps: the number of maps in the mapping table * devm_pinctrl_put() should be used, rather than plain pinctrl_put().
*/ */
int pinctrl_register_mappings(struct pinctrl_map const *maps, struct pinctrl *devm_pinctrl_get(struct device *dev)
unsigned num_maps) {
struct pinctrl **ptr, *p;
ptr = devres_alloc(devm_pinctrl_release, sizeof(*ptr), GFP_KERNEL);
if (!ptr)
return ERR_PTR(-ENOMEM);
p = pinctrl_get(dev);
if (!IS_ERR(p)) {
*ptr = p;
devres_add(dev, ptr);
} else {
devres_free(ptr);
}
return p;
}
EXPORT_SYMBOL_GPL(devm_pinctrl_get);
static int devm_pinctrl_match(struct device *dev, void *res, void *data)
{
struct pinctrl **p = res;
return *p == data;
}
/**
* devm_pinctrl_put() - Resource managed pinctrl_put()
* @p: the pinctrl handle to release
*
* Deallocate a struct pinctrl obtained via devm_pinctrl_get(). Normally
* this function will not need to be called and the resource management
* code will ensure that the resource is freed.
*/
void devm_pinctrl_put(struct pinctrl *p)
{
WARN_ON(devres_destroy(p->dev, devm_pinctrl_release,
devm_pinctrl_match, p));
pinctrl_put(p);
}
EXPORT_SYMBOL_GPL(devm_pinctrl_put);
int pinctrl_register_map(struct pinctrl_map const *maps, unsigned num_maps,
bool dup, bool locked)
{ {
int i, ret; int i, ret;
struct pinctrl_maps *maps_node; struct pinctrl_maps *maps_node;
...@@ -829,13 +937,13 @@ int pinctrl_register_mappings(struct pinctrl_map const *maps, ...@@ -829,13 +937,13 @@ int pinctrl_register_mappings(struct pinctrl_map const *maps,
case PIN_MAP_TYPE_MUX_GROUP: case PIN_MAP_TYPE_MUX_GROUP:
ret = pinmux_validate_map(&maps[i], i); ret = pinmux_validate_map(&maps[i], i);
if (ret < 0) if (ret < 0)
return 0; return ret;
break; break;
case PIN_MAP_TYPE_CONFIGS_PIN: case PIN_MAP_TYPE_CONFIGS_PIN:
case PIN_MAP_TYPE_CONFIGS_GROUP: case PIN_MAP_TYPE_CONFIGS_GROUP:
ret = pinconf_validate_map(&maps[i], i); ret = pinconf_validate_map(&maps[i], i);
if (ret < 0) if (ret < 0)
return 0; return ret;
break; break;
default: default:
pr_err("failed to register map %s (%d): invalid type given\n", pr_err("failed to register map %s (%d): invalid type given\n",
...@@ -851,20 +959,52 @@ int pinctrl_register_mappings(struct pinctrl_map const *maps, ...@@ -851,20 +959,52 @@ int pinctrl_register_mappings(struct pinctrl_map const *maps,
} }
maps_node->num_maps = num_maps; maps_node->num_maps = num_maps;
maps_node->maps = kmemdup(maps, sizeof(*maps) * num_maps, GFP_KERNEL); if (dup) {
maps_node->maps = kmemdup(maps, sizeof(*maps) * num_maps,
GFP_KERNEL);
if (!maps_node->maps) { if (!maps_node->maps) {
pr_err("failed to duplicate mapping table\n"); pr_err("failed to duplicate mapping table\n");
kfree(maps_node); kfree(maps_node);
return -ENOMEM; return -ENOMEM;
} }
} else {
maps_node->maps = maps;
}
if (!locked)
mutex_lock(&pinctrl_mutex); mutex_lock(&pinctrl_mutex);
list_add_tail(&maps_node->node, &pinctrl_maps); list_add_tail(&maps_node->node, &pinctrl_maps);
if (!locked)
mutex_unlock(&pinctrl_mutex); mutex_unlock(&pinctrl_mutex);
return 0; return 0;
} }
/**
* pinctrl_register_mappings() - register a set of pin controller mappings
* @maps: the pincontrol mappings table to register. This should probably be
* marked with __initdata so it can be discarded after boot. This
* function will perform a shallow copy for the mapping entries.
* @num_maps: the number of maps in the mapping table
*/
int pinctrl_register_mappings(struct pinctrl_map const *maps,
unsigned num_maps)
{
return pinctrl_register_map(maps, num_maps, true, false);
}
void pinctrl_unregister_map(struct pinctrl_map const *map)
{
struct pinctrl_maps *maps_node;
list_for_each_entry(maps_node, &pinctrl_maps, node) {
if (maps_node->maps == map) {
list_del(&maps_node->node);
return;
}
}
}
#ifdef CONFIG_DEBUG_FS #ifdef CONFIG_DEBUG_FS
static int pinctrl_pins_show(struct seq_file *s, void *what) static int pinctrl_pins_show(struct seq_file *s, void *what)
...@@ -906,15 +1046,17 @@ static int pinctrl_groups_show(struct seq_file *s, void *what) ...@@ -906,15 +1046,17 @@ static int pinctrl_groups_show(struct seq_file *s, void *what)
{ {
struct pinctrl_dev *pctldev = s->private; struct pinctrl_dev *pctldev = s->private;
const struct pinctrl_ops *ops = pctldev->desc->pctlops; const struct pinctrl_ops *ops = pctldev->desc->pctlops;
unsigned selector = 0; unsigned ngroups, selector = 0;
ngroups = ops->get_groups_count(pctldev);
mutex_lock(&pinctrl_mutex); mutex_lock(&pinctrl_mutex);
seq_puts(s, "registered pin groups:\n"); seq_puts(s, "registered pin groups:\n");
while (ops->list_groups(pctldev, selector) >= 0) { while (selector < ngroups) {
const unsigned *pins; const unsigned *pins;
unsigned num_pins; unsigned num_pins;
const char *gname = ops->get_group_name(pctldev, selector); const char *gname = ops->get_group_name(pctldev, selector);
const char *pname;
int ret; int ret;
int i; int i;
...@@ -924,10 +1066,14 @@ static int pinctrl_groups_show(struct seq_file *s, void *what) ...@@ -924,10 +1066,14 @@ static int pinctrl_groups_show(struct seq_file *s, void *what)
seq_printf(s, "%s [ERROR GETTING PINS]\n", seq_printf(s, "%s [ERROR GETTING PINS]\n",
gname); gname);
else { else {
seq_printf(s, "group: %s, pins = [ ", gname); seq_printf(s, "group: %s\n", gname);
for (i = 0; i < num_pins; i++) for (i = 0; i < num_pins; i++) {
seq_printf(s, "%d ", pins[i]); pname = pin_get_name(pctldev, pins[i]);
seq_puts(s, "]\n"); if (WARN_ON(!pname))
return -EINVAL;
seq_printf(s, "pin %d (%s)\n", pins[i], pname);
}
seq_puts(s, "\n");
} }
selector++; selector++;
} }
...@@ -1226,11 +1372,14 @@ static int pinctrl_check_ops(struct pinctrl_dev *pctldev) ...@@ -1226,11 +1372,14 @@ static int pinctrl_check_ops(struct pinctrl_dev *pctldev)
const struct pinctrl_ops *ops = pctldev->desc->pctlops; const struct pinctrl_ops *ops = pctldev->desc->pctlops;
if (!ops || if (!ops ||
!ops->list_groups || !ops->get_groups_count ||
!ops->get_group_name || !ops->get_group_name ||
!ops->get_group_pins) !ops->get_group_pins)
return -EINVAL; return -EINVAL;
if (ops->dt_node_to_map && !ops->dt_free_map)
return -EINVAL;
return 0; return 0;
} }
...@@ -1268,37 +1417,29 @@ struct pinctrl_dev *pinctrl_register(struct pinctrl_desc *pctldesc, ...@@ -1268,37 +1417,29 @@ struct pinctrl_dev *pinctrl_register(struct pinctrl_desc *pctldesc,
/* check core ops for sanity */ /* check core ops for sanity */
ret = pinctrl_check_ops(pctldev); ret = pinctrl_check_ops(pctldev);
if (ret) { if (ret) {
pr_err("%s pinctrl ops lacks necessary functions\n", dev_err(dev, "pinctrl ops lacks necessary functions\n");
pctldesc->name);
goto out_err; goto out_err;
} }
/* If we're implementing pinmuxing, check the ops for sanity */ /* If we're implementing pinmuxing, check the ops for sanity */
if (pctldesc->pmxops) { if (pctldesc->pmxops) {
ret = pinmux_check_ops(pctldev); ret = pinmux_check_ops(pctldev);
if (ret) { if (ret)
pr_err("%s pinmux ops lacks necessary functions\n",
pctldesc->name);
goto out_err; goto out_err;
} }
}
/* If we're implementing pinconfig, check the ops for sanity */ /* If we're implementing pinconfig, check the ops for sanity */
if (pctldesc->confops) { if (pctldesc->confops) {
ret = pinconf_check_ops(pctldev); ret = pinconf_check_ops(pctldev);
if (ret) { if (ret)
pr_err("%s pin config ops lacks necessary functions\n",
pctldesc->name);
goto out_err; goto out_err;
} }
}
/* Register all the pins */ /* Register all the pins */
pr_debug("try to register %d pins on %s...\n", dev_dbg(dev, "try to register %d pins ...\n", pctldesc->npins);
pctldesc->npins, pctldesc->name);
ret = pinctrl_register_pins(pctldev, pctldesc->pins, pctldesc->npins); ret = pinctrl_register_pins(pctldev, pctldesc->pins, pctldesc->npins);
if (ret) { if (ret) {
pr_err("error during pin registration\n"); dev_err(dev, "error during pin registration\n");
pinctrl_free_pindescs(pctldev, pctldesc->pins, pinctrl_free_pindescs(pctldev, pctldesc->pins,
pctldesc->npins); pctldesc->npins);
goto out_err; goto out_err;
...@@ -1313,8 +1454,15 @@ struct pinctrl_dev *pinctrl_register(struct pinctrl_desc *pctldesc, ...@@ -1313,8 +1454,15 @@ struct pinctrl_dev *pinctrl_register(struct pinctrl_desc *pctldesc,
struct pinctrl_state *s = struct pinctrl_state *s =
pinctrl_lookup_state_locked(pctldev->p, pinctrl_lookup_state_locked(pctldev->p,
PINCTRL_STATE_DEFAULT); PINCTRL_STATE_DEFAULT);
if (!IS_ERR(s)) if (IS_ERR(s)) {
pinctrl_select_state_locked(pctldev->p, s); dev_dbg(dev, "failed to lookup the default state\n");
} else {
ret = pinctrl_select_state_locked(pctldev->p, s);
if (ret) {
dev_err(dev,
"failed to select default state\n");
}
}
} }
mutex_unlock(&pinctrl_mutex); mutex_unlock(&pinctrl_mutex);
......
...@@ -52,12 +52,15 @@ struct pinctrl_dev { ...@@ -52,12 +52,15 @@ struct pinctrl_dev {
* @dev: the device using this pin control handle * @dev: the device using this pin control handle
* @states: a list of states for this device * @states: a list of states for this device
* @state: the current state * @state: the current state
* @dt_maps: the mapping table chunks dynamically parsed from device tree for
* this device, if any
*/ */
struct pinctrl { struct pinctrl {
struct list_head node; struct list_head node;
struct device *dev; struct device *dev;
struct list_head states; struct list_head states;
struct pinctrl_state *state; struct pinctrl_state *state;
struct list_head dt_maps;
}; };
/** /**
...@@ -100,7 +103,8 @@ struct pinctrl_setting_configs { ...@@ -100,7 +103,8 @@ struct pinctrl_setting_configs {
* struct pinctrl_setting - an individual mux or config setting * struct pinctrl_setting - an individual mux or config setting
* @node: list node for struct pinctrl_settings's @settings field * @node: list node for struct pinctrl_settings's @settings field
* @type: the type of setting * @type: the type of setting
* @pctldev: pin control device handling to be programmed * @pctldev: pin control device handling to be programmed. Not used for
* PIN_MAP_TYPE_DUMMY_STATE.
* @data: Data specific to the setting type * @data: Data specific to the setting type
*/ */
struct pinctrl_setting { struct pinctrl_setting {
...@@ -144,6 +148,7 @@ struct pin_desc { ...@@ -144,6 +148,7 @@ struct pin_desc {
struct pinctrl_dev *get_pinctrl_dev_from_devname(const char *dev_name); struct pinctrl_dev *get_pinctrl_dev_from_devname(const char *dev_name);
int pin_get_from_name(struct pinctrl_dev *pctldev, const char *name); int pin_get_from_name(struct pinctrl_dev *pctldev, const char *name);
const char *pin_get_name(struct pinctrl_dev *pctldev, const unsigned pin);
int pinctrl_get_group_selector(struct pinctrl_dev *pctldev, int pinctrl_get_group_selector(struct pinctrl_dev *pctldev,
const char *pin_group); const char *pin_group);
...@@ -153,4 +158,9 @@ static inline struct pin_desc *pin_desc_get(struct pinctrl_dev *pctldev, ...@@ -153,4 +158,9 @@ static inline struct pin_desc *pin_desc_get(struct pinctrl_dev *pctldev,
return radix_tree_lookup(&pctldev->pin_desc_tree, pin); return radix_tree_lookup(&pctldev->pin_desc_tree, pin);
} }
int pinctrl_register_map(struct pinctrl_map const *maps, unsigned num_maps,
bool dup, bool locked);
void pinctrl_unregister_map(struct pinctrl_map const *map);
extern struct mutex pinctrl_mutex; extern struct mutex pinctrl_mutex;
extern struct list_head pinctrldev_list;
/*
* Device tree integration for the pin control subsystem
*
* Copyright (C) 2012 NVIDIA CORPORATION. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/device.h>
#include <linux/of.h>
#include <linux/pinctrl/pinctrl.h>
#include <linux/slab.h>
#include "core.h"
#include "devicetree.h"
/**
* struct pinctrl_dt_map - mapping table chunk parsed from device tree
* @node: list node for struct pinctrl's @dt_maps field
* @pctldev: the pin controller that allocated this struct, and will free it
* @maps: the mapping table entries
*/
struct pinctrl_dt_map {
struct list_head node;
struct pinctrl_dev *pctldev;
struct pinctrl_map *map;
unsigned num_maps;
};
static void dt_free_map(struct pinctrl_dev *pctldev,
struct pinctrl_map *map, unsigned num_maps)
{
if (pctldev) {
struct pinctrl_ops *ops = pctldev->desc->pctlops;
ops->dt_free_map(pctldev, map, num_maps);
} else {
/* There is no pctldev for PIN_MAP_TYPE_DUMMY_STATE */
kfree(map);
}
}
void pinctrl_dt_free_maps(struct pinctrl *p)
{
struct pinctrl_dt_map *dt_map, *n1;
list_for_each_entry_safe(dt_map, n1, &p->dt_maps, node) {
pinctrl_unregister_map(dt_map->map);
list_del(&dt_map->node);
dt_free_map(dt_map->pctldev, dt_map->map,
dt_map->num_maps);
kfree(dt_map);
}
of_node_put(p->dev->of_node);
}
static int dt_remember_or_free_map(struct pinctrl *p, const char *statename,
struct pinctrl_dev *pctldev,
struct pinctrl_map *map, unsigned num_maps)
{
int i;
struct pinctrl_dt_map *dt_map;
/* Initialize common mapping table entry fields */
for (i = 0; i < num_maps; i++) {
map[i].dev_name = dev_name(p->dev);
map[i].name = statename;
if (pctldev)
map[i].ctrl_dev_name = dev_name(pctldev->dev);
}
/* Remember the converted mapping table entries */
dt_map = kzalloc(sizeof(*dt_map), GFP_KERNEL);
if (!dt_map) {
dev_err(p->dev, "failed to alloc struct pinctrl_dt_map\n");
dt_free_map(pctldev, map, num_maps);
return -ENOMEM;
}
dt_map->pctldev = pctldev;
dt_map->map = map;
dt_map->num_maps = num_maps;
list_add_tail(&dt_map->node, &p->dt_maps);
return pinctrl_register_map(map, num_maps, false, true);
}
static struct pinctrl_dev *find_pinctrl_by_of_node(struct device_node *np)
{
struct pinctrl_dev *pctldev;
list_for_each_entry(pctldev, &pinctrldev_list, node)
if (pctldev->dev->of_node == np)
return pctldev;
return NULL;
}
static int dt_to_map_one_config(struct pinctrl *p, const char *statename,
struct device_node *np_config)
{
struct device_node *np_pctldev;
struct pinctrl_dev *pctldev;
struct pinctrl_ops *ops;
int ret;
struct pinctrl_map *map;
unsigned num_maps;
/* Find the pin controller containing np_config */
np_pctldev = of_node_get(np_config);
for (;;) {
np_pctldev = of_get_next_parent(np_pctldev);
if (!np_pctldev || of_node_is_root(np_pctldev)) {
dev_info(p->dev, "could not find pctldev for node %s, deferring probe\n",
np_config->full_name);
of_node_put(np_pctldev);
/* OK let's just assume this will appear later then */
return -EPROBE_DEFER;
}
pctldev = find_pinctrl_by_of_node(np_pctldev);
if (pctldev)
break;
}
of_node_put(np_pctldev);
/*
* Call pinctrl driver to parse device tree node, and
* generate mapping table entries
*/
ops = pctldev->desc->pctlops;
if (!ops->dt_node_to_map) {
dev_err(p->dev, "pctldev %s doesn't support DT\n",
dev_name(pctldev->dev));
return -ENODEV;
}
ret = ops->dt_node_to_map(pctldev, np_config, &map, &num_maps);
if (ret < 0)
return ret;
/* Stash the mapping table chunk away for later use */
return dt_remember_or_free_map(p, statename, pctldev, map, num_maps);
}
static int dt_remember_dummy_state(struct pinctrl *p, const char *statename)
{
struct pinctrl_map *map;
map = kzalloc(sizeof(*map), GFP_KERNEL);
if (!map) {
dev_err(p->dev, "failed to alloc struct pinctrl_map\n");
return -ENOMEM;
}
/* There is no pctldev for PIN_MAP_TYPE_DUMMY_STATE */
map->type = PIN_MAP_TYPE_DUMMY_STATE;
return dt_remember_or_free_map(p, statename, NULL, map, 1);
}
int pinctrl_dt_to_map(struct pinctrl *p)
{
struct device_node *np = p->dev->of_node;
int state, ret;
char *propname;
struct property *prop;
const char *statename;
const __be32 *list;
int size, config;
phandle phandle;
struct device_node *np_config;
/* CONFIG_OF enabled, p->dev not instantiated from DT */
if (!np) {
dev_dbg(p->dev, "no of_node; not parsing pinctrl DT\n");
return 0;
}
/* We may store pointers to property names within the node */
of_node_get(np);
/* For each defined state ID */
for (state = 0; ; state++) {
/* Retrieve the pinctrl-* property */
propname = kasprintf(GFP_KERNEL, "pinctrl-%d", state);
prop = of_find_property(np, propname, &size);
kfree(propname);
if (!prop)
break;
list = prop->value;
size /= sizeof(*list);
/* Determine whether pinctrl-names property names the state */
ret = of_property_read_string_index(np, "pinctrl-names",
state, &statename);
/*
* If not, statename is just the integer state ID. But rather
* than dynamically allocate it and have to free it later,
* just point part way into the property name for the string.
*/
if (ret < 0) {
/* strlen("pinctrl-") == 8 */
statename = prop->name + 8;
}
/* For every referenced pin configuration node in it */
for (config = 0; config < size; config++) {
phandle = be32_to_cpup(list++);
/* Look up the pin configuration node */
np_config = of_find_node_by_phandle(phandle);
if (!np_config) {
dev_err(p->dev,
"prop %s index %i invalid phandle\n",
prop->name, config);
ret = -EINVAL;
goto err;
}
/* Parse the node */
ret = dt_to_map_one_config(p, statename, np_config);
of_node_put(np_config);
if (ret < 0)
goto err;
}
/* No entries in DT? Generate a dummy state table entry */
if (!size) {
ret = dt_remember_dummy_state(p, statename);
if (ret < 0)
goto err;
}
}
return 0;
err:
pinctrl_dt_free_maps(p);
return ret;
}
/*
* Internal interface to pinctrl device tree integration
*
* Copyright (C) 2012 NVIDIA CORPORATION. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifdef CONFIG_OF
void pinctrl_dt_free_maps(struct pinctrl *p);
int pinctrl_dt_to_map(struct pinctrl *p);
#else
static inline int pinctrl_dt_to_map(struct pinctrl *p)
{
return 0;
}
static inline void pinctrl_dt_free_maps(struct pinctrl *p)
{
}
#endif
...@@ -28,11 +28,17 @@ int pinconf_check_ops(struct pinctrl_dev *pctldev) ...@@ -28,11 +28,17 @@ int pinconf_check_ops(struct pinctrl_dev *pctldev)
const struct pinconf_ops *ops = pctldev->desc->confops; const struct pinconf_ops *ops = pctldev->desc->confops;
/* We must be able to read out pin status */ /* We must be able to read out pin status */
if (!ops->pin_config_get && !ops->pin_config_group_get) if (!ops->pin_config_get && !ops->pin_config_group_get) {
dev_err(pctldev->dev,
"pinconf must be able to read out pin status\n");
return -EINVAL; return -EINVAL;
}
/* We have to be able to config the pins in SOME way */ /* We have to be able to config the pins in SOME way */
if (!ops->pin_config_set && !ops->pin_config_group_set) if (!ops->pin_config_set && !ops->pin_config_group_set) {
dev_err(pctldev->dev,
"pinconf has to be able to set a pins config\n");
return -EINVAL; return -EINVAL;
}
return 0; return 0;
} }
...@@ -44,9 +50,9 @@ int pinconf_validate_map(struct pinctrl_map const *map, int i) ...@@ -44,9 +50,9 @@ int pinconf_validate_map(struct pinctrl_map const *map, int i)
return -EINVAL; return -EINVAL;
} }
if (map->data.configs.num_configs && if (!map->data.configs.num_configs ||
!map->data.configs.configs) { !map->data.configs.configs) {
pr_err("failed to register map %s (%d): no configs ptr given\n", pr_err("failed to register map %s (%d): no configs given\n",
map->name, i); map->name, i);
return -EINVAL; return -EINVAL;
} }
...@@ -379,8 +385,16 @@ int pinconf_apply_setting(struct pinctrl_setting const *setting) ...@@ -379,8 +385,16 @@ int pinconf_apply_setting(struct pinctrl_setting const *setting)
void pinconf_show_map(struct seq_file *s, struct pinctrl_map const *map) void pinconf_show_map(struct seq_file *s, struct pinctrl_map const *map)
{ {
struct pinctrl_dev *pctldev;
const struct pinconf_ops *confops;
int i; int i;
pctldev = get_pinctrl_dev_from_devname(map->ctrl_dev_name);
if (pctldev)
confops = pctldev->desc->confops;
else
confops = NULL;
switch (map->type) { switch (map->type) {
case PIN_MAP_TYPE_CONFIGS_PIN: case PIN_MAP_TYPE_CONFIGS_PIN:
seq_printf(s, "pin "); seq_printf(s, "pin ");
...@@ -394,8 +408,15 @@ void pinconf_show_map(struct seq_file *s, struct pinctrl_map const *map) ...@@ -394,8 +408,15 @@ void pinconf_show_map(struct seq_file *s, struct pinctrl_map const *map)
seq_printf(s, "%s\n", map->data.configs.group_or_pin); seq_printf(s, "%s\n", map->data.configs.group_or_pin);
for (i = 0; i < map->data.configs.num_configs; i++) for (i = 0; i < map->data.configs.num_configs; i++) {
seq_printf(s, "config %08lx\n", map->data.configs.configs[i]); seq_printf(s, "config ");
if (confops && confops->pin_config_config_dbg_show)
confops->pin_config_config_dbg_show(pctldev, s,
map->data.configs.configs[i]);
else
seq_printf(s, "%08lx", map->data.configs.configs[i]);
seq_printf(s, "\n");
}
} }
void pinconf_show_setting(struct seq_file *s, void pinconf_show_setting(struct seq_file *s,
...@@ -403,6 +424,7 @@ void pinconf_show_setting(struct seq_file *s, ...@@ -403,6 +424,7 @@ void pinconf_show_setting(struct seq_file *s,
{ {
struct pinctrl_dev *pctldev = setting->pctldev; struct pinctrl_dev *pctldev = setting->pctldev;
const struct pinctrl_ops *pctlops = pctldev->desc->pctlops; const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
const struct pinconf_ops *confops = pctldev->desc->confops;
struct pin_desc *desc; struct pin_desc *desc;
int i; int i;
...@@ -428,8 +450,15 @@ void pinconf_show_setting(struct seq_file *s, ...@@ -428,8 +450,15 @@ void pinconf_show_setting(struct seq_file *s,
* FIXME: We should really get the pin controler to dump the config * FIXME: We should really get the pin controler to dump the config
* values, so they can be decoded to something meaningful. * values, so they can be decoded to something meaningful.
*/ */
for (i = 0; i < setting->data.configs.num_configs; i++) for (i = 0; i < setting->data.configs.num_configs; i++) {
seq_printf(s, " %08lx", setting->data.configs.configs[i]); seq_printf(s, " ");
if (confops && confops->pin_config_config_dbg_show)
confops->pin_config_config_dbg_show(pctldev, s,
setting->data.configs.configs[i]);
else
seq_printf(s, "%08lx",
setting->data.configs.configs[i]);
}
seq_printf(s, "\n"); seq_printf(s, "\n");
} }
...@@ -448,10 +477,14 @@ static void pinconf_dump_pin(struct pinctrl_dev *pctldev, ...@@ -448,10 +477,14 @@ static void pinconf_dump_pin(struct pinctrl_dev *pctldev,
static int pinconf_pins_show(struct seq_file *s, void *what) static int pinconf_pins_show(struct seq_file *s, void *what)
{ {
struct pinctrl_dev *pctldev = s->private; struct pinctrl_dev *pctldev = s->private;
const struct pinconf_ops *ops = pctldev->desc->confops;
unsigned i, pin; unsigned i, pin;
if (!ops || !ops->pin_config_get)
return 0;
seq_puts(s, "Pin config settings per pin\n"); seq_puts(s, "Pin config settings per pin\n");
seq_puts(s, "Format: pin (name): pinmux setting array\n"); seq_puts(s, "Format: pin (name): configs\n");
mutex_lock(&pinctrl_mutex); mutex_lock(&pinctrl_mutex);
...@@ -495,17 +528,18 @@ static int pinconf_groups_show(struct seq_file *s, void *what) ...@@ -495,17 +528,18 @@ static int pinconf_groups_show(struct seq_file *s, void *what)
struct pinctrl_dev *pctldev = s->private; struct pinctrl_dev *pctldev = s->private;
const struct pinctrl_ops *pctlops = pctldev->desc->pctlops; const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
const struct pinconf_ops *ops = pctldev->desc->confops; const struct pinconf_ops *ops = pctldev->desc->confops;
unsigned ngroups = pctlops->get_groups_count(pctldev);
unsigned selector = 0; unsigned selector = 0;
if (!ops || !ops->pin_config_group_get) if (!ops || !ops->pin_config_group_get)
return 0; return 0;
seq_puts(s, "Pin config settings per pin group\n"); seq_puts(s, "Pin config settings per pin group\n");
seq_puts(s, "Format: group (name): pinmux setting array\n"); seq_puts(s, "Format: group (name): configs\n");
mutex_lock(&pinctrl_mutex); mutex_lock(&pinctrl_mutex);
while (pctlops->list_groups(pctldev, selector) >= 0) { while (selector < ngroups) {
const char *gname = pctlops->get_group_name(pctldev, selector); const char *gname = pctlops->get_group_name(pctldev, selector);
seq_printf(s, "%u (%s):", selector, gname); seq_printf(s, "%u (%s):", selector, gname);
......
...@@ -19,11 +19,6 @@ int pinconf_map_to_setting(struct pinctrl_map const *map, ...@@ -19,11 +19,6 @@ int pinconf_map_to_setting(struct pinctrl_map const *map,
struct pinctrl_setting *setting); struct pinctrl_setting *setting);
void pinconf_free_setting(struct pinctrl_setting const *setting); void pinconf_free_setting(struct pinctrl_setting const *setting);
int pinconf_apply_setting(struct pinctrl_setting const *setting); int pinconf_apply_setting(struct pinctrl_setting const *setting);
void pinconf_show_map(struct seq_file *s, struct pinctrl_map const *map);
void pinconf_show_setting(struct seq_file *s,
struct pinctrl_setting const *setting);
void pinconf_init_device_debugfs(struct dentry *devroot,
struct pinctrl_dev *pctldev);
/* /*
* You will only be interested in these if you're using PINCONF * You will only be interested in these if you're using PINCONF
...@@ -61,6 +56,18 @@ static inline int pinconf_apply_setting(struct pinctrl_setting const *setting) ...@@ -61,6 +56,18 @@ static inline int pinconf_apply_setting(struct pinctrl_setting const *setting)
return 0; return 0;
} }
#endif
#if defined(CONFIG_PINCONF) && defined(CONFIG_DEBUG_FS)
void pinconf_show_map(struct seq_file *s, struct pinctrl_map const *map);
void pinconf_show_setting(struct seq_file *s,
struct pinctrl_setting const *setting);
void pinconf_init_device_debugfs(struct dentry *devroot,
struct pinctrl_dev *pctldev);
#else
static inline void pinconf_show_map(struct seq_file *s, static inline void pinconf_show_map(struct seq_file *s,
struct pinctrl_map const *map) struct pinctrl_map const *map)
{ {
......
...@@ -174,7 +174,7 @@ struct u300_gpio_confdata { ...@@ -174,7 +174,7 @@ struct u300_gpio_confdata {
/* Initial configuration */ /* Initial configuration */
static const struct __initdata u300_gpio_confdata static const struct __initconst u300_gpio_confdata
bs335_gpio_config[BS335_GPIO_NUM_PORTS][U300_GPIO_PINS_PER_PORT] = { bs335_gpio_config[BS335_GPIO_NUM_PORTS][U300_GPIO_PINS_PER_PORT] = {
/* Port 0, pins 0-7 */ /* Port 0, pins 0-7 */
{ {
...@@ -255,7 +255,7 @@ bs335_gpio_config[BS335_GPIO_NUM_PORTS][U300_GPIO_PINS_PER_PORT] = { ...@@ -255,7 +255,7 @@ bs335_gpio_config[BS335_GPIO_NUM_PORTS][U300_GPIO_PINS_PER_PORT] = {
} }
}; };
static const struct __initdata u300_gpio_confdata static const struct __initconst u300_gpio_confdata
bs365_gpio_config[BS365_GPIO_NUM_PORTS][U300_GPIO_PINS_PER_PORT] = { bs365_gpio_config[BS365_GPIO_NUM_PORTS][U300_GPIO_PINS_PER_PORT] = {
/* Port 0, pins 0-7 */ /* Port 0, pins 0-7 */
{ {
......
/*
* Core driver for the imx pin controller
*
* Copyright (C) 2012 Freescale Semiconductor, Inc.
* Copyright (C) 2012 Linaro Ltd.
*
* Author: Dong Aisheng <dong.aisheng@linaro.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*/
#include <linux/err.h>
#include <linux/init.h>
#include <linux/io.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/of_device.h>
#include <linux/pinctrl/machine.h>
#include <linux/pinctrl/pinconf.h>
#include <linux/pinctrl/pinctrl.h>
#include <linux/pinctrl/pinmux.h>
#include <linux/slab.h>
#include "core.h"
#include "pinctrl-imx.h"
#define IMX_PMX_DUMP(info, p, m, c, n) \
{ \
int i, j; \
printk("Format: Pin Mux Config\n"); \
for (i = 0; i < n; i++) { \
j = p[i]; \
printk("%s %d 0x%lx\n", \
info->pins[j].name, \
m[i], c[i]); \
} \
}
/* The bits in CONFIG cell defined in binding doc*/
#define IMX_NO_PAD_CTL 0x80000000 /* no pin config need */
#define IMX_PAD_SION 0x40000000 /* set SION */
/**
* @dev: a pointer back to containing device
* @base: the offset to the controller in virtual memory
*/
struct imx_pinctrl {
struct device *dev;
struct pinctrl_dev *pctl;
void __iomem *base;
const struct imx_pinctrl_soc_info *info;
};
static const struct imx_pin_reg *imx_find_pin_reg(
const struct imx_pinctrl_soc_info *info,
unsigned pin, bool is_mux, unsigned mux)
{
const struct imx_pin_reg *pin_reg = NULL;
int i;
for (i = 0; i < info->npin_regs; i++) {
pin_reg = &info->pin_regs[i];
if (pin_reg->pid != pin)
continue;
if (!is_mux)
break;
else if (pin_reg->mux_mode == (mux & IMX_MUX_MASK))
break;
}
if (!pin_reg) {
dev_err(info->dev, "Pin(%s): unable to find pin reg map\n",
info->pins[pin].name);
return NULL;
}
return pin_reg;
}
static const inline struct imx_pin_group *imx_pinctrl_find_group_by_name(
const struct imx_pinctrl_soc_info *info,
const char *name)
{
const struct imx_pin_group *grp = NULL;
int i;
for (i = 0; i < info->ngroups; i++) {
if (!strcmp(info->groups[i].name, name)) {
grp = &info->groups[i];
break;
}
}
return grp;
}
static int imx_get_groups_count(struct pinctrl_dev *pctldev)
{
struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
const struct imx_pinctrl_soc_info *info = ipctl->info;
return info->ngroups;
}
static const char *imx_get_group_name(struct pinctrl_dev *pctldev,
unsigned selector)
{
struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
const struct imx_pinctrl_soc_info *info = ipctl->info;
return info->groups[selector].name;
}
static int imx_get_group_pins(struct pinctrl_dev *pctldev, unsigned selector,
const unsigned **pins,
unsigned *npins)
{
struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
const struct imx_pinctrl_soc_info *info = ipctl->info;
if (selector >= info->ngroups)
return -EINVAL;
*pins = info->groups[selector].pins;
*npins = info->groups[selector].npins;
return 0;
}
static void imx_pin_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *s,
unsigned offset)
{
seq_printf(s, "%s", dev_name(pctldev->dev));
}
static int imx_dt_node_to_map(struct pinctrl_dev *pctldev,
struct device_node *np,
struct pinctrl_map **map, unsigned *num_maps)
{
struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
const struct imx_pinctrl_soc_info *info = ipctl->info;
const struct imx_pin_group *grp;
struct pinctrl_map *new_map;
struct device_node *parent;
int map_num = 1;
int i;
/*
* first find the group of this node and check if we need create
* config maps for pins
*/
grp = imx_pinctrl_find_group_by_name(info, np->name);
if (!grp) {
dev_err(info->dev, "unable to find group for node %s\n",
np->name);
return -EINVAL;
}
for (i = 0; i < grp->npins; i++) {
if (!(grp->configs[i] & IMX_NO_PAD_CTL))
map_num++;
}
new_map = kmalloc(sizeof(struct pinctrl_map) * map_num, GFP_KERNEL);
if (!new_map)
return -ENOMEM;
*map = new_map;
*num_maps = map_num;
/* create mux map */
parent = of_get_parent(np);
if (!parent)
return -EINVAL;
new_map[0].type = PIN_MAP_TYPE_MUX_GROUP;
new_map[0].data.mux.function = parent->name;
new_map[0].data.mux.group = np->name;
of_node_put(parent);
/* create config map */
new_map++;
for (i = 0; i < grp->npins; i++) {
if (!(grp->configs[i] & IMX_NO_PAD_CTL)) {
new_map[i].type = PIN_MAP_TYPE_CONFIGS_PIN;
new_map[i].data.configs.group_or_pin =
pin_get_name(pctldev, grp->pins[i]);
new_map[i].data.configs.configs = &grp->configs[i];
new_map[i].data.configs.num_configs = 1;
}
}
dev_dbg(pctldev->dev, "maps: function %s group %s num %d\n",
new_map->data.mux.function, new_map->data.mux.group, map_num);
return 0;
}
static void imx_dt_free_map(struct pinctrl_dev *pctldev,
struct pinctrl_map *map, unsigned num_maps)
{
int i;
for (i = 0; i < num_maps; i++)
kfree(map);
}
static struct pinctrl_ops imx_pctrl_ops = {
.get_groups_count = imx_get_groups_count,
.get_group_name = imx_get_group_name,
.get_group_pins = imx_get_group_pins,
.pin_dbg_show = imx_pin_dbg_show,
.dt_node_to_map = imx_dt_node_to_map,
.dt_free_map = imx_dt_free_map,
};
static int imx_pmx_enable(struct pinctrl_dev *pctldev, unsigned selector,
unsigned group)
{
struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
const struct imx_pinctrl_soc_info *info = ipctl->info;
const struct imx_pin_reg *pin_reg;
const unsigned *pins, *mux;
unsigned int npins, pin_id;
int i;
/*
* Configure the mux mode for each pin in the group for a specific
* function.
*/
pins = info->groups[group].pins;
npins = info->groups[group].npins;
mux = info->groups[group].mux_mode;
WARN_ON(!pins || !npins || !mux);
dev_dbg(ipctl->dev, "enable function %s group %s\n",
info->functions[selector].name, info->groups[group].name);
for (i = 0; i < npins; i++) {
pin_id = pins[i];
pin_reg = imx_find_pin_reg(info, pin_id, 1, mux[i]);
if (!pin_reg)
return -EINVAL;
if (!pin_reg->mux_reg) {
dev_err(ipctl->dev, "Pin(%s) does not support mux function\n",
info->pins[pin_id].name);
return -EINVAL;
}
writel(mux[i], ipctl->base + pin_reg->mux_reg);
dev_dbg(ipctl->dev, "write: offset 0x%x val 0x%x\n",
pin_reg->mux_reg, mux[i]);
/* some pins also need select input setting, set it if found */
if (pin_reg->input_reg) {
writel(pin_reg->input_val, ipctl->base + pin_reg->input_reg);
dev_dbg(ipctl->dev,
"==>select_input: offset 0x%x val 0x%x\n",
pin_reg->input_reg, pin_reg->input_val);
}
}
return 0;
}
static int imx_pmx_get_funcs_count(struct pinctrl_dev *pctldev)
{
struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
const struct imx_pinctrl_soc_info *info = ipctl->info;
return info->nfunctions;
}
static const char *imx_pmx_get_func_name(struct pinctrl_dev *pctldev,
unsigned selector)
{
struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
const struct imx_pinctrl_soc_info *info = ipctl->info;
return info->functions[selector].name;
}
static int imx_pmx_get_groups(struct pinctrl_dev *pctldev, unsigned selector,
const char * const **groups,
unsigned * const num_groups)
{
struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
const struct imx_pinctrl_soc_info *info = ipctl->info;
*groups = info->functions[selector].groups;
*num_groups = info->functions[selector].num_groups;
return 0;
}
static struct pinmux_ops imx_pmx_ops = {
.get_functions_count = imx_pmx_get_funcs_count,
.get_function_name = imx_pmx_get_func_name,
.get_function_groups = imx_pmx_get_groups,
.enable = imx_pmx_enable,
};
static int imx_pinconf_get(struct pinctrl_dev *pctldev,
unsigned pin_id, unsigned long *config)
{
struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
const struct imx_pinctrl_soc_info *info = ipctl->info;
const struct imx_pin_reg *pin_reg;
pin_reg = imx_find_pin_reg(info, pin_id, 0, 0);
if (!pin_reg)
return -EINVAL;
if (!pin_reg->conf_reg) {
dev_err(info->dev, "Pin(%s) does not support config function\n",
info->pins[pin_id].name);
return -EINVAL;
}
*config = readl(ipctl->base + pin_reg->conf_reg);
return 0;
}
static int imx_pinconf_set(struct pinctrl_dev *pctldev,
unsigned pin_id, unsigned long config)
{
struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
const struct imx_pinctrl_soc_info *info = ipctl->info;
const struct imx_pin_reg *pin_reg;
pin_reg = imx_find_pin_reg(info, pin_id, 0, 0);
if (!pin_reg)
return -EINVAL;
if (!pin_reg->conf_reg) {
dev_err(info->dev, "Pin(%s) does not support config function\n",
info->pins[pin_id].name);
return -EINVAL;
}
dev_dbg(ipctl->dev, "pinconf set pin %s\n",
info->pins[pin_id].name);
writel(config, ipctl->base + pin_reg->conf_reg);
dev_dbg(ipctl->dev, "write: offset 0x%x val 0x%lx\n",
pin_reg->conf_reg, config);
return 0;
}
static void imx_pinconf_dbg_show(struct pinctrl_dev *pctldev,
struct seq_file *s, unsigned pin_id)
{
struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
const struct imx_pinctrl_soc_info *info = ipctl->info;
const struct imx_pin_reg *pin_reg;
unsigned long config;
pin_reg = imx_find_pin_reg(info, pin_id, 0, 0);
if (!pin_reg || !pin_reg->conf_reg) {
seq_printf(s, "N/A");
return;
}
config = readl(ipctl->base + pin_reg->conf_reg);
seq_printf(s, "0x%lx", config);
}
static void imx_pinconf_group_dbg_show(struct pinctrl_dev *pctldev,
struct seq_file *s, unsigned group)
{
struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
const struct imx_pinctrl_soc_info *info = ipctl->info;
struct imx_pin_group *grp;
unsigned long config;
const char *name;
int i, ret;
if (group > info->ngroups)
return;
seq_printf(s, "\n");
grp = &info->groups[group];
for (i = 0; i < grp->npins; i++) {
name = pin_get_name(pctldev, grp->pins[i]);
ret = imx_pinconf_get(pctldev, grp->pins[i], &config);
if (ret)
return;
seq_printf(s, "%s: 0x%lx", name, config);
}
}
struct pinconf_ops imx_pinconf_ops = {
.pin_config_get = imx_pinconf_get,
.pin_config_set = imx_pinconf_set,
.pin_config_dbg_show = imx_pinconf_dbg_show,
.pin_config_group_dbg_show = imx_pinconf_group_dbg_show,
};
static struct pinctrl_desc imx_pinctrl_desc = {
.pctlops = &imx_pctrl_ops,
.pmxops = &imx_pmx_ops,
.confops = &imx_pinconf_ops,
.owner = THIS_MODULE,
};
/* decode pin id and mux from pin function id got from device tree*/
static int imx_pinctrl_get_pin_id_and_mux(const struct imx_pinctrl_soc_info *info,
unsigned int pin_func_id, unsigned int *pin_id,
unsigned int *mux)
{
if (pin_func_id > info->npin_regs)
return -EINVAL;
*pin_id = info->pin_regs[pin_func_id].pid;
*mux = info->pin_regs[pin_func_id].mux_mode;
return 0;
}
static int __devinit imx_pinctrl_parse_groups(struct device_node *np,
struct imx_pin_group *grp,
struct imx_pinctrl_soc_info *info,
u32 index)
{
unsigned int pin_func_id;
int ret, size;
const const __be32 *list;
int i, j;
u32 config;
dev_dbg(info->dev, "group(%d): %s\n", index, np->name);
/* Initialise group */
grp->name = np->name;
/*
* the binding format is fsl,pins = <PIN_FUNC_ID CONFIG ...>,
* do sanity check and calculate pins number
*/
list = of_get_property(np, "fsl,pins", &size);
/* we do not check return since it's safe node passed down */
size /= sizeof(*list);
if (!size || size % 2) {
dev_err(info->dev, "wrong pins number or pins and configs should be pairs\n");
return -EINVAL;
}
grp->npins = size / 2;
grp->pins = devm_kzalloc(info->dev, grp->npins * sizeof(unsigned int),
GFP_KERNEL);
grp->mux_mode = devm_kzalloc(info->dev, grp->npins * sizeof(unsigned int),
GFP_KERNEL);
grp->configs = devm_kzalloc(info->dev, grp->npins * sizeof(unsigned long),
GFP_KERNEL);
for (i = 0, j = 0; i < size; i += 2, j++) {
pin_func_id = be32_to_cpu(*list++);
ret = imx_pinctrl_get_pin_id_and_mux(info, pin_func_id,
&grp->pins[j], &grp->mux_mode[j]);
if (ret) {
dev_err(info->dev, "get invalid pin function id\n");
return -EINVAL;
}
/* SION bit is in mux register */
config = be32_to_cpu(*list++);
if (config & IMX_PAD_SION)
grp->mux_mode[j] |= IOMUXC_CONFIG_SION;
grp->configs[j] = config & ~IMX_PAD_SION;
}
#ifdef DEBUG
IMX_PMX_DUMP(info, grp->pins, grp->mux_mode, grp->configs, grp->npins);
#endif
return 0;
}
static int __devinit imx_pinctrl_parse_functions(struct device_node *np,
struct imx_pinctrl_soc_info *info, u32 index)
{
struct device_node *child;
struct imx_pmx_func *func;
struct imx_pin_group *grp;
int ret;
static u32 grp_index;
u32 i = 0;
dev_dbg(info->dev, "parse function(%d): %s\n", index, np->name);
func = &info->functions[index];
/* Initialise function */
func->name = np->name;
func->num_groups = of_get_child_count(np);
if (func->num_groups <= 0) {
dev_err(info->dev, "no groups defined\n");
return -EINVAL;
}
func->groups = devm_kzalloc(info->dev,
func->num_groups * sizeof(char *), GFP_KERNEL);
for_each_child_of_node(np, child) {
func->groups[i] = child->name;
grp = &info->groups[grp_index++];
ret = imx_pinctrl_parse_groups(child, grp, info, i++);
if (ret)
return ret;
}
return 0;
}
static int __devinit imx_pinctrl_probe_dt(struct platform_device *pdev,
struct imx_pinctrl_soc_info *info)
{
struct device_node *np = pdev->dev.of_node;
struct device_node *child;
int ret;
u32 nfuncs = 0;
u32 i = 0;
if (!np)
return -ENODEV;
nfuncs = of_get_child_count(np);
if (nfuncs <= 0) {
dev_err(&pdev->dev, "no functions defined\n");
return -EINVAL;
}
info->nfunctions = nfuncs;
info->functions = devm_kzalloc(&pdev->dev, nfuncs * sizeof(struct imx_pmx_func),
GFP_KERNEL);
if (!info->functions)
return -ENOMEM;
info->ngroups = 0;
for_each_child_of_node(np, child)
info->ngroups += of_get_child_count(child);
info->groups = devm_kzalloc(&pdev->dev, info->ngroups * sizeof(struct imx_pin_group),
GFP_KERNEL);
if (!info->groups)
return -ENOMEM;
for_each_child_of_node(np, child) {
ret = imx_pinctrl_parse_functions(child, info, i++);
if (ret) {
dev_err(&pdev->dev, "failed to parse function\n");
return ret;
}
}
return 0;
}
int __devinit imx_pinctrl_probe(struct platform_device *pdev,
struct imx_pinctrl_soc_info *info)
{
struct imx_pinctrl *ipctl;
struct resource *res;
int ret;
if (!info || !info->pins || !info->npins
|| !info->pin_regs || !info->npin_regs) {
dev_err(&pdev->dev, "wrong pinctrl info\n");
return -EINVAL;
}
info->dev = &pdev->dev;
/* Create state holders etc for this driver */
ipctl = devm_kzalloc(&pdev->dev, sizeof(*ipctl), GFP_KERNEL);
if (!ipctl)
return -ENOMEM;
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!res)
return -ENOENT;
ipctl->base = devm_request_and_ioremap(&pdev->dev, res);
if (!ipctl->base)
return -EBUSY;
imx_pinctrl_desc.name = dev_name(&pdev->dev);
imx_pinctrl_desc.pins = info->pins;
imx_pinctrl_desc.npins = info->npins;
ret = imx_pinctrl_probe_dt(pdev, info);
if (ret) {
dev_err(&pdev->dev, "fail to probe dt properties\n");
return ret;
}
ipctl->info = info;
ipctl->dev = info->dev;
platform_set_drvdata(pdev, ipctl);
ipctl->pctl = pinctrl_register(&imx_pinctrl_desc, &pdev->dev, ipctl);
if (!ipctl->pctl) {
dev_err(&pdev->dev, "could not register IMX pinctrl driver\n");
return -EINVAL;
}
dev_info(&pdev->dev, "initialized IMX pinctrl driver\n");
return 0;
}
int __devexit imx_pinctrl_remove(struct platform_device *pdev)
{
struct imx_pinctrl *ipctl = platform_get_drvdata(pdev);
pinctrl_unregister(ipctl->pctl);
return 0;
}
/*
* IMX pinmux core definitions
*
* Copyright (C) 2012 Freescale Semiconductor, Inc.
* Copyright (C) 2012 Linaro Ltd.
*
* Author: Dong Aisheng <dong.aisheng@linaro.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*/
#ifndef __DRIVERS_PINCTRL_IMX_H
#define __DRIVERS_PINCTRL_IMX_H
struct platform_device;
/**
* struct imx_pin_group - describes an IMX pin group
* @name: the name of this specific pin group
* @pins: an array of discrete physical pins used in this group, taken
* from the driver-local pin enumeration space
* @npins: the number of pins in this group array, i.e. the number of
* elements in .pins so we can iterate over that array
* @mux_mode: the mux mode for each pin in this group. The size of this
* array is the same as pins.
* @configs: the config for each pin in this group. The size of this
* array is the same as pins.
*/
struct imx_pin_group {
const char *name;
unsigned int *pins;
unsigned npins;
unsigned int *mux_mode;
unsigned long *configs;
};
/**
* struct imx_pmx_func - describes IMX pinmux functions
* @name: the name of this specific function
* @groups: corresponding pin groups
* @num_groups: the number of groups
*/
struct imx_pmx_func {
const char *name;
const char **groups;
unsigned num_groups;
};
/**
* struct imx_pin_reg - describe a pin reg map
* The last 3 members are used for select input setting
* @pid: pin id
* @mux_reg: mux register offset
* @conf_reg: config register offset
* @mux_mode: mux mode
* @input_reg: select input register offset for this mux if any
* 0 if no select input setting needed.
* @input_val: the value set to select input register
*/
struct imx_pin_reg {
u16 pid;
u16 mux_reg;
u16 conf_reg;
u8 mux_mode;
u16 input_reg;
u8 input_val;
};
struct imx_pinctrl_soc_info {
struct device *dev;
const struct pinctrl_pin_desc *pins;
unsigned int npins;
const struct imx_pin_reg *pin_regs;
unsigned int npin_regs;
struct imx_pin_group *groups;
unsigned int ngroups;
struct imx_pmx_func *functions;
unsigned int nfunctions;
};
#define NO_MUX 0x0
#define NO_PAD 0x0
#define IMX_PIN_REG(id, conf, mux, mode, input, val) \
{ \
.pid = id, \
.conf_reg = conf, \
.mux_reg = mux, \
.mux_mode = mode, \
.input_reg = input, \
.input_val = val, \
}
#define IMX_PINCTRL_PIN(pin) PINCTRL_PIN(pin, #pin)
#define PAD_CTL_MASK(len) ((1 << len) - 1)
#define IMX_MUX_MASK 0x7
#define IOMUXC_CONFIG_SION (0x1 << 4)
int imx_pinctrl_probe(struct platform_device *pdev,
struct imx_pinctrl_soc_info *info);
int imx_pinctrl_remove(struct platform_device *pdev);
#endif /* __DRIVERS_PINCTRL_IMX_H */
/*
* Copyright 2012 Freescale Semiconductor, Inc.
*
* The code contained herein is licensed under the GNU General Public
* License. You may obtain a copy of the GNU General Public License
* Version 2 or later at the following locations:
*
* http://www.opensource.org/licenses/gpl-license.html
* http://www.gnu.org/copyleft/gpl.html
*/
#include <linux/init.h>
#include <linux/module.h>
#include <linux/of_device.h>
#include <linux/pinctrl/pinctrl.h>
#include "pinctrl-mxs.h"
enum imx23_pin_enum {
GPMI_D00 = PINID(0, 0),
GPMI_D01 = PINID(0, 1),
GPMI_D02 = PINID(0, 2),
GPMI_D03 = PINID(0, 3),
GPMI_D04 = PINID(0, 4),
GPMI_D05 = PINID(0, 5),
GPMI_D06 = PINID(0, 6),
GPMI_D07 = PINID(0, 7),
GPMI_D08 = PINID(0, 8),
GPMI_D09 = PINID(0, 9),
GPMI_D10 = PINID(0, 10),
GPMI_D11 = PINID(0, 11),
GPMI_D12 = PINID(0, 12),
GPMI_D13 = PINID(0, 13),
GPMI_D14 = PINID(0, 14),
GPMI_D15 = PINID(0, 15),
GPMI_CLE = PINID(0, 16),
GPMI_ALE = PINID(0, 17),
GPMI_CE2N = PINID(0, 18),
GPMI_RDY0 = PINID(0, 19),
GPMI_RDY1 = PINID(0, 20),
GPMI_RDY2 = PINID(0, 21),
GPMI_RDY3 = PINID(0, 22),
GPMI_WPN = PINID(0, 23),
GPMI_WRN = PINID(0, 24),
GPMI_RDN = PINID(0, 25),
AUART1_CTS = PINID(0, 26),
AUART1_RTS = PINID(0, 27),
AUART1_RX = PINID(0, 28),
AUART1_TX = PINID(0, 29),
I2C_SCL = PINID(0, 30),
I2C_SDA = PINID(0, 31),
LCD_D00 = PINID(1, 0),
LCD_D01 = PINID(1, 1),
LCD_D02 = PINID(1, 2),
LCD_D03 = PINID(1, 3),
LCD_D04 = PINID(1, 4),
LCD_D05 = PINID(1, 5),
LCD_D06 = PINID(1, 6),
LCD_D07 = PINID(1, 7),
LCD_D08 = PINID(1, 8),
LCD_D09 = PINID(1, 9),
LCD_D10 = PINID(1, 10),
LCD_D11 = PINID(1, 11),
LCD_D12 = PINID(1, 12),
LCD_D13 = PINID(1, 13),
LCD_D14 = PINID(1, 14),
LCD_D15 = PINID(1, 15),
LCD_D16 = PINID(1, 16),
LCD_D17 = PINID(1, 17),
LCD_RESET = PINID(1, 18),
LCD_RS = PINID(1, 19),
LCD_WR = PINID(1, 20),
LCD_CS = PINID(1, 21),
LCD_DOTCK = PINID(1, 22),
LCD_ENABLE = PINID(1, 23),
LCD_HSYNC = PINID(1, 24),
LCD_VSYNC = PINID(1, 25),
PWM0 = PINID(1, 26),
PWM1 = PINID(1, 27),
PWM2 = PINID(1, 28),
PWM3 = PINID(1, 29),
PWM4 = PINID(1, 30),
SSP1_CMD = PINID(2, 0),
SSP1_DETECT = PINID(2, 1),
SSP1_DATA0 = PINID(2, 2),
SSP1_DATA1 = PINID(2, 3),
SSP1_DATA2 = PINID(2, 4),
SSP1_DATA3 = PINID(2, 5),
SSP1_SCK = PINID(2, 6),
ROTARYA = PINID(2, 7),
ROTARYB = PINID(2, 8),
EMI_A00 = PINID(2, 9),
EMI_A01 = PINID(2, 10),
EMI_A02 = PINID(2, 11),
EMI_A03 = PINID(2, 12),
EMI_A04 = PINID(2, 13),
EMI_A05 = PINID(2, 14),
EMI_A06 = PINID(2, 15),
EMI_A07 = PINID(2, 16),
EMI_A08 = PINID(2, 17),
EMI_A09 = PINID(2, 18),
EMI_A10 = PINID(2, 19),
EMI_A11 = PINID(2, 20),
EMI_A12 = PINID(2, 21),
EMI_BA0 = PINID(2, 22),
EMI_BA1 = PINID(2, 23),
EMI_CASN = PINID(2, 24),
EMI_CE0N = PINID(2, 25),
EMI_CE1N = PINID(2, 26),
GPMI_CE1N = PINID(2, 27),
GPMI_CE0N = PINID(2, 28),
EMI_CKE = PINID(2, 29),
EMI_RASN = PINID(2, 30),
EMI_WEN = PINID(2, 31),
EMI_D00 = PINID(3, 0),
EMI_D01 = PINID(3, 1),
EMI_D02 = PINID(3, 2),
EMI_D03 = PINID(3, 3),
EMI_D04 = PINID(3, 4),
EMI_D05 = PINID(3, 5),
EMI_D06 = PINID(3, 6),
EMI_D07 = PINID(3, 7),
EMI_D08 = PINID(3, 8),
EMI_D09 = PINID(3, 9),
EMI_D10 = PINID(3, 10),
EMI_D11 = PINID(3, 11),
EMI_D12 = PINID(3, 12),
EMI_D13 = PINID(3, 13),
EMI_D14 = PINID(3, 14),
EMI_D15 = PINID(3, 15),
EMI_DQM0 = PINID(3, 16),
EMI_DQM1 = PINID(3, 17),
EMI_DQS0 = PINID(3, 18),
EMI_DQS1 = PINID(3, 19),
EMI_CLK = PINID(3, 20),
EMI_CLKN = PINID(3, 21),
};
static const struct pinctrl_pin_desc imx23_pins[] = {
MXS_PINCTRL_PIN(GPMI_D00),
MXS_PINCTRL_PIN(GPMI_D01),
MXS_PINCTRL_PIN(GPMI_D02),
MXS_PINCTRL_PIN(GPMI_D03),
MXS_PINCTRL_PIN(GPMI_D04),
MXS_PINCTRL_PIN(GPMI_D05),
MXS_PINCTRL_PIN(GPMI_D06),
MXS_PINCTRL_PIN(GPMI_D07),
MXS_PINCTRL_PIN(GPMI_D08),
MXS_PINCTRL_PIN(GPMI_D09),
MXS_PINCTRL_PIN(GPMI_D10),
MXS_PINCTRL_PIN(GPMI_D11),
MXS_PINCTRL_PIN(GPMI_D12),
MXS_PINCTRL_PIN(GPMI_D13),
MXS_PINCTRL_PIN(GPMI_D14),
MXS_PINCTRL_PIN(GPMI_D15),
MXS_PINCTRL_PIN(GPMI_CLE),
MXS_PINCTRL_PIN(GPMI_ALE),
MXS_PINCTRL_PIN(GPMI_CE2N),
MXS_PINCTRL_PIN(GPMI_RDY0),
MXS_PINCTRL_PIN(GPMI_RDY1),
MXS_PINCTRL_PIN(GPMI_RDY2),
MXS_PINCTRL_PIN(GPMI_RDY3),
MXS_PINCTRL_PIN(GPMI_WPN),
MXS_PINCTRL_PIN(GPMI_WRN),
MXS_PINCTRL_PIN(GPMI_RDN),
MXS_PINCTRL_PIN(AUART1_CTS),
MXS_PINCTRL_PIN(AUART1_RTS),
MXS_PINCTRL_PIN(AUART1_RX),
MXS_PINCTRL_PIN(AUART1_TX),
MXS_PINCTRL_PIN(I2C_SCL),
MXS_PINCTRL_PIN(I2C_SDA),
MXS_PINCTRL_PIN(LCD_D00),
MXS_PINCTRL_PIN(LCD_D01),
MXS_PINCTRL_PIN(LCD_D02),
MXS_PINCTRL_PIN(LCD_D03),
MXS_PINCTRL_PIN(LCD_D04),
MXS_PINCTRL_PIN(LCD_D05),
MXS_PINCTRL_PIN(LCD_D06),
MXS_PINCTRL_PIN(LCD_D07),
MXS_PINCTRL_PIN(LCD_D08),
MXS_PINCTRL_PIN(LCD_D09),
MXS_PINCTRL_PIN(LCD_D10),
MXS_PINCTRL_PIN(LCD_D11),
MXS_PINCTRL_PIN(LCD_D12),
MXS_PINCTRL_PIN(LCD_D13),
MXS_PINCTRL_PIN(LCD_D14),
MXS_PINCTRL_PIN(LCD_D15),
MXS_PINCTRL_PIN(LCD_D16),
MXS_PINCTRL_PIN(LCD_D17),
MXS_PINCTRL_PIN(LCD_RESET),
MXS_PINCTRL_PIN(LCD_RS),
MXS_PINCTRL_PIN(LCD_WR),
MXS_PINCTRL_PIN(LCD_CS),
MXS_PINCTRL_PIN(LCD_DOTCK),
MXS_PINCTRL_PIN(LCD_ENABLE),
MXS_PINCTRL_PIN(LCD_HSYNC),
MXS_PINCTRL_PIN(LCD_VSYNC),
MXS_PINCTRL_PIN(PWM0),
MXS_PINCTRL_PIN(PWM1),
MXS_PINCTRL_PIN(PWM2),
MXS_PINCTRL_PIN(PWM3),
MXS_PINCTRL_PIN(PWM4),
MXS_PINCTRL_PIN(SSP1_CMD),
MXS_PINCTRL_PIN(SSP1_DETECT),
MXS_PINCTRL_PIN(SSP1_DATA0),
MXS_PINCTRL_PIN(SSP1_DATA1),
MXS_PINCTRL_PIN(SSP1_DATA2),
MXS_PINCTRL_PIN(SSP1_DATA3),
MXS_PINCTRL_PIN(SSP1_SCK),
MXS_PINCTRL_PIN(ROTARYA),
MXS_PINCTRL_PIN(ROTARYB),
MXS_PINCTRL_PIN(EMI_A00),
MXS_PINCTRL_PIN(EMI_A01),
MXS_PINCTRL_PIN(EMI_A02),
MXS_PINCTRL_PIN(EMI_A03),
MXS_PINCTRL_PIN(EMI_A04),
MXS_PINCTRL_PIN(EMI_A05),
MXS_PINCTRL_PIN(EMI_A06),
MXS_PINCTRL_PIN(EMI_A07),
MXS_PINCTRL_PIN(EMI_A08),
MXS_PINCTRL_PIN(EMI_A09),
MXS_PINCTRL_PIN(EMI_A10),
MXS_PINCTRL_PIN(EMI_A11),
MXS_PINCTRL_PIN(EMI_A12),
MXS_PINCTRL_PIN(EMI_BA0),
MXS_PINCTRL_PIN(EMI_BA1),
MXS_PINCTRL_PIN(EMI_CASN),
MXS_PINCTRL_PIN(EMI_CE0N),
MXS_PINCTRL_PIN(EMI_CE1N),
MXS_PINCTRL_PIN(GPMI_CE1N),
MXS_PINCTRL_PIN(GPMI_CE0N),
MXS_PINCTRL_PIN(EMI_CKE),
MXS_PINCTRL_PIN(EMI_RASN),
MXS_PINCTRL_PIN(EMI_WEN),
MXS_PINCTRL_PIN(EMI_D00),
MXS_PINCTRL_PIN(EMI_D01),
MXS_PINCTRL_PIN(EMI_D02),
MXS_PINCTRL_PIN(EMI_D03),
MXS_PINCTRL_PIN(EMI_D04),
MXS_PINCTRL_PIN(EMI_D05),
MXS_PINCTRL_PIN(EMI_D06),
MXS_PINCTRL_PIN(EMI_D07),
MXS_PINCTRL_PIN(EMI_D08),
MXS_PINCTRL_PIN(EMI_D09),
MXS_PINCTRL_PIN(EMI_D10),
MXS_PINCTRL_PIN(EMI_D11),
MXS_PINCTRL_PIN(EMI_D12),
MXS_PINCTRL_PIN(EMI_D13),
MXS_PINCTRL_PIN(EMI_D14),
MXS_PINCTRL_PIN(EMI_D15),
MXS_PINCTRL_PIN(EMI_DQM0),
MXS_PINCTRL_PIN(EMI_DQM1),
MXS_PINCTRL_PIN(EMI_DQS0),
MXS_PINCTRL_PIN(EMI_DQS1),
MXS_PINCTRL_PIN(EMI_CLK),
MXS_PINCTRL_PIN(EMI_CLKN),
};
static struct mxs_regs imx23_regs = {
.muxsel = 0x100,
.drive = 0x200,
.pull = 0x400,
};
static struct mxs_pinctrl_soc_data imx23_pinctrl_data = {
.regs = &imx23_regs,
.pins = imx23_pins,
.npins = ARRAY_SIZE(imx23_pins),
};
static int __devinit imx23_pinctrl_probe(struct platform_device *pdev)
{
return mxs_pinctrl_probe(pdev, &imx23_pinctrl_data);
}
static struct of_device_id imx23_pinctrl_of_match[] __devinitdata = {
{ .compatible = "fsl,imx23-pinctrl", },
{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, imx23_pinctrl_of_match);
static struct platform_driver imx23_pinctrl_driver = {
.driver = {
.name = "imx23-pinctrl",
.owner = THIS_MODULE,
.of_match_table = imx23_pinctrl_of_match,
},
.probe = imx23_pinctrl_probe,
.remove = __devexit_p(mxs_pinctrl_remove),
};
static int __init imx23_pinctrl_init(void)
{
return platform_driver_register(&imx23_pinctrl_driver);
}
arch_initcall(imx23_pinctrl_init);
static void __exit imx23_pinctrl_exit(void)
{
platform_driver_unregister(&imx23_pinctrl_driver);
}
module_exit(imx23_pinctrl_exit);
MODULE_AUTHOR("Shawn Guo <shawn.guo@linaro.org>");
MODULE_DESCRIPTION("Freescale i.MX23 pinctrl driver");
MODULE_LICENSE("GPL v2");
/*
* Copyright 2012 Freescale Semiconductor, Inc.
*
* The code contained herein is licensed under the GNU General Public
* License. You may obtain a copy of the GNU General Public License
* Version 2 or later at the following locations:
*
* http://www.opensource.org/licenses/gpl-license.html
* http://www.gnu.org/copyleft/gpl.html
*/
#include <linux/init.h>
#include <linux/module.h>
#include <linux/of_device.h>
#include <linux/pinctrl/pinctrl.h>
#include "pinctrl-mxs.h"
enum imx28_pin_enum {
GPMI_D00 = PINID(0, 0),
GPMI_D01 = PINID(0, 1),
GPMI_D02 = PINID(0, 2),
GPMI_D03 = PINID(0, 3),
GPMI_D04 = PINID(0, 4),
GPMI_D05 = PINID(0, 5),
GPMI_D06 = PINID(0, 6),
GPMI_D07 = PINID(0, 7),
GPMI_CE0N = PINID(0, 16),
GPMI_CE1N = PINID(0, 17),
GPMI_CE2N = PINID(0, 18),
GPMI_CE3N = PINID(0, 19),
GPMI_RDY0 = PINID(0, 20),
GPMI_RDY1 = PINID(0, 21),
GPMI_RDY2 = PINID(0, 22),
GPMI_RDY3 = PINID(0, 23),
GPMI_RDN = PINID(0, 24),
GPMI_WRN = PINID(0, 25),
GPMI_ALE = PINID(0, 26),
GPMI_CLE = PINID(0, 27),
GPMI_RESETN = PINID(0, 28),
LCD_D00 = PINID(1, 0),
LCD_D01 = PINID(1, 1),
LCD_D02 = PINID(1, 2),
LCD_D03 = PINID(1, 3),
LCD_D04 = PINID(1, 4),
LCD_D05 = PINID(1, 5),
LCD_D06 = PINID(1, 6),
LCD_D07 = PINID(1, 7),
LCD_D08 = PINID(1, 8),
LCD_D09 = PINID(1, 9),
LCD_D10 = PINID(1, 10),
LCD_D11 = PINID(1, 11),
LCD_D12 = PINID(1, 12),
LCD_D13 = PINID(1, 13),
LCD_D14 = PINID(1, 14),
LCD_D15 = PINID(1, 15),
LCD_D16 = PINID(1, 16),
LCD_D17 = PINID(1, 17),
LCD_D18 = PINID(1, 18),
LCD_D19 = PINID(1, 19),
LCD_D20 = PINID(1, 20),
LCD_D21 = PINID(1, 21),
LCD_D22 = PINID(1, 22),
LCD_D23 = PINID(1, 23),
LCD_RD_E = PINID(1, 24),
LCD_WR_RWN = PINID(1, 25),
LCD_RS = PINID(1, 26),
LCD_CS = PINID(1, 27),
LCD_VSYNC = PINID(1, 28),
LCD_HSYNC = PINID(1, 29),
LCD_DOTCLK = PINID(1, 30),
LCD_ENABLE = PINID(1, 31),
SSP0_DATA0 = PINID(2, 0),
SSP0_DATA1 = PINID(2, 1),
SSP0_DATA2 = PINID(2, 2),
SSP0_DATA3 = PINID(2, 3),
SSP0_DATA4 = PINID(2, 4),
SSP0_DATA5 = PINID(2, 5),
SSP0_DATA6 = PINID(2, 6),
SSP0_DATA7 = PINID(2, 7),
SSP0_CMD = PINID(2, 8),
SSP0_DETECT = PINID(2, 9),
SSP0_SCK = PINID(2, 10),
SSP1_SCK = PINID(2, 12),
SSP1_CMD = PINID(2, 13),
SSP1_DATA0 = PINID(2, 14),
SSP1_DATA3 = PINID(2, 15),
SSP2_SCK = PINID(2, 16),
SSP2_MOSI = PINID(2, 17),
SSP2_MISO = PINID(2, 18),
SSP2_SS0 = PINID(2, 19),
SSP2_SS1 = PINID(2, 20),
SSP2_SS2 = PINID(2, 21),
SSP3_SCK = PINID(2, 24),
SSP3_MOSI = PINID(2, 25),
SSP3_MISO = PINID(2, 26),
SSP3_SS0 = PINID(2, 27),
AUART0_RX = PINID(3, 0),
AUART0_TX = PINID(3, 1),
AUART0_CTS = PINID(3, 2),
AUART0_RTS = PINID(3, 3),
AUART1_RX = PINID(3, 4),
AUART1_TX = PINID(3, 5),
AUART1_CTS = PINID(3, 6),
AUART1_RTS = PINID(3, 7),
AUART2_RX = PINID(3, 8),
AUART2_TX = PINID(3, 9),
AUART2_CTS = PINID(3, 10),
AUART2_RTS = PINID(3, 11),
AUART3_RX = PINID(3, 12),
AUART3_TX = PINID(3, 13),
AUART3_CTS = PINID(3, 14),
AUART3_RTS = PINID(3, 15),
PWM0 = PINID(3, 16),
PWM1 = PINID(3, 17),
PWM2 = PINID(3, 18),
SAIF0_MCLK = PINID(3, 20),
SAIF0_LRCLK = PINID(3, 21),
SAIF0_BITCLK = PINID(3, 22),
SAIF0_SDATA0 = PINID(3, 23),
I2C0_SCL = PINID(3, 24),
I2C0_SDA = PINID(3, 25),
SAIF1_SDATA0 = PINID(3, 26),
SPDIF = PINID(3, 27),
PWM3 = PINID(3, 28),
PWM4 = PINID(3, 29),
LCD_RESET = PINID(3, 30),
ENET0_MDC = PINID(4, 0),
ENET0_MDIO = PINID(4, 1),
ENET0_RX_EN = PINID(4, 2),
ENET0_RXD0 = PINID(4, 3),
ENET0_RXD1 = PINID(4, 4),
ENET0_TX_CLK = PINID(4, 5),
ENET0_TX_EN = PINID(4, 6),
ENET0_TXD0 = PINID(4, 7),
ENET0_TXD1 = PINID(4, 8),
ENET0_RXD2 = PINID(4, 9),
ENET0_RXD3 = PINID(4, 10),
ENET0_TXD2 = PINID(4, 11),
ENET0_TXD3 = PINID(4, 12),
ENET0_RX_CLK = PINID(4, 13),
ENET0_COL = PINID(4, 14),
ENET0_CRS = PINID(4, 15),
ENET_CLK = PINID(4, 16),
JTAG_RTCK = PINID(4, 20),
EMI_D00 = PINID(5, 0),
EMI_D01 = PINID(5, 1),
EMI_D02 = PINID(5, 2),
EMI_D03 = PINID(5, 3),
EMI_D04 = PINID(5, 4),
EMI_D05 = PINID(5, 5),
EMI_D06 = PINID(5, 6),
EMI_D07 = PINID(5, 7),
EMI_D08 = PINID(5, 8),
EMI_D09 = PINID(5, 9),
EMI_D10 = PINID(5, 10),
EMI_D11 = PINID(5, 11),
EMI_D12 = PINID(5, 12),
EMI_D13 = PINID(5, 13),
EMI_D14 = PINID(5, 14),
EMI_D15 = PINID(5, 15),
EMI_ODT0 = PINID(5, 16),
EMI_DQM0 = PINID(5, 17),
EMI_ODT1 = PINID(5, 18),
EMI_DQM1 = PINID(5, 19),
EMI_DDR_OPEN_FB = PINID(5, 20),
EMI_CLK = PINID(5, 21),
EMI_DQS0 = PINID(5, 22),
EMI_DQS1 = PINID(5, 23),
EMI_DDR_OPEN = PINID(5, 26),
EMI_A00 = PINID(6, 0),
EMI_A01 = PINID(6, 1),
EMI_A02 = PINID(6, 2),
EMI_A03 = PINID(6, 3),
EMI_A04 = PINID(6, 4),
EMI_A05 = PINID(6, 5),
EMI_A06 = PINID(6, 6),
EMI_A07 = PINID(6, 7),
EMI_A08 = PINID(6, 8),
EMI_A09 = PINID(6, 9),
EMI_A10 = PINID(6, 10),
EMI_A11 = PINID(6, 11),
EMI_A12 = PINID(6, 12),
EMI_A13 = PINID(6, 13),
EMI_A14 = PINID(6, 14),
EMI_BA0 = PINID(6, 16),
EMI_BA1 = PINID(6, 17),
EMI_BA2 = PINID(6, 18),
EMI_CASN = PINID(6, 19),
EMI_RASN = PINID(6, 20),
EMI_WEN = PINID(6, 21),
EMI_CE0N = PINID(6, 22),
EMI_CE1N = PINID(6, 23),
EMI_CKE = PINID(6, 24),
};
static const struct pinctrl_pin_desc imx28_pins[] = {
MXS_PINCTRL_PIN(GPMI_D00),
MXS_PINCTRL_PIN(GPMI_D01),
MXS_PINCTRL_PIN(GPMI_D02),
MXS_PINCTRL_PIN(GPMI_D03),
MXS_PINCTRL_PIN(GPMI_D04),
MXS_PINCTRL_PIN(GPMI_D05),
MXS_PINCTRL_PIN(GPMI_D06),
MXS_PINCTRL_PIN(GPMI_D07),
MXS_PINCTRL_PIN(GPMI_CE0N),
MXS_PINCTRL_PIN(GPMI_CE1N),
MXS_PINCTRL_PIN(GPMI_CE2N),
MXS_PINCTRL_PIN(GPMI_CE3N),
MXS_PINCTRL_PIN(GPMI_RDY0),
MXS_PINCTRL_PIN(GPMI_RDY1),
MXS_PINCTRL_PIN(GPMI_RDY2),
MXS_PINCTRL_PIN(GPMI_RDY3),
MXS_PINCTRL_PIN(GPMI_RDN),
MXS_PINCTRL_PIN(GPMI_WRN),
MXS_PINCTRL_PIN(GPMI_ALE),
MXS_PINCTRL_PIN(GPMI_CLE),
MXS_PINCTRL_PIN(GPMI_RESETN),
MXS_PINCTRL_PIN(LCD_D00),
MXS_PINCTRL_PIN(LCD_D01),
MXS_PINCTRL_PIN(LCD_D02),
MXS_PINCTRL_PIN(LCD_D03),
MXS_PINCTRL_PIN(LCD_D04),
MXS_PINCTRL_PIN(LCD_D05),
MXS_PINCTRL_PIN(LCD_D06),
MXS_PINCTRL_PIN(LCD_D07),
MXS_PINCTRL_PIN(LCD_D08),
MXS_PINCTRL_PIN(LCD_D09),
MXS_PINCTRL_PIN(LCD_D10),
MXS_PINCTRL_PIN(LCD_D11),
MXS_PINCTRL_PIN(LCD_D12),
MXS_PINCTRL_PIN(LCD_D13),
MXS_PINCTRL_PIN(LCD_D14),
MXS_PINCTRL_PIN(LCD_D15),
MXS_PINCTRL_PIN(LCD_D16),
MXS_PINCTRL_PIN(LCD_D17),
MXS_PINCTRL_PIN(LCD_D18),
MXS_PINCTRL_PIN(LCD_D19),
MXS_PINCTRL_PIN(LCD_D20),
MXS_PINCTRL_PIN(LCD_D21),
MXS_PINCTRL_PIN(LCD_D22),
MXS_PINCTRL_PIN(LCD_D23),
MXS_PINCTRL_PIN(LCD_RD_E),
MXS_PINCTRL_PIN(LCD_WR_RWN),
MXS_PINCTRL_PIN(LCD_RS),
MXS_PINCTRL_PIN(LCD_CS),
MXS_PINCTRL_PIN(LCD_VSYNC),
MXS_PINCTRL_PIN(LCD_HSYNC),
MXS_PINCTRL_PIN(LCD_DOTCLK),
MXS_PINCTRL_PIN(LCD_ENABLE),
MXS_PINCTRL_PIN(SSP0_DATA0),
MXS_PINCTRL_PIN(SSP0_DATA1),
MXS_PINCTRL_PIN(SSP0_DATA2),
MXS_PINCTRL_PIN(SSP0_DATA3),
MXS_PINCTRL_PIN(SSP0_DATA4),
MXS_PINCTRL_PIN(SSP0_DATA5),
MXS_PINCTRL_PIN(SSP0_DATA6),
MXS_PINCTRL_PIN(SSP0_DATA7),
MXS_PINCTRL_PIN(SSP0_CMD),
MXS_PINCTRL_PIN(SSP0_DETECT),
MXS_PINCTRL_PIN(SSP0_SCK),
MXS_PINCTRL_PIN(SSP1_SCK),
MXS_PINCTRL_PIN(SSP1_CMD),
MXS_PINCTRL_PIN(SSP1_DATA0),
MXS_PINCTRL_PIN(SSP1_DATA3),
MXS_PINCTRL_PIN(SSP2_SCK),
MXS_PINCTRL_PIN(SSP2_MOSI),
MXS_PINCTRL_PIN(SSP2_MISO),
MXS_PINCTRL_PIN(SSP2_SS0),
MXS_PINCTRL_PIN(SSP2_SS1),
MXS_PINCTRL_PIN(SSP2_SS2),
MXS_PINCTRL_PIN(SSP3_SCK),
MXS_PINCTRL_PIN(SSP3_MOSI),
MXS_PINCTRL_PIN(SSP3_MISO),
MXS_PINCTRL_PIN(SSP3_SS0),
MXS_PINCTRL_PIN(AUART0_RX),
MXS_PINCTRL_PIN(AUART0_TX),
MXS_PINCTRL_PIN(AUART0_CTS),
MXS_PINCTRL_PIN(AUART0_RTS),
MXS_PINCTRL_PIN(AUART1_RX),
MXS_PINCTRL_PIN(AUART1_TX),
MXS_PINCTRL_PIN(AUART1_CTS),
MXS_PINCTRL_PIN(AUART1_RTS),
MXS_PINCTRL_PIN(AUART2_RX),
MXS_PINCTRL_PIN(AUART2_TX),
MXS_PINCTRL_PIN(AUART2_CTS),
MXS_PINCTRL_PIN(AUART2_RTS),
MXS_PINCTRL_PIN(AUART3_RX),
MXS_PINCTRL_PIN(AUART3_TX),
MXS_PINCTRL_PIN(AUART3_CTS),
MXS_PINCTRL_PIN(AUART3_RTS),
MXS_PINCTRL_PIN(PWM0),
MXS_PINCTRL_PIN(PWM1),
MXS_PINCTRL_PIN(PWM2),
MXS_PINCTRL_PIN(SAIF0_MCLK),
MXS_PINCTRL_PIN(SAIF0_LRCLK),
MXS_PINCTRL_PIN(SAIF0_BITCLK),
MXS_PINCTRL_PIN(SAIF0_SDATA0),
MXS_PINCTRL_PIN(I2C0_SCL),
MXS_PINCTRL_PIN(I2C0_SDA),
MXS_PINCTRL_PIN(SAIF1_SDATA0),
MXS_PINCTRL_PIN(SPDIF),
MXS_PINCTRL_PIN(PWM3),
MXS_PINCTRL_PIN(PWM4),
MXS_PINCTRL_PIN(LCD_RESET),
MXS_PINCTRL_PIN(ENET0_MDC),
MXS_PINCTRL_PIN(ENET0_MDIO),
MXS_PINCTRL_PIN(ENET0_RX_EN),
MXS_PINCTRL_PIN(ENET0_RXD0),
MXS_PINCTRL_PIN(ENET0_RXD1),
MXS_PINCTRL_PIN(ENET0_TX_CLK),
MXS_PINCTRL_PIN(ENET0_TX_EN),
MXS_PINCTRL_PIN(ENET0_TXD0),
MXS_PINCTRL_PIN(ENET0_TXD1),
MXS_PINCTRL_PIN(ENET0_RXD2),
MXS_PINCTRL_PIN(ENET0_RXD3),
MXS_PINCTRL_PIN(ENET0_TXD2),
MXS_PINCTRL_PIN(ENET0_TXD3),
MXS_PINCTRL_PIN(ENET0_RX_CLK),
MXS_PINCTRL_PIN(ENET0_COL),
MXS_PINCTRL_PIN(ENET0_CRS),
MXS_PINCTRL_PIN(ENET_CLK),
MXS_PINCTRL_PIN(JTAG_RTCK),
MXS_PINCTRL_PIN(EMI_D00),
MXS_PINCTRL_PIN(EMI_D01),
MXS_PINCTRL_PIN(EMI_D02),
MXS_PINCTRL_PIN(EMI_D03),
MXS_PINCTRL_PIN(EMI_D04),
MXS_PINCTRL_PIN(EMI_D05),
MXS_PINCTRL_PIN(EMI_D06),
MXS_PINCTRL_PIN(EMI_D07),
MXS_PINCTRL_PIN(EMI_D08),
MXS_PINCTRL_PIN(EMI_D09),
MXS_PINCTRL_PIN(EMI_D10),
MXS_PINCTRL_PIN(EMI_D11),
MXS_PINCTRL_PIN(EMI_D12),
MXS_PINCTRL_PIN(EMI_D13),
MXS_PINCTRL_PIN(EMI_D14),
MXS_PINCTRL_PIN(EMI_D15),
MXS_PINCTRL_PIN(EMI_ODT0),
MXS_PINCTRL_PIN(EMI_DQM0),
MXS_PINCTRL_PIN(EMI_ODT1),
MXS_PINCTRL_PIN(EMI_DQM1),
MXS_PINCTRL_PIN(EMI_DDR_OPEN_FB),
MXS_PINCTRL_PIN(EMI_CLK),
MXS_PINCTRL_PIN(EMI_DQS0),
MXS_PINCTRL_PIN(EMI_DQS1),
MXS_PINCTRL_PIN(EMI_DDR_OPEN),
MXS_PINCTRL_PIN(EMI_A00),
MXS_PINCTRL_PIN(EMI_A01),
MXS_PINCTRL_PIN(EMI_A02),
MXS_PINCTRL_PIN(EMI_A03),
MXS_PINCTRL_PIN(EMI_A04),
MXS_PINCTRL_PIN(EMI_A05),
MXS_PINCTRL_PIN(EMI_A06),
MXS_PINCTRL_PIN(EMI_A07),
MXS_PINCTRL_PIN(EMI_A08),
MXS_PINCTRL_PIN(EMI_A09),
MXS_PINCTRL_PIN(EMI_A10),
MXS_PINCTRL_PIN(EMI_A11),
MXS_PINCTRL_PIN(EMI_A12),
MXS_PINCTRL_PIN(EMI_A13),
MXS_PINCTRL_PIN(EMI_A14),
MXS_PINCTRL_PIN(EMI_BA0),
MXS_PINCTRL_PIN(EMI_BA1),
MXS_PINCTRL_PIN(EMI_BA2),
MXS_PINCTRL_PIN(EMI_CASN),
MXS_PINCTRL_PIN(EMI_RASN),
MXS_PINCTRL_PIN(EMI_WEN),
MXS_PINCTRL_PIN(EMI_CE0N),
MXS_PINCTRL_PIN(EMI_CE1N),
MXS_PINCTRL_PIN(EMI_CKE),
};
static struct mxs_regs imx28_regs = {
.muxsel = 0x100,
.drive = 0x300,
.pull = 0x600,
};
static struct mxs_pinctrl_soc_data imx28_pinctrl_data = {
.regs = &imx28_regs,
.pins = imx28_pins,
.npins = ARRAY_SIZE(imx28_pins),
};
static int __devinit imx28_pinctrl_probe(struct platform_device *pdev)
{
return mxs_pinctrl_probe(pdev, &imx28_pinctrl_data);
}
static struct of_device_id imx28_pinctrl_of_match[] __devinitdata = {
{ .compatible = "fsl,imx28-pinctrl", },
{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, imx28_pinctrl_of_match);
static struct platform_driver imx28_pinctrl_driver = {
.driver = {
.name = "imx28-pinctrl",
.owner = THIS_MODULE,
.of_match_table = imx28_pinctrl_of_match,
},
.probe = imx28_pinctrl_probe,
.remove = __devexit_p(mxs_pinctrl_remove),
};
static int __init imx28_pinctrl_init(void)
{
return platform_driver_register(&imx28_pinctrl_driver);
}
arch_initcall(imx28_pinctrl_init);
static void __exit imx28_pinctrl_exit(void)
{
platform_driver_unregister(&imx28_pinctrl_driver);
}
module_exit(imx28_pinctrl_exit);
MODULE_AUTHOR("Shawn Guo <shawn.guo@linaro.org>");
MODULE_DESCRIPTION("Freescale i.MX28 pinctrl driver");
MODULE_LICENSE("GPL v2");
/*
* imx51 pinctrl driver based on imx pinmux core
*
* Copyright (C) 2012 Freescale Semiconductor, Inc.
* Copyright (C) 2012 Linaro, Inc.
*
* Author: Dong Aisheng <dong.aisheng@linaro.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*/
#include <linux/err.h>
#include <linux/init.h>
#include <linux/io.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/of_device.h>
#include <linux/pinctrl/pinctrl.h>
#include "pinctrl-imx.h"
enum imx51_pads {
MX51_PAD_EIM_D16 = 1,
MX51_PAD_EIM_D17 = 2,
MX51_PAD_EIM_D18 = 3,
MX51_PAD_EIM_D19 = 4,
MX51_PAD_EIM_D20 = 5,
MX51_PAD_EIM_D21 = 6,
MX51_PAD_EIM_D22 = 7,
MX51_PAD_EIM_D23 = 8,
MX51_PAD_EIM_D24 = 9,
MX51_PAD_EIM_D25 = 10,
MX51_PAD_EIM_D26 = 11,
MX51_PAD_EIM_D27 = 12,
MX51_PAD_EIM_D28 = 13,
MX51_PAD_EIM_D29 = 14,
MX51_PAD_EIM_D30 = 15,
MX51_PAD_EIM_D31 = 16,
MX51_PAD_EIM_A16 = 17,
MX51_PAD_EIM_A17 = 18,
MX51_PAD_EIM_A18 = 19,
MX51_PAD_EIM_A19 = 20,
MX51_PAD_EIM_A20 = 21,
MX51_PAD_EIM_A21 = 22,
MX51_PAD_EIM_A22 = 23,
MX51_PAD_EIM_A23 = 24,
MX51_PAD_EIM_A24 = 25,
MX51_PAD_EIM_A25 = 26,
MX51_PAD_EIM_A26 = 27,
MX51_PAD_EIM_A27 = 28,
MX51_PAD_EIM_EB0 = 29,
MX51_PAD_EIM_EB1 = 30,
MX51_PAD_EIM_EB2 = 31,
MX51_PAD_EIM_EB3 = 32,
MX51_PAD_EIM_OE = 33,
MX51_PAD_EIM_CS0 = 34,
MX51_PAD_EIM_CS1 = 35,
MX51_PAD_EIM_CS2 = 36,
MX51_PAD_EIM_CS3 = 37,
MX51_PAD_EIM_CS4 = 38,
MX51_PAD_EIM_CS5 = 39,
MX51_PAD_EIM_DTACK = 40,
MX51_PAD_EIM_LBA = 41,
MX51_PAD_EIM_CRE = 42,
MX51_PAD_DRAM_CS1 = 43,
MX51_PAD_NANDF_WE_B = 44,
MX51_PAD_NANDF_RE_B = 45,
MX51_PAD_NANDF_ALE = 46,
MX51_PAD_NANDF_CLE = 47,
MX51_PAD_NANDF_WP_B = 48,
MX51_PAD_NANDF_RB0 = 49,
MX51_PAD_NANDF_RB1 = 50,
MX51_PAD_NANDF_RB2 = 51,
MX51_PAD_NANDF_RB3 = 52,
MX51_PAD_GPIO_NAND = 53,
MX51_PAD_NANDF_CS0 = 54,
MX51_PAD_NANDF_CS1 = 55,
MX51_PAD_NANDF_CS2 = 56,
MX51_PAD_NANDF_CS3 = 57,
MX51_PAD_NANDF_CS4 = 58,
MX51_PAD_NANDF_CS5 = 59,
MX51_PAD_NANDF_CS6 = 60,
MX51_PAD_NANDF_CS7 = 61,
MX51_PAD_NANDF_RDY_INT = 62,
MX51_PAD_NANDF_D15 = 63,
MX51_PAD_NANDF_D14 = 64,
MX51_PAD_NANDF_D13 = 65,
MX51_PAD_NANDF_D12 = 66,
MX51_PAD_NANDF_D11 = 67,
MX51_PAD_NANDF_D10 = 68,
MX51_PAD_NANDF_D9 = 69,
MX51_PAD_NANDF_D8 = 70,
MX51_PAD_NANDF_D7 = 71,
MX51_PAD_NANDF_D6 = 72,
MX51_PAD_NANDF_D5 = 73,
MX51_PAD_NANDF_D4 = 74,
MX51_PAD_NANDF_D3 = 75,
MX51_PAD_NANDF_D2 = 76,
MX51_PAD_NANDF_D1 = 77,
MX51_PAD_NANDF_D0 = 78,
MX51_PAD_CSI1_D8 = 79,
MX51_PAD_CSI1_D9 = 80,
MX51_PAD_CSI1_D10 = 81,
MX51_PAD_CSI1_D11 = 82,
MX51_PAD_CSI1_D12 = 83,
MX51_PAD_CSI1_D13 = 84,
MX51_PAD_CSI1_D14 = 85,
MX51_PAD_CSI1_D15 = 86,
MX51_PAD_CSI1_D16 = 87,
MX51_PAD_CSI1_D17 = 88,
MX51_PAD_CSI1_D18 = 89,
MX51_PAD_CSI1_D19 = 90,
MX51_PAD_CSI1_VSYNC = 91,
MX51_PAD_CSI1_HSYNC = 92,
MX51_PAD_CSI1_PIXCLK = 93,
MX51_PAD_CSI1_MCLK = 94,
MX51_PAD_CSI2_D12 = 95,
MX51_PAD_CSI2_D13 = 96,
MX51_PAD_CSI2_D14 = 97,
MX51_PAD_CSI2_D15 = 98,
MX51_PAD_CSI2_D16 = 99,
MX51_PAD_CSI2_D17 = 100,
MX51_PAD_CSI2_D18 = 101,
MX51_PAD_CSI2_D19 = 102,
MX51_PAD_CSI2_VSYNC = 103,
MX51_PAD_CSI2_HSYNC = 104,
MX51_PAD_CSI2_PIXCLK = 105,
MX51_PAD_I2C1_CLK = 106,
MX51_PAD_I2C1_DAT = 107,
MX51_PAD_AUD3_BB_TXD = 108,
MX51_PAD_AUD3_BB_RXD = 109,
MX51_PAD_AUD3_BB_CK = 110,
MX51_PAD_AUD3_BB_FS = 111,
MX51_PAD_CSPI1_MOSI = 112,
MX51_PAD_CSPI1_MISO = 113,
MX51_PAD_CSPI1_SS0 = 114,
MX51_PAD_CSPI1_SS1 = 115,
MX51_PAD_CSPI1_RDY = 116,
MX51_PAD_CSPI1_SCLK = 117,
MX51_PAD_UART1_RXD = 118,
MX51_PAD_UART1_TXD = 119,
MX51_PAD_UART1_RTS = 120,
MX51_PAD_UART1_CTS = 121,
MX51_PAD_UART2_RXD = 122,
MX51_PAD_UART2_TXD = 123,
MX51_PAD_UART3_RXD = 124,
MX51_PAD_UART3_TXD = 125,
MX51_PAD_OWIRE_LINE = 126,
MX51_PAD_KEY_ROW0 = 127,
MX51_PAD_KEY_ROW1 = 128,
MX51_PAD_KEY_ROW2 = 129,
MX51_PAD_KEY_ROW3 = 130,
MX51_PAD_KEY_COL0 = 131,
MX51_PAD_KEY_COL1 = 132,
MX51_PAD_KEY_COL2 = 133,
MX51_PAD_KEY_COL3 = 134,
MX51_PAD_KEY_COL4 = 135,
MX51_PAD_KEY_COL5 = 136,
MX51_PAD_USBH1_CLK = 137,
MX51_PAD_USBH1_DIR = 138,
MX51_PAD_USBH1_STP = 139,
MX51_PAD_USBH1_NXT = 140,
MX51_PAD_USBH1_DATA0 = 141,
MX51_PAD_USBH1_DATA1 = 142,
MX51_PAD_USBH1_DATA2 = 143,
MX51_PAD_USBH1_DATA3 = 144,
MX51_PAD_USBH1_DATA4 = 145,
MX51_PAD_USBH1_DATA5 = 146,
MX51_PAD_USBH1_DATA6 = 147,
MX51_PAD_USBH1_DATA7 = 148,
MX51_PAD_DI1_PIN11 = 149,
MX51_PAD_DI1_PIN12 = 150,
MX51_PAD_DI1_PIN13 = 151,
MX51_PAD_DI1_D0_CS = 152,
MX51_PAD_DI1_D1_CS = 153,
MX51_PAD_DISPB2_SER_DIN = 154,
MX51_PAD_DISPB2_SER_DIO = 155,
MX51_PAD_DISPB2_SER_CLK = 156,
MX51_PAD_DISPB2_SER_RS = 157,
MX51_PAD_DISP1_DAT0 = 158,
MX51_PAD_DISP1_DAT1 = 159,
MX51_PAD_DISP1_DAT2 = 160,
MX51_PAD_DISP1_DAT3 = 161,
MX51_PAD_DISP1_DAT4 = 162,
MX51_PAD_DISP1_DAT5 = 163,
MX51_PAD_DISP1_DAT6 = 164,
MX51_PAD_DISP1_DAT7 = 165,
MX51_PAD_DISP1_DAT8 = 166,
MX51_PAD_DISP1_DAT9 = 167,
MX51_PAD_DISP1_DAT10 = 168,
MX51_PAD_DISP1_DAT11 = 169,
MX51_PAD_DISP1_DAT12 = 170,
MX51_PAD_DISP1_DAT13 = 171,
MX51_PAD_DISP1_DAT14 = 172,
MX51_PAD_DISP1_DAT15 = 173,
MX51_PAD_DISP1_DAT16 = 174,
MX51_PAD_DISP1_DAT17 = 175,
MX51_PAD_DISP1_DAT18 = 176,
MX51_PAD_DISP1_DAT19 = 177,
MX51_PAD_DISP1_DAT20 = 178,
MX51_PAD_DISP1_DAT21 = 179,
MX51_PAD_DISP1_DAT22 = 180,
MX51_PAD_DISP1_DAT23 = 181,
MX51_PAD_DI1_PIN3 = 182,
MX51_PAD_DI1_PIN2 = 183,
MX51_PAD_DI_GP2 = 184,
MX51_PAD_DI_GP3 = 185,
MX51_PAD_DI2_PIN4 = 186,
MX51_PAD_DI2_PIN2 = 187,
MX51_PAD_DI2_PIN3 = 188,
MX51_PAD_DI2_DISP_CLK = 189,
MX51_PAD_DI_GP4 = 190,
MX51_PAD_DISP2_DAT0 = 191,
MX51_PAD_DISP2_DAT1 = 192,
MX51_PAD_DISP2_DAT2 = 193,
MX51_PAD_DISP2_DAT3 = 194,
MX51_PAD_DISP2_DAT4 = 195,
MX51_PAD_DISP2_DAT5 = 196,
MX51_PAD_DISP2_DAT6 = 197,
MX51_PAD_DISP2_DAT7 = 198,
MX51_PAD_DISP2_DAT8 = 199,
MX51_PAD_DISP2_DAT9 = 200,
MX51_PAD_DISP2_DAT10 = 201,
MX51_PAD_DISP2_DAT11 = 202,
MX51_PAD_DISP2_DAT12 = 203,
MX51_PAD_DISP2_DAT13 = 204,
MX51_PAD_DISP2_DAT14 = 205,
MX51_PAD_DISP2_DAT15 = 206,
MX51_PAD_SD1_CMD = 207,
MX51_PAD_SD1_CLK = 208,
MX51_PAD_SD1_DATA0 = 209,
MX51_PAD_EIM_DA0 = 210,
MX51_PAD_EIM_DA1 = 211,
MX51_PAD_EIM_DA2 = 212,
MX51_PAD_EIM_DA3 = 213,
MX51_PAD_SD1_DATA1 = 214,
MX51_PAD_EIM_DA4 = 215,
MX51_PAD_EIM_DA5 = 216,
MX51_PAD_EIM_DA6 = 217,
MX51_PAD_EIM_DA7 = 218,
MX51_PAD_SD1_DATA2 = 219,
MX51_PAD_EIM_DA10 = 220,
MX51_PAD_EIM_DA11 = 221,
MX51_PAD_EIM_DA8 = 222,
MX51_PAD_EIM_DA9 = 223,
MX51_PAD_SD1_DATA3 = 224,
MX51_PAD_GPIO1_0 = 225,
MX51_PAD_GPIO1_1 = 226,
MX51_PAD_EIM_DA12 = 227,
MX51_PAD_EIM_DA13 = 228,
MX51_PAD_EIM_DA14 = 229,
MX51_PAD_EIM_DA15 = 230,
MX51_PAD_SD2_CMD = 231,
MX51_PAD_SD2_CLK = 232,
MX51_PAD_SD2_DATA0 = 233,
MX51_PAD_SD2_DATA1 = 234,
MX51_PAD_SD2_DATA2 = 235,
MX51_PAD_SD2_DATA3 = 236,
MX51_PAD_GPIO1_2 = 237,
MX51_PAD_GPIO1_3 = 238,
MX51_PAD_PMIC_INT_REQ = 239,
MX51_PAD_GPIO1_4 = 240,
MX51_PAD_GPIO1_5 = 241,
MX51_PAD_GPIO1_6 = 242,
MX51_PAD_GPIO1_7 = 243,
MX51_PAD_GPIO1_8 = 244,
MX51_PAD_GPIO1_9 = 245,
};
/* imx51 register maps */
static struct imx_pin_reg imx51_pin_regs[] = {
IMX_PIN_REG(MX51_PAD_EIM_D16, 0x3f0, 0x05c, 5, 0x000, 0), /* MX51_PAD_EIM_D16__AUD4_RXFS */
IMX_PIN_REG(MX51_PAD_EIM_D16, 0x3f0, 0x05c, 7, 0x8d8, 0), /* MX51_PAD_EIM_D16__AUD5_TXD */
IMX_PIN_REG(MX51_PAD_EIM_D16, 0x3f0, 0x05c, 0, 0x000, 0), /* MX51_PAD_EIM_D16__EIM_D16 */
IMX_PIN_REG(MX51_PAD_EIM_D16, 0x3f0, 0x05c, 1, 0x000, 0), /* MX51_PAD_EIM_D16__GPIO2_0 */
IMX_PIN_REG(MX51_PAD_EIM_D16, 0x3f0, 0x05c, 4, 0x9b4, 0), /* MX51_PAD_EIM_D16__I2C1_SDA */
IMX_PIN_REG(MX51_PAD_EIM_D16, 0x3f0, 0x05c, 3, 0x000, 0), /* MX51_PAD_EIM_D16__UART2_CTS */
IMX_PIN_REG(MX51_PAD_EIM_D16, 0x3f0, 0x05c, 2, 0x000, 0), /* MX51_PAD_EIM_D16__USBH2_DATA0 */
IMX_PIN_REG(MX51_PAD_EIM_D17, 0x3f4, 0x060, 7, 0x8d4, 0), /* MX51_PAD_EIM_D17__AUD5_RXD */
IMX_PIN_REG(MX51_PAD_EIM_D17, 0x3f4, 0x060, 0, 0x000, 0), /* MX51_PAD_EIM_D17__EIM_D17 */
IMX_PIN_REG(MX51_PAD_EIM_D17, 0x3f4, 0x060, 1, 0x000, 0), /* MX51_PAD_EIM_D17__GPIO2_1 */
IMX_PIN_REG(MX51_PAD_EIM_D17, 0x3f4, 0x060, 3, 0x9ec, 0), /* MX51_PAD_EIM_D17__UART2_RXD */
IMX_PIN_REG(MX51_PAD_EIM_D17, 0x3f4, 0x060, 4, 0x000, 0), /* MX51_PAD_EIM_D17__UART3_CTS */
IMX_PIN_REG(MX51_PAD_EIM_D17, 0x3f4, 0x060, 2, 0x000, 0), /* MX51_PAD_EIM_D17__USBH2_DATA1 */
IMX_PIN_REG(MX51_PAD_EIM_D18, 0x3f8, 0x064, 7, 0x8e4, 0), /* MX51_PAD_EIM_D18__AUD5_TXC */
IMX_PIN_REG(MX51_PAD_EIM_D18, 0x3f8, 0x064, 0, 0x000, 0), /* MX51_PAD_EIM_D18__EIM_D18 */
IMX_PIN_REG(MX51_PAD_EIM_D18, 0x3f8, 0x064, 1, 0x000, 0), /* MX51_PAD_EIM_D18__GPIO2_2 */
IMX_PIN_REG(MX51_PAD_EIM_D18, 0x3f8, 0x064, 3, 0x000, 0), /* MX51_PAD_EIM_D18__UART2_TXD */
IMX_PIN_REG(MX51_PAD_EIM_D18, 0x3f8, 0x064, 4, 0x9f0, 1), /* MX51_PAD_EIM_D18__UART3_RTS */
IMX_PIN_REG(MX51_PAD_EIM_D18, 0x3f8, 0x064, 2, 0x000, 0), /* MX51_PAD_EIM_D18__USBH2_DATA2 */
IMX_PIN_REG(MX51_PAD_EIM_D19, 0x3fc, 0x068, 5, 0x000, 0), /* MX51_PAD_EIM_D19__AUD4_RXC */
IMX_PIN_REG(MX51_PAD_EIM_D19, 0x3fc, 0x068, 7, 0x8e8, 0), /* MX51_PAD_EIM_D19__AUD5_TXFS */
IMX_PIN_REG(MX51_PAD_EIM_D19, 0x3fc, 0x068, 0, 0x000, 0), /* MX51_PAD_EIM_D19__EIM_D19 */
IMX_PIN_REG(MX51_PAD_EIM_D19, 0x3fc, 0x068, 1, 0x000, 0), /* MX51_PAD_EIM_D19__GPIO2_3 */
IMX_PIN_REG(MX51_PAD_EIM_D19, 0x3fc, 0x068, 4, 0x9b0, 0), /* MX51_PAD_EIM_D19__I2C1_SCL */
IMX_PIN_REG(MX51_PAD_EIM_D19, 0x3fc, 0x068, 3, 0x9e8, 1), /* MX51_PAD_EIM_D19__UART2_RTS */
IMX_PIN_REG(MX51_PAD_EIM_D19, 0x3fc, 0x068, 2, 0x000, 0), /* MX51_PAD_EIM_D19__USBH2_DATA3 */
IMX_PIN_REG(MX51_PAD_EIM_D20, 0x400, 0x06c, 5, 0x8c8, 0), /* MX51_PAD_EIM_D20__AUD4_TXD */
IMX_PIN_REG(MX51_PAD_EIM_D20, 0x400, 0x06c, 0, 0x000, 0), /* MX51_PAD_EIM_D20__EIM_D20 */
IMX_PIN_REG(MX51_PAD_EIM_D20, 0x400, 0x06c, 1, 0x000, 0), /* MX51_PAD_EIM_D20__GPIO2_4 */
IMX_PIN_REG(MX51_PAD_EIM_D20, 0x400, 0x06c, 4, 0x000, 0), /* MX51_PAD_EIM_D20__SRTC_ALARM_DEB */
IMX_PIN_REG(MX51_PAD_EIM_D20, 0x400, 0x06c, 2, 0x000, 0), /* MX51_PAD_EIM_D20__USBH2_DATA4 */
IMX_PIN_REG(MX51_PAD_EIM_D21, 0x404, 0x070, 5, 0x8c4, 0), /* MX51_PAD_EIM_D21__AUD4_RXD */
IMX_PIN_REG(MX51_PAD_EIM_D21, 0x404, 0x070, 0, 0x000, 0), /* MX51_PAD_EIM_D21__EIM_D21 */
IMX_PIN_REG(MX51_PAD_EIM_D21, 0x404, 0x070, 1, 0x000, 0), /* MX51_PAD_EIM_D21__GPIO2_5 */
IMX_PIN_REG(MX51_PAD_EIM_D21, 0x404, 0x070, 3, 0x000, 0), /* MX51_PAD_EIM_D21__SRTC_ALARM_DEB */
IMX_PIN_REG(MX51_PAD_EIM_D21, 0x404, 0x070, 2, 0x000, 0), /* MX51_PAD_EIM_D21__USBH2_DATA5 */
IMX_PIN_REG(MX51_PAD_EIM_D22, 0x408, 0x074, 5, 0x8cc, 0), /* MX51_PAD_EIM_D22__AUD4_TXC */
IMX_PIN_REG(MX51_PAD_EIM_D22, 0x408, 0x074, 0, 0x000, 0), /* MX51_PAD_EIM_D22__EIM_D22 */
IMX_PIN_REG(MX51_PAD_EIM_D22, 0x408, 0x074, 1, 0x000, 0), /* MX51_PAD_EIM_D22__GPIO2_6 */
IMX_PIN_REG(MX51_PAD_EIM_D22, 0x408, 0x074, 2, 0x000, 0), /* MX51_PAD_EIM_D22__USBH2_DATA6 */
IMX_PIN_REG(MX51_PAD_EIM_D23, 0x40c, 0x078, 5, 0x8d0, 0), /* MX51_PAD_EIM_D23__AUD4_TXFS */
IMX_PIN_REG(MX51_PAD_EIM_D23, 0x40c, 0x078, 0, 0x000, 0), /* MX51_PAD_EIM_D23__EIM_D23 */
IMX_PIN_REG(MX51_PAD_EIM_D23, 0x40c, 0x078, 1, 0x000, 0), /* MX51_PAD_EIM_D23__GPIO2_7 */
IMX_PIN_REG(MX51_PAD_EIM_D23, 0x40c, 0x078, 4, 0x000, 0), /* MX51_PAD_EIM_D23__SPDIF_OUT1 */
IMX_PIN_REG(MX51_PAD_EIM_D23, 0x40c, 0x078, 2, 0x000, 0), /* MX51_PAD_EIM_D23__USBH2_DATA7 */
IMX_PIN_REG(MX51_PAD_EIM_D24, 0x410, 0x07c, 5, 0x8f8, 0), /* MX51_PAD_EIM_D24__AUD6_RXFS */
IMX_PIN_REG(MX51_PAD_EIM_D24, 0x410, 0x07c, 0, 0x000, 0), /* MX51_PAD_EIM_D24__EIM_D24 */
IMX_PIN_REG(MX51_PAD_EIM_D24, 0x410, 0x07c, 1, 0x000, 0), /* MX51_PAD_EIM_D24__GPIO2_8 */
IMX_PIN_REG(MX51_PAD_EIM_D24, 0x410, 0x07c, 4, 0x9bc, 0), /* MX51_PAD_EIM_D24__I2C2_SDA */
IMX_PIN_REG(MX51_PAD_EIM_D24, 0x410, 0x07c, 3, 0x000, 0), /* MX51_PAD_EIM_D24__UART3_CTS */
IMX_PIN_REG(MX51_PAD_EIM_D24, 0x410, 0x07c, 2, 0x000, 0), /* MX51_PAD_EIM_D24__USBOTG_DATA0 */
IMX_PIN_REG(MX51_PAD_EIM_D25, 0x414, 0x080, 0, 0x000, 0), /* MX51_PAD_EIM_D25__EIM_D25 */
IMX_PIN_REG(MX51_PAD_EIM_D25, 0x414, 0x080, 1, 0x9c8, 0), /* MX51_PAD_EIM_D25__KEY_COL6 */
IMX_PIN_REG(MX51_PAD_EIM_D25, 0x414, 0x080, 4, 0x000, 0), /* MX51_PAD_EIM_D25__UART2_CTS */
IMX_PIN_REG(MX51_PAD_EIM_D25, 0x414, 0x080, 3, 0x9f4, 0), /* MX51_PAD_EIM_D25__UART3_RXD */
IMX_PIN_REG(MX51_PAD_EIM_D25, 0x414, 0x080, 2, 0x000, 0), /* MX51_PAD_EIM_D25__USBOTG_DATA1 */
IMX_PIN_REG(MX51_PAD_EIM_D26, 0x418, 0x084, 0, 0x000, 0), /* MX51_PAD_EIM_D26__EIM_D26 */
IMX_PIN_REG(MX51_PAD_EIM_D26, 0x418, 0x084, 1, 0x9cc, 0), /* MX51_PAD_EIM_D26__KEY_COL7 */
IMX_PIN_REG(MX51_PAD_EIM_D26, 0x418, 0x084, 4, 0x9e8, 3), /* MX51_PAD_EIM_D26__UART2_RTS */
IMX_PIN_REG(MX51_PAD_EIM_D26, 0x418, 0x084, 3, 0x000, 0), /* MX51_PAD_EIM_D26__UART3_TXD */
IMX_PIN_REG(MX51_PAD_EIM_D26, 0x418, 0x084, 2, 0x000, 0), /* MX51_PAD_EIM_D26__USBOTG_DATA2 */
IMX_PIN_REG(MX51_PAD_EIM_D27, 0x41c, 0x088, 5, 0x8f4, 0), /* MX51_PAD_EIM_D27__AUD6_RXC */
IMX_PIN_REG(MX51_PAD_EIM_D27, 0x41c, 0x088, 0, 0x000, 0), /* MX51_PAD_EIM_D27__EIM_D27 */
IMX_PIN_REG(MX51_PAD_EIM_D27, 0x41c, 0x088, 1, 0x000, 0), /* MX51_PAD_EIM_D27__GPIO2_9 */
IMX_PIN_REG(MX51_PAD_EIM_D27, 0x41c, 0x088, 4, 0x9b8, 0), /* MX51_PAD_EIM_D27__I2C2_SCL */
IMX_PIN_REG(MX51_PAD_EIM_D27, 0x41c, 0x088, 3, 0x9f0, 3), /* MX51_PAD_EIM_D27__UART3_RTS */
IMX_PIN_REG(MX51_PAD_EIM_D27, 0x41c, 0x088, 2, 0x000, 0), /* MX51_PAD_EIM_D27__USBOTG_DATA3 */
IMX_PIN_REG(MX51_PAD_EIM_D28, 0x420, 0x08c, 5, 0x8f0, 0), /* MX51_PAD_EIM_D28__AUD6_TXD */
IMX_PIN_REG(MX51_PAD_EIM_D28, 0x420, 0x08c, 0, 0x000, 0), /* MX51_PAD_EIM_D28__EIM_D28 */
IMX_PIN_REG(MX51_PAD_EIM_D28, 0x420, 0x08c, 1, 0x9d0, 0), /* MX51_PAD_EIM_D28__KEY_ROW4 */
IMX_PIN_REG(MX51_PAD_EIM_D28, 0x420, 0x08c, 2, 0x000, 0), /* MX51_PAD_EIM_D28__USBOTG_DATA4 */
IMX_PIN_REG(MX51_PAD_EIM_D29, 0x424, 0x090, 5, 0x8ec, 0), /* MX51_PAD_EIM_D29__AUD6_RXD */
IMX_PIN_REG(MX51_PAD_EIM_D29, 0x424, 0x090, 0, 0x000, 0), /* MX51_PAD_EIM_D29__EIM_D29 */
IMX_PIN_REG(MX51_PAD_EIM_D29, 0x424, 0x090, 1, 0x9d4, 0), /* MX51_PAD_EIM_D29__KEY_ROW5 */
IMX_PIN_REG(MX51_PAD_EIM_D29, 0x424, 0x090, 2, 0x000, 0), /* MX51_PAD_EIM_D29__USBOTG_DATA5 */
IMX_PIN_REG(MX51_PAD_EIM_D30, 0x428, 0x094, 5, 0x8fc, 0), /* MX51_PAD_EIM_D30__AUD6_TXC */
IMX_PIN_REG(MX51_PAD_EIM_D30, 0x428, 0x094, 0, 0x000, 0), /* MX51_PAD_EIM_D30__EIM_D30 */
IMX_PIN_REG(MX51_PAD_EIM_D30, 0x428, 0x094, 1, 0x9d8, 0), /* MX51_PAD_EIM_D30__KEY_ROW6 */
IMX_PIN_REG(MX51_PAD_EIM_D30, 0x428, 0x094, 2, 0x000, 0), /* MX51_PAD_EIM_D30__USBOTG_DATA6 */
IMX_PIN_REG(MX51_PAD_EIM_D31, 0x42c, 0x098, 5, 0x900, 0), /* MX51_PAD_EIM_D31__AUD6_TXFS */
IMX_PIN_REG(MX51_PAD_EIM_D31, 0x42c, 0x098, 0, 0x000, 0), /* MX51_PAD_EIM_D31__EIM_D31 */
IMX_PIN_REG(MX51_PAD_EIM_D31, 0x42c, 0x098, 1, 0x9dc, 0), /* MX51_PAD_EIM_D31__KEY_ROW7 */
IMX_PIN_REG(MX51_PAD_EIM_D31, 0x42c, 0x098, 2, 0x000, 0), /* MX51_PAD_EIM_D31__USBOTG_DATA7 */
IMX_PIN_REG(MX51_PAD_EIM_A16, 0x430, 0x09c, 0, 0x000, 0), /* MX51_PAD_EIM_A16__EIM_A16 */
IMX_PIN_REG(MX51_PAD_EIM_A16, 0x430, 0x09c, 1, 0x000, 0), /* MX51_PAD_EIM_A16__GPIO2_10 */
IMX_PIN_REG(MX51_PAD_EIM_A16, 0x430, 0x09c, 7, 0x000, 0), /* MX51_PAD_EIM_A16__OSC_FREQ_SEL0 */
IMX_PIN_REG(MX51_PAD_EIM_A17, 0x434, 0x0a0, 0, 0x000, 0), /* MX51_PAD_EIM_A17__EIM_A17 */
IMX_PIN_REG(MX51_PAD_EIM_A17, 0x434, 0x0a0, 1, 0x000, 0), /* MX51_PAD_EIM_A17__GPIO2_11 */
IMX_PIN_REG(MX51_PAD_EIM_A17, 0x434, 0x0a0, 7, 0x000, 0), /* MX51_PAD_EIM_A17__OSC_FREQ_SEL1 */
IMX_PIN_REG(MX51_PAD_EIM_A18, 0x438, 0x0a4, 7, 0x000, 0), /* MX51_PAD_EIM_A18__BOOT_LPB0 */
IMX_PIN_REG(MX51_PAD_EIM_A18, 0x438, 0x0a4, 0, 0x000, 0), /* MX51_PAD_EIM_A18__EIM_A18 */
IMX_PIN_REG(MX51_PAD_EIM_A18, 0x438, 0x0a4, 1, 0x000, 0), /* MX51_PAD_EIM_A18__GPIO2_12 */
IMX_PIN_REG(MX51_PAD_EIM_A19, 0x43c, 0x0a8, 7, 0x000, 0), /* MX51_PAD_EIM_A19__BOOT_LPB1 */
IMX_PIN_REG(MX51_PAD_EIM_A19, 0x43c, 0x0a8, 0, 0x000, 0), /* MX51_PAD_EIM_A19__EIM_A19 */
IMX_PIN_REG(MX51_PAD_EIM_A19, 0x43c, 0x0a8, 1, 0x000, 0), /* MX51_PAD_EIM_A19__GPIO2_13 */
IMX_PIN_REG(MX51_PAD_EIM_A20, 0x440, 0x0ac, 7, 0x000, 0), /* MX51_PAD_EIM_A20__BOOT_UART_SRC0 */
IMX_PIN_REG(MX51_PAD_EIM_A20, 0x440, 0x0ac, 0, 0x000, 0), /* MX51_PAD_EIM_A20__EIM_A20 */
IMX_PIN_REG(MX51_PAD_EIM_A20, 0x440, 0x0ac, 1, 0x000, 0), /* MX51_PAD_EIM_A20__GPIO2_14 */
IMX_PIN_REG(MX51_PAD_EIM_A21, 0x444, 0x0b0, 7, 0x000, 0), /* MX51_PAD_EIM_A21__BOOT_UART_SRC1 */
IMX_PIN_REG(MX51_PAD_EIM_A21, 0x444, 0x0b0, 0, 0x000, 0), /* MX51_PAD_EIM_A21__EIM_A21 */
IMX_PIN_REG(MX51_PAD_EIM_A21, 0x444, 0x0b0, 1, 0x000, 0), /* MX51_PAD_EIM_A21__GPIO2_15 */
IMX_PIN_REG(MX51_PAD_EIM_A22, 0x448, 0x0b4, 0, 0x000, 0), /* MX51_PAD_EIM_A22__EIM_A22 */
IMX_PIN_REG(MX51_PAD_EIM_A22, 0x448, 0x0b4, 1, 0x000, 0), /* MX51_PAD_EIM_A22__GPIO2_16 */
IMX_PIN_REG(MX51_PAD_EIM_A23, 0x44c, 0x0b8, 7, 0x000, 0), /* MX51_PAD_EIM_A23__BOOT_HPN_EN */
IMX_PIN_REG(MX51_PAD_EIM_A23, 0x44c, 0x0b8, 0, 0x000, 0), /* MX51_PAD_EIM_A23__EIM_A23 */
IMX_PIN_REG(MX51_PAD_EIM_A23, 0x44c, 0x0b8, 1, 0x000, 0), /* MX51_PAD_EIM_A23__GPIO2_17 */
IMX_PIN_REG(MX51_PAD_EIM_A24, 0x450, 0x0bc, 0, 0x000, 0), /* MX51_PAD_EIM_A24__EIM_A24 */
IMX_PIN_REG(MX51_PAD_EIM_A24, 0x450, 0x0bc, 1, 0x000, 0), /* MX51_PAD_EIM_A24__GPIO2_18 */
IMX_PIN_REG(MX51_PAD_EIM_A24, 0x450, 0x0bc, 2, 0x000, 0), /* MX51_PAD_EIM_A24__USBH2_CLK */
IMX_PIN_REG(MX51_PAD_EIM_A25, 0x454, 0x0c0, 6, 0x000, 0), /* MX51_PAD_EIM_A25__DISP1_PIN4 */
IMX_PIN_REG(MX51_PAD_EIM_A25, 0x454, 0x0c0, 0, 0x000, 0), /* MX51_PAD_EIM_A25__EIM_A25 */
IMX_PIN_REG(MX51_PAD_EIM_A25, 0x454, 0x0c0, 1, 0x000, 0), /* MX51_PAD_EIM_A25__GPIO2_19 */
IMX_PIN_REG(MX51_PAD_EIM_A25, 0x454, 0x0c0, 2, 0x000, 0), /* MX51_PAD_EIM_A25__USBH2_DIR */
IMX_PIN_REG(MX51_PAD_EIM_A26, 0x458, 0x0c4, 5, 0x9a0, 0), /* MX51_PAD_EIM_A26__CSI1_DATA_EN */
IMX_PIN_REG(MX51_PAD_EIM_A26, 0x458, 0x0c4, 6, 0x908, 0), /* MX51_PAD_EIM_A26__DISP2_EXT_CLK */
IMX_PIN_REG(MX51_PAD_EIM_A26, 0x458, 0x0c4, 0, 0x000, 0), /* MX51_PAD_EIM_A26__EIM_A26 */
IMX_PIN_REG(MX51_PAD_EIM_A26, 0x458, 0x0c4, 1, 0x000, 0), /* MX51_PAD_EIM_A26__GPIO2_20 */
IMX_PIN_REG(MX51_PAD_EIM_A26, 0x458, 0x0c4, 2, 0x000, 0), /* MX51_PAD_EIM_A26__USBH2_STP */
IMX_PIN_REG(MX51_PAD_EIM_A27, 0x45c, 0x0c8, 5, 0x99c, 0), /* MX51_PAD_EIM_A27__CSI2_DATA_EN */
IMX_PIN_REG(MX51_PAD_EIM_A27, 0x45c, 0x0c8, 6, 0x9a4, 0), /* MX51_PAD_EIM_A27__DISP1_PIN1 */
IMX_PIN_REG(MX51_PAD_EIM_A27, 0x45c, 0x0c8, 0, 0x000, 0), /* MX51_PAD_EIM_A27__EIM_A27 */
IMX_PIN_REG(MX51_PAD_EIM_A27, 0x45c, 0x0c8, 1, 0x000, 0), /* MX51_PAD_EIM_A27__GPIO2_21 */
IMX_PIN_REG(MX51_PAD_EIM_A27, 0x45c, 0x0c8, 2, 0x000, 0), /* MX51_PAD_EIM_A27__USBH2_NXT */
IMX_PIN_REG(MX51_PAD_EIM_EB0, 0x460, 0x0cc, 0, 0x000, 0), /* MX51_PAD_EIM_EB0__EIM_EB0 */
IMX_PIN_REG(MX51_PAD_EIM_EB1, 0x464, 0x0d0, 0, 0x000, 0), /* MX51_PAD_EIM_EB1__EIM_EB1 */
IMX_PIN_REG(MX51_PAD_EIM_EB2, 0x468, 0x0d4, 6, 0x8e0, 0), /* MX51_PAD_EIM_EB2__AUD5_RXFS */
IMX_PIN_REG(MX51_PAD_EIM_EB2, 0x468, 0x0d4, 5, 0x000, 0), /* MX51_PAD_EIM_EB2__CSI1_D2 */
IMX_PIN_REG(MX51_PAD_EIM_EB2, 0x468, 0x0d4, 0, 0x000, 0), /* MX51_PAD_EIM_EB2__EIM_EB2 */
IMX_PIN_REG(MX51_PAD_EIM_EB2, 0x468, 0x0d4, 3, 0x954, 0), /* MX51_PAD_EIM_EB2__FEC_MDIO */
IMX_PIN_REG(MX51_PAD_EIM_EB2, 0x468, 0x0d4, 1, 0x000, 0), /* MX51_PAD_EIM_EB2__GPIO2_22 */
IMX_PIN_REG(MX51_PAD_EIM_EB2, 0x468, 0x0d4, 7, 0x000, 0), /* MX51_PAD_EIM_EB2__GPT_CMPOUT1 */
IMX_PIN_REG(MX51_PAD_EIM_EB3, 0x46c, 0x0d8, 6, 0x8dc, 0), /* MX51_PAD_EIM_EB3__AUD5_RXC */
IMX_PIN_REG(MX51_PAD_EIM_EB3, 0x46c, 0x0d8, 5, 0x000, 0), /* MX51_PAD_EIM_EB3__CSI1_D3 */
IMX_PIN_REG(MX51_PAD_EIM_EB3, 0x46c, 0x0d8, 0, 0x000, 0), /* MX51_PAD_EIM_EB3__EIM_EB3 */
IMX_PIN_REG(MX51_PAD_EIM_EB3, 0x46c, 0x0d8, 3, 0x95c, 0), /* MX51_PAD_EIM_EB3__FEC_RDATA1 */
IMX_PIN_REG(MX51_PAD_EIM_EB3, 0x46c, 0x0d8, 1, 0x000, 0), /* MX51_PAD_EIM_EB3__GPIO2_23 */
IMX_PIN_REG(MX51_PAD_EIM_EB3, 0x46c, 0x0d8, 7, 0x000, 0), /* MX51_PAD_EIM_EB3__GPT_CMPOUT2 */
IMX_PIN_REG(MX51_PAD_EIM_OE, 0x470, 0x0dc, 0, 0x000, 0), /* MX51_PAD_EIM_OE__EIM_OE */
IMX_PIN_REG(MX51_PAD_EIM_OE, 0x470, 0x0dc, 1, 0x000, 0), /* MX51_PAD_EIM_OE__GPIO2_24 */
IMX_PIN_REG(MX51_PAD_EIM_CS0, 0x474, 0x0e0, 0, 0x000, 0), /* MX51_PAD_EIM_CS0__EIM_CS0 */
IMX_PIN_REG(MX51_PAD_EIM_CS0, 0x474, 0x0e0, 1, 0x000, 0), /* MX51_PAD_EIM_CS0__GPIO2_25 */
IMX_PIN_REG(MX51_PAD_EIM_CS1, 0x478, 0x0e4, 0, 0x000, 0), /* MX51_PAD_EIM_CS1__EIM_CS1 */
IMX_PIN_REG(MX51_PAD_EIM_CS1, 0x478, 0x0e4, 1, 0x000, 0), /* MX51_PAD_EIM_CS1__GPIO2_26 */
IMX_PIN_REG(MX51_PAD_EIM_CS2, 0x47c, 0x0e8, 6, 0x8d8, 1), /* MX51_PAD_EIM_CS2__AUD5_TXD */
IMX_PIN_REG(MX51_PAD_EIM_CS2, 0x47c, 0x0e8, 5, 0x000, 0), /* MX51_PAD_EIM_CS2__CSI1_D4 */
IMX_PIN_REG(MX51_PAD_EIM_CS2, 0x47c, 0x0e8, 0, 0x000, 0), /* MX51_PAD_EIM_CS2__EIM_CS2 */
IMX_PIN_REG(MX51_PAD_EIM_CS2, 0x47c, 0x0e8, 3, 0x960, 0), /* MX51_PAD_EIM_CS2__FEC_RDATA2 */
IMX_PIN_REG(MX51_PAD_EIM_CS2, 0x47c, 0x0e8, 1, 0x000, 0), /* MX51_PAD_EIM_CS2__GPIO2_27 */
IMX_PIN_REG(MX51_PAD_EIM_CS2, 0x47c, 0x0e8, 2, 0x000, 0), /* MX51_PAD_EIM_CS2__USBOTG_STP */
IMX_PIN_REG(MX51_PAD_EIM_CS3, 0x480, 0x0ec, 6, 0x8d4, 1), /* MX51_PAD_EIM_CS3__AUD5_RXD */
IMX_PIN_REG(MX51_PAD_EIM_CS3, 0x480, 0x0ec, 5, 0x000, 0), /* MX51_PAD_EIM_CS3__CSI1_D5 */
IMX_PIN_REG(MX51_PAD_EIM_CS3, 0x480, 0x0ec, 0, 0x000, 0), /* MX51_PAD_EIM_CS3__EIM_CS3 */
IMX_PIN_REG(MX51_PAD_EIM_CS3, 0x480, 0x0ec, 3, 0x964, 0), /* MX51_PAD_EIM_CS3__FEC_RDATA3 */
IMX_PIN_REG(MX51_PAD_EIM_CS3, 0x480, 0x0ec, 1, 0x000, 0), /* MX51_PAD_EIM_CS3__GPIO2_28 */
IMX_PIN_REG(MX51_PAD_EIM_CS3, 0x480, 0x0ec, 2, 0x000, 0), /* MX51_PAD_EIM_CS3__USBOTG_NXT */
IMX_PIN_REG(MX51_PAD_EIM_CS4, 0x484, 0x0f0, 6, 0x8e4, 1), /* MX51_PAD_EIM_CS4__AUD5_TXC */
IMX_PIN_REG(MX51_PAD_EIM_CS4, 0x484, 0x0f0, 5, 0x000, 0), /* MX51_PAD_EIM_CS4__CSI1_D6 */
IMX_PIN_REG(MX51_PAD_EIM_CS4, 0x484, 0x0f0, 0, 0x000, 0), /* MX51_PAD_EIM_CS4__EIM_CS4 */
IMX_PIN_REG(MX51_PAD_EIM_CS4, 0x484, 0x0f0, 3, 0x970, 0), /* MX51_PAD_EIM_CS4__FEC_RX_ER */
IMX_PIN_REG(MX51_PAD_EIM_CS4, 0x484, 0x0f0, 1, 0x000, 0), /* MX51_PAD_EIM_CS4__GPIO2_29 */
IMX_PIN_REG(MX51_PAD_EIM_CS4, 0x484, 0x0f0, 2, 0x000, 0), /* MX51_PAD_EIM_CS4__USBOTG_CLK */
IMX_PIN_REG(MX51_PAD_EIM_CS5, 0x488, 0x0f4, 6, 0x8e8, 1), /* MX51_PAD_EIM_CS5__AUD5_TXFS */
IMX_PIN_REG(MX51_PAD_EIM_CS5, 0x488, 0x0f4, 5, 0x000, 0), /* MX51_PAD_EIM_CS5__CSI1_D7 */
IMX_PIN_REG(MX51_PAD_EIM_CS5, 0x488, 0x0f4, 4, 0x904, 0), /* MX51_PAD_EIM_CS5__DISP1_EXT_CLK */
IMX_PIN_REG(MX51_PAD_EIM_CS5, 0x488, 0x0f4, 0, 0x000, 0), /* MX51_PAD_EIM_CS5__EIM_CS5 */
IMX_PIN_REG(MX51_PAD_EIM_CS5, 0x488, 0x0f4, 3, 0x950, 0), /* MX51_PAD_EIM_CS5__FEC_CRS */
IMX_PIN_REG(MX51_PAD_EIM_CS5, 0x488, 0x0f4, 1, 0x000, 0), /* MX51_PAD_EIM_CS5__GPIO2_30 */
IMX_PIN_REG(MX51_PAD_EIM_CS5, 0x488, 0x0f4, 2, 0x000, 0), /* MX51_PAD_EIM_CS5__USBOTG_DIR */
IMX_PIN_REG(MX51_PAD_EIM_DTACK, 0x48c, 0x0f8, 0, 0x000, 0), /* MX51_PAD_EIM_DTACK__EIM_DTACK */
IMX_PIN_REG(MX51_PAD_EIM_DTACK, 0x48c, 0x0f8, 1, 0x000, 0), /* MX51_PAD_EIM_DTACK__GPIO2_31 */
IMX_PIN_REG(MX51_PAD_EIM_LBA, 0x494, 0x0fc, 0, 0x000, 0), /* MX51_PAD_EIM_LBA__EIM_LBA */
IMX_PIN_REG(MX51_PAD_EIM_LBA, 0x494, 0x0fc, 1, 0x978, 0), /* MX51_PAD_EIM_LBA__GPIO3_1 */
IMX_PIN_REG(MX51_PAD_EIM_CRE, 0x4a0, 0x100, 0, 0x000, 0), /* MX51_PAD_EIM_CRE__EIM_CRE */
IMX_PIN_REG(MX51_PAD_EIM_CRE, 0x4a0, 0x100, 1, 0x97c, 0), /* MX51_PAD_EIM_CRE__GPIO3_2 */
IMX_PIN_REG(MX51_PAD_DRAM_CS1, 0x4d0, 0x104, 0, 0x000, 0), /* MX51_PAD_DRAM_CS1__DRAM_CS1 */
IMX_PIN_REG(MX51_PAD_NANDF_WE_B, 0x4e4, 0x108, 3, 0x980, 0), /* MX51_PAD_NANDF_WE_B__GPIO3_3 */
IMX_PIN_REG(MX51_PAD_NANDF_WE_B, 0x4e4, 0x108, 0, 0x000, 0), /* MX51_PAD_NANDF_WE_B__NANDF_WE_B */
IMX_PIN_REG(MX51_PAD_NANDF_WE_B, 0x4e4, 0x108, 1, 0x000, 0), /* MX51_PAD_NANDF_WE_B__PATA_DIOW */
IMX_PIN_REG(MX51_PAD_NANDF_WE_B, 0x4e4, 0x108, 2, 0x93c, 0), /* MX51_PAD_NANDF_WE_B__SD3_DATA0 */
IMX_PIN_REG(MX51_PAD_NANDF_RE_B, 0x4e8, 0x10c, 3, 0x984, 0), /* MX51_PAD_NANDF_RE_B__GPIO3_4 */
IMX_PIN_REG(MX51_PAD_NANDF_RE_B, 0x4e8, 0x10c, 0, 0x000, 0), /* MX51_PAD_NANDF_RE_B__NANDF_RE_B */
IMX_PIN_REG(MX51_PAD_NANDF_RE_B, 0x4e8, 0x10c, 1, 0x000, 0), /* MX51_PAD_NANDF_RE_B__PATA_DIOR */
IMX_PIN_REG(MX51_PAD_NANDF_RE_B, 0x4e8, 0x10c, 2, 0x940, 0), /* MX51_PAD_NANDF_RE_B__SD3_DATA1 */
IMX_PIN_REG(MX51_PAD_NANDF_ALE, 0x4ec, 0x110, 3, 0x988, 0), /* MX51_PAD_NANDF_ALE__GPIO3_5 */
IMX_PIN_REG(MX51_PAD_NANDF_ALE, 0x4ec, 0x110, 0, 0x000, 0), /* MX51_PAD_NANDF_ALE__NANDF_ALE */
IMX_PIN_REG(MX51_PAD_NANDF_ALE, 0x4ec, 0x110, 1, 0x000, 0), /* MX51_PAD_NANDF_ALE__PATA_BUFFER_EN */
IMX_PIN_REG(MX51_PAD_NANDF_CLE, 0x4f0, 0x114, 3, 0x98c, 0), /* MX51_PAD_NANDF_CLE__GPIO3_6 */
IMX_PIN_REG(MX51_PAD_NANDF_CLE, 0x4f0, 0x114, 0, 0x000, 0), /* MX51_PAD_NANDF_CLE__NANDF_CLE */
IMX_PIN_REG(MX51_PAD_NANDF_CLE, 0x4f0, 0x114, 1, 0x000, 0), /* MX51_PAD_NANDF_CLE__PATA_RESET_B */
IMX_PIN_REG(MX51_PAD_NANDF_WP_B, 0x4f4, 0x118, 3, 0x990, 0), /* MX51_PAD_NANDF_WP_B__GPIO3_7 */
IMX_PIN_REG(MX51_PAD_NANDF_WP_B, 0x4f4, 0x118, 0, 0x000, 0), /* MX51_PAD_NANDF_WP_B__NANDF_WP_B */
IMX_PIN_REG(MX51_PAD_NANDF_WP_B, 0x4f4, 0x118, 1, 0x000, 0), /* MX51_PAD_NANDF_WP_B__PATA_DMACK */
IMX_PIN_REG(MX51_PAD_NANDF_WP_B, 0x4f4, 0x118, 2, 0x944, 0), /* MX51_PAD_NANDF_WP_B__SD3_DATA2 */
IMX_PIN_REG(MX51_PAD_NANDF_RB0, 0x4f8, 0x11c, 5, 0x930, 0), /* MX51_PAD_NANDF_RB0__ECSPI2_SS1 */
IMX_PIN_REG(MX51_PAD_NANDF_RB0, 0x4f8, 0x11c, 3, 0x994, 0), /* MX51_PAD_NANDF_RB0__GPIO3_8 */
IMX_PIN_REG(MX51_PAD_NANDF_RB0, 0x4f8, 0x11c, 0, 0x000, 0), /* MX51_PAD_NANDF_RB0__NANDF_RB0 */
IMX_PIN_REG(MX51_PAD_NANDF_RB0, 0x4f8, 0x11c, 1, 0x000, 0), /* MX51_PAD_NANDF_RB0__PATA_DMARQ */
IMX_PIN_REG(MX51_PAD_NANDF_RB0, 0x4f8, 0x11c, 2, 0x948, 0), /* MX51_PAD_NANDF_RB0__SD3_DATA3 */
IMX_PIN_REG(MX51_PAD_NANDF_RB1, 0x4fc, 0x120, 6, 0x91c, 0), /* MX51_PAD_NANDF_RB1__CSPI_MOSI */
IMX_PIN_REG(MX51_PAD_NANDF_RB1, 0x4fc, 0x120, 2, 0x000, 0), /* MX51_PAD_NANDF_RB1__ECSPI2_RDY */
IMX_PIN_REG(MX51_PAD_NANDF_RB1, 0x4fc, 0x120, 3, 0x000, 0), /* MX51_PAD_NANDF_RB1__GPIO3_9 */
IMX_PIN_REG(MX51_PAD_NANDF_RB1, 0x4fc, 0x120, 0, 0x000, 0), /* MX51_PAD_NANDF_RB1__NANDF_RB1 */
IMX_PIN_REG(MX51_PAD_NANDF_RB1, 0x4fc, 0x120, 1, 0x000, 0), /* MX51_PAD_NANDF_RB1__PATA_IORDY */
IMX_PIN_REG(MX51_PAD_NANDF_RB1, 0x4fc, 0x120, 5, 0x000, 0), /* MX51_PAD_NANDF_RB1__SD4_CMD */
IMX_PIN_REG(MX51_PAD_NANDF_RB2, 0x500, 0x124, 5, 0x9a8, 0), /* MX51_PAD_NANDF_RB2__DISP2_WAIT */
IMX_PIN_REG(MX51_PAD_NANDF_RB2, 0x500, 0x124, 2, 0x000, 0), /* MX51_PAD_NANDF_RB2__ECSPI2_SCLK */
IMX_PIN_REG(MX51_PAD_NANDF_RB2, 0x500, 0x124, 1, 0x94c, 0), /* MX51_PAD_NANDF_RB2__FEC_COL */
IMX_PIN_REG(MX51_PAD_NANDF_RB2, 0x500, 0x124, 3, 0x000, 0), /* MX51_PAD_NANDF_RB2__GPIO3_10 */
IMX_PIN_REG(MX51_PAD_NANDF_RB2, 0x500, 0x124, 0, 0x000, 0), /* MX51_PAD_NANDF_RB2__NANDF_RB2 */
IMX_PIN_REG(MX51_PAD_NANDF_RB2, 0x500, 0x124, 7, 0x000, 0), /* MX51_PAD_NANDF_RB2__USBH3_H3_DP */
IMX_PIN_REG(MX51_PAD_NANDF_RB2, 0x500, 0x124, 6, 0xa20, 0), /* MX51_PAD_NANDF_RB2__USBH3_NXT */
IMX_PIN_REG(MX51_PAD_NANDF_RB3, 0x504, 0x128, 5, 0x000, 0), /* MX51_PAD_NANDF_RB3__DISP1_WAIT */
IMX_PIN_REG(MX51_PAD_NANDF_RB3, 0x504, 0x128, 2, 0x000, 0), /* MX51_PAD_NANDF_RB3__ECSPI2_MISO */
IMX_PIN_REG(MX51_PAD_NANDF_RB3, 0x504, 0x128, 1, 0x968, 0), /* MX51_PAD_NANDF_RB3__FEC_RX_CLK */
IMX_PIN_REG(MX51_PAD_NANDF_RB3, 0x504, 0x128, 3, 0x000, 0), /* MX51_PAD_NANDF_RB3__GPIO3_11 */
IMX_PIN_REG(MX51_PAD_NANDF_RB3, 0x504, 0x128, 0, 0x000, 0), /* MX51_PAD_NANDF_RB3__NANDF_RB3 */
IMX_PIN_REG(MX51_PAD_NANDF_RB3, 0x504, 0x128, 6, 0x9f8, 0), /* MX51_PAD_NANDF_RB3__USBH3_CLK */
IMX_PIN_REG(MX51_PAD_NANDF_RB3, 0x504, 0x128, 7, 0x000, 0), /* MX51_PAD_NANDF_RB3__USBH3_H3_DM */
IMX_PIN_REG(MX51_PAD_GPIO_NAND, 0x514, 0x12c, 0, 0x998, 0), /* MX51_PAD_GPIO_NAND__GPIO_NAND */
IMX_PIN_REG(MX51_PAD_GPIO_NAND, 0x514, 0x12c, 1, 0x000, 0), /* MX51_PAD_GPIO_NAND__PATA_INTRQ */
IMX_PIN_REG(MX51_PAD_NANDF_CS0, 0x518, 0x130, 3, 0x000, 0), /* MX51_PAD_NANDF_CS0__GPIO3_16 */
IMX_PIN_REG(MX51_PAD_NANDF_CS0, 0x518, 0x130, 0, 0x000, 0), /* MX51_PAD_NANDF_CS0__NANDF_CS0 */
IMX_PIN_REG(MX51_PAD_NANDF_CS1, 0x51c, 0x134, 3, 0x000, 0), /* MX51_PAD_NANDF_CS1__GPIO3_17 */
IMX_PIN_REG(MX51_PAD_NANDF_CS1, 0x51c, 0x134, 0, 0x000, 0), /* MX51_PAD_NANDF_CS1__NANDF_CS1 */
IMX_PIN_REG(MX51_PAD_NANDF_CS2, 0x520, 0x138, 6, 0x914, 0), /* MX51_PAD_NANDF_CS2__CSPI_SCLK */
IMX_PIN_REG(MX51_PAD_NANDF_CS2, 0x520, 0x138, 2, 0x000, 0), /* MX51_PAD_NANDF_CS2__FEC_TX_ER */
IMX_PIN_REG(MX51_PAD_NANDF_CS2, 0x520, 0x138, 3, 0x000, 0), /* MX51_PAD_NANDF_CS2__GPIO3_18 */
IMX_PIN_REG(MX51_PAD_NANDF_CS2, 0x520, 0x138, 0, 0x000, 0), /* MX51_PAD_NANDF_CS2__NANDF_CS2 */
IMX_PIN_REG(MX51_PAD_NANDF_CS2, 0x520, 0x138, 1, 0x000, 0), /* MX51_PAD_NANDF_CS2__PATA_CS_0 */
IMX_PIN_REG(MX51_PAD_NANDF_CS2, 0x520, 0x138, 5, 0x000, 0), /* MX51_PAD_NANDF_CS2__SD4_CLK */
IMX_PIN_REG(MX51_PAD_NANDF_CS2, 0x520, 0x138, 7, 0x000, 0), /* MX51_PAD_NANDF_CS2__USBH3_H1_DP */
IMX_PIN_REG(MX51_PAD_NANDF_CS3, 0x524, 0x13c, 2, 0x000, 0), /* MX51_PAD_NANDF_CS3__FEC_MDC */
IMX_PIN_REG(MX51_PAD_NANDF_CS3, 0x524, 0x13c, 3, 0x000, 0), /* MX51_PAD_NANDF_CS3__GPIO3_19 */
IMX_PIN_REG(MX51_PAD_NANDF_CS3, 0x524, 0x13c, 0, 0x000, 0), /* MX51_PAD_NANDF_CS3__NANDF_CS3 */
IMX_PIN_REG(MX51_PAD_NANDF_CS3, 0x524, 0x13c, 1, 0x000, 0), /* MX51_PAD_NANDF_CS3__PATA_CS_1 */
IMX_PIN_REG(MX51_PAD_NANDF_CS3, 0x524, 0x13c, 5, 0x000, 0), /* MX51_PAD_NANDF_CS3__SD4_DAT0 */
IMX_PIN_REG(MX51_PAD_NANDF_CS3, 0x524, 0x13c, 7, 0x000, 0), /* MX51_PAD_NANDF_CS3__USBH3_H1_DM */
IMX_PIN_REG(MX51_PAD_NANDF_CS4, 0x528, 0x140, 2, 0x000, 0), /* MX51_PAD_NANDF_CS4__FEC_TDATA1 */
IMX_PIN_REG(MX51_PAD_NANDF_CS4, 0x528, 0x140, 3, 0x000, 0), /* MX51_PAD_NANDF_CS4__GPIO3_20 */
IMX_PIN_REG(MX51_PAD_NANDF_CS4, 0x528, 0x140, 0, 0x000, 0), /* MX51_PAD_NANDF_CS4__NANDF_CS4 */
IMX_PIN_REG(MX51_PAD_NANDF_CS4, 0x528, 0x140, 1, 0x000, 0), /* MX51_PAD_NANDF_CS4__PATA_DA_0 */
IMX_PIN_REG(MX51_PAD_NANDF_CS4, 0x528, 0x140, 5, 0x000, 0), /* MX51_PAD_NANDF_CS4__SD4_DAT1 */
IMX_PIN_REG(MX51_PAD_NANDF_CS4, 0x528, 0x140, 7, 0xa24, 0), /* MX51_PAD_NANDF_CS4__USBH3_STP */
IMX_PIN_REG(MX51_PAD_NANDF_CS5, 0x52c, 0x144, 2, 0x000, 0), /* MX51_PAD_NANDF_CS5__FEC_TDATA2 */
IMX_PIN_REG(MX51_PAD_NANDF_CS5, 0x52c, 0x144, 3, 0x000, 0), /* MX51_PAD_NANDF_CS5__GPIO3_21 */
IMX_PIN_REG(MX51_PAD_NANDF_CS5, 0x52c, 0x144, 0, 0x000, 0), /* MX51_PAD_NANDF_CS5__NANDF_CS5 */
IMX_PIN_REG(MX51_PAD_NANDF_CS5, 0x52c, 0x144, 1, 0x000, 0), /* MX51_PAD_NANDF_CS5__PATA_DA_1 */
IMX_PIN_REG(MX51_PAD_NANDF_CS5, 0x52c, 0x144, 5, 0x000, 0), /* MX51_PAD_NANDF_CS5__SD4_DAT2 */
IMX_PIN_REG(MX51_PAD_NANDF_CS5, 0x52c, 0x144, 7, 0xa1c, 0), /* MX51_PAD_NANDF_CS5__USBH3_DIR */
IMX_PIN_REG(MX51_PAD_NANDF_CS6, 0x530, 0x148, 7, 0x928, 0), /* MX51_PAD_NANDF_CS6__CSPI_SS3 */
IMX_PIN_REG(MX51_PAD_NANDF_CS6, 0x530, 0x148, 2, 0x000, 0), /* MX51_PAD_NANDF_CS6__FEC_TDATA3 */
IMX_PIN_REG(MX51_PAD_NANDF_CS6, 0x530, 0x148, 3, 0x000, 0), /* MX51_PAD_NANDF_CS6__GPIO3_22 */
IMX_PIN_REG(MX51_PAD_NANDF_CS6, 0x530, 0x148, 0, 0x000, 0), /* MX51_PAD_NANDF_CS6__NANDF_CS6 */
IMX_PIN_REG(MX51_PAD_NANDF_CS6, 0x530, 0x148, 1, 0x000, 0), /* MX51_PAD_NANDF_CS6__PATA_DA_2 */
IMX_PIN_REG(MX51_PAD_NANDF_CS6, 0x530, 0x148, 5, 0x000, 0), /* MX51_PAD_NANDF_CS6__SD4_DAT3 */
IMX_PIN_REG(MX51_PAD_NANDF_CS7, 0x534, 0x14c, 1, 0x000, 0), /* MX51_PAD_NANDF_CS7__FEC_TX_EN */
IMX_PIN_REG(MX51_PAD_NANDF_CS7, 0x534, 0x14c, 3, 0x000, 0), /* MX51_PAD_NANDF_CS7__GPIO3_23 */
IMX_PIN_REG(MX51_PAD_NANDF_CS7, 0x534, 0x14c, 0, 0x000, 0), /* MX51_PAD_NANDF_CS7__NANDF_CS7 */
IMX_PIN_REG(MX51_PAD_NANDF_CS7, 0x534, 0x14c, 5, 0x000, 0), /* MX51_PAD_NANDF_CS7__SD3_CLK */
IMX_PIN_REG(MX51_PAD_NANDF_RDY_INT, 0x538, 0x150, 2, 0x000, 0), /* MX51_PAD_NANDF_RDY_INT__ECSPI2_SS0 */
IMX_PIN_REG(MX51_PAD_NANDF_RDY_INT, 0x538, 0x150, 1, 0x974, 0), /* MX51_PAD_NANDF_RDY_INT__FEC_TX_CLK */
IMX_PIN_REG(MX51_PAD_NANDF_RDY_INT, 0x538, 0x150, 3, 0x000, 0), /* MX51_PAD_NANDF_RDY_INT__GPIO3_24 */
IMX_PIN_REG(MX51_PAD_NANDF_RDY_INT, 0x538, 0x150, 0, 0x938, 0), /* MX51_PAD_NANDF_RDY_INT__NANDF_RDY_INT */
IMX_PIN_REG(MX51_PAD_NANDF_RDY_INT, 0x538, 0x150, 5, 0x000, 0), /* MX51_PAD_NANDF_RDY_INT__SD3_CMD */
IMX_PIN_REG(MX51_PAD_NANDF_D15, 0x53c, 0x154, 2, 0x000, 0), /* MX51_PAD_NANDF_D15__ECSPI2_MOSI */
IMX_PIN_REG(MX51_PAD_NANDF_D15, 0x53c, 0x154, 3, 0x000, 0), /* MX51_PAD_NANDF_D15__GPIO3_25 */
IMX_PIN_REG(MX51_PAD_NANDF_D15, 0x53c, 0x154, 0, 0x000, 0), /* MX51_PAD_NANDF_D15__NANDF_D15 */
IMX_PIN_REG(MX51_PAD_NANDF_D15, 0x53c, 0x154, 1, 0x000, 0), /* MX51_PAD_NANDF_D15__PATA_DATA15 */
IMX_PIN_REG(MX51_PAD_NANDF_D15, 0x53c, 0x154, 5, 0x000, 0), /* MX51_PAD_NANDF_D15__SD3_DAT7 */
IMX_PIN_REG(MX51_PAD_NANDF_D14, 0x540, 0x158, 2, 0x934, 0), /* MX51_PAD_NANDF_D14__ECSPI2_SS3 */
IMX_PIN_REG(MX51_PAD_NANDF_D14, 0x540, 0x158, 3, 0x000, 0), /* MX51_PAD_NANDF_D14__GPIO3_26 */
IMX_PIN_REG(MX51_PAD_NANDF_D14, 0x540, 0x158, 0, 0x000, 0), /* MX51_PAD_NANDF_D14__NANDF_D14 */
IMX_PIN_REG(MX51_PAD_NANDF_D14, 0x540, 0x158, 1, 0x000, 0), /* MX51_PAD_NANDF_D14__PATA_DATA14 */
IMX_PIN_REG(MX51_PAD_NANDF_D14, 0x540, 0x158, 5, 0x000, 0), /* MX51_PAD_NANDF_D14__SD3_DAT6 */
IMX_PIN_REG(MX51_PAD_NANDF_D13, 0x544, 0x15c, 2, 0x000, 0), /* MX51_PAD_NANDF_D13__ECSPI2_SS2 */
IMX_PIN_REG(MX51_PAD_NANDF_D13, 0x544, 0x15c, 3, 0x000, 0), /* MX51_PAD_NANDF_D13__GPIO3_27 */
IMX_PIN_REG(MX51_PAD_NANDF_D13, 0x544, 0x15c, 0, 0x000, 0), /* MX51_PAD_NANDF_D13__NANDF_D13 */
IMX_PIN_REG(MX51_PAD_NANDF_D13, 0x544, 0x15c, 1, 0x000, 0), /* MX51_PAD_NANDF_D13__PATA_DATA13 */
IMX_PIN_REG(MX51_PAD_NANDF_D13, 0x544, 0x15c, 5, 0x000, 0), /* MX51_PAD_NANDF_D13__SD3_DAT5 */
IMX_PIN_REG(MX51_PAD_NANDF_D12, 0x548, 0x160, 2, 0x930, 1), /* MX51_PAD_NANDF_D12__ECSPI2_SS1 */
IMX_PIN_REG(MX51_PAD_NANDF_D12, 0x548, 0x160, 3, 0x000, 0), /* MX51_PAD_NANDF_D12__GPIO3_28 */
IMX_PIN_REG(MX51_PAD_NANDF_D12, 0x548, 0x160, 0, 0x000, 0), /* MX51_PAD_NANDF_D12__NANDF_D12 */
IMX_PIN_REG(MX51_PAD_NANDF_D12, 0x548, 0x160, 1, 0x000, 0), /* MX51_PAD_NANDF_D12__PATA_DATA12 */
IMX_PIN_REG(MX51_PAD_NANDF_D12, 0x548, 0x160, 5, 0x000, 0), /* MX51_PAD_NANDF_D12__SD3_DAT4 */
IMX_PIN_REG(MX51_PAD_NANDF_D11, 0x54c, 0x164, 2, 0x96c, 0), /* MX51_PAD_NANDF_D11__FEC_RX_DV */
IMX_PIN_REG(MX51_PAD_NANDF_D11, 0x54c, 0x164, 3, 0x000, 0), /* MX51_PAD_NANDF_D11__GPIO3_29 */
IMX_PIN_REG(MX51_PAD_NANDF_D11, 0x54c, 0x164, 0, 0x000, 0), /* MX51_PAD_NANDF_D11__NANDF_D11 */
IMX_PIN_REG(MX51_PAD_NANDF_D11, 0x54c, 0x164, 1, 0x000, 0), /* MX51_PAD_NANDF_D11__PATA_DATA11 */
IMX_PIN_REG(MX51_PAD_NANDF_D11, 0x54c, 0x164, 5, 0x948, 1), /* MX51_PAD_NANDF_D11__SD3_DATA3 */
IMX_PIN_REG(MX51_PAD_NANDF_D10, 0x550, 0x168, 3, 0x000, 0), /* MX51_PAD_NANDF_D10__GPIO3_30 */
IMX_PIN_REG(MX51_PAD_NANDF_D10, 0x550, 0x168, 0, 0x000, 0), /* MX51_PAD_NANDF_D10__NANDF_D10 */
IMX_PIN_REG(MX51_PAD_NANDF_D10, 0x550, 0x168, 1, 0x000, 0), /* MX51_PAD_NANDF_D10__PATA_DATA10 */
IMX_PIN_REG(MX51_PAD_NANDF_D10, 0x550, 0x168, 5, 0x944, 1), /* MX51_PAD_NANDF_D10__SD3_DATA2 */
IMX_PIN_REG(MX51_PAD_NANDF_D9, 0x554, 0x16c, 2, 0x958, 0), /* MX51_PAD_NANDF_D9__FEC_RDATA0 */
IMX_PIN_REG(MX51_PAD_NANDF_D9, 0x554, 0x16c, 3, 0x000, 0), /* MX51_PAD_NANDF_D9__GPIO3_31 */
IMX_PIN_REG(MX51_PAD_NANDF_D9, 0x554, 0x16c, 0, 0x000, 0), /* MX51_PAD_NANDF_D9__NANDF_D9 */
IMX_PIN_REG(MX51_PAD_NANDF_D9, 0x554, 0x16c, 1, 0x000, 0), /* MX51_PAD_NANDF_D9__PATA_DATA9 */
IMX_PIN_REG(MX51_PAD_NANDF_D9, 0x554, 0x16c, 5, 0x940, 1), /* MX51_PAD_NANDF_D9__SD3_DATA1 */
IMX_PIN_REG(MX51_PAD_NANDF_D8, 0x558, 0x170, 2, 0x000, 0), /* MX51_PAD_NANDF_D8__FEC_TDATA0 */
IMX_PIN_REG(MX51_PAD_NANDF_D8, 0x558, 0x170, 3, 0x000, 0), /* MX51_PAD_NANDF_D8__GPIO4_0 */
IMX_PIN_REG(MX51_PAD_NANDF_D8, 0x558, 0x170, 0, 0x000, 0), /* MX51_PAD_NANDF_D8__NANDF_D8 */
IMX_PIN_REG(MX51_PAD_NANDF_D8, 0x558, 0x170, 1, 0x000, 0), /* MX51_PAD_NANDF_D8__PATA_DATA8 */
IMX_PIN_REG(MX51_PAD_NANDF_D8, 0x558, 0x170, 5, 0x93c, 1), /* MX51_PAD_NANDF_D8__SD3_DATA0 */
IMX_PIN_REG(MX51_PAD_NANDF_D7, 0x55c, 0x174, 3, 0x000, 0), /* MX51_PAD_NANDF_D7__GPIO4_1 */
IMX_PIN_REG(MX51_PAD_NANDF_D7, 0x55c, 0x174, 0, 0x000, 0), /* MX51_PAD_NANDF_D7__NANDF_D7 */
IMX_PIN_REG(MX51_PAD_NANDF_D7, 0x55c, 0x174, 1, 0x000, 0), /* MX51_PAD_NANDF_D7__PATA_DATA7 */
IMX_PIN_REG(MX51_PAD_NANDF_D7, 0x55c, 0x174, 5, 0x9fc, 0), /* MX51_PAD_NANDF_D7__USBH3_DATA0 */
IMX_PIN_REG(MX51_PAD_NANDF_D6, 0x560, 0x178, 3, 0x000, 0), /* MX51_PAD_NANDF_D6__GPIO4_2 */
IMX_PIN_REG(MX51_PAD_NANDF_D6, 0x560, 0x178, 0, 0x000, 0), /* MX51_PAD_NANDF_D6__NANDF_D6 */
IMX_PIN_REG(MX51_PAD_NANDF_D6, 0x560, 0x178, 1, 0x000, 0), /* MX51_PAD_NANDF_D6__PATA_DATA6 */
IMX_PIN_REG(MX51_PAD_NANDF_D6, 0x560, 0x178, 2, 0x000, 0), /* MX51_PAD_NANDF_D6__SD4_LCTL */
IMX_PIN_REG(MX51_PAD_NANDF_D6, 0x560, 0x178, 5, 0xa00, 0), /* MX51_PAD_NANDF_D6__USBH3_DATA1 */
IMX_PIN_REG(MX51_PAD_NANDF_D5, 0x564, 0x17c, 3, 0x000, 0), /* MX51_PAD_NANDF_D5__GPIO4_3 */
IMX_PIN_REG(MX51_PAD_NANDF_D5, 0x564, 0x17c, 0, 0x000, 0), /* MX51_PAD_NANDF_D5__NANDF_D5 */
IMX_PIN_REG(MX51_PAD_NANDF_D5, 0x564, 0x17c, 1, 0x000, 0), /* MX51_PAD_NANDF_D5__PATA_DATA5 */
IMX_PIN_REG(MX51_PAD_NANDF_D5, 0x564, 0x17c, 2, 0x000, 0), /* MX51_PAD_NANDF_D5__SD4_WP */
IMX_PIN_REG(MX51_PAD_NANDF_D5, 0x564, 0x17c, 5, 0xa04, 0), /* MX51_PAD_NANDF_D5__USBH3_DATA2 */
IMX_PIN_REG(MX51_PAD_NANDF_D4, 0x568, 0x180, 3, 0x000, 0), /* MX51_PAD_NANDF_D4__GPIO4_4 */
IMX_PIN_REG(MX51_PAD_NANDF_D4, 0x568, 0x180, 0, 0x000, 0), /* MX51_PAD_NANDF_D4__NANDF_D4 */
IMX_PIN_REG(MX51_PAD_NANDF_D4, 0x568, 0x180, 1, 0x000, 0), /* MX51_PAD_NANDF_D4__PATA_DATA4 */
IMX_PIN_REG(MX51_PAD_NANDF_D4, 0x568, 0x180, 2, 0x000, 0), /* MX51_PAD_NANDF_D4__SD4_CD */
IMX_PIN_REG(MX51_PAD_NANDF_D4, 0x568, 0x180, 5, 0xa08, 0), /* MX51_PAD_NANDF_D4__USBH3_DATA3 */
IMX_PIN_REG(MX51_PAD_NANDF_D3, 0x56c, 0x184, 3, 0x000, 0), /* MX51_PAD_NANDF_D3__GPIO4_5 */
IMX_PIN_REG(MX51_PAD_NANDF_D3, 0x56c, 0x184, 0, 0x000, 0), /* MX51_PAD_NANDF_D3__NANDF_D3 */
IMX_PIN_REG(MX51_PAD_NANDF_D3, 0x56c, 0x184, 1, 0x000, 0), /* MX51_PAD_NANDF_D3__PATA_DATA3 */
IMX_PIN_REG(MX51_PAD_NANDF_D3, 0x56c, 0x184, 2, 0x000, 0), /* MX51_PAD_NANDF_D3__SD4_DAT4 */
IMX_PIN_REG(MX51_PAD_NANDF_D3, 0x56c, 0x184, 5, 0xa0c, 0), /* MX51_PAD_NANDF_D3__USBH3_DATA4 */
IMX_PIN_REG(MX51_PAD_NANDF_D2, 0x570, 0x188, 3, 0x000, 0), /* MX51_PAD_NANDF_D2__GPIO4_6 */
IMX_PIN_REG(MX51_PAD_NANDF_D2, 0x570, 0x188, 0, 0x000, 0), /* MX51_PAD_NANDF_D2__NANDF_D2 */
IMX_PIN_REG(MX51_PAD_NANDF_D2, 0x570, 0x188, 1, 0x000, 0), /* MX51_PAD_NANDF_D2__PATA_DATA2 */
IMX_PIN_REG(MX51_PAD_NANDF_D2, 0x570, 0x188, 2, 0x000, 0), /* MX51_PAD_NANDF_D2__SD4_DAT5 */
IMX_PIN_REG(MX51_PAD_NANDF_D2, 0x570, 0x188, 5, 0xa10, 0), /* MX51_PAD_NANDF_D2__USBH3_DATA5 */
IMX_PIN_REG(MX51_PAD_NANDF_D1, 0x574, 0x18c, 3, 0x000, 0), /* MX51_PAD_NANDF_D1__GPIO4_7 */
IMX_PIN_REG(MX51_PAD_NANDF_D1, 0x574, 0x18c, 0, 0x000, 0), /* MX51_PAD_NANDF_D1__NANDF_D1 */
IMX_PIN_REG(MX51_PAD_NANDF_D1, 0x574, 0x18c, 1, 0x000, 0), /* MX51_PAD_NANDF_D1__PATA_DATA1 */
IMX_PIN_REG(MX51_PAD_NANDF_D1, 0x574, 0x18c, 2, 0x000, 0), /* MX51_PAD_NANDF_D1__SD4_DAT6 */
IMX_PIN_REG(MX51_PAD_NANDF_D1, 0x574, 0x18c, 5, 0xa14, 0), /* MX51_PAD_NANDF_D1__USBH3_DATA6 */
IMX_PIN_REG(MX51_PAD_NANDF_D0, 0x578, 0x190, 3, 0x000, 0), /* MX51_PAD_NANDF_D0__GPIO4_8 */
IMX_PIN_REG(MX51_PAD_NANDF_D0, 0x578, 0x190, 0, 0x000, 0), /* MX51_PAD_NANDF_D0__NANDF_D0 */
IMX_PIN_REG(MX51_PAD_NANDF_D0, 0x578, 0x190, 1, 0x000, 0), /* MX51_PAD_NANDF_D0__PATA_DATA0 */
IMX_PIN_REG(MX51_PAD_NANDF_D0, 0x578, 0x190, 2, 0x000, 0), /* MX51_PAD_NANDF_D0__SD4_DAT7 */
IMX_PIN_REG(MX51_PAD_NANDF_D0, 0x578, 0x190, 5, 0xa18, 0), /* MX51_PAD_NANDF_D0__USBH3_DATA7 */
IMX_PIN_REG(MX51_PAD_CSI1_D8, 0x57c, 0x194, 0, 0x000, 0), /* MX51_PAD_CSI1_D8__CSI1_D8 */
IMX_PIN_REG(MX51_PAD_CSI1_D8, 0x57c, 0x194, 3, 0x998, 1), /* MX51_PAD_CSI1_D8__GPIO3_12 */
IMX_PIN_REG(MX51_PAD_CSI1_D9, 0x580, 0x198, 0, 0x000, 0), /* MX51_PAD_CSI1_D9__CSI1_D9 */
IMX_PIN_REG(MX51_PAD_CSI1_D9, 0x580, 0x198, 3, 0x000, 0), /* MX51_PAD_CSI1_D9__GPIO3_13 */
IMX_PIN_REG(MX51_PAD_CSI1_D10, 0x584, 0x19c, 0, 0x000, 0), /* MX51_PAD_CSI1_D10__CSI1_D10 */
IMX_PIN_REG(MX51_PAD_CSI1_D11, 0x588, 0x1a0, 0, 0x000, 0), /* MX51_PAD_CSI1_D11__CSI1_D11 */
IMX_PIN_REG(MX51_PAD_CSI1_D12, 0x58c, 0x1a4, 0, 0x000, 0), /* MX51_PAD_CSI1_D12__CSI1_D12 */
IMX_PIN_REG(MX51_PAD_CSI1_D13, 0x590, 0x1a8, 0, 0x000, 0), /* MX51_PAD_CSI1_D13__CSI1_D13 */
IMX_PIN_REG(MX51_PAD_CSI1_D14, 0x594, 0x1ac, 0, 0x000, 0), /* MX51_PAD_CSI1_D14__CSI1_D14 */
IMX_PIN_REG(MX51_PAD_CSI1_D15, 0x598, 0x1b0, 0, 0x000, 0), /* MX51_PAD_CSI1_D15__CSI1_D15 */
IMX_PIN_REG(MX51_PAD_CSI1_D16, 0x59c, 0x1b4, 0, 0x000, 0), /* MX51_PAD_CSI1_D16__CSI1_D16 */
IMX_PIN_REG(MX51_PAD_CSI1_D17, 0x5a0, 0x1b8, 0, 0x000, 0), /* MX51_PAD_CSI1_D17__CSI1_D17 */
IMX_PIN_REG(MX51_PAD_CSI1_D18, 0x5a4, 0x1bc, 0, 0x000, 0), /* MX51_PAD_CSI1_D18__CSI1_D18 */
IMX_PIN_REG(MX51_PAD_CSI1_D19, 0x5a8, 0x1c0, 0, 0x000, 0), /* MX51_PAD_CSI1_D19__CSI1_D19 */
IMX_PIN_REG(MX51_PAD_CSI1_VSYNC, 0x5ac, 0x1c4, 0, 0x000, 0), /* MX51_PAD_CSI1_VSYNC__CSI1_VSYNC */
IMX_PIN_REG(MX51_PAD_CSI1_VSYNC, 0x5ac, 0x1c4, 3, 0x000, 0), /* MX51_PAD_CSI1_VSYNC__GPIO3_14 */
IMX_PIN_REG(MX51_PAD_CSI1_HSYNC, 0x5b0, 0x1c8, 0, 0x000, 0), /* MX51_PAD_CSI1_HSYNC__CSI1_HSYNC */
IMX_PIN_REG(MX51_PAD_CSI1_HSYNC, 0x5b0, 0x1c8, 3, 0x000, 0), /* MX51_PAD_CSI1_HSYNC__GPIO3_15 */
IMX_PIN_REG(MX51_PAD_CSI1_PIXCLK, 0x5b4, NO_MUX, 0, 0x000, 0), /* MX51_PAD_CSI1_PIXCLK__CSI1_PIXCLK */
IMX_PIN_REG(MX51_PAD_CSI1_MCLK, 0x5b8, NO_MUX, 0, 0x000, 0), /* MX51_PAD_CSI1_MCLK__CSI1_MCLK */
IMX_PIN_REG(MX51_PAD_CSI2_D12, 0x5bc, 0x1cc, 0, 0x000, 0), /* MX51_PAD_CSI2_D12__CSI2_D12 */
IMX_PIN_REG(MX51_PAD_CSI2_D12, 0x5bc, 0x1cc, 3, 0x000, 0), /* MX51_PAD_CSI2_D12__GPIO4_9 */
IMX_PIN_REG(MX51_PAD_CSI2_D13, 0x5c0, 0x1d0, 0, 0x000, 0), /* MX51_PAD_CSI2_D13__CSI2_D13 */
IMX_PIN_REG(MX51_PAD_CSI2_D13, 0x5c0, 0x1d0, 3, 0x000, 0), /* MX51_PAD_CSI2_D13__GPIO4_10 */
IMX_PIN_REG(MX51_PAD_CSI2_D14, 0x5c4, 0x1d4, 0, 0x000, 0), /* MX51_PAD_CSI2_D14__CSI2_D14 */
IMX_PIN_REG(MX51_PAD_CSI2_D15, 0x5c8, 0x1d8, 0, 0x000, 0), /* MX51_PAD_CSI2_D15__CSI2_D15 */
IMX_PIN_REG(MX51_PAD_CSI2_D16, 0x5cc, 0x1dc, 0, 0x000, 0), /* MX51_PAD_CSI2_D16__CSI2_D16 */
IMX_PIN_REG(MX51_PAD_CSI2_D17, 0x5d0, 0x1e0, 0, 0x000, 0), /* MX51_PAD_CSI2_D17__CSI2_D17 */
IMX_PIN_REG(MX51_PAD_CSI2_D18, 0x5d4, 0x1e4, 0, 0x000, 0), /* MX51_PAD_CSI2_D18__CSI2_D18 */
IMX_PIN_REG(MX51_PAD_CSI2_D18, 0x5d4, 0x1e4, 3, 0x000, 0), /* MX51_PAD_CSI2_D18__GPIO4_11 */
IMX_PIN_REG(MX51_PAD_CSI2_D19, 0x5d8, 0x1e8, 0, 0x000, 0), /* MX51_PAD_CSI2_D19__CSI2_D19 */
IMX_PIN_REG(MX51_PAD_CSI2_D19, 0x5d8, 0x1e8, 3, 0x000, 0), /* MX51_PAD_CSI2_D19__GPIO4_12 */
IMX_PIN_REG(MX51_PAD_CSI2_VSYNC, 0x5dc, 0x1ec, 0, 0x000, 0), /* MX51_PAD_CSI2_VSYNC__CSI2_VSYNC */
IMX_PIN_REG(MX51_PAD_CSI2_VSYNC, 0x5dc, 0x1ec, 3, 0x000, 0), /* MX51_PAD_CSI2_VSYNC__GPIO4_13 */
IMX_PIN_REG(MX51_PAD_CSI2_HSYNC, 0x5e0, 0x1f0, 0, 0x000, 0), /* MX51_PAD_CSI2_HSYNC__CSI2_HSYNC */
IMX_PIN_REG(MX51_PAD_CSI2_HSYNC, 0x5e0, 0x1f0, 3, 0x000, 0), /* MX51_PAD_CSI2_HSYNC__GPIO4_14 */
IMX_PIN_REG(MX51_PAD_CSI2_PIXCLK, 0x5e4, 0x1f4, 0, 0x000, 0), /* MX51_PAD_CSI2_PIXCLK__CSI2_PIXCLK */
IMX_PIN_REG(MX51_PAD_CSI2_PIXCLK, 0x5e4, 0x1f4, 3, 0x000, 0), /* MX51_PAD_CSI2_PIXCLK__GPIO4_15 */
IMX_PIN_REG(MX51_PAD_I2C1_CLK, 0x5e8, 0x1f8, 3, 0x000, 0), /* MX51_PAD_I2C1_CLK__GPIO4_16 */
IMX_PIN_REG(MX51_PAD_I2C1_CLK, 0x5e8, 0x1f8, 0, 0x000, 0), /* MX51_PAD_I2C1_CLK__I2C1_CLK */
IMX_PIN_REG(MX51_PAD_I2C1_DAT, 0x5ec, 0x1fc, 3, 0x000, 0), /* MX51_PAD_I2C1_DAT__GPIO4_17 */
IMX_PIN_REG(MX51_PAD_I2C1_DAT, 0x5ec, 0x1fc, 0, 0x000, 0), /* MX51_PAD_I2C1_DAT__I2C1_DAT */
IMX_PIN_REG(MX51_PAD_AUD3_BB_TXD, 0x5f0, 0x200, 0, 0x000, 0), /* MX51_PAD_AUD3_BB_TXD__AUD3_TXD */
IMX_PIN_REG(MX51_PAD_AUD3_BB_TXD, 0x5f0, 0x200, 3, 0x000, 0), /* MX51_PAD_AUD3_BB_TXD__GPIO4_18 */
IMX_PIN_REG(MX51_PAD_AUD3_BB_RXD, 0x5f4, 0x204, 0, 0x000, 0), /* MX51_PAD_AUD3_BB_RXD__AUD3_RXD */
IMX_PIN_REG(MX51_PAD_AUD3_BB_RXD, 0x5f4, 0x204, 3, 0x000, 0), /* MX51_PAD_AUD3_BB_RXD__GPIO4_19 */
IMX_PIN_REG(MX51_PAD_AUD3_BB_RXD, 0x5f4, 0x204, 1, 0x9f4, 2), /* MX51_PAD_AUD3_BB_RXD__UART3_RXD */
IMX_PIN_REG(MX51_PAD_AUD3_BB_CK, 0x5f8, 0x208, 0, 0x000, 0), /* MX51_PAD_AUD3_BB_CK__AUD3_TXC */
IMX_PIN_REG(MX51_PAD_AUD3_BB_CK, 0x5f8, 0x208, 3, 0x000, 0), /* MX51_PAD_AUD3_BB_CK__GPIO4_20 */
IMX_PIN_REG(MX51_PAD_AUD3_BB_FS, 0x5fc, 0x20c, 0, 0x000, 0), /* MX51_PAD_AUD3_BB_FS__AUD3_TXFS */
IMX_PIN_REG(MX51_PAD_AUD3_BB_FS, 0x5fc, 0x20c, 3, 0x000, 0), /* MX51_PAD_AUD3_BB_FS__GPIO4_21 */
IMX_PIN_REG(MX51_PAD_AUD3_BB_FS, 0x5fc, 0x20c, 1, 0x000, 0), /* MX51_PAD_AUD3_BB_FS__UART3_TXD */
IMX_PIN_REG(MX51_PAD_CSPI1_MOSI, 0x600, 0x210, 0, 0x000, 0), /* MX51_PAD_CSPI1_MOSI__ECSPI1_MOSI */
IMX_PIN_REG(MX51_PAD_CSPI1_MOSI, 0x600, 0x210, 3, 0x000, 0), /* MX51_PAD_CSPI1_MOSI__GPIO4_22 */
IMX_PIN_REG(MX51_PAD_CSPI1_MOSI, 0x600, 0x210, 1, 0x9b4, 1), /* MX51_PAD_CSPI1_MOSI__I2C1_SDA */
IMX_PIN_REG(MX51_PAD_CSPI1_MISO, 0x604, 0x214, 1, 0x8c4, 1), /* MX51_PAD_CSPI1_MISO__AUD4_RXD */
IMX_PIN_REG(MX51_PAD_CSPI1_MISO, 0x604, 0x214, 0, 0x000, 0), /* MX51_PAD_CSPI1_MISO__ECSPI1_MISO */
IMX_PIN_REG(MX51_PAD_CSPI1_MISO, 0x604, 0x214, 3, 0x000, 0), /* MX51_PAD_CSPI1_MISO__GPIO4_23 */
IMX_PIN_REG(MX51_PAD_CSPI1_SS0, 0x608, 0x218, 1, 0x8cc, 1), /* MX51_PAD_CSPI1_SS0__AUD4_TXC */
IMX_PIN_REG(MX51_PAD_CSPI1_SS0, 0x608, 0x218, 0, 0x000, 0), /* MX51_PAD_CSPI1_SS0__ECSPI1_SS0 */
IMX_PIN_REG(MX51_PAD_CSPI1_SS0, 0x608, 0x218, 3, 0x000, 0), /* MX51_PAD_CSPI1_SS0__GPIO4_24 */
IMX_PIN_REG(MX51_PAD_CSPI1_SS1, 0x60c, 0x21c, 1, 0x8c8, 1), /* MX51_PAD_CSPI1_SS1__AUD4_TXD */
IMX_PIN_REG(MX51_PAD_CSPI1_SS1, 0x60c, 0x21c, 0, 0x000, 0), /* MX51_PAD_CSPI1_SS1__ECSPI1_SS1 */
IMX_PIN_REG(MX51_PAD_CSPI1_SS1, 0x60c, 0x21c, 3, 0x000, 0), /* MX51_PAD_CSPI1_SS1__GPIO4_25 */
IMX_PIN_REG(MX51_PAD_CSPI1_RDY, 0x610, 0x220, 1, 0x8d0, 1), /* MX51_PAD_CSPI1_RDY__AUD4_TXFS */
IMX_PIN_REG(MX51_PAD_CSPI1_RDY, 0x610, 0x220, 0, 0x000, 0), /* MX51_PAD_CSPI1_RDY__ECSPI1_RDY */
IMX_PIN_REG(MX51_PAD_CSPI1_RDY, 0x610, 0x220, 3, 0x000, 0), /* MX51_PAD_CSPI1_RDY__GPIO4_26 */
IMX_PIN_REG(MX51_PAD_CSPI1_SCLK, 0x614, 0x224, 0, 0x000, 0), /* MX51_PAD_CSPI1_SCLK__ECSPI1_SCLK */
IMX_PIN_REG(MX51_PAD_CSPI1_SCLK, 0x614, 0x224, 3, 0x000, 0), /* MX51_PAD_CSPI1_SCLK__GPIO4_27 */
IMX_PIN_REG(MX51_PAD_CSPI1_SCLK, 0x614, 0x224, 1, 0x9b0, 1), /* MX51_PAD_CSPI1_SCLK__I2C1_SCL */
IMX_PIN_REG(MX51_PAD_UART1_RXD, 0x618, 0x228, 3, 0x000, 0), /* MX51_PAD_UART1_RXD__GPIO4_28 */
IMX_PIN_REG(MX51_PAD_UART1_RXD, 0x618, 0x228, 0, 0x9e4, 0), /* MX51_PAD_UART1_RXD__UART1_RXD */
IMX_PIN_REG(MX51_PAD_UART1_TXD, 0x61c, 0x22c, 3, 0x000, 0), /* MX51_PAD_UART1_TXD__GPIO4_29 */
IMX_PIN_REG(MX51_PAD_UART1_TXD, 0x61c, 0x22c, 1, 0x000, 0), /* MX51_PAD_UART1_TXD__PWM2_PWMO */
IMX_PIN_REG(MX51_PAD_UART1_TXD, 0x61c, 0x22c, 0, 0x000, 0), /* MX51_PAD_UART1_TXD__UART1_TXD */
IMX_PIN_REG(MX51_PAD_UART1_RTS, 0x620, 0x230, 3, 0x000, 0), /* MX51_PAD_UART1_RTS__GPIO4_30 */
IMX_PIN_REG(MX51_PAD_UART1_RTS, 0x620, 0x230, 0, 0x9e0, 0), /* MX51_PAD_UART1_RTS__UART1_RTS */
IMX_PIN_REG(MX51_PAD_UART1_CTS, 0x624, 0x234, 3, 0x000, 0), /* MX51_PAD_UART1_CTS__GPIO4_31 */
IMX_PIN_REG(MX51_PAD_UART1_CTS, 0x624, 0x234, 0, 0x000, 0), /* MX51_PAD_UART1_CTS__UART1_CTS */
IMX_PIN_REG(MX51_PAD_UART2_RXD, 0x628, 0x238, 1, 0x000, 0), /* MX51_PAD_UART2_RXD__FIRI_TXD */
IMX_PIN_REG(MX51_PAD_UART2_RXD, 0x628, 0x238, 3, 0x000, 0), /* MX51_PAD_UART2_RXD__GPIO1_20 */
IMX_PIN_REG(MX51_PAD_UART2_RXD, 0x628, 0x238, 0, 0x9ec, 2), /* MX51_PAD_UART2_RXD__UART2_RXD */
IMX_PIN_REG(MX51_PAD_UART2_TXD, 0x62c, 0x23c, 1, 0x000, 0), /* MX51_PAD_UART2_TXD__FIRI_RXD */
IMX_PIN_REG(MX51_PAD_UART2_TXD, 0x62c, 0x23c, 3, 0x000, 0), /* MX51_PAD_UART2_TXD__GPIO1_21 */
IMX_PIN_REG(MX51_PAD_UART2_TXD, 0x62c, 0x23c, 0, 0x000, 0), /* MX51_PAD_UART2_TXD__UART2_TXD */
IMX_PIN_REG(MX51_PAD_UART3_RXD, 0x630, 0x240, 2, 0x000, 0), /* MX51_PAD_UART3_RXD__CSI1_D0 */
IMX_PIN_REG(MX51_PAD_UART3_RXD, 0x630, 0x240, 3, 0x000, 0), /* MX51_PAD_UART3_RXD__GPIO1_22 */
IMX_PIN_REG(MX51_PAD_UART3_RXD, 0x630, 0x240, 0, 0x000, 0), /* MX51_PAD_UART3_RXD__UART1_DTR */
IMX_PIN_REG(MX51_PAD_UART3_RXD, 0x630, 0x240, 1, 0x9f4, 4), /* MX51_PAD_UART3_RXD__UART3_RXD */
IMX_PIN_REG(MX51_PAD_UART3_TXD, 0x634, 0x244, 2, 0x000, 0), /* MX51_PAD_UART3_TXD__CSI1_D1 */
IMX_PIN_REG(MX51_PAD_UART3_TXD, 0x634, 0x244, 3, 0x000, 0), /* MX51_PAD_UART3_TXD__GPIO1_23 */
IMX_PIN_REG(MX51_PAD_UART3_TXD, 0x634, 0x244, 0, 0x000, 0), /* MX51_PAD_UART3_TXD__UART1_DSR */
IMX_PIN_REG(MX51_PAD_UART3_TXD, 0x634, 0x244, 1, 0x000, 0), /* MX51_PAD_UART3_TXD__UART3_TXD */
IMX_PIN_REG(MX51_PAD_OWIRE_LINE, 0x638, 0x248, 3, 0x000, 0), /* MX51_PAD_OWIRE_LINE__GPIO1_24 */
IMX_PIN_REG(MX51_PAD_OWIRE_LINE, 0x638, 0x248, 0, 0x000, 0), /* MX51_PAD_OWIRE_LINE__OWIRE_LINE */
IMX_PIN_REG(MX51_PAD_OWIRE_LINE, 0x638, 0x248, 6, 0x000, 0), /* MX51_PAD_OWIRE_LINE__SPDIF_OUT */
IMX_PIN_REG(MX51_PAD_KEY_ROW0, 0x63c, 0x24c, 0, 0x000, 0), /* MX51_PAD_KEY_ROW0__KEY_ROW0 */
IMX_PIN_REG(MX51_PAD_KEY_ROW1, 0x640, 0x250, 0, 0x000, 0), /* MX51_PAD_KEY_ROW1__KEY_ROW1 */
IMX_PIN_REG(MX51_PAD_KEY_ROW2, 0x644, 0x254, 0, 0x000, 0), /* MX51_PAD_KEY_ROW2__KEY_ROW2 */
IMX_PIN_REG(MX51_PAD_KEY_ROW3, 0x648, 0x258, 0, 0x000, 0), /* MX51_PAD_KEY_ROW3__KEY_ROW3 */
IMX_PIN_REG(MX51_PAD_KEY_COL0, 0x64c, 0x25c, 0, 0x000, 0), /* MX51_PAD_KEY_COL0__KEY_COL0 */
IMX_PIN_REG(MX51_PAD_KEY_COL0, 0x64c, 0x25c, 7, 0x90c, 0), /* MX51_PAD_KEY_COL0__PLL1_BYP */
IMX_PIN_REG(MX51_PAD_KEY_COL1, 0x650, 0x260, 0, 0x000, 0), /* MX51_PAD_KEY_COL1__KEY_COL1 */
IMX_PIN_REG(MX51_PAD_KEY_COL1, 0x650, 0x260, 7, 0x910, 0), /* MX51_PAD_KEY_COL1__PLL2_BYP */
IMX_PIN_REG(MX51_PAD_KEY_COL2, 0x654, 0x264, 0, 0x000, 0), /* MX51_PAD_KEY_COL2__KEY_COL2 */
IMX_PIN_REG(MX51_PAD_KEY_COL2, 0x654, 0x264, 7, 0x000, 0), /* MX51_PAD_KEY_COL2__PLL3_BYP */
IMX_PIN_REG(MX51_PAD_KEY_COL3, 0x658, 0x268, 0, 0x000, 0), /* MX51_PAD_KEY_COL3__KEY_COL3 */
IMX_PIN_REG(MX51_PAD_KEY_COL4, 0x65c, 0x26c, 3, 0x9b8, 1), /* MX51_PAD_KEY_COL4__I2C2_SCL */
IMX_PIN_REG(MX51_PAD_KEY_COL4, 0x65c, 0x26c, 0, 0x000, 0), /* MX51_PAD_KEY_COL4__KEY_COL4 */
IMX_PIN_REG(MX51_PAD_KEY_COL4, 0x65c, 0x26c, 6, 0x000, 0), /* MX51_PAD_KEY_COL4__SPDIF_OUT1 */
IMX_PIN_REG(MX51_PAD_KEY_COL4, 0x65c, 0x26c, 1, 0x000, 0), /* MX51_PAD_KEY_COL4__UART1_RI */
IMX_PIN_REG(MX51_PAD_KEY_COL4, 0x65c, 0x26c, 2, 0x9f0, 4), /* MX51_PAD_KEY_COL4__UART3_RTS */
IMX_PIN_REG(MX51_PAD_KEY_COL5, 0x660, 0x270, 3, 0x9bc, 1), /* MX51_PAD_KEY_COL5__I2C2_SDA */
IMX_PIN_REG(MX51_PAD_KEY_COL5, 0x660, 0x270, 0, 0x000, 0), /* MX51_PAD_KEY_COL5__KEY_COL5 */
IMX_PIN_REG(MX51_PAD_KEY_COL5, 0x660, 0x270, 1, 0x000, 0), /* MX51_PAD_KEY_COL5__UART1_DCD */
IMX_PIN_REG(MX51_PAD_KEY_COL5, 0x660, 0x270, 2, 0x000, 0), /* MX51_PAD_KEY_COL5__UART3_CTS */
IMX_PIN_REG(MX51_PAD_USBH1_CLK, 0x678, 0x278, 1, 0x914, 1), /* MX51_PAD_USBH1_CLK__CSPI_SCLK */
IMX_PIN_REG(MX51_PAD_USBH1_CLK, 0x678, 0x278, 2, 0x000, 0), /* MX51_PAD_USBH1_CLK__GPIO1_25 */
IMX_PIN_REG(MX51_PAD_USBH1_CLK, 0x678, 0x278, 5, 0x9b8, 2), /* MX51_PAD_USBH1_CLK__I2C2_SCL */
IMX_PIN_REG(MX51_PAD_USBH1_CLK, 0x678, 0x278, 0, 0x000, 0), /* MX51_PAD_USBH1_CLK__USBH1_CLK */
IMX_PIN_REG(MX51_PAD_USBH1_DIR, 0x67c, 0x27c, 1, 0x91c, 1), /* MX51_PAD_USBH1_DIR__CSPI_MOSI */
IMX_PIN_REG(MX51_PAD_USBH1_DIR, 0x67c, 0x27c, 2, 0x000, 0), /* MX51_PAD_USBH1_DIR__GPIO1_26 */
IMX_PIN_REG(MX51_PAD_USBH1_DIR, 0x67c, 0x27c, 5, 0x9bc, 2), /* MX51_PAD_USBH1_DIR__I2C2_SDA */
IMX_PIN_REG(MX51_PAD_USBH1_DIR, 0x67c, 0x27c, 0, 0x000, 0), /* MX51_PAD_USBH1_DIR__USBH1_DIR */
IMX_PIN_REG(MX51_PAD_USBH1_STP, 0x680, 0x280, 1, 0x000, 0), /* MX51_PAD_USBH1_STP__CSPI_RDY */
IMX_PIN_REG(MX51_PAD_USBH1_STP, 0x680, 0x280, 2, 0x000, 0), /* MX51_PAD_USBH1_STP__GPIO1_27 */
IMX_PIN_REG(MX51_PAD_USBH1_STP, 0x680, 0x280, 5, 0x9f4, 6), /* MX51_PAD_USBH1_STP__UART3_RXD */
IMX_PIN_REG(MX51_PAD_USBH1_STP, 0x680, 0x280, 0, 0x000, 0), /* MX51_PAD_USBH1_STP__USBH1_STP */
IMX_PIN_REG(MX51_PAD_USBH1_NXT, 0x684, 0x284, 1, 0x918, 0), /* MX51_PAD_USBH1_NXT__CSPI_MISO */
IMX_PIN_REG(MX51_PAD_USBH1_NXT, 0x684, 0x284, 2, 0x000, 0), /* MX51_PAD_USBH1_NXT__GPIO1_28 */
IMX_PIN_REG(MX51_PAD_USBH1_NXT, 0x684, 0x284, 5, 0x000, 0), /* MX51_PAD_USBH1_NXT__UART3_TXD */
IMX_PIN_REG(MX51_PAD_USBH1_NXT, 0x684, 0x284, 0, 0x000, 0), /* MX51_PAD_USBH1_NXT__USBH1_NXT */
IMX_PIN_REG(MX51_PAD_USBH1_DATA0, 0x688, 0x288, 2, 0x000, 0), /* MX51_PAD_USBH1_DATA0__GPIO1_11 */
IMX_PIN_REG(MX51_PAD_USBH1_DATA0, 0x688, 0x288, 1, 0x000, 0), /* MX51_PAD_USBH1_DATA0__UART2_CTS */
IMX_PIN_REG(MX51_PAD_USBH1_DATA0, 0x688, 0x288, 0, 0x000, 0), /* MX51_PAD_USBH1_DATA0__USBH1_DATA0 */
IMX_PIN_REG(MX51_PAD_USBH1_DATA1, 0x68c, 0x28c, 2, 0x000, 0), /* MX51_PAD_USBH1_DATA1__GPIO1_12 */
IMX_PIN_REG(MX51_PAD_USBH1_DATA1, 0x68c, 0x28c, 1, 0x9ec, 4), /* MX51_PAD_USBH1_DATA1__UART2_RXD */
IMX_PIN_REG(MX51_PAD_USBH1_DATA1, 0x68c, 0x28c, 0, 0x000, 0), /* MX51_PAD_USBH1_DATA1__USBH1_DATA1 */
IMX_PIN_REG(MX51_PAD_USBH1_DATA2, 0x690, 0x290, 2, 0x000, 0), /* MX51_PAD_USBH1_DATA2__GPIO1_13 */
IMX_PIN_REG(MX51_PAD_USBH1_DATA2, 0x690, 0x290, 1, 0x000, 0), /* MX51_PAD_USBH1_DATA2__UART2_TXD */
IMX_PIN_REG(MX51_PAD_USBH1_DATA2, 0x690, 0x290, 0, 0x000, 0), /* MX51_PAD_USBH1_DATA2__USBH1_DATA2 */
IMX_PIN_REG(MX51_PAD_USBH1_DATA3, 0x694, 0x294, 2, 0x000, 0), /* MX51_PAD_USBH1_DATA3__GPIO1_14 */
IMX_PIN_REG(MX51_PAD_USBH1_DATA3, 0x694, 0x294, 1, 0x9e8, 5), /* MX51_PAD_USBH1_DATA3__UART2_RTS */
IMX_PIN_REG(MX51_PAD_USBH1_DATA3, 0x694, 0x294, 0, 0x000, 0), /* MX51_PAD_USBH1_DATA3__USBH1_DATA3 */
IMX_PIN_REG(MX51_PAD_USBH1_DATA4, 0x698, 0x298, 1, 0x000, 0), /* MX51_PAD_USBH1_DATA4__CSPI_SS0 */
IMX_PIN_REG(MX51_PAD_USBH1_DATA4, 0x698, 0x298, 2, 0x000, 0), /* MX51_PAD_USBH1_DATA4__GPIO1_15 */
IMX_PIN_REG(MX51_PAD_USBH1_DATA4, 0x698, 0x298, 0, 0x000, 0), /* MX51_PAD_USBH1_DATA4__USBH1_DATA4 */
IMX_PIN_REG(MX51_PAD_USBH1_DATA5, 0x69c, 0x29c, 1, 0x920, 0), /* MX51_PAD_USBH1_DATA5__CSPI_SS1 */
IMX_PIN_REG(MX51_PAD_USBH1_DATA5, 0x69c, 0x29c, 2, 0x000, 0), /* MX51_PAD_USBH1_DATA5__GPIO1_16 */
IMX_PIN_REG(MX51_PAD_USBH1_DATA5, 0x69c, 0x29c, 0, 0x000, 0), /* MX51_PAD_USBH1_DATA5__USBH1_DATA5 */
IMX_PIN_REG(MX51_PAD_USBH1_DATA6, 0x6a0, 0x2a0, 1, 0x928, 1), /* MX51_PAD_USBH1_DATA6__CSPI_SS3 */
IMX_PIN_REG(MX51_PAD_USBH1_DATA6, 0x6a0, 0x2a0, 2, 0x000, 0), /* MX51_PAD_USBH1_DATA6__GPIO1_17 */
IMX_PIN_REG(MX51_PAD_USBH1_DATA6, 0x6a0, 0x2a0, 0, 0x000, 0), /* MX51_PAD_USBH1_DATA6__USBH1_DATA6 */
IMX_PIN_REG(MX51_PAD_USBH1_DATA7, 0x6a4, 0x2a4, 1, 0x000, 0), /* MX51_PAD_USBH1_DATA7__ECSPI1_SS3 */
IMX_PIN_REG(MX51_PAD_USBH1_DATA7, 0x6a4, 0x2a4, 5, 0x934, 1), /* MX51_PAD_USBH1_DATA7__ECSPI2_SS3 */
IMX_PIN_REG(MX51_PAD_USBH1_DATA7, 0x6a4, 0x2a4, 2, 0x000, 0), /* MX51_PAD_USBH1_DATA7__GPIO1_18 */
IMX_PIN_REG(MX51_PAD_USBH1_DATA7, 0x6a4, 0x2a4, 0, 0x000, 0), /* MX51_PAD_USBH1_DATA7__USBH1_DATA7 */
IMX_PIN_REG(MX51_PAD_DI1_PIN11, 0x6a8, 0x2a8, 0, 0x000, 0), /* MX51_PAD_DI1_PIN11__DI1_PIN11 */
IMX_PIN_REG(MX51_PAD_DI1_PIN11, 0x6a8, 0x2a8, 7, 0x000, 0), /* MX51_PAD_DI1_PIN11__ECSPI1_SS2 */
IMX_PIN_REG(MX51_PAD_DI1_PIN11, 0x6a8, 0x2a8, 4, 0x000, 0), /* MX51_PAD_DI1_PIN11__GPIO3_0 */
IMX_PIN_REG(MX51_PAD_DI1_PIN12, 0x6ac, 0x2ac, 0, 0x000, 0), /* MX51_PAD_DI1_PIN12__DI1_PIN12 */
IMX_PIN_REG(MX51_PAD_DI1_PIN12, 0x6ac, 0x2ac, 4, 0x978, 1), /* MX51_PAD_DI1_PIN12__GPIO3_1 */
IMX_PIN_REG(MX51_PAD_DI1_PIN13, 0x6b0, 0x2b0, 0, 0x000, 0), /* MX51_PAD_DI1_PIN13__DI1_PIN13 */
IMX_PIN_REG(MX51_PAD_DI1_PIN13, 0x6b0, 0x2b0, 4, 0x97c, 1), /* MX51_PAD_DI1_PIN13__GPIO3_2 */
IMX_PIN_REG(MX51_PAD_DI1_D0_CS, 0x6b4, 0x2b4, 0, 0x000, 0), /* MX51_PAD_DI1_D0_CS__DI1_D0_CS */
IMX_PIN_REG(MX51_PAD_DI1_D0_CS, 0x6b4, 0x2b4, 4, 0x980, 1), /* MX51_PAD_DI1_D0_CS__GPIO3_3 */
IMX_PIN_REG(MX51_PAD_DI1_D1_CS, 0x6b8, 0x2b8, 0, 0x000, 0), /* MX51_PAD_DI1_D1_CS__DI1_D1_CS */
IMX_PIN_REG(MX51_PAD_DI1_D1_CS, 0x6b8, 0x2b8, 2, 0x000, 0), /* MX51_PAD_DI1_D1_CS__DISP1_PIN14 */
IMX_PIN_REG(MX51_PAD_DI1_D1_CS, 0x6b8, 0x2b8, 3, 0x000, 0), /* MX51_PAD_DI1_D1_CS__DISP1_PIN5 */
IMX_PIN_REG(MX51_PAD_DI1_D1_CS, 0x6b8, 0x2b8, 4, 0x984, 1), /* MX51_PAD_DI1_D1_CS__GPIO3_4 */
IMX_PIN_REG(MX51_PAD_DISPB2_SER_DIN, 0x6bc, 0x2bc, 2, 0x9a4, 1), /* MX51_PAD_DISPB2_SER_DIN__DISP1_PIN1 */
IMX_PIN_REG(MX51_PAD_DISPB2_SER_DIN, 0x6bc, 0x2bc, 0, 0x9c4, 0), /* MX51_PAD_DISPB2_SER_DIN__DISPB2_SER_DIN */
IMX_PIN_REG(MX51_PAD_DISPB2_SER_DIN, 0x6bc, 0x2bc, 4, 0x988, 1), /* MX51_PAD_DISPB2_SER_DIN__GPIO3_5 */
IMX_PIN_REG(MX51_PAD_DISPB2_SER_DIO, 0x6c0, 0x2c0, 3, 0x000, 0), /* MX51_PAD_DISPB2_SER_DIO__DISP1_PIN6 */
IMX_PIN_REG(MX51_PAD_DISPB2_SER_DIO, 0x6c0, 0x2c0, 0, 0x9c4, 1), /* MX51_PAD_DISPB2_SER_DIO__DISPB2_SER_DIO */
IMX_PIN_REG(MX51_PAD_DISPB2_SER_DIO, 0x6c0, 0x2c0, 4, 0x98c, 1), /* MX51_PAD_DISPB2_SER_DIO__GPIO3_6 */
IMX_PIN_REG(MX51_PAD_DISPB2_SER_CLK, 0x6c4, 0x2c4, 2, 0x000, 0), /* MX51_PAD_DISPB2_SER_CLK__DISP1_PIN17 */
IMX_PIN_REG(MX51_PAD_DISPB2_SER_CLK, 0x6c4, 0x2c4, 3, 0x000, 0), /* MX51_PAD_DISPB2_SER_CLK__DISP1_PIN7 */
IMX_PIN_REG(MX51_PAD_DISPB2_SER_CLK, 0x6c4, 0x2c4, 0, 0x000, 0), /* MX51_PAD_DISPB2_SER_CLK__DISPB2_SER_CLK */
IMX_PIN_REG(MX51_PAD_DISPB2_SER_CLK, 0x6c4, 0x2c4, 4, 0x990, 1), /* MX51_PAD_DISPB2_SER_CLK__GPIO3_7 */
IMX_PIN_REG(MX51_PAD_DISPB2_SER_RS, 0x6c8, 0x2c8, 2, 0x000, 0), /* MX51_PAD_DISPB2_SER_RS__DISP1_EXT_CLK */
IMX_PIN_REG(MX51_PAD_DISPB2_SER_RS, 0x6c8, 0x2c8, 2, 0x000, 0), /* MX51_PAD_DISPB2_SER_RS__DISP1_PIN16 */
IMX_PIN_REG(MX51_PAD_DISPB2_SER_RS, 0x6c8, 0x2c8, 3, 0x000, 0), /* MX51_PAD_DISPB2_SER_RS__DISP1_PIN8 */
IMX_PIN_REG(MX51_PAD_DISPB2_SER_RS, 0x6c8, 0x2c8, 0, 0x000, 0), /* MX51_PAD_DISPB2_SER_RS__DISPB2_SER_RS */
IMX_PIN_REG(MX51_PAD_DISPB2_SER_RS, 0x6c8, 0x2c8, 0, 0x000, 0), /* MX51_PAD_DISPB2_SER_RS__DISPB2_SER_RS */
IMX_PIN_REG(MX51_PAD_DISPB2_SER_RS, 0x6c8, 0x2c8, 4, 0x994, 1), /* MX51_PAD_DISPB2_SER_RS__GPIO3_8 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT0, 0x6cc, 0x2cc, 0, 0x000, 0), /* MX51_PAD_DISP1_DAT0__DISP1_DAT0 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT1, 0x6d0, 0x2d0, 0, 0x000, 0), /* MX51_PAD_DISP1_DAT1__DISP1_DAT1 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT2, 0x6d4, 0x2d4, 0, 0x000, 0), /* MX51_PAD_DISP1_DAT2__DISP1_DAT2 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT3, 0x6d8, 0x2d8, 0, 0x000, 0), /* MX51_PAD_DISP1_DAT3__DISP1_DAT3 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT4, 0x6dc, 0x2dc, 0, 0x000, 0), /* MX51_PAD_DISP1_DAT4__DISP1_DAT4 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT5, 0x6e0, 0x2e0, 0, 0x000, 0), /* MX51_PAD_DISP1_DAT5__DISP1_DAT5 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT6, 0x6e4, 0x2e4, 7, 0x000, 0), /* MX51_PAD_DISP1_DAT6__BOOT_USB_SRC */
IMX_PIN_REG(MX51_PAD_DISP1_DAT6, 0x6e4, 0x2e4, 0, 0x000, 0), /* MX51_PAD_DISP1_DAT6__DISP1_DAT6 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT7, 0x6e8, 0x2e8, 7, 0x000, 0), /* MX51_PAD_DISP1_DAT7__BOOT_EEPROM_CFG */
IMX_PIN_REG(MX51_PAD_DISP1_DAT7, 0x6e8, 0x2e8, 0, 0x000, 0), /* MX51_PAD_DISP1_DAT7__DISP1_DAT7 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT8, 0x6ec, 0x2ec, 7, 0x000, 0), /* MX51_PAD_DISP1_DAT8__BOOT_SRC0 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT8, 0x6ec, 0x2ec, 0, 0x000, 0), /* MX51_PAD_DISP1_DAT8__DISP1_DAT8 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT9, 0x6f0, 0x2f0, 7, 0x000, 0), /* MX51_PAD_DISP1_DAT9__BOOT_SRC1 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT9, 0x6f0, 0x2f0, 0, 0x000, 0), /* MX51_PAD_DISP1_DAT9__DISP1_DAT9 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT10, 0x6f4, 0x2f4, 7, 0x000, 0), /* MX51_PAD_DISP1_DAT10__BOOT_SPARE_SIZE */
IMX_PIN_REG(MX51_PAD_DISP1_DAT10, 0x6f4, 0x2f4, 0, 0x000, 0), /* MX51_PAD_DISP1_DAT10__DISP1_DAT10 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT11, 0x6f8, 0x2f8, 7, 0x000, 0), /* MX51_PAD_DISP1_DAT11__BOOT_LPB_FREQ2 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT11, 0x6f8, 0x2f8, 0, 0x000, 0), /* MX51_PAD_DISP1_DAT11__DISP1_DAT11 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT12, 0x6fc, 0x2fc, 7, 0x000, 0), /* MX51_PAD_DISP1_DAT12__BOOT_MLC_SEL */
IMX_PIN_REG(MX51_PAD_DISP1_DAT12, 0x6fc, 0x2fc, 0, 0x000, 0), /* MX51_PAD_DISP1_DAT12__DISP1_DAT12 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT13, 0x700, 0x300, 7, 0x000, 0), /* MX51_PAD_DISP1_DAT13__BOOT_MEM_CTL0 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT13, 0x700, 0x300, 0, 0x000, 0), /* MX51_PAD_DISP1_DAT13__DISP1_DAT13 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT14, 0x704, 0x304, 7, 0x000, 0), /* MX51_PAD_DISP1_DAT14__BOOT_MEM_CTL1 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT14, 0x704, 0x304, 0, 0x000, 0), /* MX51_PAD_DISP1_DAT14__DISP1_DAT14 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT15, 0x708, 0x308, 7, 0x000, 0), /* MX51_PAD_DISP1_DAT15__BOOT_BUS_WIDTH */
IMX_PIN_REG(MX51_PAD_DISP1_DAT15, 0x708, 0x308, 0, 0x000, 0), /* MX51_PAD_DISP1_DAT15__DISP1_DAT15 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT16, 0x70c, 0x30c, 7, 0x000, 0), /* MX51_PAD_DISP1_DAT16__BOOT_PAGE_SIZE0 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT16, 0x70c, 0x30c, 0, 0x000, 0), /* MX51_PAD_DISP1_DAT16__DISP1_DAT16 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT17, 0x710, 0x310, 7, 0x000, 0), /* MX51_PAD_DISP1_DAT17__BOOT_PAGE_SIZE1 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT17, 0x710, 0x310, 0, 0x000, 0), /* MX51_PAD_DISP1_DAT17__DISP1_DAT17 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT18, 0x714, 0x314, 7, 0x000, 0), /* MX51_PAD_DISP1_DAT18__BOOT_WEIM_MUXED0 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT18, 0x714, 0x314, 0, 0x000, 0), /* MX51_PAD_DISP1_DAT18__DISP1_DAT18 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT18, 0x714, 0x314, 5, 0x000, 0), /* MX51_PAD_DISP1_DAT18__DISP2_PIN11 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT18, 0x714, 0x314, 4, 0x000, 0), /* MX51_PAD_DISP1_DAT18__DISP2_PIN5 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT19, 0x718, 0x318, 7, 0x000, 0), /* MX51_PAD_DISP1_DAT19__BOOT_WEIM_MUXED1 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT19, 0x718, 0x318, 0, 0x000, 0), /* MX51_PAD_DISP1_DAT19__DISP1_DAT19 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT19, 0x718, 0x318, 5, 0x000, 0), /* MX51_PAD_DISP1_DAT19__DISP2_PIN12 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT19, 0x718, 0x318, 4, 0x000, 0), /* MX51_PAD_DISP1_DAT19__DISP2_PIN6 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT20, 0x71c, 0x31c, 7, 0x000, 0), /* MX51_PAD_DISP1_DAT20__BOOT_MEM_TYPE0 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT20, 0x71c, 0x31c, 0, 0x000, 0), /* MX51_PAD_DISP1_DAT20__DISP1_DAT20 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT20, 0x71c, 0x31c, 5, 0x000, 0), /* MX51_PAD_DISP1_DAT20__DISP2_PIN13 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT20, 0x71c, 0x31c, 4, 0x000, 0), /* MX51_PAD_DISP1_DAT20__DISP2_PIN7 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT21, 0x720, 0x320, 7, 0x000, 0), /* MX51_PAD_DISP1_DAT21__BOOT_MEM_TYPE1 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT21, 0x720, 0x320, 0, 0x000, 0), /* MX51_PAD_DISP1_DAT21__DISP1_DAT21 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT21, 0x720, 0x320, 5, 0x000, 0), /* MX51_PAD_DISP1_DAT21__DISP2_PIN14 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT21, 0x720, 0x320, 4, 0x000, 0), /* MX51_PAD_DISP1_DAT21__DISP2_PIN8 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT22, 0x724, 0x324, 7, 0x000, 0), /* MX51_PAD_DISP1_DAT22__BOOT_LPB_FREQ0 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT22, 0x724, 0x324, 0, 0x000, 0), /* MX51_PAD_DISP1_DAT22__DISP1_DAT22 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT22, 0x724, 0x324, 6, 0x000, 0), /* MX51_PAD_DISP1_DAT22__DISP2_D0_CS */
IMX_PIN_REG(MX51_PAD_DISP1_DAT22, 0x724, 0x324, 5, 0x000, 0), /* MX51_PAD_DISP1_DAT22__DISP2_DAT16 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT23, 0x728, 0x328, 7, 0x000, 0), /* MX51_PAD_DISP1_DAT23__BOOT_LPB_FREQ1 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT23, 0x728, 0x328, 0, 0x000, 0), /* MX51_PAD_DISP1_DAT23__DISP1_DAT23 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT23, 0x728, 0x328, 6, 0x000, 0), /* MX51_PAD_DISP1_DAT23__DISP2_D1_CS */
IMX_PIN_REG(MX51_PAD_DISP1_DAT23, 0x728, 0x328, 5, 0x000, 0), /* MX51_PAD_DISP1_DAT23__DISP2_DAT17 */
IMX_PIN_REG(MX51_PAD_DISP1_DAT23, 0x728, 0x328, 4, 0x000, 0), /* MX51_PAD_DISP1_DAT23__DISP2_SER_CS */
IMX_PIN_REG(MX51_PAD_DI1_PIN3, 0x72c, 0x32c, 0, 0x000, 0), /* MX51_PAD_DI1_PIN3__DI1_PIN3 */
IMX_PIN_REG(MX51_PAD_DI1_PIN2, 0x734, 0x330, 0, 0x000, 0), /* MX51_PAD_DI1_PIN2__DI1_PIN2 */
IMX_PIN_REG(MX51_PAD_DI_GP2, 0x740, 0x338, 0, 0x000, 0), /* MX51_PAD_DI_GP2__DISP1_SER_CLK */
IMX_PIN_REG(MX51_PAD_DI_GP2, 0x740, 0x338, 2, 0x9a8, 1), /* MX51_PAD_DI_GP2__DISP2_WAIT */
IMX_PIN_REG(MX51_PAD_DI_GP3, 0x744, 0x33c, 3, 0x9a0, 1), /* MX51_PAD_DI_GP3__CSI1_DATA_EN */
IMX_PIN_REG(MX51_PAD_DI_GP3, 0x744, 0x33c, 0, 0x9c0, 0), /* MX51_PAD_DI_GP3__DISP1_SER_DIO */
IMX_PIN_REG(MX51_PAD_DI_GP3, 0x744, 0x33c, 2, 0x000, 0), /* MX51_PAD_DI_GP3__FEC_TX_ER */
IMX_PIN_REG(MX51_PAD_DI2_PIN4, 0x748, 0x340, 3, 0x99c, 1), /* MX51_PAD_DI2_PIN4__CSI2_DATA_EN */
IMX_PIN_REG(MX51_PAD_DI2_PIN4, 0x748, 0x340, 0, 0x000, 0), /* MX51_PAD_DI2_PIN4__DI2_PIN4 */
IMX_PIN_REG(MX51_PAD_DI2_PIN4, 0x748, 0x340, 2, 0x950, 1), /* MX51_PAD_DI2_PIN4__FEC_CRS */
IMX_PIN_REG(MX51_PAD_DI2_PIN2, 0x74c, 0x344, 0, 0x000, 0), /* MX51_PAD_DI2_PIN2__DI2_PIN2 */
IMX_PIN_REG(MX51_PAD_DI2_PIN2, 0x74c, 0x344, 2, 0x000, 0), /* MX51_PAD_DI2_PIN2__FEC_MDC */
IMX_PIN_REG(MX51_PAD_DI2_PIN3, 0x750, 0x348, 0, 0x000, 0), /* MX51_PAD_DI2_PIN3__DI2_PIN3 */
IMX_PIN_REG(MX51_PAD_DI2_PIN3, 0x750, 0x348, 2, 0x954, 1), /* MX51_PAD_DI2_PIN3__FEC_MDIO */
IMX_PIN_REG(MX51_PAD_DI2_DISP_CLK, 0x754, 0x34c, 0, 0x000, 0), /* MX51_PAD_DI2_DISP_CLK__DI2_DISP_CLK */
IMX_PIN_REG(MX51_PAD_DI2_DISP_CLK, 0x754, 0x34c, 2, 0x95c, 1), /* MX51_PAD_DI2_DISP_CLK__FEC_RDATA1 */
IMX_PIN_REG(MX51_PAD_DI_GP4, 0x758, 0x350, 4, 0x000, 0), /* MX51_PAD_DI_GP4__DI2_PIN15 */
IMX_PIN_REG(MX51_PAD_DI_GP4, 0x758, 0x350, 0, 0x9c0, 1), /* MX51_PAD_DI_GP4__DISP1_SER_DIN */
IMX_PIN_REG(MX51_PAD_DI_GP4, 0x758, 0x350, 3, 0x000, 0), /* MX51_PAD_DI_GP4__DISP2_PIN1 */
IMX_PIN_REG(MX51_PAD_DI_GP4, 0x758, 0x350, 2, 0x960, 1), /* MX51_PAD_DI_GP4__FEC_RDATA2 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT0, 0x75c, 0x354, 0, 0x000, 0), /* MX51_PAD_DISP2_DAT0__DISP2_DAT0 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT0, 0x75c, 0x354, 2, 0x964, 1), /* MX51_PAD_DISP2_DAT0__FEC_RDATA3 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT0, 0x75c, 0x354, 4, 0x9c8, 1), /* MX51_PAD_DISP2_DAT0__KEY_COL6 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT0, 0x75c, 0x354, 5, 0x9f4, 8), /* MX51_PAD_DISP2_DAT0__UART3_RXD */
IMX_PIN_REG(MX51_PAD_DISP2_DAT0, 0x75c, 0x354, 3, 0x9f8, 1), /* MX51_PAD_DISP2_DAT0__USBH3_CLK */
IMX_PIN_REG(MX51_PAD_DISP2_DAT1, 0x760, 0x358, 0, 0x000, 0), /* MX51_PAD_DISP2_DAT1__DISP2_DAT1 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT1, 0x760, 0x358, 2, 0x970, 1), /* MX51_PAD_DISP2_DAT1__FEC_RX_ER */
IMX_PIN_REG(MX51_PAD_DISP2_DAT1, 0x760, 0x358, 4, 0x9cc, 1), /* MX51_PAD_DISP2_DAT1__KEY_COL7 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT1, 0x760, 0x358, 5, 0x000, 0), /* MX51_PAD_DISP2_DAT1__UART3_TXD */
IMX_PIN_REG(MX51_PAD_DISP2_DAT1, 0x760, 0x358, 3, 0xa1c, 1), /* MX51_PAD_DISP2_DAT1__USBH3_DIR */
IMX_PIN_REG(MX51_PAD_DISP2_DAT2, 0x764, 0x35c, 0, 0x000, 0), /* MX51_PAD_DISP2_DAT2__DISP2_DAT2 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT3, 0x768, 0x360, 0, 0x000, 0), /* MX51_PAD_DISP2_DAT3__DISP2_DAT3 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT4, 0x76c, 0x364, 0, 0x000, 0), /* MX51_PAD_DISP2_DAT4__DISP2_DAT4 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT5, 0x770, 0x368, 0, 0x000, 0), /* MX51_PAD_DISP2_DAT5__DISP2_DAT5 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT6, 0x774, 0x36c, 0, 0x000, 0), /* MX51_PAD_DISP2_DAT6__DISP2_DAT6 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT6, 0x774, 0x36c, 2, 0x000, 0), /* MX51_PAD_DISP2_DAT6__FEC_TDATA1 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT6, 0x774, 0x36c, 5, 0x000, 0), /* MX51_PAD_DISP2_DAT6__GPIO1_19 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT6, 0x774, 0x36c, 4, 0x9d0, 1), /* MX51_PAD_DISP2_DAT6__KEY_ROW4 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT6, 0x774, 0x36c, 3, 0xa24, 1), /* MX51_PAD_DISP2_DAT6__USBH3_STP */
IMX_PIN_REG(MX51_PAD_DISP2_DAT7, 0x778, 0x370, 0, 0x000, 0), /* MX51_PAD_DISP2_DAT7__DISP2_DAT7 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT7, 0x778, 0x370, 2, 0x000, 0), /* MX51_PAD_DISP2_DAT7__FEC_TDATA2 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT7, 0x778, 0x370, 5, 0x000, 0), /* MX51_PAD_DISP2_DAT7__GPIO1_29 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT7, 0x778, 0x370, 4, 0x9d4, 1), /* MX51_PAD_DISP2_DAT7__KEY_ROW5 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT7, 0x778, 0x370, 3, 0xa20, 1), /* MX51_PAD_DISP2_DAT7__USBH3_NXT */
IMX_PIN_REG(MX51_PAD_DISP2_DAT8, 0x77c, 0x374, 0, 0x000, 0), /* MX51_PAD_DISP2_DAT8__DISP2_DAT8 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT8, 0x77c, 0x374, 2, 0x000, 0), /* MX51_PAD_DISP2_DAT8__FEC_TDATA3 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT8, 0x77c, 0x374, 5, 0x000, 0), /* MX51_PAD_DISP2_DAT8__GPIO1_30 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT8, 0x77c, 0x374, 4, 0x9d8, 1), /* MX51_PAD_DISP2_DAT8__KEY_ROW6 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT8, 0x77c, 0x374, 3, 0x9fc, 1), /* MX51_PAD_DISP2_DAT8__USBH3_DATA0 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT9, 0x780, 0x378, 4, 0x8f4, 1), /* MX51_PAD_DISP2_DAT9__AUD6_RXC */
IMX_PIN_REG(MX51_PAD_DISP2_DAT9, 0x780, 0x378, 0, 0x000, 0), /* MX51_PAD_DISP2_DAT9__DISP2_DAT9 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT9, 0x780, 0x378, 2, 0x000, 0), /* MX51_PAD_DISP2_DAT9__FEC_TX_EN */
IMX_PIN_REG(MX51_PAD_DISP2_DAT9, 0x780, 0x378, 5, 0x000, 0), /* MX51_PAD_DISP2_DAT9__GPIO1_31 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT9, 0x780, 0x378, 3, 0xa00, 1), /* MX51_PAD_DISP2_DAT9__USBH3_DATA1 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT10, 0x784, 0x37c, 0, 0x000, 0), /* MX51_PAD_DISP2_DAT10__DISP2_DAT10 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT10, 0x784, 0x37c, 5, 0x000, 0), /* MX51_PAD_DISP2_DAT10__DISP2_SER_CS */
IMX_PIN_REG(MX51_PAD_DISP2_DAT10, 0x784, 0x37c, 2, 0x94c, 1), /* MX51_PAD_DISP2_DAT10__FEC_COL */
IMX_PIN_REG(MX51_PAD_DISP2_DAT10, 0x784, 0x37c, 4, 0x9dc, 1), /* MX51_PAD_DISP2_DAT10__KEY_ROW7 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT10, 0x784, 0x37c, 3, 0xa04, 1), /* MX51_PAD_DISP2_DAT10__USBH3_DATA2 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT11, 0x788, 0x380, 4, 0x8f0, 1), /* MX51_PAD_DISP2_DAT11__AUD6_TXD */
IMX_PIN_REG(MX51_PAD_DISP2_DAT11, 0x788, 0x380, 0, 0x000, 0), /* MX51_PAD_DISP2_DAT11__DISP2_DAT11 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT11, 0x788, 0x380, 2, 0x968, 1), /* MX51_PAD_DISP2_DAT11__FEC_RX_CLK */
IMX_PIN_REG(MX51_PAD_DISP2_DAT11, 0x788, 0x380, 7, 0x000, 0), /* MX51_PAD_DISP2_DAT11__GPIO1_10 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT11, 0x788, 0x380, 3, 0xa08, 1), /* MX51_PAD_DISP2_DAT11__USBH3_DATA3 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT12, 0x78c, 0x384, 4, 0x8ec, 1), /* MX51_PAD_DISP2_DAT12__AUD6_RXD */
IMX_PIN_REG(MX51_PAD_DISP2_DAT12, 0x78c, 0x384, 0, 0x000, 0), /* MX51_PAD_DISP2_DAT12__DISP2_DAT12 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT12, 0x78c, 0x384, 2, 0x96c, 1), /* MX51_PAD_DISP2_DAT12__FEC_RX_DV */
IMX_PIN_REG(MX51_PAD_DISP2_DAT12, 0x78c, 0x384, 3, 0xa0c, 1), /* MX51_PAD_DISP2_DAT12__USBH3_DATA4 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT13, 0x790, 0x388, 4, 0x8fc, 1), /* MX51_PAD_DISP2_DAT13__AUD6_TXC */
IMX_PIN_REG(MX51_PAD_DISP2_DAT13, 0x790, 0x388, 0, 0x000, 0), /* MX51_PAD_DISP2_DAT13__DISP2_DAT13 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT13, 0x790, 0x388, 2, 0x974, 1), /* MX51_PAD_DISP2_DAT13__FEC_TX_CLK */
IMX_PIN_REG(MX51_PAD_DISP2_DAT13, 0x790, 0x388, 3, 0xa10, 1), /* MX51_PAD_DISP2_DAT13__USBH3_DATA5 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT14, 0x794, 0x38c, 4, 0x900, 1), /* MX51_PAD_DISP2_DAT14__AUD6_TXFS */
IMX_PIN_REG(MX51_PAD_DISP2_DAT14, 0x794, 0x38c, 0, 0x000, 0), /* MX51_PAD_DISP2_DAT14__DISP2_DAT14 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT14, 0x794, 0x38c, 2, 0x958, 1), /* MX51_PAD_DISP2_DAT14__FEC_RDATA0 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT14, 0x794, 0x38c, 3, 0xa14, 1), /* MX51_PAD_DISP2_DAT14__USBH3_DATA6 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT15, 0x798, 0x390, 4, 0x8f8, 1), /* MX51_PAD_DISP2_DAT15__AUD6_RXFS */
IMX_PIN_REG(MX51_PAD_DISP2_DAT15, 0x798, 0x390, 5, 0x000, 0), /* MX51_PAD_DISP2_DAT15__DISP1_SER_CS */
IMX_PIN_REG(MX51_PAD_DISP2_DAT15, 0x798, 0x390, 0, 0x000, 0), /* MX51_PAD_DISP2_DAT15__DISP2_DAT15 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT15, 0x798, 0x390, 2, 0x000, 0), /* MX51_PAD_DISP2_DAT15__FEC_TDATA0 */
IMX_PIN_REG(MX51_PAD_DISP2_DAT15, 0x798, 0x390, 3, 0xa18, 1), /* MX51_PAD_DISP2_DAT15__USBH3_DATA7 */
IMX_PIN_REG(MX51_PAD_SD1_CMD, 0x79c, 0x394, 1, 0x8e0, 1), /* MX51_PAD_SD1_CMD__AUD5_RXFS */
IMX_PIN_REG(MX51_PAD_SD1_CMD, 0x79c, 0x394, 2, 0x91c, 2), /* MX51_PAD_SD1_CMD__CSPI_MOSI */
IMX_PIN_REG(MX51_PAD_SD1_CMD, 0x79c, 0x394, 0, 0x000, 0), /* MX51_PAD_SD1_CMD__SD1_CMD */
IMX_PIN_REG(MX51_PAD_SD1_CLK, 0x7a0, 0x398, 1, 0x8dc, 1), /* MX51_PAD_SD1_CLK__AUD5_RXC */
IMX_PIN_REG(MX51_PAD_SD1_CLK, 0x7a0, 0x398, 2, 0x914, 2), /* MX51_PAD_SD1_CLK__CSPI_SCLK */
IMX_PIN_REG(MX51_PAD_SD1_CLK, 0x7a0, 0x398, 0, 0x000, 0), /* MX51_PAD_SD1_CLK__SD1_CLK */
IMX_PIN_REG(MX51_PAD_SD1_DATA0, 0x7a4, 0x39c, 1, 0x8d8, 2), /* MX51_PAD_SD1_DATA0__AUD5_TXD */
IMX_PIN_REG(MX51_PAD_SD1_DATA0, 0x7a4, 0x39c, 2, 0x918, 1), /* MX51_PAD_SD1_DATA0__CSPI_MISO */
IMX_PIN_REG(MX51_PAD_SD1_DATA0, 0x7a4, 0x39c, 0, 0x000, 0), /* MX51_PAD_SD1_DATA0__SD1_DATA0 */
IMX_PIN_REG(MX51_PAD_EIM_DA0, NO_PAD, 0x01c, 0, 0x000, 0), /* MX51_PAD_EIM_DA0__EIM_DA0 */
IMX_PIN_REG(MX51_PAD_EIM_DA1, NO_PAD, 0x020, 0, 0x000, 0), /* MX51_PAD_EIM_DA1__EIM_DA1 */
IMX_PIN_REG(MX51_PAD_EIM_DA2, NO_PAD, 0x024, 0, 0x000, 0), /* MX51_PAD_EIM_DA2__EIM_DA2 */
IMX_PIN_REG(MX51_PAD_EIM_DA3, NO_PAD, 0x028, 0, 0x000, 0), /* MX51_PAD_EIM_DA3__EIM_DA3 */
IMX_PIN_REG(MX51_PAD_SD1_DATA1, 0x7a8, 0x3a0, 1, 0x8d4, 2), /* MX51_PAD_SD1_DATA1__AUD5_RXD */
IMX_PIN_REG(MX51_PAD_SD1_DATA1, 0x7a8, 0x3a0, 0, 0x000, 0), /* MX51_PAD_SD1_DATA1__SD1_DATA1 */
IMX_PIN_REG(MX51_PAD_EIM_DA4, NO_PAD, 0x02c, 0, 0x000, 0), /* MX51_PAD_EIM_DA4__EIM_DA4 */
IMX_PIN_REG(MX51_PAD_EIM_DA5, NO_PAD, 0x030, 0, 0x000, 0), /* MX51_PAD_EIM_DA5__EIM_DA5 */
IMX_PIN_REG(MX51_PAD_EIM_DA6, NO_PAD, 0x034, 0, 0x000, 0), /* MX51_PAD_EIM_DA6__EIM_DA6 */
IMX_PIN_REG(MX51_PAD_EIM_DA7, NO_PAD, 0x038, 0, 0x000, 0), /* MX51_PAD_EIM_DA7__EIM_DA7 */
IMX_PIN_REG(MX51_PAD_SD1_DATA2, 0x7ac, 0x3a4, 1, 0x8e4, 2), /* MX51_PAD_SD1_DATA2__AUD5_TXC */
IMX_PIN_REG(MX51_PAD_SD1_DATA2, 0x7ac, 0x3a4, 0, 0x000, 0), /* MX51_PAD_SD1_DATA2__SD1_DATA2 */
IMX_PIN_REG(MX51_PAD_EIM_DA10, NO_PAD, 0x044, 0, 0x000, 0), /* MX51_PAD_EIM_DA10__EIM_DA10 */
IMX_PIN_REG(MX51_PAD_EIM_DA11, NO_PAD, 0x048, 0, 0x000, 0), /* MX51_PAD_EIM_DA11__EIM_DA11 */
IMX_PIN_REG(MX51_PAD_EIM_DA8, NO_PAD, 0x03c, 0, 0x000, 0), /* MX51_PAD_EIM_DA8__EIM_DA8 */
IMX_PIN_REG(MX51_PAD_EIM_DA9, NO_PAD, 0x040, 0, 0x000, 0), /* MX51_PAD_EIM_DA9__EIM_DA9 */
IMX_PIN_REG(MX51_PAD_SD1_DATA3, 0x7b0, 0x3a8, 1, 0x8e8, 2), /* MX51_PAD_SD1_DATA3__AUD5_TXFS */
IMX_PIN_REG(MX51_PAD_SD1_DATA3, 0x7b0, 0x3a8, 2, 0x920, 1), /* MX51_PAD_SD1_DATA3__CSPI_SS1 */
IMX_PIN_REG(MX51_PAD_SD1_DATA3, 0x7b0, 0x3a8, 0, 0x000, 0), /* MX51_PAD_SD1_DATA3__SD1_DATA3 */
IMX_PIN_REG(MX51_PAD_GPIO1_0, 0x7b4, 0x3ac, 2, 0x924, 0), /* MX51_PAD_GPIO1_0__CSPI_SS2 */
IMX_PIN_REG(MX51_PAD_GPIO1_0, 0x7b4, 0x3ac, 1, 0x000, 0), /* MX51_PAD_GPIO1_0__GPIO1_0 */
IMX_PIN_REG(MX51_PAD_GPIO1_0, 0x7b4, 0x3ac, 0, 0x000, 0), /* MX51_PAD_GPIO1_0__SD1_CD */
IMX_PIN_REG(MX51_PAD_GPIO1_1, 0x7b8, 0x3b0, 2, 0x918, 2), /* MX51_PAD_GPIO1_1__CSPI_MISO */
IMX_PIN_REG(MX51_PAD_GPIO1_1, 0x7b8, 0x3b0, 1, 0x000, 0), /* MX51_PAD_GPIO1_1__GPIO1_1 */
IMX_PIN_REG(MX51_PAD_GPIO1_1, 0x7b8, 0x3b0, 0, 0x000, 0), /* MX51_PAD_GPIO1_1__SD1_WP */
IMX_PIN_REG(MX51_PAD_EIM_DA12, NO_PAD, 0x04c, 0, 0x000, 0), /* MX51_PAD_EIM_DA12__EIM_DA12 */
IMX_PIN_REG(MX51_PAD_EIM_DA13, NO_PAD, 0x050, 0, 0x000, 0), /* MX51_PAD_EIM_DA13__EIM_DA13 */
IMX_PIN_REG(MX51_PAD_EIM_DA14, NO_PAD, 0x054, 0, 0x000, 0), /* MX51_PAD_EIM_DA14__EIM_DA14 */
IMX_PIN_REG(MX51_PAD_EIM_DA15, NO_PAD, 0x058, 0, 0x000, 0), /* MX51_PAD_EIM_DA15__EIM_DA15 */
IMX_PIN_REG(MX51_PAD_SD2_CMD, NO_PAD, 0x3b4, 2, 0x91c, 3), /* MX51_PAD_SD2_CMD__CSPI_MOSI */
IMX_PIN_REG(MX51_PAD_SD2_CMD, 0x7bc, 0x3b4, 1, 0x9b0, 2), /* MX51_PAD_SD2_CMD__I2C1_SCL */
IMX_PIN_REG(MX51_PAD_SD2_CMD, 0x7bc, 0x3b4, 0, 0x000, 0), /* MX51_PAD_SD2_CMD__SD2_CMD */
IMX_PIN_REG(MX51_PAD_SD2_CLK, 0x7c0, 0x3b8, 2, 0x914, 3), /* MX51_PAD_SD2_CLK__CSPI_SCLK */
IMX_PIN_REG(MX51_PAD_SD2_CLK, 0x7c0, 0x3b8, 1, 0x9b4, 2), /* MX51_PAD_SD2_CLK__I2C1_SDA */
IMX_PIN_REG(MX51_PAD_SD2_CLK, 0x7c0, 0x3b8, 0, 0x000, 0), /* MX51_PAD_SD2_CLK__SD2_CLK */
IMX_PIN_REG(MX51_PAD_SD2_DATA0, 0x7c4, 0x3bc, 2, 0x918, 3), /* MX51_PAD_SD2_DATA0__CSPI_MISO */
IMX_PIN_REG(MX51_PAD_SD2_DATA0, 0x7c4, 0x3bc, 1, 0x000, 0), /* MX51_PAD_SD2_DATA0__SD1_DAT4 */
IMX_PIN_REG(MX51_PAD_SD2_DATA0, 0x7c4, 0x3bc, 0, 0x000, 0), /* MX51_PAD_SD2_DATA0__SD2_DATA0 */
IMX_PIN_REG(MX51_PAD_SD2_DATA1, 0x7c8, 0x3c0, 1, 0x000, 0), /* MX51_PAD_SD2_DATA1__SD1_DAT5 */
IMX_PIN_REG(MX51_PAD_SD2_DATA1, 0x7c8, 0x3c0, 0, 0x000, 0), /* MX51_PAD_SD2_DATA1__SD2_DATA1 */
IMX_PIN_REG(MX51_PAD_SD2_DATA1, 0x7c8, 0x3c0, 2, 0x000, 0), /* MX51_PAD_SD2_DATA1__USBH3_H2_DP */
IMX_PIN_REG(MX51_PAD_SD2_DATA2, 0x7cc, 0x3c4, 1, 0x000, 0), /* MX51_PAD_SD2_DATA2__SD1_DAT6 */
IMX_PIN_REG(MX51_PAD_SD2_DATA2, 0x7cc, 0x3c4, 0, 0x000, 0), /* MX51_PAD_SD2_DATA2__SD2_DATA2 */
IMX_PIN_REG(MX51_PAD_SD2_DATA2, 0x7cc, 0x3c4, 2, 0x000, 0), /* MX51_PAD_SD2_DATA2__USBH3_H2_DM */
IMX_PIN_REG(MX51_PAD_SD2_DATA3, 0x7d0, 0x3c8, 2, 0x924, 1), /* MX51_PAD_SD2_DATA3__CSPI_SS2 */
IMX_PIN_REG(MX51_PAD_SD2_DATA3, 0x7d0, 0x3c8, 1, 0x000, 0), /* MX51_PAD_SD2_DATA3__SD1_DAT7 */
IMX_PIN_REG(MX51_PAD_SD2_DATA3, 0x7d0, 0x3c8, 0, 0x000, 0), /* MX51_PAD_SD2_DATA3__SD2_DATA3 */
IMX_PIN_REG(MX51_PAD_GPIO1_2, 0x7d4, 0x3cc, 5, 0x000, 0), /* MX51_PAD_GPIO1_2__CCM_OUT_2 */
IMX_PIN_REG(MX51_PAD_GPIO1_2, 0x7d4, 0x3cc, 0, 0x000, 0), /* MX51_PAD_GPIO1_2__GPIO1_2 */
IMX_PIN_REG(MX51_PAD_GPIO1_2, 0x7d4, 0x3cc, 2, 0x9b8, 3), /* MX51_PAD_GPIO1_2__I2C2_SCL */
IMX_PIN_REG(MX51_PAD_GPIO1_2, 0x7d4, 0x3cc, 7, 0x90c, 1), /* MX51_PAD_GPIO1_2__PLL1_BYP */
IMX_PIN_REG(MX51_PAD_GPIO1_2, 0x7d4, 0x3cc, 1, 0x000, 0), /* MX51_PAD_GPIO1_2__PWM1_PWMO */
IMX_PIN_REG(MX51_PAD_GPIO1_3, 0x7d8, 0x3d0, 0, 0x000, 0), /* MX51_PAD_GPIO1_3__GPIO1_3 */
IMX_PIN_REG(MX51_PAD_GPIO1_3, 0x7d8, 0x3d0, 2, 0x9bc, 3), /* MX51_PAD_GPIO1_3__I2C2_SDA */
IMX_PIN_REG(MX51_PAD_GPIO1_3, 0x7d8, 0x3d0, 7, 0x910, 1), /* MX51_PAD_GPIO1_3__PLL2_BYP */
IMX_PIN_REG(MX51_PAD_GPIO1_3, 0x7d8, 0x3d0, 1, 0x000, 0), /* MX51_PAD_GPIO1_3__PWM2_PWMO */
IMX_PIN_REG(MX51_PAD_PMIC_INT_REQ, 0x7fc, 0x3d4, 0, 0x000, 0), /* MX51_PAD_PMIC_INT_REQ__PMIC_INT_REQ */
IMX_PIN_REG(MX51_PAD_PMIC_INT_REQ, 0x7fc, 0x3d4, 1, 0x000, 0), /* MX51_PAD_PMIC_INT_REQ__PMIC_PMU_IRQ_B */
IMX_PIN_REG(MX51_PAD_GPIO1_4, 0x804, 0x3d8, 4, 0x908, 1), /* MX51_PAD_GPIO1_4__DISP2_EXT_CLK */
IMX_PIN_REG(MX51_PAD_GPIO1_4, 0x804, 0x3d8, 3, 0x938, 1), /* MX51_PAD_GPIO1_4__EIM_RDY */
IMX_PIN_REG(MX51_PAD_GPIO1_4, 0x804, 0x3d8, 0, 0x000, 0), /* MX51_PAD_GPIO1_4__GPIO1_4 */
IMX_PIN_REG(MX51_PAD_GPIO1_4, 0x804, 0x3d8, 2, 0x000, 0), /* MX51_PAD_GPIO1_4__WDOG1_WDOG_B */
IMX_PIN_REG(MX51_PAD_GPIO1_5, 0x808, 0x3dc, 6, 0x000, 0), /* MX51_PAD_GPIO1_5__CSI2_MCLK */
IMX_PIN_REG(MX51_PAD_GPIO1_5, 0x808, 0x3dc, 3, 0x000, 0), /* MX51_PAD_GPIO1_5__DISP2_PIN16 */
IMX_PIN_REG(MX51_PAD_GPIO1_5, 0x808, 0x3dc, 0, 0x000, 0), /* MX51_PAD_GPIO1_5__GPIO1_5 */
IMX_PIN_REG(MX51_PAD_GPIO1_5, 0x808, 0x3dc, 2, 0x000, 0), /* MX51_PAD_GPIO1_5__WDOG2_WDOG_B */
IMX_PIN_REG(MX51_PAD_GPIO1_6, 0x80c, 0x3e0, 4, 0x000, 0), /* MX51_PAD_GPIO1_6__DISP2_PIN17 */
IMX_PIN_REG(MX51_PAD_GPIO1_6, 0x80c, 0x3e0, 0, 0x000, 0), /* MX51_PAD_GPIO1_6__GPIO1_6 */
IMX_PIN_REG(MX51_PAD_GPIO1_6, 0x80c, 0x3e0, 3, 0x000, 0), /* MX51_PAD_GPIO1_6__REF_EN_B */
IMX_PIN_REG(MX51_PAD_GPIO1_7, 0x810, 0x3e4, 3, 0x000, 0), /* MX51_PAD_GPIO1_7__CCM_OUT_0 */
IMX_PIN_REG(MX51_PAD_GPIO1_7, 0x810, 0x3e4, 0, 0x000, 0), /* MX51_PAD_GPIO1_7__GPIO1_7 */
IMX_PIN_REG(MX51_PAD_GPIO1_7, 0x810, 0x3e4, 6, 0x000, 0), /* MX51_PAD_GPIO1_7__SD2_WP */
IMX_PIN_REG(MX51_PAD_GPIO1_7, 0x810, 0x3e4, 2, 0x000, 0), /* MX51_PAD_GPIO1_7__SPDIF_OUT1 */
IMX_PIN_REG(MX51_PAD_GPIO1_8, 0x814, 0x3e8, 2, 0x99c, 2), /* MX51_PAD_GPIO1_8__CSI2_DATA_EN */
IMX_PIN_REG(MX51_PAD_GPIO1_8, 0x814, 0x3e8, 0, 0x000, 0), /* MX51_PAD_GPIO1_8__GPIO1_8 */
IMX_PIN_REG(MX51_PAD_GPIO1_8, 0x814, 0x3e8, 6, 0x000, 0), /* MX51_PAD_GPIO1_8__SD2_CD */
IMX_PIN_REG(MX51_PAD_GPIO1_8, 0x814, 0x3e8, 1, 0x000, 0), /* MX51_PAD_GPIO1_8__USBH3_PWR */
IMX_PIN_REG(MX51_PAD_GPIO1_9, 0x818, 0x3ec, 3, 0x000, 0), /* MX51_PAD_GPIO1_9__CCM_OUT_1 */
IMX_PIN_REG(MX51_PAD_GPIO1_9, 0x818, 0x3ec, 2, 0x000, 0), /* MX51_PAD_GPIO1_9__DISP2_D1_CS */
IMX_PIN_REG(MX51_PAD_GPIO1_9, 0x818, 0x3ec, 7, 0x000, 0), /* MX51_PAD_GPIO1_9__DISP2_SER_CS */
IMX_PIN_REG(MX51_PAD_GPIO1_9, 0x818, 0x3ec, 0, 0x000, 0), /* MX51_PAD_GPIO1_9__GPIO1_9 */
IMX_PIN_REG(MX51_PAD_GPIO1_9, 0x818, 0x3ec, 6, 0x000, 0), /* MX51_PAD_GPIO1_9__SD2_LCTL */
IMX_PIN_REG(MX51_PAD_GPIO1_9, 0x818, 0x3ec, 1, 0x000, 0), /* MX51_PAD_GPIO1_9__USBH3_OC */
};
/* Pad names for the pinmux subsystem */
static const struct pinctrl_pin_desc imx51_pinctrl_pads[] = {
IMX_PINCTRL_PIN(MX51_PAD_EIM_D16),
IMX_PINCTRL_PIN(MX51_PAD_EIM_D17),
IMX_PINCTRL_PIN(MX51_PAD_EIM_D18),
IMX_PINCTRL_PIN(MX51_PAD_EIM_D19),
IMX_PINCTRL_PIN(MX51_PAD_EIM_D20),
IMX_PINCTRL_PIN(MX51_PAD_EIM_D21),
IMX_PINCTRL_PIN(MX51_PAD_EIM_D22),
IMX_PINCTRL_PIN(MX51_PAD_EIM_D23),
IMX_PINCTRL_PIN(MX51_PAD_EIM_D24),
IMX_PINCTRL_PIN(MX51_PAD_EIM_D25),
IMX_PINCTRL_PIN(MX51_PAD_EIM_D26),
IMX_PINCTRL_PIN(MX51_PAD_EIM_D27),
IMX_PINCTRL_PIN(MX51_PAD_EIM_D28),
IMX_PINCTRL_PIN(MX51_PAD_EIM_D29),
IMX_PINCTRL_PIN(MX51_PAD_EIM_D30),
IMX_PINCTRL_PIN(MX51_PAD_EIM_D31),
IMX_PINCTRL_PIN(MX51_PAD_EIM_A16),
IMX_PINCTRL_PIN(MX51_PAD_EIM_A17),
IMX_PINCTRL_PIN(MX51_PAD_EIM_A18),
IMX_PINCTRL_PIN(MX51_PAD_EIM_A19),
IMX_PINCTRL_PIN(MX51_PAD_EIM_A20),
IMX_PINCTRL_PIN(MX51_PAD_EIM_A21),
IMX_PINCTRL_PIN(MX51_PAD_EIM_A22),
IMX_PINCTRL_PIN(MX51_PAD_EIM_A23),
IMX_PINCTRL_PIN(MX51_PAD_EIM_A24),
IMX_PINCTRL_PIN(MX51_PAD_EIM_A25),
IMX_PINCTRL_PIN(MX51_PAD_EIM_A26),
IMX_PINCTRL_PIN(MX51_PAD_EIM_A27),
IMX_PINCTRL_PIN(MX51_PAD_EIM_EB0),
IMX_PINCTRL_PIN(MX51_PAD_EIM_EB1),
IMX_PINCTRL_PIN(MX51_PAD_EIM_EB2),
IMX_PINCTRL_PIN(MX51_PAD_EIM_EB3),
IMX_PINCTRL_PIN(MX51_PAD_EIM_OE),
IMX_PINCTRL_PIN(MX51_PAD_EIM_CS0),
IMX_PINCTRL_PIN(MX51_PAD_EIM_CS1),
IMX_PINCTRL_PIN(MX51_PAD_EIM_CS2),
IMX_PINCTRL_PIN(MX51_PAD_EIM_CS3),
IMX_PINCTRL_PIN(MX51_PAD_EIM_CS4),
IMX_PINCTRL_PIN(MX51_PAD_EIM_CS5),
IMX_PINCTRL_PIN(MX51_PAD_EIM_DTACK),
IMX_PINCTRL_PIN(MX51_PAD_EIM_LBA),
IMX_PINCTRL_PIN(MX51_PAD_EIM_CRE),
IMX_PINCTRL_PIN(MX51_PAD_DRAM_CS1),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_WE_B),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_RE_B),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_ALE),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_CLE),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_WP_B),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_RB0),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_RB1),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_RB2),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_RB3),
IMX_PINCTRL_PIN(MX51_PAD_GPIO_NAND),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_CS0),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_CS1),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_CS2),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_CS3),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_CS4),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_CS5),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_CS6),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_CS7),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_RDY_INT),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_D15),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_D14),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_D13),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_D12),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_D11),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_D10),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_D9),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_D8),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_D7),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_D6),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_D5),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_D4),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_D3),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_D2),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_D1),
IMX_PINCTRL_PIN(MX51_PAD_NANDF_D0),
IMX_PINCTRL_PIN(MX51_PAD_CSI1_D8),
IMX_PINCTRL_PIN(MX51_PAD_CSI1_D9),
IMX_PINCTRL_PIN(MX51_PAD_CSI1_D10),
IMX_PINCTRL_PIN(MX51_PAD_CSI1_D11),
IMX_PINCTRL_PIN(MX51_PAD_CSI1_D12),
IMX_PINCTRL_PIN(MX51_PAD_CSI1_D13),
IMX_PINCTRL_PIN(MX51_PAD_CSI1_D14),
IMX_PINCTRL_PIN(MX51_PAD_CSI1_D15),
IMX_PINCTRL_PIN(MX51_PAD_CSI1_D16),
IMX_PINCTRL_PIN(MX51_PAD_CSI1_D17),
IMX_PINCTRL_PIN(MX51_PAD_CSI1_D18),
IMX_PINCTRL_PIN(MX51_PAD_CSI1_D19),
IMX_PINCTRL_PIN(MX51_PAD_CSI1_VSYNC),
IMX_PINCTRL_PIN(MX51_PAD_CSI1_HSYNC),
IMX_PINCTRL_PIN(MX51_PAD_CSI1_PIXCLK),
IMX_PINCTRL_PIN(MX51_PAD_CSI1_MCLK),
IMX_PINCTRL_PIN(MX51_PAD_CSI2_D12),
IMX_PINCTRL_PIN(MX51_PAD_CSI2_D13),
IMX_PINCTRL_PIN(MX51_PAD_CSI2_D14),
IMX_PINCTRL_PIN(MX51_PAD_CSI2_D15),
IMX_PINCTRL_PIN(MX51_PAD_CSI2_D16),
IMX_PINCTRL_PIN(MX51_PAD_CSI2_D17),
IMX_PINCTRL_PIN(MX51_PAD_CSI2_D18),
IMX_PINCTRL_PIN(MX51_PAD_CSI2_D19),
IMX_PINCTRL_PIN(MX51_PAD_CSI2_VSYNC),
IMX_PINCTRL_PIN(MX51_PAD_CSI2_HSYNC),
IMX_PINCTRL_PIN(MX51_PAD_CSI2_PIXCLK),
IMX_PINCTRL_PIN(MX51_PAD_I2C1_CLK),
IMX_PINCTRL_PIN(MX51_PAD_I2C1_DAT),
IMX_PINCTRL_PIN(MX51_PAD_AUD3_BB_TXD),
IMX_PINCTRL_PIN(MX51_PAD_AUD3_BB_RXD),
IMX_PINCTRL_PIN(MX51_PAD_AUD3_BB_CK),
IMX_PINCTRL_PIN(MX51_PAD_AUD3_BB_FS),
IMX_PINCTRL_PIN(MX51_PAD_CSPI1_MOSI),
IMX_PINCTRL_PIN(MX51_PAD_CSPI1_MISO),
IMX_PINCTRL_PIN(MX51_PAD_CSPI1_SS0),
IMX_PINCTRL_PIN(MX51_PAD_CSPI1_SS1),
IMX_PINCTRL_PIN(MX51_PAD_CSPI1_RDY),
IMX_PINCTRL_PIN(MX51_PAD_CSPI1_SCLK),
IMX_PINCTRL_PIN(MX51_PAD_UART1_RXD),
IMX_PINCTRL_PIN(MX51_PAD_UART1_TXD),
IMX_PINCTRL_PIN(MX51_PAD_UART1_RTS),
IMX_PINCTRL_PIN(MX51_PAD_UART1_CTS),
IMX_PINCTRL_PIN(MX51_PAD_UART2_RXD),
IMX_PINCTRL_PIN(MX51_PAD_UART2_TXD),
IMX_PINCTRL_PIN(MX51_PAD_UART3_RXD),
IMX_PINCTRL_PIN(MX51_PAD_UART3_TXD),
IMX_PINCTRL_PIN(MX51_PAD_OWIRE_LINE),
IMX_PINCTRL_PIN(MX51_PAD_KEY_ROW0),
IMX_PINCTRL_PIN(MX51_PAD_KEY_ROW1),
IMX_PINCTRL_PIN(MX51_PAD_KEY_ROW2),
IMX_PINCTRL_PIN(MX51_PAD_KEY_ROW3),
IMX_PINCTRL_PIN(MX51_PAD_KEY_COL0),
IMX_PINCTRL_PIN(MX51_PAD_KEY_COL1),
IMX_PINCTRL_PIN(MX51_PAD_KEY_COL2),
IMX_PINCTRL_PIN(MX51_PAD_KEY_COL3),
IMX_PINCTRL_PIN(MX51_PAD_KEY_COL4),
IMX_PINCTRL_PIN(MX51_PAD_KEY_COL5),
IMX_PINCTRL_PIN(MX51_PAD_USBH1_CLK),
IMX_PINCTRL_PIN(MX51_PAD_USBH1_DIR),
IMX_PINCTRL_PIN(MX51_PAD_USBH1_STP),
IMX_PINCTRL_PIN(MX51_PAD_USBH1_NXT),
IMX_PINCTRL_PIN(MX51_PAD_USBH1_DATA0),
IMX_PINCTRL_PIN(MX51_PAD_USBH1_DATA1),
IMX_PINCTRL_PIN(MX51_PAD_USBH1_DATA2),
IMX_PINCTRL_PIN(MX51_PAD_USBH1_DATA3),
IMX_PINCTRL_PIN(MX51_PAD_USBH1_DATA4),
IMX_PINCTRL_PIN(MX51_PAD_USBH1_DATA5),
IMX_PINCTRL_PIN(MX51_PAD_USBH1_DATA6),
IMX_PINCTRL_PIN(MX51_PAD_USBH1_DATA7),
IMX_PINCTRL_PIN(MX51_PAD_DI1_PIN11),
IMX_PINCTRL_PIN(MX51_PAD_DI1_PIN12),
IMX_PINCTRL_PIN(MX51_PAD_DI1_PIN13),
IMX_PINCTRL_PIN(MX51_PAD_DI1_D0_CS),
IMX_PINCTRL_PIN(MX51_PAD_DI1_D1_CS),
IMX_PINCTRL_PIN(MX51_PAD_DISPB2_SER_DIN),
IMX_PINCTRL_PIN(MX51_PAD_DISPB2_SER_DIO),
IMX_PINCTRL_PIN(MX51_PAD_DISPB2_SER_CLK),
IMX_PINCTRL_PIN(MX51_PAD_DISPB2_SER_RS),
IMX_PINCTRL_PIN(MX51_PAD_DISP1_DAT0),
IMX_PINCTRL_PIN(MX51_PAD_DISP1_DAT1),
IMX_PINCTRL_PIN(MX51_PAD_DISP1_DAT2),
IMX_PINCTRL_PIN(MX51_PAD_DISP1_DAT3),
IMX_PINCTRL_PIN(MX51_PAD_DISP1_DAT4),
IMX_PINCTRL_PIN(MX51_PAD_DISP1_DAT5),
IMX_PINCTRL_PIN(MX51_PAD_DISP1_DAT6),
IMX_PINCTRL_PIN(MX51_PAD_DISP1_DAT7),
IMX_PINCTRL_PIN(MX51_PAD_DISP1_DAT8),
IMX_PINCTRL_PIN(MX51_PAD_DISP1_DAT9),
IMX_PINCTRL_PIN(MX51_PAD_DISP1_DAT10),
IMX_PINCTRL_PIN(MX51_PAD_DISP1_DAT11),
IMX_PINCTRL_PIN(MX51_PAD_DISP1_DAT12),
IMX_PINCTRL_PIN(MX51_PAD_DISP1_DAT13),
IMX_PINCTRL_PIN(MX51_PAD_DISP1_DAT14),
IMX_PINCTRL_PIN(MX51_PAD_DISP1_DAT15),
IMX_PINCTRL_PIN(MX51_PAD_DISP1_DAT16),
IMX_PINCTRL_PIN(MX51_PAD_DISP1_DAT17),
IMX_PINCTRL_PIN(MX51_PAD_DISP1_DAT18),
IMX_PINCTRL_PIN(MX51_PAD_DISP1_DAT19),
IMX_PINCTRL_PIN(MX51_PAD_DISP1_DAT20),
IMX_PINCTRL_PIN(MX51_PAD_DISP1_DAT21),
IMX_PINCTRL_PIN(MX51_PAD_DISP1_DAT22),
IMX_PINCTRL_PIN(MX51_PAD_DISP1_DAT23),
IMX_PINCTRL_PIN(MX51_PAD_DI1_PIN3),
IMX_PINCTRL_PIN(MX51_PAD_DI1_PIN2),
IMX_PINCTRL_PIN(MX51_PAD_DI_GP2),
IMX_PINCTRL_PIN(MX51_PAD_DI_GP3),
IMX_PINCTRL_PIN(MX51_PAD_DI2_PIN4),
IMX_PINCTRL_PIN(MX51_PAD_DI2_PIN2),
IMX_PINCTRL_PIN(MX51_PAD_DI2_PIN3),
IMX_PINCTRL_PIN(MX51_PAD_DI2_DISP_CLK),
IMX_PINCTRL_PIN(MX51_PAD_DI_GP4),
IMX_PINCTRL_PIN(MX51_PAD_DISP2_DAT0),
IMX_PINCTRL_PIN(MX51_PAD_DISP2_DAT1),
IMX_PINCTRL_PIN(MX51_PAD_DISP2_DAT2),
IMX_PINCTRL_PIN(MX51_PAD_DISP2_DAT3),
IMX_PINCTRL_PIN(MX51_PAD_DISP2_DAT4),
IMX_PINCTRL_PIN(MX51_PAD_DISP2_DAT5),
IMX_PINCTRL_PIN(MX51_PAD_DISP2_DAT6),
IMX_PINCTRL_PIN(MX51_PAD_DISP2_DAT7),
IMX_PINCTRL_PIN(MX51_PAD_DISP2_DAT8),
IMX_PINCTRL_PIN(MX51_PAD_DISP2_DAT9),
IMX_PINCTRL_PIN(MX51_PAD_DISP2_DAT10),
IMX_PINCTRL_PIN(MX51_PAD_DISP2_DAT11),
IMX_PINCTRL_PIN(MX51_PAD_DISP2_DAT12),
IMX_PINCTRL_PIN(MX51_PAD_DISP2_DAT13),
IMX_PINCTRL_PIN(MX51_PAD_DISP2_DAT14),
IMX_PINCTRL_PIN(MX51_PAD_DISP2_DAT15),
IMX_PINCTRL_PIN(MX51_PAD_SD1_CMD),
IMX_PINCTRL_PIN(MX51_PAD_SD1_CLK),
IMX_PINCTRL_PIN(MX51_PAD_SD1_DATA0),
IMX_PINCTRL_PIN(MX51_PAD_EIM_DA0),
IMX_PINCTRL_PIN(MX51_PAD_EIM_DA1),
IMX_PINCTRL_PIN(MX51_PAD_EIM_DA2),
IMX_PINCTRL_PIN(MX51_PAD_EIM_DA3),
IMX_PINCTRL_PIN(MX51_PAD_SD1_DATA1),
IMX_PINCTRL_PIN(MX51_PAD_EIM_DA4),
IMX_PINCTRL_PIN(MX51_PAD_EIM_DA5),
IMX_PINCTRL_PIN(MX51_PAD_EIM_DA6),
IMX_PINCTRL_PIN(MX51_PAD_EIM_DA7),
IMX_PINCTRL_PIN(MX51_PAD_SD1_DATA2),
IMX_PINCTRL_PIN(MX51_PAD_EIM_DA10),
IMX_PINCTRL_PIN(MX51_PAD_EIM_DA11),
IMX_PINCTRL_PIN(MX51_PAD_EIM_DA8),
IMX_PINCTRL_PIN(MX51_PAD_EIM_DA9),
IMX_PINCTRL_PIN(MX51_PAD_SD1_DATA3),
IMX_PINCTRL_PIN(MX51_PAD_GPIO1_0),
IMX_PINCTRL_PIN(MX51_PAD_GPIO1_1),
IMX_PINCTRL_PIN(MX51_PAD_EIM_DA12),
IMX_PINCTRL_PIN(MX51_PAD_EIM_DA13),
IMX_PINCTRL_PIN(MX51_PAD_EIM_DA14),
IMX_PINCTRL_PIN(MX51_PAD_EIM_DA15),
IMX_PINCTRL_PIN(MX51_PAD_SD2_CMD),
IMX_PINCTRL_PIN(MX51_PAD_SD2_CLK),
IMX_PINCTRL_PIN(MX51_PAD_SD2_DATA0),
IMX_PINCTRL_PIN(MX51_PAD_SD2_DATA1),
IMX_PINCTRL_PIN(MX51_PAD_SD2_DATA2),
IMX_PINCTRL_PIN(MX51_PAD_SD2_DATA3),
IMX_PINCTRL_PIN(MX51_PAD_GPIO1_2),
IMX_PINCTRL_PIN(MX51_PAD_GPIO1_3),
IMX_PINCTRL_PIN(MX51_PAD_PMIC_INT_REQ),
IMX_PINCTRL_PIN(MX51_PAD_GPIO1_4),
IMX_PINCTRL_PIN(MX51_PAD_GPIO1_5),
IMX_PINCTRL_PIN(MX51_PAD_GPIO1_6),
IMX_PINCTRL_PIN(MX51_PAD_GPIO1_7),
IMX_PINCTRL_PIN(MX51_PAD_GPIO1_8),
IMX_PINCTRL_PIN(MX51_PAD_GPIO1_9),
};
static struct imx_pinctrl_soc_info imx51_pinctrl_info = {
.pins = imx51_pinctrl_pads,
.npins = ARRAY_SIZE(imx51_pinctrl_pads),
.pin_regs = imx51_pin_regs,
.npin_regs = ARRAY_SIZE(imx51_pin_regs),
};
static struct of_device_id imx51_pinctrl_of_match[] __devinitdata = {
{ .compatible = "fsl,imx51-iomuxc", },
{ /* sentinel */ }
};
static int __devinit imx51_pinctrl_probe(struct platform_device *pdev)
{
return imx_pinctrl_probe(pdev, &imx51_pinctrl_info);
}
static struct platform_driver imx51_pinctrl_driver = {
.driver = {
.name = "imx51-pinctrl",
.owner = THIS_MODULE,
.of_match_table = of_match_ptr(imx51_pinctrl_of_match),
},
.probe = imx51_pinctrl_probe,
.remove = __devexit_p(imx_pinctrl_remove),
};
static int __init imx51_pinctrl_init(void)
{
return platform_driver_register(&imx51_pinctrl_driver);
}
arch_initcall(imx51_pinctrl_init);
static void __exit imx51_pinctrl_exit(void)
{
platform_driver_unregister(&imx51_pinctrl_driver);
}
module_exit(imx51_pinctrl_exit);
MODULE_AUTHOR("Dong Aisheng <dong.aisheng@linaro.org>");
MODULE_DESCRIPTION("Freescale IMX51 pinctrl driver");
MODULE_LICENSE("GPL v2");
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
/*
* Copyright 2012 Freescale Semiconductor, Inc.
*
* The code contained herein is licensed under the GNU General Public
* License. You may obtain a copy of the GNU General Public License
* Version 2 or later at the following locations:
*
* http://www.opensource.org/licenses/gpl-license.html
* http://www.gnu.org/copyleft/gpl.html
*/
#include <linux/err.h>
#include <linux/init.h>
#include <linux/io.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/of_address.h>
#include <linux/pinctrl/machine.h>
#include <linux/pinctrl/pinconf.h>
#include <linux/pinctrl/pinctrl.h>
#include <linux/pinctrl/pinmux.h>
#include <linux/platform_device.h>
#include <linux/slab.h>
#include "core.h"
#include "pinctrl-mxs.h"
#define SUFFIX_LEN 4
struct mxs_pinctrl_data {
struct device *dev;
struct pinctrl_dev *pctl;
void __iomem *base;
struct mxs_pinctrl_soc_data *soc;
};
static int mxs_get_groups_count(struct pinctrl_dev *pctldev)
{
struct mxs_pinctrl_data *d = pinctrl_dev_get_drvdata(pctldev);
return d->soc->ngroups;
}
static const char *mxs_get_group_name(struct pinctrl_dev *pctldev,
unsigned group)
{
struct mxs_pinctrl_data *d = pinctrl_dev_get_drvdata(pctldev);
return d->soc->groups[group].name;
}
static int mxs_get_group_pins(struct pinctrl_dev *pctldev, unsigned group,
const unsigned **pins, unsigned *num_pins)
{
struct mxs_pinctrl_data *d = pinctrl_dev_get_drvdata(pctldev);
*pins = d->soc->groups[group].pins;
*num_pins = d->soc->groups[group].npins;
return 0;
}
static void mxs_pin_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *s,
unsigned offset)
{
seq_printf(s, " %s", dev_name(pctldev->dev));
}
static int mxs_dt_node_to_map(struct pinctrl_dev *pctldev,
struct device_node *np,
struct pinctrl_map **map, unsigned *num_maps)
{
struct pinctrl_map *new_map;
char *group = NULL;
unsigned new_num = 1;
unsigned long config = 0;
unsigned long *pconfig;
int length = strlen(np->name) + SUFFIX_LEN;
bool purecfg = false;
u32 val, reg;
int ret, i = 0;
/* Check for pin config node which has no 'reg' property */
if (of_property_read_u32(np, "reg", &reg))
purecfg = true;
ret = of_property_read_u32(np, "fsl,drive-strength", &val);
if (!ret)
config = val | MA_PRESENT;
ret = of_property_read_u32(np, "fsl,voltage", &val);
if (!ret)
config |= val << VOL_SHIFT | VOL_PRESENT;
ret = of_property_read_u32(np, "fsl,pull-up", &val);
if (!ret)
config |= val << PULL_SHIFT | PULL_PRESENT;
/* Check for group node which has both mux and config settings */
if (!purecfg && config)
new_num = 2;
new_map = kzalloc(sizeof(*new_map) * new_num, GFP_KERNEL);
if (!new_map)
return -ENOMEM;
if (!purecfg) {
new_map[i].type = PIN_MAP_TYPE_MUX_GROUP;
new_map[i].data.mux.function = np->name;
/* Compose group name */
group = kzalloc(length, GFP_KERNEL);
if (!group)
return -ENOMEM;
snprintf(group, length, "%s.%d", np->name, reg);
new_map[i].data.mux.group = group;
i++;
}
if (config) {
pconfig = kmemdup(&config, sizeof(config), GFP_KERNEL);
if (!pconfig) {
ret = -ENOMEM;
goto free;
}
new_map[i].type = PIN_MAP_TYPE_CONFIGS_GROUP;
new_map[i].data.configs.group_or_pin = purecfg ? np->name :
group;
new_map[i].data.configs.configs = pconfig;
new_map[i].data.configs.num_configs = 1;
}
*map = new_map;
*num_maps = new_num;
return 0;
free:
kfree(new_map);
return ret;
}
static void mxs_dt_free_map(struct pinctrl_dev *pctldev,
struct pinctrl_map *map, unsigned num_maps)
{
int i;
for (i = 0; i < num_maps; i++) {
if (map[i].type == PIN_MAP_TYPE_MUX_GROUP)
kfree(map[i].data.mux.group);
if (map[i].type == PIN_MAP_TYPE_CONFIGS_GROUP)
kfree(map[i].data.configs.configs);
}
kfree(map);
}
static struct pinctrl_ops mxs_pinctrl_ops = {
.get_groups_count = mxs_get_groups_count,
.get_group_name = mxs_get_group_name,
.get_group_pins = mxs_get_group_pins,
.pin_dbg_show = mxs_pin_dbg_show,
.dt_node_to_map = mxs_dt_node_to_map,
.dt_free_map = mxs_dt_free_map,
};
static int mxs_pinctrl_get_funcs_count(struct pinctrl_dev *pctldev)
{
struct mxs_pinctrl_data *d = pinctrl_dev_get_drvdata(pctldev);
return d->soc->nfunctions;
}
static const char *mxs_pinctrl_get_func_name(struct pinctrl_dev *pctldev,
unsigned function)
{
struct mxs_pinctrl_data *d = pinctrl_dev_get_drvdata(pctldev);
return d->soc->functions[function].name;
}
static int mxs_pinctrl_get_func_groups(struct pinctrl_dev *pctldev,
unsigned group,
const char * const **groups,
unsigned * const num_groups)
{
struct mxs_pinctrl_data *d = pinctrl_dev_get_drvdata(pctldev);
*groups = d->soc->functions[group].groups;
*num_groups = d->soc->functions[group].ngroups;
return 0;
}
static int mxs_pinctrl_enable(struct pinctrl_dev *pctldev, unsigned selector,
unsigned group)
{
struct mxs_pinctrl_data *d = pinctrl_dev_get_drvdata(pctldev);
struct mxs_group *g = &d->soc->groups[group];
void __iomem *reg;
u8 bank, shift;
u16 pin;
int i;
for (i = 0; i < g->npins; i++) {
bank = PINID_TO_BANK(g->pins[i]);
pin = PINID_TO_PIN(g->pins[i]);
reg = d->base + d->soc->regs->muxsel;
reg += bank * 0x20 + pin / 16 * 0x10;
shift = pin % 16 * 2;
writel(0x3 << shift, reg + CLR);
writel(g->muxsel[i] << shift, reg + SET);
}
return 0;
}
static struct pinmux_ops mxs_pinmux_ops = {
.get_functions_count = mxs_pinctrl_get_funcs_count,
.get_function_name = mxs_pinctrl_get_func_name,
.get_function_groups = mxs_pinctrl_get_func_groups,
.enable = mxs_pinctrl_enable,
};
static int mxs_pinconf_get(struct pinctrl_dev *pctldev,
unsigned pin, unsigned long *config)
{
return -ENOTSUPP;
}
static int mxs_pinconf_set(struct pinctrl_dev *pctldev,
unsigned pin, unsigned long config)
{
return -ENOTSUPP;
}
static int mxs_pinconf_group_get(struct pinctrl_dev *pctldev,
unsigned group, unsigned long *config)
{
struct mxs_pinctrl_data *d = pinctrl_dev_get_drvdata(pctldev);
*config = d->soc->groups[group].config;
return 0;
}
static int mxs_pinconf_group_set(struct pinctrl_dev *pctldev,
unsigned group, unsigned long config)
{
struct mxs_pinctrl_data *d = pinctrl_dev_get_drvdata(pctldev);
struct mxs_group *g = &d->soc->groups[group];
void __iomem *reg;
u8 ma, vol, pull, bank, shift;
u16 pin;
int i;
ma = CONFIG_TO_MA(config);
vol = CONFIG_TO_VOL(config);
pull = CONFIG_TO_PULL(config);
for (i = 0; i < g->npins; i++) {
bank = PINID_TO_BANK(g->pins[i]);
pin = PINID_TO_PIN(g->pins[i]);
/* drive */
reg = d->base + d->soc->regs->drive;
reg += bank * 0x40 + pin / 8 * 0x10;
/* mA */
if (config & MA_PRESENT) {
shift = pin % 8 * 4;
writel(0x3 << shift, reg + CLR);
writel(ma << shift, reg + SET);
}
/* vol */
if (config & VOL_PRESENT) {
shift = pin % 8 * 4 + 2;
if (vol)
writel(1 << shift, reg + SET);
else
writel(1 << shift, reg + CLR);
}
/* pull */
if (config & PULL_PRESENT) {
reg = d->base + d->soc->regs->pull;
reg += bank * 0x10;
shift = pin;
if (pull)
writel(1 << shift, reg + SET);
else
writel(1 << shift, reg + CLR);
}
}
/* cache the config value for mxs_pinconf_group_get() */
g->config = config;
return 0;
}
static void mxs_pinconf_dbg_show(struct pinctrl_dev *pctldev,
struct seq_file *s, unsigned pin)
{
/* Not support */
}
static void mxs_pinconf_group_dbg_show(struct pinctrl_dev *pctldev,
struct seq_file *s, unsigned group)
{
unsigned long config;
if (!mxs_pinconf_group_get(pctldev, group, &config))
seq_printf(s, "0x%lx", config);
}
struct pinconf_ops mxs_pinconf_ops = {
.pin_config_get = mxs_pinconf_get,
.pin_config_set = mxs_pinconf_set,
.pin_config_group_get = mxs_pinconf_group_get,
.pin_config_group_set = mxs_pinconf_group_set,
.pin_config_dbg_show = mxs_pinconf_dbg_show,
.pin_config_group_dbg_show = mxs_pinconf_group_dbg_show,
};
static struct pinctrl_desc mxs_pinctrl_desc = {
.pctlops = &mxs_pinctrl_ops,
.pmxops = &mxs_pinmux_ops,
.confops = &mxs_pinconf_ops,
.owner = THIS_MODULE,
};
static int __devinit mxs_pinctrl_parse_group(struct platform_device *pdev,
struct device_node *np, int idx,
const char **out_name)
{
struct mxs_pinctrl_data *d = platform_get_drvdata(pdev);
struct mxs_group *g = &d->soc->groups[idx];
struct property *prop;
const char *propname = "fsl,pinmux-ids";
char *group;
int length = strlen(np->name) + SUFFIX_LEN;
int i;
u32 val;
group = devm_kzalloc(&pdev->dev, length, GFP_KERNEL);
if (!group)
return -ENOMEM;
if (of_property_read_u32(np, "reg", &val))
snprintf(group, length, "%s", np->name);
else
snprintf(group, length, "%s.%d", np->name, val);
g->name = group;
prop = of_find_property(np, propname, &length);
if (!prop)
return -EINVAL;
g->npins = length / sizeof(u32);
g->pins = devm_kzalloc(&pdev->dev, g->npins * sizeof(*g->pins),
GFP_KERNEL);
if (!g->pins)
return -ENOMEM;
g->muxsel = devm_kzalloc(&pdev->dev, g->npins * sizeof(*g->muxsel),
GFP_KERNEL);
if (!g->muxsel)
return -ENOMEM;
of_property_read_u32_array(np, propname, g->pins, g->npins);
for (i = 0; i < g->npins; i++) {
g->muxsel[i] = MUXID_TO_MUXSEL(g->pins[i]);
g->pins[i] = MUXID_TO_PINID(g->pins[i]);
}
if (out_name)
*out_name = g->name;
return 0;
}
static int __devinit mxs_pinctrl_probe_dt(struct platform_device *pdev,
struct mxs_pinctrl_data *d)
{
struct mxs_pinctrl_soc_data *soc = d->soc;
struct device_node *np = pdev->dev.of_node;
struct device_node *child;
struct mxs_function *f;
const char *gpio_compat = "fsl,mxs-gpio";
const char *fn, *fnull = "";
int i = 0, idxf = 0, idxg = 0;
int ret;
u32 val;
child = of_get_next_child(np, NULL);
if (!child) {
dev_err(&pdev->dev, "no group is defined\n");
return -ENOENT;
}
/* Count total functions and groups */
fn = fnull;
for_each_child_of_node(np, child) {
if (of_device_is_compatible(child, gpio_compat))
continue;
soc->ngroups++;
/* Skip pure pinconf node */
if (of_property_read_u32(child, "reg", &val))
continue;
if (strcmp(fn, child->name)) {
fn = child->name;
soc->nfunctions++;
}
}
soc->functions = devm_kzalloc(&pdev->dev, soc->nfunctions *
sizeof(*soc->functions), GFP_KERNEL);
if (!soc->functions)
return -ENOMEM;
soc->groups = devm_kzalloc(&pdev->dev, soc->ngroups *
sizeof(*soc->groups), GFP_KERNEL);
if (!soc->groups)
return -ENOMEM;
/* Count groups for each function */
fn = fnull;
f = &soc->functions[idxf];
for_each_child_of_node(np, child) {
if (of_device_is_compatible(child, gpio_compat))
continue;
if (of_property_read_u32(child, "reg", &val))
continue;
if (strcmp(fn, child->name)) {
f = &soc->functions[idxf++];
f->name = fn = child->name;
}
f->ngroups++;
};
/* Get groups for each function */
idxf = 0;
fn = fnull;
for_each_child_of_node(np, child) {
if (of_device_is_compatible(child, gpio_compat))
continue;
if (of_property_read_u32(child, "reg", &val)) {
ret = mxs_pinctrl_parse_group(pdev, child,
idxg++, NULL);
if (ret)
return ret;
continue;
}
if (strcmp(fn, child->name)) {
f = &soc->functions[idxf++];
f->groups = devm_kzalloc(&pdev->dev, f->ngroups *
sizeof(*f->groups),
GFP_KERNEL);
if (!f->groups)
return -ENOMEM;
fn = child->name;
i = 0;
}
ret = mxs_pinctrl_parse_group(pdev, child, idxg++,
&f->groups[i++]);
if (ret)
return ret;
}
return 0;
}
int __devinit mxs_pinctrl_probe(struct platform_device *pdev,
struct mxs_pinctrl_soc_data *soc)
{
struct device_node *np = pdev->dev.of_node;
struct mxs_pinctrl_data *d;
int ret;
d = devm_kzalloc(&pdev->dev, sizeof(*d), GFP_KERNEL);
if (!d)
return -ENOMEM;
d->dev = &pdev->dev;
d->soc = soc;
d->base = of_iomap(np, 0);
if (!d->base)
return -EADDRNOTAVAIL;
mxs_pinctrl_desc.pins = d->soc->pins;
mxs_pinctrl_desc.npins = d->soc->npins;
mxs_pinctrl_desc.name = dev_name(&pdev->dev);
platform_set_drvdata(pdev, d);
ret = mxs_pinctrl_probe_dt(pdev, d);
if (ret) {
dev_err(&pdev->dev, "dt probe failed: %d\n", ret);
goto err;
}
d->pctl = pinctrl_register(&mxs_pinctrl_desc, &pdev->dev, d);
if (!d->pctl) {
dev_err(&pdev->dev, "Couldn't register MXS pinctrl driver\n");
ret = -EINVAL;
goto err;
}
return 0;
err:
iounmap(d->base);
return ret;
}
EXPORT_SYMBOL_GPL(mxs_pinctrl_probe);
int __devexit mxs_pinctrl_remove(struct platform_device *pdev)
{
struct mxs_pinctrl_data *d = platform_get_drvdata(pdev);
pinctrl_unregister(d->pctl);
iounmap(d->base);
return 0;
}
EXPORT_SYMBOL_GPL(mxs_pinctrl_remove);
/*
* Copyright 2012 Freescale Semiconductor, Inc.
*
* The code contained herein is licensed under the GNU General Public
* License. You may obtain a copy of the GNU General Public License
* Version 2 or later at the following locations:
*
* http://www.opensource.org/licenses/gpl-license.html
* http://www.gnu.org/copyleft/gpl.html
*/
#ifndef __PINCTRL_MXS_H
#define __PINCTRL_MXS_H
#include <linux/platform_device.h>
#include <linux/pinctrl/pinctrl.h>
#define SET 0x4
#define CLR 0x8
#define TOG 0xc
#define MXS_PINCTRL_PIN(pin) PINCTRL_PIN(pin, #pin)
#define PINID(bank, pin) ((bank) * 32 + (pin))
/*
* pinmux-id bit field definitions
*
* bank: 15..12 (4)
* pin: 11..4 (8)
* muxsel: 3..0 (4)
*/
#define MUXID_TO_PINID(m) PINID((m) >> 12 & 0xf, (m) >> 4 & 0xff)
#define MUXID_TO_MUXSEL(m) ((m) & 0xf)
#define PINID_TO_BANK(p) ((p) >> 5)
#define PINID_TO_PIN(p) ((p) % 32)
/*
* pin config bit field definitions
*
* pull-up: 6..5 (2)
* voltage: 4..3 (2)
* mA: 2..0 (3)
*
* MSB of each field is presence bit for the config.
*/
#define PULL_PRESENT (1 << 6)
#define PULL_SHIFT 5
#define VOL_PRESENT (1 << 4)
#define VOL_SHIFT 3
#define MA_PRESENT (1 << 2)
#define MA_SHIFT 0
#define CONFIG_TO_PULL(c) ((c) >> PULL_SHIFT & 0x1)
#define CONFIG_TO_VOL(c) ((c) >> VOL_SHIFT & 0x1)
#define CONFIG_TO_MA(c) ((c) >> MA_SHIFT & 0x3)
struct mxs_function {
const char *name;
const char **groups;
unsigned ngroups;
};
struct mxs_group {
const char *name;
unsigned int *pins;
unsigned npins;
u8 *muxsel;
u8 config;
};
struct mxs_regs {
u16 muxsel;
u16 drive;
u16 pull;
};
struct mxs_pinctrl_soc_data {
const struct mxs_regs *regs;
const struct pinctrl_pin_desc *pins;
unsigned npins;
struct mxs_function *functions;
unsigned nfunctions;
struct mxs_group *groups;
unsigned ngroups;
};
int mxs_pinctrl_probe(struct platform_device *pdev,
struct mxs_pinctrl_soc_data *soc);
int mxs_pinctrl_remove(struct platform_device *pdev);
#endif /* __PINCTRL_MXS_H */
...@@ -25,20 +25,18 @@ static struct pinctrl_gpio_range pxa3xx_pinctrl_gpio_range = { ...@@ -25,20 +25,18 @@ static struct pinctrl_gpio_range pxa3xx_pinctrl_gpio_range = {
.pin_base = 0, .pin_base = 0,
}; };
static int pxa3xx_list_groups(struct pinctrl_dev *pctrldev, unsigned selector) static int pxa3xx_get_groups_count(struct pinctrl_dev *pctrldev)
{ {
struct pxa3xx_pinmux_info *info = pinctrl_dev_get_drvdata(pctrldev); struct pxa3xx_pinmux_info *info = pinctrl_dev_get_drvdata(pctrldev);
if (selector >= info->num_grps)
return -EINVAL; return info->num_grps;
return 0;
} }
static const char *pxa3xx_get_group_name(struct pinctrl_dev *pctrldev, static const char *pxa3xx_get_group_name(struct pinctrl_dev *pctrldev,
unsigned selector) unsigned selector)
{ {
struct pxa3xx_pinmux_info *info = pinctrl_dev_get_drvdata(pctrldev); struct pxa3xx_pinmux_info *info = pinctrl_dev_get_drvdata(pctrldev);
if (selector >= info->num_grps)
return NULL;
return info->grps[selector].name; return info->grps[selector].name;
} }
...@@ -48,25 +46,23 @@ static int pxa3xx_get_group_pins(struct pinctrl_dev *pctrldev, ...@@ -48,25 +46,23 @@ static int pxa3xx_get_group_pins(struct pinctrl_dev *pctrldev,
unsigned *num_pins) unsigned *num_pins)
{ {
struct pxa3xx_pinmux_info *info = pinctrl_dev_get_drvdata(pctrldev); struct pxa3xx_pinmux_info *info = pinctrl_dev_get_drvdata(pctrldev);
if (selector >= info->num_grps)
return -EINVAL;
*pins = info->grps[selector].pins; *pins = info->grps[selector].pins;
*num_pins = info->grps[selector].npins; *num_pins = info->grps[selector].npins;
return 0; return 0;
} }
static struct pinctrl_ops pxa3xx_pctrl_ops = { static struct pinctrl_ops pxa3xx_pctrl_ops = {
.list_groups = pxa3xx_list_groups, .get_groups_count = pxa3xx_get_groups_count,
.get_group_name = pxa3xx_get_group_name, .get_group_name = pxa3xx_get_group_name,
.get_group_pins = pxa3xx_get_group_pins, .get_group_pins = pxa3xx_get_group_pins,
}; };
static int pxa3xx_pmx_list_func(struct pinctrl_dev *pctrldev, unsigned func) static int pxa3xx_pmx_get_funcs_count(struct pinctrl_dev *pctrldev)
{ {
struct pxa3xx_pinmux_info *info = pinctrl_dev_get_drvdata(pctrldev); struct pxa3xx_pinmux_info *info = pinctrl_dev_get_drvdata(pctrldev);
if (func >= info->num_funcs)
return -EINVAL; return info->num_funcs;
return 0;
} }
static const char *pxa3xx_pmx_get_func_name(struct pinctrl_dev *pctrldev, static const char *pxa3xx_pmx_get_func_name(struct pinctrl_dev *pctrldev,
...@@ -142,11 +138,6 @@ static int pxa3xx_pmx_enable(struct pinctrl_dev *pctrldev, unsigned func, ...@@ -142,11 +138,6 @@ static int pxa3xx_pmx_enable(struct pinctrl_dev *pctrldev, unsigned func,
return 0; return 0;
} }
static void pxa3xx_pmx_disable(struct pinctrl_dev *pctrldev, unsigned func,
unsigned group)
{
}
static int pxa3xx_pmx_request_gpio(struct pinctrl_dev *pctrldev, static int pxa3xx_pmx_request_gpio(struct pinctrl_dev *pctrldev,
struct pinctrl_gpio_range *range, struct pinctrl_gpio_range *range,
unsigned pin) unsigned pin)
...@@ -170,11 +161,10 @@ static int pxa3xx_pmx_request_gpio(struct pinctrl_dev *pctrldev, ...@@ -170,11 +161,10 @@ static int pxa3xx_pmx_request_gpio(struct pinctrl_dev *pctrldev,
} }
static struct pinmux_ops pxa3xx_pmx_ops = { static struct pinmux_ops pxa3xx_pmx_ops = {
.list_functions = pxa3xx_pmx_list_func, .get_functions_count = pxa3xx_pmx_get_funcs_count,
.get_function_name = pxa3xx_pmx_get_func_name, .get_function_name = pxa3xx_pmx_get_func_name,
.get_function_groups = pxa3xx_pmx_get_groups, .get_function_groups = pxa3xx_pmx_get_groups,
.enable = pxa3xx_pmx_enable, .enable = pxa3xx_pmx_enable,
.disable = pxa3xx_pmx_disable,
.gpio_request_enable = pxa3xx_pmx_request_gpio, .gpio_request_enable = pxa3xx_pmx_request_gpio,
}; };
......
...@@ -853,18 +853,14 @@ static const struct sirfsoc_pin_group sirfsoc_pin_groups[] = { ...@@ -853,18 +853,14 @@ static const struct sirfsoc_pin_group sirfsoc_pin_groups[] = {
SIRFSOC_PIN_GROUP("gpsgrp", gps_pins), SIRFSOC_PIN_GROUP("gpsgrp", gps_pins),
}; };
static int sirfsoc_list_groups(struct pinctrl_dev *pctldev, unsigned selector) static int sirfsoc_get_groups_count(struct pinctrl_dev *pctldev)
{ {
if (selector >= ARRAY_SIZE(sirfsoc_pin_groups)) return ARRAY_SIZE(sirfsoc_pin_groups);
return -EINVAL;
return 0;
} }
static const char *sirfsoc_get_group_name(struct pinctrl_dev *pctldev, static const char *sirfsoc_get_group_name(struct pinctrl_dev *pctldev,
unsigned selector) unsigned selector)
{ {
if (selector >= ARRAY_SIZE(sirfsoc_pin_groups))
return NULL;
return sirfsoc_pin_groups[selector].name; return sirfsoc_pin_groups[selector].name;
} }
...@@ -872,8 +868,6 @@ static int sirfsoc_get_group_pins(struct pinctrl_dev *pctldev, unsigned selector ...@@ -872,8 +868,6 @@ static int sirfsoc_get_group_pins(struct pinctrl_dev *pctldev, unsigned selector
const unsigned **pins, const unsigned **pins,
unsigned *num_pins) unsigned *num_pins)
{ {
if (selector >= ARRAY_SIZE(sirfsoc_pin_groups))
return -EINVAL;
*pins = sirfsoc_pin_groups[selector].pins; *pins = sirfsoc_pin_groups[selector].pins;
*num_pins = sirfsoc_pin_groups[selector].num_pins; *num_pins = sirfsoc_pin_groups[selector].num_pins;
return 0; return 0;
...@@ -886,7 +880,7 @@ static void sirfsoc_pin_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *s ...@@ -886,7 +880,7 @@ static void sirfsoc_pin_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *s
} }
static struct pinctrl_ops sirfsoc_pctrl_ops = { static struct pinctrl_ops sirfsoc_pctrl_ops = {
.list_groups = sirfsoc_list_groups, .get_groups_count = sirfsoc_get_groups_count,
.get_group_name = sirfsoc_get_group_name, .get_group_name = sirfsoc_get_group_name,
.get_group_pins = sirfsoc_get_group_pins, .get_group_pins = sirfsoc_get_group_pins,
.pin_dbg_show = sirfsoc_pin_dbg_show, .pin_dbg_show = sirfsoc_pin_dbg_show,
...@@ -1033,11 +1027,9 @@ static void sirfsoc_pinmux_disable(struct pinctrl_dev *pmxdev, unsigned selector ...@@ -1033,11 +1027,9 @@ static void sirfsoc_pinmux_disable(struct pinctrl_dev *pmxdev, unsigned selector
sirfsoc_pinmux_endisable(spmx, selector, false); sirfsoc_pinmux_endisable(spmx, selector, false);
} }
static int sirfsoc_pinmux_list_funcs(struct pinctrl_dev *pmxdev, unsigned selector) static int sirfsoc_pinmux_get_funcs_count(struct pinctrl_dev *pmxdev)
{ {
if (selector >= ARRAY_SIZE(sirfsoc_pmx_functions)) return ARRAY_SIZE(sirfsoc_pmx_functions);
return -EINVAL;
return 0;
} }
static const char *sirfsoc_pinmux_get_func_name(struct pinctrl_dev *pctldev, static const char *sirfsoc_pinmux_get_func_name(struct pinctrl_dev *pctldev,
...@@ -1074,9 +1066,9 @@ static int sirfsoc_pinmux_request_gpio(struct pinctrl_dev *pmxdev, ...@@ -1074,9 +1066,9 @@ static int sirfsoc_pinmux_request_gpio(struct pinctrl_dev *pmxdev,
} }
static struct pinmux_ops sirfsoc_pinmux_ops = { static struct pinmux_ops sirfsoc_pinmux_ops = {
.list_functions = sirfsoc_pinmux_list_funcs,
.enable = sirfsoc_pinmux_enable, .enable = sirfsoc_pinmux_enable,
.disable = sirfsoc_pinmux_disable, .disable = sirfsoc_pinmux_disable,
.get_functions_count = sirfsoc_pinmux_get_funcs_count,
.get_function_name = sirfsoc_pinmux_get_func_name, .get_function_name = sirfsoc_pinmux_get_func_name,
.get_function_groups = sirfsoc_pinmux_get_groups, .get_function_groups = sirfsoc_pinmux_get_groups,
.gpio_request_enable = sirfsoc_pinmux_request_gpio, .gpio_request_enable = sirfsoc_pinmux_request_gpio,
......
...@@ -23,9 +23,11 @@ ...@@ -23,9 +23,11 @@
#include <linux/io.h> #include <linux/io.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/of_device.h> #include <linux/of_device.h>
#include <linux/pinctrl/machine.h>
#include <linux/pinctrl/pinctrl.h> #include <linux/pinctrl/pinctrl.h>
#include <linux/pinctrl/pinmux.h> #include <linux/pinctrl/pinmux.h>
#include <linux/pinctrl/pinconf.h> #include <linux/pinctrl/pinconf.h>
#include <linux/slab.h>
#include <mach/pinconf-tegra.h> #include <mach/pinconf-tegra.h>
...@@ -53,15 +55,11 @@ static inline void pmx_writel(struct tegra_pmx *pmx, u32 val, u32 bank, u32 reg) ...@@ -53,15 +55,11 @@ static inline void pmx_writel(struct tegra_pmx *pmx, u32 val, u32 bank, u32 reg)
writel(val, pmx->regs[bank] + reg); writel(val, pmx->regs[bank] + reg);
} }
static int tegra_pinctrl_list_groups(struct pinctrl_dev *pctldev, static int tegra_pinctrl_get_groups_count(struct pinctrl_dev *pctldev)
unsigned group)
{ {
struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
if (group >= pmx->soc->ngroups) return pmx->soc->ngroups;
return -EINVAL;
return 0;
} }
static const char *tegra_pinctrl_get_group_name(struct pinctrl_dev *pctldev, static const char *tegra_pinctrl_get_group_name(struct pinctrl_dev *pctldev,
...@@ -69,9 +67,6 @@ static const char *tegra_pinctrl_get_group_name(struct pinctrl_dev *pctldev, ...@@ -69,9 +67,6 @@ static const char *tegra_pinctrl_get_group_name(struct pinctrl_dev *pctldev,
{ {
struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
if (group >= pmx->soc->ngroups)
return NULL;
return pmx->soc->groups[group].name; return pmx->soc->groups[group].name;
} }
...@@ -82,9 +77,6 @@ static int tegra_pinctrl_get_group_pins(struct pinctrl_dev *pctldev, ...@@ -82,9 +77,6 @@ static int tegra_pinctrl_get_group_pins(struct pinctrl_dev *pctldev,
{ {
struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
if (group >= pmx->soc->ngroups)
return -EINVAL;
*pins = pmx->soc->groups[group].pins; *pins = pmx->soc->groups[group].pins;
*num_pins = pmx->soc->groups[group].npins; *num_pins = pmx->soc->groups[group].npins;
...@@ -98,22 +90,221 @@ static void tegra_pinctrl_pin_dbg_show(struct pinctrl_dev *pctldev, ...@@ -98,22 +90,221 @@ static void tegra_pinctrl_pin_dbg_show(struct pinctrl_dev *pctldev,
seq_printf(s, " " DRIVER_NAME); seq_printf(s, " " DRIVER_NAME);
} }
static int reserve_map(struct pinctrl_map **map, unsigned *reserved_maps,
unsigned *num_maps, unsigned reserve)
{
unsigned old_num = *reserved_maps;
unsigned new_num = *num_maps + reserve;
struct pinctrl_map *new_map;
if (old_num >= new_num)
return 0;
new_map = krealloc(*map, sizeof(*new_map) * new_num, GFP_KERNEL);
if (!new_map)
return -ENOMEM;
memset(new_map + old_num, 0, (new_num - old_num) * sizeof(*new_map));
*map = new_map;
*reserved_maps = new_num;
return 0;
}
static int add_map_mux(struct pinctrl_map **map, unsigned *reserved_maps,
unsigned *num_maps, const char *group,
const char *function)
{
if (*num_maps == *reserved_maps)
return -ENOSPC;
(*map)[*num_maps].type = PIN_MAP_TYPE_MUX_GROUP;
(*map)[*num_maps].data.mux.group = group;
(*map)[*num_maps].data.mux.function = function;
(*num_maps)++;
return 0;
}
static int add_map_configs(struct pinctrl_map **map, unsigned *reserved_maps,
unsigned *num_maps, const char *group,
unsigned long *configs, unsigned num_configs)
{
unsigned long *dup_configs;
if (*num_maps == *reserved_maps)
return -ENOSPC;
dup_configs = kmemdup(configs, num_configs * sizeof(*dup_configs),
GFP_KERNEL);
if (!dup_configs)
return -ENOMEM;
(*map)[*num_maps].type = PIN_MAP_TYPE_CONFIGS_GROUP;
(*map)[*num_maps].data.configs.group_or_pin = group;
(*map)[*num_maps].data.configs.configs = dup_configs;
(*map)[*num_maps].data.configs.num_configs = num_configs;
(*num_maps)++;
return 0;
}
static int add_config(unsigned long **configs, unsigned *num_configs,
unsigned long config)
{
unsigned old_num = *num_configs;
unsigned new_num = old_num + 1;
unsigned long *new_configs;
new_configs = krealloc(*configs, sizeof(*new_configs) * new_num,
GFP_KERNEL);
if (!new_configs)
return -ENOMEM;
new_configs[old_num] = config;
*configs = new_configs;
*num_configs = new_num;
return 0;
}
void tegra_pinctrl_dt_free_map(struct pinctrl_dev *pctldev,
struct pinctrl_map *map, unsigned num_maps)
{
int i;
for (i = 0; i < num_maps; i++)
if (map[i].type == PIN_MAP_TYPE_CONFIGS_GROUP)
kfree(map[i].data.configs.configs);
kfree(map);
}
static const struct cfg_param {
const char *property;
enum tegra_pinconf_param param;
} cfg_params[] = {
{"nvidia,pull", TEGRA_PINCONF_PARAM_PULL},
{"nvidia,tristate", TEGRA_PINCONF_PARAM_TRISTATE},
{"nvidia,enable-input", TEGRA_PINCONF_PARAM_ENABLE_INPUT},
{"nvidia,open-drain", TEGRA_PINCONF_PARAM_OPEN_DRAIN},
{"nvidia,lock", TEGRA_PINCONF_PARAM_LOCK},
{"nvidia,io-reset", TEGRA_PINCONF_PARAM_IORESET},
{"nvidia,high-speed-mode", TEGRA_PINCONF_PARAM_HIGH_SPEED_MODE},
{"nvidia,schmitt", TEGRA_PINCONF_PARAM_SCHMITT},
{"nvidia,low-power-mode", TEGRA_PINCONF_PARAM_LOW_POWER_MODE},
{"nvidia,pull-down-strength", TEGRA_PINCONF_PARAM_DRIVE_DOWN_STRENGTH},
{"nvidia,pull-up-strength", TEGRA_PINCONF_PARAM_DRIVE_UP_STRENGTH},
{"nvidia,slew-rate-falling", TEGRA_PINCONF_PARAM_SLEW_RATE_FALLING},
{"nvidia,slew-rate-rising", TEGRA_PINCONF_PARAM_SLEW_RATE_RISING},
};
int tegra_pinctrl_dt_subnode_to_map(struct device_node *np,
struct pinctrl_map **map,
unsigned *reserved_maps,
unsigned *num_maps)
{
int ret, i;
const char *function;
u32 val;
unsigned long config;
unsigned long *configs = NULL;
unsigned num_configs = 0;
unsigned reserve;
struct property *prop;
const char *group;
ret = of_property_read_string(np, "nvidia,function", &function);
if (ret < 0)
function = NULL;
for (i = 0; i < ARRAY_SIZE(cfg_params); i++) {
ret = of_property_read_u32(np, cfg_params[i].property, &val);
if (!ret) {
config = TEGRA_PINCONF_PACK(cfg_params[i].param, val);
ret = add_config(&configs, &num_configs, config);
if (ret < 0)
goto exit;
}
}
reserve = 0;
if (function != NULL)
reserve++;
if (num_configs)
reserve++;
ret = of_property_count_strings(np, "nvidia,pins");
if (ret < 0)
goto exit;
reserve *= ret;
ret = reserve_map(map, reserved_maps, num_maps, reserve);
if (ret < 0)
goto exit;
of_property_for_each_string(np, "nvidia,pins", prop, group) {
if (function) {
ret = add_map_mux(map, reserved_maps, num_maps,
group, function);
if (ret < 0)
goto exit;
}
if (num_configs) {
ret = add_map_configs(map, reserved_maps, num_maps,
group, configs, num_configs);
if (ret < 0)
goto exit;
}
}
ret = 0;
exit:
kfree(configs);
return ret;
}
int tegra_pinctrl_dt_node_to_map(struct pinctrl_dev *pctldev,
struct device_node *np_config,
struct pinctrl_map **map, unsigned *num_maps)
{
unsigned reserved_maps;
struct device_node *np;
int ret;
reserved_maps = 0;
*map = NULL;
*num_maps = 0;
for_each_child_of_node(np_config, np) {
ret = tegra_pinctrl_dt_subnode_to_map(np, map, &reserved_maps,
num_maps);
if (ret < 0) {
tegra_pinctrl_dt_free_map(pctldev, *map, *num_maps);
return ret;
}
}
return 0;
}
static struct pinctrl_ops tegra_pinctrl_ops = { static struct pinctrl_ops tegra_pinctrl_ops = {
.list_groups = tegra_pinctrl_list_groups, .get_groups_count = tegra_pinctrl_get_groups_count,
.get_group_name = tegra_pinctrl_get_group_name, .get_group_name = tegra_pinctrl_get_group_name,
.get_group_pins = tegra_pinctrl_get_group_pins, .get_group_pins = tegra_pinctrl_get_group_pins,
.pin_dbg_show = tegra_pinctrl_pin_dbg_show, .pin_dbg_show = tegra_pinctrl_pin_dbg_show,
.dt_node_to_map = tegra_pinctrl_dt_node_to_map,
.dt_free_map = tegra_pinctrl_dt_free_map,
}; };
static int tegra_pinctrl_list_funcs(struct pinctrl_dev *pctldev, static int tegra_pinctrl_get_funcs_count(struct pinctrl_dev *pctldev)
unsigned function)
{ {
struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
if (function >= pmx->soc->nfunctions) return pmx->soc->nfunctions;
return -EINVAL;
return 0;
} }
static const char *tegra_pinctrl_get_func_name(struct pinctrl_dev *pctldev, static const char *tegra_pinctrl_get_func_name(struct pinctrl_dev *pctldev,
...@@ -121,9 +312,6 @@ static const char *tegra_pinctrl_get_func_name(struct pinctrl_dev *pctldev, ...@@ -121,9 +312,6 @@ static const char *tegra_pinctrl_get_func_name(struct pinctrl_dev *pctldev,
{ {
struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
if (function >= pmx->soc->nfunctions)
return NULL;
return pmx->soc->functions[function].name; return pmx->soc->functions[function].name;
} }
...@@ -134,9 +322,6 @@ static int tegra_pinctrl_get_func_groups(struct pinctrl_dev *pctldev, ...@@ -134,9 +322,6 @@ static int tegra_pinctrl_get_func_groups(struct pinctrl_dev *pctldev,
{ {
struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
if (function >= pmx->soc->nfunctions)
return -EINVAL;
*groups = pmx->soc->functions[function].groups; *groups = pmx->soc->functions[function].groups;
*num_groups = pmx->soc->functions[function].ngroups; *num_groups = pmx->soc->functions[function].ngroups;
...@@ -151,8 +336,6 @@ static int tegra_pinctrl_enable(struct pinctrl_dev *pctldev, unsigned function, ...@@ -151,8 +336,6 @@ static int tegra_pinctrl_enable(struct pinctrl_dev *pctldev, unsigned function,
int i; int i;
u32 val; u32 val;
if (group >= pmx->soc->ngroups)
return -EINVAL;
g = &pmx->soc->groups[group]; g = &pmx->soc->groups[group];
if (g->mux_reg < 0) if (g->mux_reg < 0)
...@@ -180,8 +363,6 @@ static void tegra_pinctrl_disable(struct pinctrl_dev *pctldev, ...@@ -180,8 +363,6 @@ static void tegra_pinctrl_disable(struct pinctrl_dev *pctldev,
const struct tegra_pingroup *g; const struct tegra_pingroup *g;
u32 val; u32 val;
if (group >= pmx->soc->ngroups)
return;
g = &pmx->soc->groups[group]; g = &pmx->soc->groups[group];
if (g->mux_reg < 0) if (g->mux_reg < 0)
...@@ -194,7 +375,7 @@ static void tegra_pinctrl_disable(struct pinctrl_dev *pctldev, ...@@ -194,7 +375,7 @@ static void tegra_pinctrl_disable(struct pinctrl_dev *pctldev,
} }
static struct pinmux_ops tegra_pinmux_ops = { static struct pinmux_ops tegra_pinmux_ops = {
.list_functions = tegra_pinctrl_list_funcs, .get_functions_count = tegra_pinctrl_get_funcs_count,
.get_function_name = tegra_pinctrl_get_func_name, .get_function_name = tegra_pinctrl_get_func_name,
.get_function_groups = tegra_pinctrl_get_func_groups, .get_function_groups = tegra_pinctrl_get_func_groups,
.enable = tegra_pinctrl_enable, .enable = tegra_pinctrl_enable,
...@@ -324,8 +505,6 @@ static int tegra_pinconf_group_get(struct pinctrl_dev *pctldev, ...@@ -324,8 +505,6 @@ static int tegra_pinconf_group_get(struct pinctrl_dev *pctldev,
s16 reg; s16 reg;
u32 val, mask; u32 val, mask;
if (group >= pmx->soc->ngroups)
return -EINVAL;
g = &pmx->soc->groups[group]; g = &pmx->soc->groups[group];
ret = tegra_pinconf_reg(pmx, g, param, &bank, &reg, &bit, &width); ret = tegra_pinconf_reg(pmx, g, param, &bank, &reg, &bit, &width);
...@@ -353,8 +532,6 @@ static int tegra_pinconf_group_set(struct pinctrl_dev *pctldev, ...@@ -353,8 +532,6 @@ static int tegra_pinconf_group_set(struct pinctrl_dev *pctldev,
s16 reg; s16 reg;
u32 val, mask; u32 val, mask;
if (group >= pmx->soc->ngroups)
return -EINVAL;
g = &pmx->soc->groups[group]; g = &pmx->soc->groups[group];
ret = tegra_pinconf_reg(pmx, g, param, &bank, &reg, &bit, &width); ret = tegra_pinconf_reg(pmx, g, param, &bank, &reg, &bit, &width);
......
...@@ -836,18 +836,14 @@ static const struct u300_pin_group u300_pin_groups[] = { ...@@ -836,18 +836,14 @@ static const struct u300_pin_group u300_pin_groups[] = {
}, },
}; };
static int u300_list_groups(struct pinctrl_dev *pctldev, unsigned selector) static int u300_get_groups_count(struct pinctrl_dev *pctldev)
{ {
if (selector >= ARRAY_SIZE(u300_pin_groups)) return ARRAY_SIZE(u300_pin_groups);
return -EINVAL;
return 0;
} }
static const char *u300_get_group_name(struct pinctrl_dev *pctldev, static const char *u300_get_group_name(struct pinctrl_dev *pctldev,
unsigned selector) unsigned selector)
{ {
if (selector >= ARRAY_SIZE(u300_pin_groups))
return NULL;
return u300_pin_groups[selector].name; return u300_pin_groups[selector].name;
} }
...@@ -855,8 +851,6 @@ static int u300_get_group_pins(struct pinctrl_dev *pctldev, unsigned selector, ...@@ -855,8 +851,6 @@ static int u300_get_group_pins(struct pinctrl_dev *pctldev, unsigned selector,
const unsigned **pins, const unsigned **pins,
unsigned *num_pins) unsigned *num_pins)
{ {
if (selector >= ARRAY_SIZE(u300_pin_groups))
return -EINVAL;
*pins = u300_pin_groups[selector].pins; *pins = u300_pin_groups[selector].pins;
*num_pins = u300_pin_groups[selector].num_pins; *num_pins = u300_pin_groups[selector].num_pins;
return 0; return 0;
...@@ -869,7 +863,7 @@ static void u300_pin_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *s, ...@@ -869,7 +863,7 @@ static void u300_pin_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *s,
} }
static struct pinctrl_ops u300_pctrl_ops = { static struct pinctrl_ops u300_pctrl_ops = {
.list_groups = u300_list_groups, .get_groups_count = u300_get_groups_count,
.get_group_name = u300_get_group_name, .get_group_name = u300_get_group_name,
.get_group_pins = u300_get_group_pins, .get_group_pins = u300_get_group_pins,
.pin_dbg_show = u300_pin_dbg_show, .pin_dbg_show = u300_pin_dbg_show,
...@@ -991,11 +985,9 @@ static void u300_pmx_disable(struct pinctrl_dev *pctldev, unsigned selector, ...@@ -991,11 +985,9 @@ static void u300_pmx_disable(struct pinctrl_dev *pctldev, unsigned selector,
u300_pmx_endisable(upmx, selector, false); u300_pmx_endisable(upmx, selector, false);
} }
static int u300_pmx_list_funcs(struct pinctrl_dev *pctldev, unsigned selector) static int u300_pmx_get_funcs_count(struct pinctrl_dev *pctldev)
{ {
if (selector >= ARRAY_SIZE(u300_pmx_functions)) return ARRAY_SIZE(u300_pmx_functions);
return -EINVAL;
return 0;
} }
static const char *u300_pmx_get_func_name(struct pinctrl_dev *pctldev, static const char *u300_pmx_get_func_name(struct pinctrl_dev *pctldev,
...@@ -1014,7 +1006,7 @@ static int u300_pmx_get_groups(struct pinctrl_dev *pctldev, unsigned selector, ...@@ -1014,7 +1006,7 @@ static int u300_pmx_get_groups(struct pinctrl_dev *pctldev, unsigned selector,
} }
static struct pinmux_ops u300_pmx_ops = { static struct pinmux_ops u300_pmx_ops = {
.list_functions = u300_pmx_list_funcs, .get_functions_count = u300_pmx_get_funcs_count,
.get_function_name = u300_pmx_get_func_name, .get_function_name = u300_pmx_get_func_name,
.get_function_groups = u300_pmx_get_groups, .get_function_groups = u300_pmx_get_groups,
.enable = u300_pmx_enable, .enable = u300_pmx_enable,
......
...@@ -33,22 +33,25 @@ ...@@ -33,22 +33,25 @@
int pinmux_check_ops(struct pinctrl_dev *pctldev) int pinmux_check_ops(struct pinctrl_dev *pctldev)
{ {
const struct pinmux_ops *ops = pctldev->desc->pmxops; const struct pinmux_ops *ops = pctldev->desc->pmxops;
unsigned nfuncs;
unsigned selector = 0; unsigned selector = 0;
/* Check that we implement required operations */ /* Check that we implement required operations */
if (!ops->list_functions || if (!ops ||
!ops->get_functions_count ||
!ops->get_function_name || !ops->get_function_name ||
!ops->get_function_groups || !ops->get_function_groups ||
!ops->enable || !ops->enable) {
!ops->disable) dev_err(pctldev->dev, "pinmux ops lacks necessary functions\n");
return -EINVAL; return -EINVAL;
}
/* Check that all functions registered have names */ /* Check that all functions registered have names */
while (ops->list_functions(pctldev, selector) >= 0) { nfuncs = ops->get_functions_count(pctldev);
while (selector < nfuncs) {
const char *fname = ops->get_function_name(pctldev, const char *fname = ops->get_function_name(pctldev,
selector); selector);
if (!fname) { if (!fname) {
pr_err("pinmux ops has no name for function%u\n", dev_err(pctldev->dev, "pinmux ops has no name for function%u\n",
selector); selector);
return -EINVAL; return -EINVAL;
} }
...@@ -85,20 +88,23 @@ static int pin_request(struct pinctrl_dev *pctldev, ...@@ -85,20 +88,23 @@ static int pin_request(struct pinctrl_dev *pctldev,
const struct pinmux_ops *ops = pctldev->desc->pmxops; const struct pinmux_ops *ops = pctldev->desc->pmxops;
int status = -EINVAL; int status = -EINVAL;
dev_dbg(pctldev->dev, "request pin %d for %s\n", pin, owner);
desc = pin_desc_get(pctldev, pin); desc = pin_desc_get(pctldev, pin);
if (desc == NULL) { if (desc == NULL) {
dev_err(pctldev->dev, dev_err(pctldev->dev,
"pin is not registered so it cannot be requested\n"); "pin %d is not registered so it cannot be requested\n",
pin);
goto out; goto out;
} }
dev_dbg(pctldev->dev, "request pin %d (%s) for %s\n",
pin, desc->name, owner);
if (gpio_range) { if (gpio_range) {
/* There's no need to support multiple GPIO requests */ /* There's no need to support multiple GPIO requests */
if (desc->gpio_owner) { if (desc->gpio_owner) {
dev_err(pctldev->dev, dev_err(pctldev->dev,
"pin already requested\n"); "pin %s already requested by %s; cannot claim for %s\n",
desc->name, desc->gpio_owner, owner);
goto out; goto out;
} }
...@@ -106,7 +112,8 @@ static int pin_request(struct pinctrl_dev *pctldev, ...@@ -106,7 +112,8 @@ static int pin_request(struct pinctrl_dev *pctldev,
} else { } else {
if (desc->mux_usecount && strcmp(desc->mux_owner, owner)) { if (desc->mux_usecount && strcmp(desc->mux_owner, owner)) {
dev_err(pctldev->dev, dev_err(pctldev->dev,
"pin already requested\n"); "pin %s already requested by %s; cannot claim for %s\n",
desc->name, desc->mux_owner, owner);
goto out; goto out;
} }
...@@ -139,8 +146,7 @@ static int pin_request(struct pinctrl_dev *pctldev, ...@@ -139,8 +146,7 @@ static int pin_request(struct pinctrl_dev *pctldev,
status = 0; status = 0;
if (status) { if (status) {
dev_err(pctldev->dev, "->request on device %s failed for pin %d\n", dev_err(pctldev->dev, "request() failed for pin %d\n", pin);
pctldev->desc->name, pin);
module_put(pctldev->owner); module_put(pctldev->owner);
} }
...@@ -287,10 +293,11 @@ static int pinmux_func_name_to_selector(struct pinctrl_dev *pctldev, ...@@ -287,10 +293,11 @@ static int pinmux_func_name_to_selector(struct pinctrl_dev *pctldev,
const char *function) const char *function)
{ {
const struct pinmux_ops *ops = pctldev->desc->pmxops; const struct pinmux_ops *ops = pctldev->desc->pmxops;
unsigned nfuncs = ops->get_functions_count(pctldev);
unsigned selector = 0; unsigned selector = 0;
/* See if this pctldev has this function */ /* See if this pctldev has this function */
while (ops->list_functions(pctldev, selector) >= 0) { while (selector < nfuncs) {
const char *fname = ops->get_function_name(pctldev, const char *fname = ops->get_function_name(pctldev,
selector); selector);
...@@ -319,18 +326,32 @@ int pinmux_map_to_setting(struct pinctrl_map const *map, ...@@ -319,18 +326,32 @@ int pinmux_map_to_setting(struct pinctrl_map const *map,
const unsigned *pins; const unsigned *pins;
unsigned num_pins; unsigned num_pins;
setting->data.mux.func = if (!pmxops) {
pinmux_func_name_to_selector(pctldev, map->data.mux.function); dev_err(pctldev->dev, "does not support mux function\n");
if (setting->data.mux.func < 0) return -EINVAL;
return setting->data.mux.func; }
ret = pinmux_func_name_to_selector(pctldev, map->data.mux.function);
if (ret < 0) {
dev_err(pctldev->dev, "invalid function %s in map table\n",
map->data.mux.function);
return ret;
}
setting->data.mux.func = ret;
ret = pmxops->get_function_groups(pctldev, setting->data.mux.func, ret = pmxops->get_function_groups(pctldev, setting->data.mux.func,
&groups, &num_groups); &groups, &num_groups);
if (ret < 0) if (ret < 0) {
dev_err(pctldev->dev, "can't query groups for function %s\n",
map->data.mux.function);
return ret; return ret;
if (!num_groups) }
if (!num_groups) {
dev_err(pctldev->dev,
"function %s can't be selected on any group\n",
map->data.mux.function);
return -EINVAL; return -EINVAL;
}
if (map->data.mux.group) { if (map->data.mux.group) {
bool found = false; bool found = false;
group = map->data.mux.group; group = map->data.mux.group;
...@@ -340,15 +361,23 @@ int pinmux_map_to_setting(struct pinctrl_map const *map, ...@@ -340,15 +361,23 @@ int pinmux_map_to_setting(struct pinctrl_map const *map,
break; break;
} }
} }
if (!found) if (!found) {
dev_err(pctldev->dev,
"invalid group \"%s\" for function \"%s\"\n",
group, map->data.mux.function);
return -EINVAL; return -EINVAL;
}
} else { } else {
group = groups[0]; group = groups[0];
} }
setting->data.mux.group = pinctrl_get_group_selector(pctldev, group); ret = pinctrl_get_group_selector(pctldev, group);
if (setting->data.mux.group < 0) if (ret < 0) {
return setting->data.mux.group; dev_err(pctldev->dev, "invalid group %s in map table\n",
map->data.mux.group);
return ret;
}
setting->data.mux.group = ret;
ret = pctlops->get_group_pins(pctldev, setting->data.mux.group, &pins, ret = pctlops->get_group_pins(pctldev, setting->data.mux.group, &pins,
&num_pins); &num_pins);
...@@ -364,7 +393,7 @@ int pinmux_map_to_setting(struct pinctrl_map const *map, ...@@ -364,7 +393,7 @@ int pinmux_map_to_setting(struct pinctrl_map const *map,
ret = pin_request(pctldev, pins[i], map->dev_name, NULL); ret = pin_request(pctldev, pins[i], map->dev_name, NULL);
if (ret) { if (ret) {
dev_err(pctldev->dev, dev_err(pctldev->dev,
"could not get request pin %d on device %s\n", "could not request pin %d on device %s\n",
pins[i], pinctrl_dev_get_name(pctldev)); pins[i], pinctrl_dev_get_name(pctldev));
/* On error release all taken pins */ /* On error release all taken pins */
i--; /* this pin just failed */ i--; /* this pin just failed */
...@@ -467,6 +496,7 @@ void pinmux_disable_setting(struct pinctrl_setting const *setting) ...@@ -467,6 +496,7 @@ void pinmux_disable_setting(struct pinctrl_setting const *setting)
desc->mux_setting = NULL; desc->mux_setting = NULL;
} }
if (ops->disable)
ops->disable(pctldev, setting->data.mux.func, setting->data.mux.group); ops->disable(pctldev, setting->data.mux.func, setting->data.mux.group);
} }
...@@ -477,11 +507,15 @@ static int pinmux_functions_show(struct seq_file *s, void *what) ...@@ -477,11 +507,15 @@ static int pinmux_functions_show(struct seq_file *s, void *what)
{ {
struct pinctrl_dev *pctldev = s->private; struct pinctrl_dev *pctldev = s->private;
const struct pinmux_ops *pmxops = pctldev->desc->pmxops; const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
unsigned nfuncs;
unsigned func_selector = 0; unsigned func_selector = 0;
mutex_lock(&pinctrl_mutex); if (!pmxops)
return 0;
while (pmxops->list_functions(pctldev, func_selector) >= 0) { mutex_lock(&pinctrl_mutex);
nfuncs = pmxops->get_functions_count(pctldev);
while (func_selector < nfuncs) {
const char *func = pmxops->get_function_name(pctldev, const char *func = pmxops->get_function_name(pctldev,
func_selector); func_selector);
const char * const *groups; const char * const *groups;
...@@ -515,6 +549,9 @@ static int pinmux_pins_show(struct seq_file *s, void *what) ...@@ -515,6 +549,9 @@ static int pinmux_pins_show(struct seq_file *s, void *what)
const struct pinmux_ops *pmxops = pctldev->desc->pmxops; const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
unsigned i, pin; unsigned i, pin;
if (!pmxops)
return 0;
seq_puts(s, "Pinmux settings per pin\n"); seq_puts(s, "Pinmux settings per pin\n");
seq_puts(s, "Format: pin (name): mux_owner gpio_owner hog?\n"); seq_puts(s, "Format: pin (name): mux_owner gpio_owner hog?\n");
......
...@@ -31,12 +31,6 @@ void pinmux_free_setting(struct pinctrl_setting const *setting); ...@@ -31,12 +31,6 @@ void pinmux_free_setting(struct pinctrl_setting const *setting);
int pinmux_enable_setting(struct pinctrl_setting const *setting); int pinmux_enable_setting(struct pinctrl_setting const *setting);
void pinmux_disable_setting(struct pinctrl_setting const *setting); void pinmux_disable_setting(struct pinctrl_setting const *setting);
void pinmux_show_map(struct seq_file *s, struct pinctrl_map const *map);
void pinmux_show_setting(struct seq_file *s,
struct pinctrl_setting const *setting);
void pinmux_init_device_debugfs(struct dentry *devroot,
struct pinctrl_dev *pctldev);
#else #else
static inline int pinmux_check_ops(struct pinctrl_dev *pctldev) static inline int pinmux_check_ops(struct pinctrl_dev *pctldev)
...@@ -89,6 +83,18 @@ static inline void pinmux_disable_setting( ...@@ -89,6 +83,18 @@ static inline void pinmux_disable_setting(
{ {
} }
#endif
#if defined(CONFIG_PINMUX) && defined(CONFIG_DEBUG_FS)
void pinmux_show_map(struct seq_file *s, struct pinctrl_map const *map);
void pinmux_show_setting(struct seq_file *s,
struct pinctrl_setting const *setting);
void pinmux_init_device_debugfs(struct dentry *devroot,
struct pinctrl_dev *pctldev);
#else
static inline void pinmux_show_map(struct seq_file *s, static inline void pinmux_show_map(struct seq_file *s,
struct pinctrl_map const *map) struct pinctrl_map const *map)
{ {
......
...@@ -193,6 +193,17 @@ extern struct device_node *of_get_next_child(const struct device_node *node, ...@@ -193,6 +193,17 @@ extern struct device_node *of_get_next_child(const struct device_node *node,
for (child = of_get_next_child(parent, NULL); child != NULL; \ for (child = of_get_next_child(parent, NULL); child != NULL; \
child = of_get_next_child(parent, child)) child = of_get_next_child(parent, child))
static inline int of_get_child_count(const struct device_node *np)
{
struct device_node *child;
int num = 0;
for_each_child_of_node(np, child)
num++;
return num;
}
extern struct device_node *of_find_node_with_property( extern struct device_node *of_find_node_with_property(
struct device_node *from, const char *prop_name); struct device_node *from, const char *prop_name);
#define for_each_node_with_property(dn, prop_name) \ #define for_each_node_with_property(dn, prop_name) \
...@@ -259,6 +270,37 @@ extern void of_detach_node(struct device_node *); ...@@ -259,6 +270,37 @@ extern void of_detach_node(struct device_node *);
#endif #endif
#define of_match_ptr(_ptr) (_ptr) #define of_match_ptr(_ptr) (_ptr)
/*
* struct property *prop;
* const __be32 *p;
* u32 u;
*
* of_property_for_each_u32(np, "propname", prop, p, u)
* printk("U32 value: %x\n", u);
*/
const __be32 *of_prop_next_u32(struct property *prop, const __be32 *cur,
u32 *pu);
#define of_property_for_each_u32(np, propname, prop, p, u) \
for (prop = of_find_property(np, propname, NULL), \
p = of_prop_next_u32(prop, NULL, &u); \
p; \
p = of_prop_next_u32(prop, p, &u))
/*
* struct property *prop;
* const char *s;
*
* of_property_for_each_string(np, "propname", prop, s)
* printk("String value: %s\n", s);
*/
const char *of_prop_next_string(struct property *prop, const char *cur);
#define of_property_for_each_string(np, propname, prop, s) \
for (prop = of_find_property(np, propname, NULL), \
s = of_prop_next_string(prop, NULL); \
s; \
s = of_prop_next_string(prop, s))
#else /* CONFIG_OF */ #else /* CONFIG_OF */
static inline bool of_have_populated_dt(void) static inline bool of_have_populated_dt(void)
...@@ -269,6 +311,11 @@ static inline bool of_have_populated_dt(void) ...@@ -269,6 +311,11 @@ static inline bool of_have_populated_dt(void)
#define for_each_child_of_node(parent, child) \ #define for_each_child_of_node(parent, child) \
while (0) while (0)
static inline int of_get_child_count(const struct device_node *np)
{
return 0;
}
static inline int of_device_is_compatible(const struct device_node *device, static inline int of_device_is_compatible(const struct device_node *device,
const char *name) const char *name)
{ {
...@@ -349,6 +396,10 @@ static inline int of_machine_is_compatible(const char *compat) ...@@ -349,6 +396,10 @@ static inline int of_machine_is_compatible(const char *compat)
#define of_match_ptr(_ptr) NULL #define of_match_ptr(_ptr) NULL
#define of_match_node(_matches, _node) NULL #define of_match_node(_matches, _node) NULL
#define of_property_for_each_u32(np, propname, prop, p, u) \
while (0)
#define of_property_for_each_string(np, propname, prop, s) \
while (0)
#endif /* CONFIG_OF */ #endif /* CONFIG_OF */
/** /**
......
...@@ -36,6 +36,9 @@ extern struct pinctrl_state * __must_check pinctrl_lookup_state( ...@@ -36,6 +36,9 @@ extern struct pinctrl_state * __must_check pinctrl_lookup_state(
const char *name); const char *name);
extern int pinctrl_select_state(struct pinctrl *p, struct pinctrl_state *s); extern int pinctrl_select_state(struct pinctrl *p, struct pinctrl_state *s);
extern struct pinctrl * __must_check devm_pinctrl_get(struct device *dev);
extern void devm_pinctrl_put(struct pinctrl *p);
#else /* !CONFIG_PINCTRL */ #else /* !CONFIG_PINCTRL */
static inline int pinctrl_request_gpio(unsigned gpio) static inline int pinctrl_request_gpio(unsigned gpio)
...@@ -79,6 +82,15 @@ static inline int pinctrl_select_state(struct pinctrl *p, ...@@ -79,6 +82,15 @@ static inline int pinctrl_select_state(struct pinctrl *p,
return 0; return 0;
} }
static inline struct pinctrl * __must_check devm_pinctrl_get(struct device *dev)
{
return NULL;
}
static inline void devm_pinctrl_put(struct pinctrl *p)
{
}
#endif /* CONFIG_PINCTRL */ #endif /* CONFIG_PINCTRL */
static inline struct pinctrl * __must_check pinctrl_get_select( static inline struct pinctrl * __must_check pinctrl_get_select(
...@@ -113,6 +125,38 @@ static inline struct pinctrl * __must_check pinctrl_get_select_default( ...@@ -113,6 +125,38 @@ static inline struct pinctrl * __must_check pinctrl_get_select_default(
return pinctrl_get_select(dev, PINCTRL_STATE_DEFAULT); return pinctrl_get_select(dev, PINCTRL_STATE_DEFAULT);
} }
static inline struct pinctrl * __must_check devm_pinctrl_get_select(
struct device *dev, const char *name)
{
struct pinctrl *p;
struct pinctrl_state *s;
int ret;
p = devm_pinctrl_get(dev);
if (IS_ERR(p))
return p;
s = pinctrl_lookup_state(p, name);
if (IS_ERR(s)) {
devm_pinctrl_put(p);
return ERR_PTR(PTR_ERR(s));
}
ret = pinctrl_select_state(p, s);
if (ret < 0) {
devm_pinctrl_put(p);
return ERR_PTR(ret);
}
return p;
}
static inline struct pinctrl * __must_check devm_pinctrl_get_select_default(
struct device *dev)
{
return devm_pinctrl_get_select(dev, PINCTRL_STATE_DEFAULT);
}
#ifdef CONFIG_PINCONF #ifdef CONFIG_PINCONF
extern int pin_config_get(const char *dev_name, const char *name, extern int pin_config_get(const char *dev_name, const char *name,
......
...@@ -154,7 +154,7 @@ struct pinctrl_map { ...@@ -154,7 +154,7 @@ struct pinctrl_map {
extern int pinctrl_register_mappings(struct pinctrl_map const *map, extern int pinctrl_register_mappings(struct pinctrl_map const *map,
unsigned num_maps); unsigned num_maps);
extern void pinctrl_provide_dummies(void);
#else #else
static inline int pinctrl_register_mappings(struct pinctrl_map const *map, static inline int pinctrl_register_mappings(struct pinctrl_map const *map,
...@@ -163,5 +163,8 @@ static inline int pinctrl_register_mappings(struct pinctrl_map const *map, ...@@ -163,5 +163,8 @@ static inline int pinctrl_register_mappings(struct pinctrl_map const *map,
return 0; return 0;
} }
#endif /* !CONFIG_PINMUX */ static inline void pinctrl_provide_dummies(void)
{
}
#endif /* !CONFIG_PINCTRL */
#endif #endif
...@@ -25,7 +25,6 @@ struct seq_file; ...@@ -25,7 +25,6 @@ struct seq_file;
* @pin_config_get: get the config of a certain pin, if the requested config * @pin_config_get: get the config of a certain pin, if the requested config
* is not available on this controller this should return -ENOTSUPP * is not available on this controller this should return -ENOTSUPP
* and if it is available but disabled it should return -EINVAL * and if it is available but disabled it should return -EINVAL
* @pin_config_get: get the config of a certain pin
* @pin_config_set: configure an individual pin * @pin_config_set: configure an individual pin
* @pin_config_group_get: get configurations for an entire pin group * @pin_config_group_get: get configurations for an entire pin group
* @pin_config_group_set: configure all pins in a group * @pin_config_group_set: configure all pins in a group
...@@ -33,6 +32,8 @@ struct seq_file; ...@@ -33,6 +32,8 @@ struct seq_file;
* per-device info for a certain pin in debugfs * per-device info for a certain pin in debugfs
* @pin_config_group_dbg_show: optional debugfs display hook that will provide * @pin_config_group_dbg_show: optional debugfs display hook that will provide
* per-device info for a certain group in debugfs * per-device info for a certain group in debugfs
* @pin_config_config_dbg_show: optional debugfs display hook that will decode
* and display a driver's pin configuration parameter
*/ */
struct pinconf_ops { struct pinconf_ops {
#ifdef CONFIG_GENERIC_PINCONF #ifdef CONFIG_GENERIC_PINCONF
...@@ -56,6 +57,9 @@ struct pinconf_ops { ...@@ -56,6 +57,9 @@ struct pinconf_ops {
void (*pin_config_group_dbg_show) (struct pinctrl_dev *pctldev, void (*pin_config_group_dbg_show) (struct pinctrl_dev *pctldev,
struct seq_file *s, struct seq_file *s,
unsigned selector); unsigned selector);
void (*pin_config_config_dbg_show) (struct pinctrl_dev *pctldev,
struct seq_file *s,
unsigned long config);
}; };
#endif #endif
......
...@@ -21,9 +21,11 @@ ...@@ -21,9 +21,11 @@
struct device; struct device;
struct pinctrl_dev; struct pinctrl_dev;
struct pinctrl_map;
struct pinmux_ops; struct pinmux_ops;
struct pinconf_ops; struct pinconf_ops;
struct gpio_chip; struct gpio_chip;
struct device_node;
/** /**
* struct pinctrl_pin_desc - boards/machines provide information on their * struct pinctrl_pin_desc - boards/machines provide information on their
...@@ -64,17 +66,24 @@ struct pinctrl_gpio_range { ...@@ -64,17 +66,24 @@ struct pinctrl_gpio_range {
/** /**
* struct pinctrl_ops - global pin control operations, to be implemented by * struct pinctrl_ops - global pin control operations, to be implemented by
* pin controller drivers. * pin controller drivers.
* @list_groups: list the number of selectable named groups available * @get_groups_count: Returns the count of total number of groups registered.
* in this pinmux driver, the core will begin on 0 and call this
* repeatedly as long as it returns >= 0 to enumerate the groups
* @get_group_name: return the group name of the pin group * @get_group_name: return the group name of the pin group
* @get_group_pins: return an array of pins corresponding to a certain * @get_group_pins: return an array of pins corresponding to a certain
* group selector @pins, and the size of the array in @num_pins * group selector @pins, and the size of the array in @num_pins
* @pin_dbg_show: optional debugfs display hook that will provide per-device * @pin_dbg_show: optional debugfs display hook that will provide per-device
* info for a certain pin in debugfs * info for a certain pin in debugfs
* @dt_node_to_map: parse a device tree "pin configuration node", and create
* mapping table entries for it. These are returned through the @map and
* @num_maps output parameters. This function is optional, and may be
* omitted for pinctrl drivers that do not support device tree.
* @dt_free_map: free mapping table entries created via @dt_node_to_map. The
* top-level @map pointer must be freed, along with any dynamically
* allocated members of the mapping table entries themselves. This
* function is optional, and may be omitted for pinctrl drivers that do
* not support device tree.
*/ */
struct pinctrl_ops { struct pinctrl_ops {
int (*list_groups) (struct pinctrl_dev *pctldev, unsigned selector); int (*get_groups_count) (struct pinctrl_dev *pctldev);
const char *(*get_group_name) (struct pinctrl_dev *pctldev, const char *(*get_group_name) (struct pinctrl_dev *pctldev,
unsigned selector); unsigned selector);
int (*get_group_pins) (struct pinctrl_dev *pctldev, int (*get_group_pins) (struct pinctrl_dev *pctldev,
...@@ -83,6 +92,11 @@ struct pinctrl_ops { ...@@ -83,6 +92,11 @@ struct pinctrl_ops {
unsigned *num_pins); unsigned *num_pins);
void (*pin_dbg_show) (struct pinctrl_dev *pctldev, struct seq_file *s, void (*pin_dbg_show) (struct pinctrl_dev *pctldev, struct seq_file *s,
unsigned offset); unsigned offset);
int (*dt_node_to_map) (struct pinctrl_dev *pctldev,
struct device_node *np_config,
struct pinctrl_map **map, unsigned *num_maps);
void (*dt_free_map) (struct pinctrl_dev *pctldev,
struct pinctrl_map *map, unsigned num_maps);
}; };
/** /**
......
...@@ -23,15 +23,14 @@ struct pinctrl_dev; ...@@ -23,15 +23,14 @@ struct pinctrl_dev;
/** /**
* struct pinmux_ops - pinmux operations, to be implemented by pin controller * struct pinmux_ops - pinmux operations, to be implemented by pin controller
* drivers that support pinmuxing * drivers that support pinmuxing
* @request: called by the core to see if a certain pin can be made available * @request: called by the core to see if a certain pin can be made
* available for muxing. This is called by the core to acquire the pins * available for muxing. This is called by the core to acquire the pins
* before selecting any actual mux setting across a function. The driver * before selecting any actual mux setting across a function. The driver
* is allowed to answer "no" by returning a negative error code * is allowed to answer "no" by returning a negative error code
* @free: the reverse function of the request() callback, frees a pin after * @free: the reverse function of the request() callback, frees a pin after
* being requested * being requested
* @list_functions: list the number of selectable named functions available * @get_functions_count: returns number of selectable named functions available
* in this pinmux driver, the core will begin on 0 and call this * in this pinmux driver
* repeatedly as long as it returns >= 0 to enumerate mux settings
* @get_function_name: return the function name of the muxing selector, * @get_function_name: return the function name of the muxing selector,
* called by the core to figure out which mux setting it shall map a * called by the core to figure out which mux setting it shall map a
* certain device to * certain device to
...@@ -62,7 +61,7 @@ struct pinctrl_dev; ...@@ -62,7 +61,7 @@ struct pinctrl_dev;
struct pinmux_ops { struct pinmux_ops {
int (*request) (struct pinctrl_dev *pctldev, unsigned offset); int (*request) (struct pinctrl_dev *pctldev, unsigned offset);
int (*free) (struct pinctrl_dev *pctldev, unsigned offset); int (*free) (struct pinctrl_dev *pctldev, unsigned offset);
int (*list_functions) (struct pinctrl_dev *pctldev, unsigned selector); int (*get_functions_count) (struct pinctrl_dev *pctldev);
const char *(*get_function_name) (struct pinctrl_dev *pctldev, const char *(*get_function_name) (struct pinctrl_dev *pctldev,
unsigned selector); unsigned selector);
int (*get_function_groups) (struct pinctrl_dev *pctldev, int (*get_function_groups) (struct pinctrl_dev *pctldev,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment