diff --git a/drivers/gpio/gpio_nrfx.c b/drivers/gpio/gpio_nrfx.c index 0b57a4cae6..f991665d9a 100644 --- a/drivers/gpio/gpio_nrfx.c +++ b/drivers/gpio/gpio_nrfx.c @@ -173,10 +173,12 @@ static int gpio_nrfx_port_set_masked_raw(const struct device *port, gpio_port_value_t value) { NRF_GPIO_Type *reg = get_port_cfg(port)->port; - uint32_t value_tmp; - value_tmp = nrf_gpio_port_out_read(reg) & ~mask; - nrf_gpio_port_out_write(reg, value_tmp | (mask & value)); + const uint32_t set_mask = value & mask; + const uint32_t clear_mask = (~set_mask) & mask; + + nrf_gpio_port_out_set(reg, set_mask); + nrf_gpio_port_out_clear(reg, clear_mask); return 0; } @@ -205,10 +207,12 @@ static int gpio_nrfx_port_toggle_bits(const struct device *port, gpio_port_pins_t mask) { NRF_GPIO_Type *reg = get_port_cfg(port)->port; - uint32_t value; + const uint32_t value = nrf_gpio_port_out_read(reg) ^ mask; + const uint32_t set_mask = value & mask; + const uint32_t clear_mask = (~value) & mask; - value = nrf_gpio_port_out_read(reg); - nrf_gpio_port_out_write(reg, value ^ mask); + nrf_gpio_port_out_set(reg, set_mask); + nrf_gpio_port_out_clear(reg, clear_mask); return 0; }