Skip to content

Commit ad0a066

Browse files
lucien-nxpnashif
authored andcommitted
drivers: gpio: update rgpio driver code
RGPIO model on RT1180 is same with igpio, however, current driver can't support. Update gpio driver to support gpio pad control Signed-off-by: Lucien Zhao <[email protected]>
1 parent 222162d commit ad0a066

File tree

1 file changed

+35
-1
lines changed

1 file changed

+35
-1
lines changed

drivers/gpio/gpio_mcux_rgpio.c

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2023, NXP
2+
* Copyright 2023-2024, NXP
33
*
44
* SPDX-License-Identifier: Apache-2.0
55
*/
@@ -80,6 +80,39 @@ static int mcux_rgpio_configure(const struct device *dev,
8080
((size_t)config->pin_muxes[cfg_idx].config_register);
8181
uint32_t reg = *gpio_cfg_reg;
8282

83+
#if defined(CONFIG_SOC_SERIES_IMXRT118X)
84+
/* PUE/PDRV types have the same ODE bit */
85+
if ((flags & GPIO_SINGLE_ENDED)) {
86+
/* Set ODE bit */
87+
reg |= IOMUXC_SW_PAD_CTL_PAD_ODE_MASK;
88+
} else {
89+
reg &= ~IOMUXC_SW_PAD_CTL_PAD_ODE_MASK;
90+
}
91+
92+
if (config->pin_muxes[pin].pue_mux) {
93+
if (flags & GPIO_PULL_UP) {
94+
reg |= (IOMUXC_SW_PAD_CTL_PAD_PUS_MASK | IOMUXC_SW_PAD_CTL_PAD_PUE_MASK);
95+
} else if (flags & GPIO_PULL_DOWN) {
96+
reg |= IOMUXC_SW_PAD_CTL_PAD_PUE_MASK;
97+
reg &= ~IOMUXC_SW_PAD_CTL_PAD_PUS_MASK;
98+
} else {
99+
/* Set pin to highz */
100+
reg &= ~IOMUXC_SW_PAD_CTL_PAD_PUE_MASK;
101+
}
102+
} else {
103+
/* PDRV type register layout */
104+
if (flags & GPIO_PULL_UP) {
105+
reg &= ~IOMUXC_SW_PAD_CTL_PAD_PULL_MASK;
106+
reg |= IOMUXC_SW_PAD_CTL_PAD_PULL(0x1U);
107+
} else if (flags & GPIO_PULL_DOWN) {
108+
reg &= ~IOMUXC_SW_PAD_CTL_PAD_PULL_MASK;
109+
reg |= IOMUXC_SW_PAD_CTL_PAD_PULL(0x2U);
110+
} else {
111+
/* Set pin to no pull */
112+
reg |= IOMUXC_SW_PAD_CTL_PAD_PULL_MASK;
113+
}
114+
}
115+
#else
83116
/* TODO: Default flags, work for i.MX 9352 */
84117
if ((flags & GPIO_SINGLE_ENDED) != 0) {
85118
/* Set ODE bit */
@@ -101,6 +134,7 @@ static int mcux_rgpio_configure(const struct device *dev,
101134
reg &= ~((0x1 << MCUX_IMX_BIAS_PULL_DOWN_SHIFT) |
102135
(0x1 << MCUX_IMX_BIAS_PULL_UP_SHIFT));
103136
}
137+
#endif
104138

105139
memcpy(&pin_cfg.pinmux, &config->pin_muxes[cfg_idx], sizeof(pin_cfg));
106140
/* cfg register will be set by pinctrl_configure_pins */

0 commit comments

Comments
 (0)