diff --git a/cpu/efm32/periph/gpio.c b/cpu/efm32/periph/gpio.c
index 0746bbb522af866bd5fa9999b0f2c87b6bba303e..f1bce06fe98fbf1ae5e61b495aaf3b7e86487139 100644
--- a/cpu/efm32/periph/gpio.c
+++ b/cpu/efm32/periph/gpio.c
@@ -27,6 +27,7 @@
 
 #include "em_gpio.h"
 
+#ifdef MODULE_PERIPH_GPIO_IRQ
 /**
  * @brief   Number of external interrupt lines.
  */
@@ -36,6 +37,7 @@
  * @brief   Hold one interrupt context per interrupt line
  */
 static gpio_isr_ctx_t isr_ctx[NUMOF_IRQS];
+#endif
 
 static inline GPIO_Port_TypeDef _port_num(gpio_t pin)
 {
@@ -47,11 +49,6 @@ static inline uint32_t _pin_num(gpio_t pin)
     return (pin & 0x0f);
 }
 
-static inline uint32_t _pin_mask(gpio_t pin)
-{
-    return (1 << _pin_num(pin));
-}
-
 int gpio_init(gpio_t pin, gpio_mode_t mode)
 {
     /* check for valid pin */
@@ -72,6 +69,42 @@ int gpio_init(gpio_t pin, gpio_mode_t mode)
     return 0;
 }
 
+int gpio_read(gpio_t pin)
+{
+    return GPIO_PinInGet(_port_num(pin), _pin_num(pin));
+}
+
+void gpio_set(gpio_t pin)
+{
+    GPIO_PinOutSet(_port_num(pin), _pin_num(pin));
+}
+
+void gpio_clear(gpio_t pin)
+{
+    GPIO_PinOutClear(_port_num(pin), _pin_num(pin));
+}
+
+void gpio_toggle(gpio_t pin)
+{
+    GPIO_PinOutToggle(_port_num(pin), _pin_num(pin));
+}
+
+void gpio_write(gpio_t pin, int value)
+{
+    if (value) {
+        GPIO_PinOutSet(_port_num(pin), _pin_num(pin));
+    }
+    else {
+        GPIO_PinOutClear(_port_num(pin), _pin_num(pin));
+    }
+}
+
+#ifdef MODULE_PERIPH_GPIO_IRQ
+static inline uint32_t _pin_mask(gpio_t pin)
+{
+    return (1 << _pin_num(pin));
+}
+
 int gpio_init_int(gpio_t pin, gpio_mode_t mode, gpio_flank_t flank,
                   gpio_cb_t cb, void *arg)
 {
@@ -111,36 +144,6 @@ void gpio_irq_disable(gpio_t pin)
     GPIO_IntDisable(_pin_mask(pin));
 }
 
-int gpio_read(gpio_t pin)
-{
-    return GPIO_PinInGet(_port_num(pin), _pin_num(pin));
-}
-
-void gpio_set(gpio_t pin)
-{
-    GPIO_PinOutSet(_port_num(pin), _pin_num(pin));
-}
-
-void gpio_clear(gpio_t pin)
-{
-    GPIO_PinOutClear(_port_num(pin), _pin_num(pin));
-}
-
-void gpio_toggle(gpio_t pin)
-{
-    GPIO_PinOutToggle(_port_num(pin), _pin_num(pin));
-}
-
-void gpio_write(gpio_t pin, int value)
-{
-    if (value) {
-        GPIO_PinOutSet(_port_num(pin), _pin_num(pin));
-    }
-    else {
-        GPIO_PinOutClear(_port_num(pin), _pin_num(pin));
-    }
-}
-
 /**
  * @brief   Actual interrupt handler for both even and odd pin index numbers.
  */
@@ -170,3 +173,4 @@ void isr_gpio_odd(void)
 {
     gpio_irq();
 }
+#endif