diff --git a/epicardium/modules/buttons.c b/epicardium/modules/buttons.c
index fd86bbade6c22d3d618d1e116dee39e68ae6557c..0caa50c3992352759da84db2d8817aed445b5b21 100644
--- a/epicardium/modules/buttons.c
+++ b/epicardium/modules/buttons.c
@@ -16,17 +16,15 @@ static const uint8_t pin_mask[] = {
 uint8_t epic_buttons_read(uint8_t mask)
 {
 	uint8_t ret = 0;
-	if (portexpander_detected() && (mask & 0x7)) {
-		hwlock_acquire(HWLOCK_I2C);
 
+	hwlock_acquire(HWLOCK_I2C);
+	if (portexpander_detected() && (mask & 0x7)) {
 		/*
 		 * Not using PB_Get() here as that performs one I2C transaction
 		 * per button.
 		 */
 		uint8_t pin_status = ~portexpander_in_get(0xFF);
 
-		hwlock_release(HWLOCK_I2C);
-
 		for (uint8_t m = 1; m < 0x8; m <<= 1) {
 			if (mask & m && pin_status & pin_mask[m]) {
 				ret |= m;
@@ -38,5 +36,6 @@ uint8_t epic_buttons_read(uint8_t mask)
 		ret |= BUTTON_RESET;
 	}
 
+	hwlock_release(HWLOCK_I2C);
 	return ret;
 }