AnsweredAssumed Answered

i.MX53: Incomplete GPIO Pullup Definitions in iomux-mx53.h

Question asked by TomE on Jan 26, 2016
Latest reply on Mar 15, 2016 by Victor Linnik

This concerns the programming of the GPIO pins by the Linux 2.6.35_11.09.01 and 2.6.35_maintain kernels (at least).

 

In order to enable a pullup or pulldown on a GPIO port, all three of the PKE, PUE and PUS fields have to be filled in.

 

There are some obviously wrong ones in the configuration files, where someone has missed adding either or both of PKE and PUE. There are others that have PKE and PUE, but miss specifying the resistor (so that defaults to 100k or 360k pull down).


That means it looks like someone has intended to add or change a pullup on a pin, but because the definition is incomplete the pin will actually be floating.

 

Had they not tried to use these definitions the pad would default to NO_PAD_CTRL, which is meant to mean to leave the power-up default pullup or pulldown. That doesn't work in most of the distributions because of the bug with the NO_PAD_CTRL definition, but that's a different problem listed here.

 

https://community.freescale.com/thread/384191

 

These pullup programming problems are visible in the following files:

 

http://git.freescale.com/git/cgit.cgi/imx/linux-2.6-imx.git/tree/arch/arm/plat-mxc/include/mach/iomux-mx53.h?h=imx_2.6.35_11.09.01
http://git.freescale.com/git/cgit.cgi/imx/linux-2.6-imx.git/tree/arch/arm/plat-mxc/include/mach/iomux-mx53.h?h=imx_2.6.35_maintain

 

There 8 combinations of designating PKE, PUE and one of the four PUS settings. Only three make sense, which is "none", "PKE" (for Keep) or PKE, PUE and a PUS value. Here are the ones that don't match that pattern:

 

#define MX53_UART_PAD_CTRL     (PAD_CTL_PKE | PAD_CTL_PUE | PAD_CTL_DSE_HIGH | \
                                PAD_CTL_SRE_FAST | PAD_CTL_HYS)

Missing a PUS value, so it defaults to a pulldown. This may be intentional or may not.

 

#define MX53_WEIM_PAD_CTRL       (PAD_CTL_PKE | PAD_CTL_PUS_100K_UP | \
                                  PAD_CTL_DSE_HIGH)

 

Missing PUE. Used by EMI_WEIM_D16 through D31, and also A23, but not any of the other address lines.

 

#define MX53_I2C_PAD_CTRL_1      (PAD_CTL_SRE_FAST | PAD_CTL_ODE | \
                                  PAD_CTL_DSE_HIGH | PAD_CTL_PUS_100K_UP | \
                                  PAD_CTL_HYS)

 

Missing PKE and PUE. Used inconsistently with some (but not all) I2Cn_SCL and I2Cn_SDA definitions. "MX53_I2C_PAD_CTRL_2" has PKE and PUE.

 

#define MX53_CAN_PAD_CTRL     (PAD_CTL_PKE | PAD_CTL_PUE | PAD_CTL_DSE_HIGH | \                          PAD_CTL_HYS)

    Missing a PUS value.

#define MX53_WEIM_NAND_PAD_CTRL_1      (PAD_CTL_PKE | PAD_CTL_PUS_100K_UP | PAD_CTL_DSE_HIGH)

Missing PUE. Used by EMI_NAND_WEIM_DA_1 to EMI_NAND_WEIM_DA_7, but not 8 to 15

 

#define MX53_PAD_EIM_D20__GPIO3_20     (_MX53_PAD_EIM_D20__GPIO3_20 | MUX_PAD_CTRL(PAD_CTL_PUS_100K_UP))

 

Missing PKE and PUE. These definitions are meant to use "pre-cooked" ones like "MX53_SDHC_PAD_CTRL" and not a "_PUS_" definition on its own.

 

#define MX53_PAD_PATA_DATA5__GPIO2_5   (_MX53_PAD_PATA_DATA5__GPIO2_5 | MUX_PAD_CTRL(PAD_CTL_PUS_100K_UP))

 

Missing PKE and PUE. Ditto.

 

Tom

Outcomes