My goal is to use ConnectCard i.mx28 pins 18, 20, 22, 24, and 26 (SSP0_CMD, SSP0_DATA0, SSP0_DATA1, SSP0_DATA2, and SSP0_DATA3, respectively) for GPIO. My problem is that the pins seem to have an internal pullup I just can’t clear. I’ve done what I believe to be an exhaustive effort to clear the pullups:
-
Added “config_dts disable ‘ssp0’” to linux-dey_3.10.bb to not initialize those pins with the SSP0 peripheral.
-
This didn’t have any effect, so I went nuclear and removed all references to ssp0, mmc0, and spi0 from imx28.dtsi.
-
Still no effect, so I added some pinctrl stanzas to imx28.dtsi to explicitly disable the pullups:
-
myboard: myboard@0 {
-
reg = <0>;
-
fsl,pinmux-ids = <
-
0x2000 /* MX28_PAD_SSP0_DATA0__SSP0_D0 */
-
0x2010 /* MX28_PAD_SSP0_DATA1__SSP0_D1 */
-
0x2020 /* MX28_PAD_SSP0_DATA2__SSP0_D2 */
-
0x2030 /* MX28_PAD_SSP0_DATA3__SSP0_D3 */
-
0x2080 /* MX28_PAD_SSP0_CMD__SSP0_CMD */
-
0x20a0 /* MX28_PAD_SSP0_SCK__SSP0_SCK */
-
>;
-
fsl,drive-strength = <0>;
-
fsl,voltage = <1>;
-
fsl,pull-up = <0>;
-
};
- Still no effect, so I went looking for other methods to disable the pullup. On page 1008 of the i.MX28 manual, I found this:
“HW_OCOTP_ROM1:0x8002C1B0:17 SSP0_EXT_PULLUP - Blow this bit to disable the internal pull-ups for SSP0 DATA and CMD signals.”
So I used this command in uboot to blow the efuse:
otp blow 0x19 0x00020000
uboot now indicates it’s blown:
CCARDIMX28 # otp dump
…
HW_OCOTP_ROMn
HW_OCOTP_ROMn0: 0x00000000
HW_OCOTP_ROMn1: 0x00020000
…
And it’s still pulled high!
root@ccardimx28js:~# echo 72 > /sys/class/gpio/export
root@ccardimx28js:~# echo out > /sys/class/gpio/gpio72/direction
root@ccardimx28js:~# echo 0 > /sys/class/gpio/gpio72/value
root@ccardimx28js:~# cat /sys/class/gpio/gpio72/value
1
How do I disable this pullup?