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?