diff --git a/cpu/msp430fxyz/periph/gpio.c b/cpu/msp430fxyz/periph/gpio.c
index 1432e9e64a7247bd42e95e9931cc386531b5518f..5751978bd1f587bccdac4e3c022797b6d512905b 100644
--- a/cpu/msp430fxyz/periph/gpio.c
+++ b/cpu/msp430fxyz/periph/gpio.c
@@ -88,11 +88,13 @@ int gpio_init(gpio_t pin, gpio_mode_t mode)
     }
 
     /* reset pin and output value */
-    port->DIR &= ~(_pin(pin));
-    port->OD &= ~(_pin(pin));
     if (mode == GPIO_OUT) {
         port->DIR |= _pin(pin);
     }
+    else {
+        port->DIR &= ~(_pin(pin));
+    }
+    port->OD &= ~(_pin(pin));
 
     return 0;
 }