diff --git a/cpu/samd21/periph/i2c.c b/cpu/samd21/periph/i2c.c
index ab81aa6c2eff36311a7e008aebd5cc5d4cbd3aa9..86a9ce3c8f6983f743613a12b838c0ca22a45012 100644
--- a/cpu/samd21/periph/i2c.c
+++ b/cpu/samd21/periph/i2c.c
@@ -35,6 +35,11 @@
 
 #define SAMD21_I2C_TIMEOUT  (65535)
 
+#define BUSSTATE_UNKNOWN SERCOM_I2CM_STATUS_BUSSTATE(0)
+#define BUSSTATE_IDLE SERCOM_I2CM_STATUS_BUSSTATE(1)
+#define BUSSTATE_OWNER SERCOM_I2CM_STATUS_BUSSTATE(2)
+#define BUSSTATE_BUSY SERCOM_I2CM_STATUS_BUSSTATE(3)
+
 /* static function definitions */
 static void _i2c_poweron(SercomI2cm *sercom);
 static void _i2c_poweroff(SercomI2cm *sercom);
@@ -197,10 +202,10 @@ int i2c_init_master(i2c_t dev, i2c_speed_t speed)
     i2c_poweron(dev);
 
     /* Start timeout if bus state is unknown. */
-    while (!(I2CSercom->STATUS.reg & SERCOM_I2CM_STATUS_BUSSTATE(1))) {
+    while ((I2CSercom->STATUS.reg & SERCOM_I2CM_STATUS_BUSSTATE_Msk) == BUSSTATE_UNKNOWN) {
         if(timeout_counter++ >= SAMD21_I2C_TIMEOUT) {
             /* Timeout, force bus state to idle. */
-            I2CSercom->STATUS.reg = SERCOM_I2CM_STATUS_BUSSTATE(1);
+            I2CSercom->STATUS.reg = BUSSTATE_IDLE;
         }
     }
     return 0;
@@ -435,7 +440,7 @@ static inline int _write(SercomI2cm *dev, char *data, int length)
     DEBUG("Looping through bytes\n");
     while (tmp_data_length--) {
         /* Check that bus ownership is not lost. */
-        if (!(dev->STATUS.reg & SERCOM_I2CM_STATUS_BUSSTATE(2))) {
+        if ((dev->STATUS.reg & SERCOM_I2CM_STATUS_BUSSTATE_Msk) != BUSSTATE_OWNER) {
             DEBUG("STATUS_ERR_PACKET_COLLISION\n");
             return -2;
         }
@@ -476,7 +481,7 @@ static inline int _read(SercomI2cm *dev, char *data, int length)
     /* Read data buffer. */
     while (count != length) {
         /* Check that bus ownership is not lost. */
-        if (!(dev->STATUS.reg & SERCOM_I2CM_STATUS_BUSSTATE(2))) {
+        if ((dev->STATUS.reg & SERCOM_I2CM_STATUS_BUSSTATE_Msk) != BUSSTATE_OWNER) {
             DEBUG("STATUS_ERR_PACKET_COLLISION\n");
             return -2;
         }
@@ -509,7 +514,7 @@ static inline void _stop(SercomI2cm *dev)
     /* Stop command */
     dev->CTRLB.reg |= SERCOM_I2CM_CTRLB_CMD(3);
     /* Wait for bus to be idle again */
-    while(dev->STATUS.reg & SERCOM_I2CM_STATUS_BUSSTATE(1)) {}
+    while((dev->STATUS.reg & SERCOM_I2CM_STATUS_BUSSTATE_Msk) != BUSSTATE_IDLE) {}
     DEBUG("Stop sent\n");
 }