@@ -144,35 +144,36 @@ static int pinctrl_gpio_it8xxx2_configure_pins(const pinctrl_soc_pin_t *pins)
144144 return - EINVAL ;
145145 }
146146
147+ /*
148+ * Default input mode prevents leakage during changes to extended
149+ * setting (e.g. enabling i2c functionality on GPIO E1/E2 on IT82002)
150+ */
151+ * reg_gpcr = (* reg_gpcr | GPCR_PORT_PIN_MODE_INPUT ) &
152+ ~GPCR_PORT_PIN_MODE_OUTPUT ;
153+
147154 /*
148155 * If pincfg is input, we don't need to handle
149156 * alternate function.
150157 */
151158 if (IT8XXX2_DT_PINCFG_INPUT (pins -> pincfg )) {
152- * reg_gpcr = (* reg_gpcr | GPCR_PORT_PIN_MODE_INPUT ) &
153- ~GPCR_PORT_PIN_MODE_OUTPUT ;
154159 return 0 ;
155160 }
156161
157162 /*
158163 * Handle alternate function.
159164 */
160- /* Common settings for alternate function. */
161- * reg_gpcr &= ~(GPCR_PORT_PIN_MODE_INPUT |
162- GPCR_PORT_PIN_MODE_OUTPUT );
163165 /* Ensure that func3-ext setting is in default state. */
164166 if (reg_func3_ext != NULL ) {
165167 * reg_func3_ext &= ~gpio -> func3_ext_mask [pin ];
166168 }
167169
168170 switch (pins -> alt_func ) {
169171 case IT8XXX2_ALT_FUNC_1 :
170- /* Func1: Alternate function has been set above . */
172+ /* Func1: Alternate function will be set below . */
171173 break ;
172174 case IT8XXX2_ALT_FUNC_2 :
173- /* Func2: WUI function: turn the pin into an input */
174- * reg_gpcr |= GPCR_PORT_PIN_MODE_INPUT ;
175- break ;
175+ /* Func2: WUI function: pin has been set as input above.*/
176+ return 0 ;
176177 case IT8XXX2_ALT_FUNC_3 :
177178 /*
178179 * Func3: In addition to the alternate setting above,
@@ -193,16 +194,18 @@ static int pinctrl_gpio_it8xxx2_configure_pins(const pinctrl_soc_pin_t *pins)
193194 * reg_func4_gcr |= gpio -> func4_en_mask [pin ];
194195 break ;
195196 case IT8XXX2_ALT_DEFAULT :
196- * reg_gpcr = (* reg_gpcr | GPCR_PORT_PIN_MODE_INPUT ) &
197- ~GPCR_PORT_PIN_MODE_OUTPUT ;
198197 * reg_func3_gcr &= ~gpio -> func3_en_mask [pin ];
199198 * reg_func4_gcr &= ~gpio -> func4_en_mask [pin ];
200- break ;
199+ return 0 ;
201200 default :
202201 LOG_ERR ("This function is not supported." );
203202 return - EINVAL ;
204203 }
205204
205+ /* Common settings for alternate function. */
206+ * reg_gpcr &= ~(GPCR_PORT_PIN_MODE_INPUT |
207+ GPCR_PORT_PIN_MODE_OUTPUT );
208+
206209 return 0 ;
207210}
208211
0 commit comments