@@ -144,35 +144,36 @@ static int pinctrl_gpio_it8xxx2_configure_pins(const pinctrl_soc_pin_t *pins)
144
144
return - EINVAL ;
145
145
}
146
146
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
+
147
154
/*
148
155
* If pincfg is input, we don't need to handle
149
156
* alternate function.
150
157
*/
151
158
if (IT8XXX2_DT_PINCFG_INPUT (pins -> pincfg )) {
152
- * reg_gpcr = (* reg_gpcr | GPCR_PORT_PIN_MODE_INPUT ) &
153
- ~GPCR_PORT_PIN_MODE_OUTPUT ;
154
159
return 0 ;
155
160
}
156
161
157
162
/*
158
163
* Handle alternate function.
159
164
*/
160
- /* Common settings for alternate function. */
161
- * reg_gpcr &= ~(GPCR_PORT_PIN_MODE_INPUT |
162
- GPCR_PORT_PIN_MODE_OUTPUT );
163
165
/* Ensure that func3-ext setting is in default state. */
164
166
if (reg_func3_ext != NULL ) {
165
167
* reg_func3_ext &= ~gpio -> func3_ext_mask [pin ];
166
168
}
167
169
168
170
switch (pins -> alt_func ) {
169
171
case IT8XXX2_ALT_FUNC_1 :
170
- /* Func1: Alternate function has been set above . */
172
+ /* Func1: Alternate function will be set below . */
171
173
break ;
172
174
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 ;
176
177
case IT8XXX2_ALT_FUNC_3 :
177
178
/*
178
179
* 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)
193
194
* reg_func4_gcr |= gpio -> func4_en_mask [pin ];
194
195
break ;
195
196
case IT8XXX2_ALT_DEFAULT :
196
- * reg_gpcr = (* reg_gpcr | GPCR_PORT_PIN_MODE_INPUT ) &
197
- ~GPCR_PORT_PIN_MODE_OUTPUT ;
198
197
* reg_func3_gcr &= ~gpio -> func3_en_mask [pin ];
199
198
* reg_func4_gcr &= ~gpio -> func4_en_mask [pin ];
200
- break ;
199
+ return 0 ;
201
200
default :
202
201
LOG_ERR ("This function is not supported." );
203
202
return - EINVAL ;
204
203
}
205
204
205
+ /* Common settings for alternate function. */
206
+ * reg_gpcr &= ~(GPCR_PORT_PIN_MODE_INPUT |
207
+ GPCR_PORT_PIN_MODE_OUTPUT );
208
+
206
209
return 0 ;
207
210
}
208
211
0 commit comments