Skip to content

Commit d5026c6

Browse files
Dino-Licarlescufi
authored andcommitted
drivers/pinctrl: it8xxx2: Modify the sequence of pinctrl setting
Modify the sequence of pinctrl setting. Default setting as input mode prevents leakage during changes to extended setting. Signed-off-by: Tim Lin <[email protected]> Signed-off-by: Dino Li <[email protected]>
1 parent b98c794 commit d5026c6

File tree

1 file changed

+15
-12
lines changed

1 file changed

+15
-12
lines changed

drivers/pinctrl/pinctrl_ite_it8xxx2.c

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)