From 9a9e5529af9012534f2935474476d631c1e7cb81 Mon Sep 17 00:00:00 2001 From: Damien George Date: Tue, 8 Jul 2025 11:12:45 +1000 Subject: [PATCH] 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 --- ports/zephyr/machine_pin.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ports/zephyr/machine_pin.c b/ports/zephyr/machine_pin.c index 7834b5de6d..e0718588d6 100644 --- a/ports/zephyr/machine_pin.c +++ b/ports/zephyr/machine_pin.c @@ -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")); }