GPIO P1.13 Edge Detection Causes High Floor Current on nRF54L15DK

## Description

On the nRF54L15DK, the measured floor current increases significantly when the GPIO is configured for button edge detection.

### Observed Behavior

* Floor current baseline: ~4 µA (no button interrupt configured)
* Floor current after enabling GPIO P1.13 interrupt (edge detection for button): ~23 µA

### Expected Behavior

* Floor current should remain close to the baseline (~4 µA) regardless of button edge detection configuration.

---

## Steps to Reproduce

1. Configure GPIO pin for button input **without** interrupt → observe floor current (~4 µA).
2. Enable edge detection interrupt on the button GPIO → observe floor current (~23 µA).

---

## Device Tree Source

```dts
/* Direct motive, button device, button 0 */
gpio_button0: gpio_button {
compatible = "motive,button";
status = "okay";
gpios = <&gpio1 13 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)>;
};
```

## C Code

```c
/**
* @brief Enable button interrupt processing
* @param dev Device pointer
* @return 0 on success, negative error code on failure
*/
static int gpio_button_enable_impl(const struct device *dev)
{
struct gpio_button_data *data = dev->data;
const struct gpio_button_config *config = dev->config;
int ret;

atomic_set(&data->enabled, 1);

ret = gpio_pin_interrupt_configure(config->gpio_dev, config->pin,
GPIO_INT_EDGE_BOTH);
if (ret < 0) {
LOG_ERR("Failed to configure GPIO interrupt: %d", ret);
atomic_set(&data->enabled, 0);
return ret;
}

LOG_INF("Button enabled");
return 0;
}


/**
* @brief Initialize button device
* @param dev Device pointer
* @return 0 on success, negative error code on failure
*/
int gpio_button_init(const struct device *dev)
{
struct gpio_button_data *data = dev->data;
const struct gpio_button_config *config = dev->config;
int ret;

if (!device_is_ready(config->gpio_dev)) {
LOG_ERR("GPIO device not ready");
return -ENODEV;
}

/* Store device pointer for callbacks */
data->dev = dev;

/* Configure GPIO pin */
ret = gpio_pin_configure(config->gpio_dev, config->pin, config->flags);
if (ret < 0) {
LOG_ERR("Failed to configure GPIO pin: %d", ret);
return ret;
}

/* Initialize GPIO callback */
gpio_init_callback(&data->gpio_cb, _gpio_interrupt_handler, BIT(config->pin));
ret = gpio_add_callback(config->gpio_dev, &data->gpio_cb);
if (ret < 0) {
LOG_ERR("Failed to add GPIO callback: %d", ret);
return ret;
}

/* Initialize state */
atomic_set(&data->lastState, 0);
data->callback = _default_button_callback;
data->user_data = NULL;
data->pressStartTime = 0;
atomic_set(&data->enabled, 0);

LOG_INF("GPIO button initialized on pin %d", config->pin);
return 0;
}

```

---

## Impact

* Increases standby current consumption by nearly **6×**.
* May significantly reduce battery life in low-power operation.

Parents Reply Children
No Data
Related