zephyr/machine_pin: Retry configuring gpio with just GPIO_OUTPUT.

Some targets like frdm_k64f don't support GPIO_OUTPUT|GPIO_INPUT, so just
use GPIO_OUTPUT in those cases (it seems they still support reading the
current output state even when configured only as GPIO_OUTPUT, unlike other
targets which require both settings).

Signed-off-by: Damien George <damien@micropython.org>
This commit is contained in:
Damien George
2025-07-08 11:12:45 +10:00
parent bf432a3e0f
commit 9a9e5529af

View File

@@ -116,6 +116,10 @@ static mp_obj_t machine_pin_obj_init_helper(machine_pin_obj_t *self, size_t n_ar
}
int ret = gpio_pin_configure(self->port, self->pin, mode | pull | init);
if (ret == -ENOTSUP && mode == (GPIO_OUTPUT | GPIO_INPUT)) {
// Some targets (eg frdm_k64f) don't support GPIO_OUTPUT|GPIO_INPUT, so try again with just GPIO_OUTPUT.
ret = gpio_pin_configure(self->port, self->pin, GPIO_OUTPUT | pull | init);
}
if (ret) {
mp_raise_ValueError(MP_ERROR_TEXT("invalid pin"));
}