1
1
/*
2
- * Copyright 2023, NXP
2
+ * Copyright 2023-2024 , NXP
3
3
*
4
4
* SPDX-License-Identifier: Apache-2.0
5
5
*/
@@ -80,6 +80,39 @@ static int mcux_rgpio_configure(const struct device *dev,
80
80
((size_t )config -> pin_muxes [cfg_idx ].config_register );
81
81
uint32_t reg = * gpio_cfg_reg ;
82
82
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
83
116
/* TODO: Default flags, work for i.MX 9352 */
84
117
if ((flags & GPIO_SINGLE_ENDED ) != 0 ) {
85
118
/* Set ODE bit */
@@ -101,6 +134,7 @@ static int mcux_rgpio_configure(const struct device *dev,
101
134
reg &= ~((0x1 << MCUX_IMX_BIAS_PULL_DOWN_SHIFT ) |
102
135
(0x1 << MCUX_IMX_BIAS_PULL_UP_SHIFT ));
103
136
}
137
+ #endif
104
138
105
139
memcpy (& pin_cfg .pinmux , & config -> pin_muxes [cfg_idx ], sizeof (pin_cfg ));
106
140
/* cfg register will be set by pinctrl_configure_pins */
0 commit comments