Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/host/hardware_gpio/gpio.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ void gpio_set_pulls(uint gpio, bool up, bool down) {

}

void gpio_set_irqover(uint gpio, uint value) {

}

void gpio_set_outover(uint gpio, uint value) {

}
Expand Down
2 changes: 2 additions & 0 deletions src/host/hardware_gpio/include/hardware/gpio.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ void gpio_disable_pulls(uint gpio);

void gpio_set_pulls(uint gpio, bool up, bool down);

void gpio_set_irqover(uint gpio, uint value);

void gpio_set_outover(uint gpio, uint value);

void gpio_set_inover(uint gpio, uint value);
Expand Down
9 changes: 9 additions & 0 deletions src/rp2_common/hardware_gpio/gpio.c
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,15 @@ void gpio_set_pulls(uint gpio, bool up, bool down) {
);
}

// Direct override for per-GPIO IRQ signal
void gpio_set_irqover(uint gpio, uint value) {
invalid_params_if(GPIO, gpio >= NUM_BANK0_GPIOS);
hw_write_masked(&iobank0_hw->io[gpio].ctrl,
value << IO_BANK0_GPIO0_CTRL_IRQOVER_LSB,
IO_BANK0_GPIO0_CTRL_IRQOVER_BITS
);
}

// Direct overrides for pad controls
void gpio_set_inover(uint gpio, uint value) {
invalid_params_if(GPIO, gpio >= NUM_BANK0_GPIOS);
Expand Down
10 changes: 10 additions & 0 deletions src/rp2_common/hardware_gpio/include/hardware/gpio.h
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,16 @@ static inline void gpio_disable_pulls(uint gpio) {
gpio_set_pulls(gpio, false, false);
}

/*! \brief Set GPIO IRQ override
* \ingroup hardware_gpio
*
* Optionally invert a GPIO IRQ signal, or drive it high or low
*
* \param gpio GPIO number
* \param value See \ref gpio_override
*/
void gpio_set_irqover(uint gpio, uint value);

/*! \brief Set GPIO output override
* \ingroup hardware_gpio
*
Expand Down