diff --git a/src/rp2_common/hardware_gpio/gpio.c b/src/rp2_common/hardware_gpio/gpio.c
index c16e3cdc7e1d956fd391c2c1a19626c7346bcf85..8340f5193fb4b555f0fdee9616638519d75d14f4 100644
--- a/src/rp2_common/hardware_gpio/gpio.c
+++ b/src/rp2_common/hardware_gpio/gpio.c
@@ -270,3 +270,11 @@ void gpio_init_mask(uint gpio_mask) {
}
}
+void gpio_set_function_mask(uint gpio_mask, enum gpio_function fn) {
+ for (uint i = 0; i < NUM_BANK0_GPIOS; i++) {
+ if (gpio_mask & 1) {
+ gpio_set_function(i, fn);
+ }
+ gpio_mask >>= 1;
+ }
+}
diff --git a/src/rp2_common/hardware_gpio/include/hardware/gpio.h b/src/rp2_common/hardware_gpio/include/hardware/gpio.h
index 43997db50d3d0e3d522235b8345d2c7dc1f2e03a..4f58a20f3842cd6543605570964d5946c586d6c9 100644
--- a/src/rp2_common/hardware_gpio/include/hardware/gpio.h
+++ b/src/rp2_common/hardware_gpio/include/hardware/gpio.h
@@ -185,6 +185,15 @@ static inline void check_gpio_param(__unused uint gpio) {
*/
void gpio_set_function(uint gpio, enum gpio_function fn);
+/*! \brief Select the function for multiple GPIOs
+ * \ingroup hardware_gpio
+ *
+ * \sa gpio_set_function
+ * \param gpio_mask Mask with 1 bit per GPIO number to set the function for
+ * \param fn Which GPIO function select to use from list \ref gpio_function
+*/
+void gpio_set_function_mask(uint gpio_mask, enum gpio_function fn);
+
/*! \brief Determine current GPIO function
* \ingroup hardware_gpio
*