OK, so I have added a pinctrl block under iomuxc as follows:
pinctrl_modem: modemgrp {
fsl,pins =
<MX8MP_IOMUXC_SAI1_TXD2__GPIO4_IO14 0x96>, /* NEW: MODEM_CFG_0 OLD: SODIMM 217 */
<MX8MP_IOMUXC_SAI1_TXD3__GPIO4_IO15 0x96>, /* NEW: MODEM_CFG_1 OLD: SODIMM 215 */
<MX8MP_IOMUXC_SAI1_TXD0__GPIO4_IO12 0x96>, /* NEW: MODEM_CFG_2 OLD: SODIMM 221 */
<MX8MP_IOMUXC_SAI1_RXD5__GPIO4_IO07 0x96>, /* NEW: MODEM_CFG_3 OLD: SODIMM 203 */
<MX8MP_IOMUXC_SAI1_TXD1__GPIO4_IO13 0x96>, /* NEW: MODEM_CFG_4 OLD: SODIMM 219 */
<MX8MP_IOMUXC_SAI1_RXD6__GPIO4_IO08 0x96>, /* NEW: MODEM_ON OLD: SODIMM 205 */
<MX8MP_IOMUXC_SAI1_RXD7__GPIO4_IO09 0x1f6>, /* NEW: MODEM_AIRPLANE_N OLD: SODIMM 207 */
<MX8MP_IOMUXC_SAI1_TXD4__GPIO4_IO16 0x96>, /* NEW: MODEM_RESET_N OLD: SODIMM 211 */
<MX8MP_IOMUXC_SAI1_TXD5__GPIO4_IO17 0x96>; /* NEW: MODEM_DPR OLD: SODIMM 213 */
};
However, I can’t seem to get the directions set properly. I tried changing directions under the gpio4 block as follows:
gpio_modem: modem_gpio_hogs {
compatible = "gpio-hog";
gpios = <&gpio4 14>, /* MODEM_CFG0: Input */
<&gpio4 15>, /* MODEM_CFG1: Input */
<&gpio4 12>, /* MODEM_CFG2: Input */
<&gpio4 7>, /* MODEM_CFG3: Input */
<&gpio4 13>, /* MODEM_CFG3: Input */
<&gpio4 8 GPIO_ACTIVE_LOW>, /* MODEM_ON: Output, Initially low */
<&gpio4 9 (GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN)>, /* MODEM_AIRPLANE_N: Output, Open-Drain, Initially low */
<&gpio4 16 GPIO_ACTIVE_HIGH>, /* MODEM_RST_N: Output, Initially low */
<&gpio4 17 GPIO_ACTIVE_LOW>; /* MODEM_DPR: Output, Initially low */
};
However, when I check the register states with tools such as devmem2, they are not set as I expected.
# From imx8mp-pinfunc.h, the control register for GPIO4_IO14 is 0x03e0
# From the NXP IMX8MP reference manual, this is address 0x3033_03e0
root@verdin-imx8mp-15446091:~# devmem2 0x303303e0 w
/dev/mem opened.
Memory mapped at address 0x7f85a81000.
Read at address 0x303303E0 (0x7f85a813e0): 0x00000016
So that register is set to 0x16, but I expected it to be set to 0x96. Clearly my settings aren’t being taken!