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
  *