mutex_lock(&adnp->i2c_lock);
 
                err = adnp_read(adnp, GPIO_DDR(adnp) + i, &ddr);
-               if (err < 0) {
-                       mutex_unlock(&adnp->i2c_lock);
-                       return;
-               }
+               if (err < 0)
+                       goto unlock;
 
                err = adnp_read(adnp, GPIO_PLR(adnp) + i, &plr);
-               if (err < 0) {
-                       mutex_unlock(&adnp->i2c_lock);
-                       return;
-               }
+               if (err < 0)
+                       goto unlock;
 
                err = adnp_read(adnp, GPIO_IER(adnp) + i, &ier);
-               if (err < 0) {
-                       mutex_unlock(&adnp->i2c_lock);
-                       return;
-               }
+               if (err < 0)
+                       goto unlock;
 
                err = adnp_read(adnp, GPIO_ISR(adnp) + i, &isr);
-               if (err < 0) {
-                       mutex_unlock(&adnp->i2c_lock);
-                       return;
-               }
+               if (err < 0)
+                       goto unlock;
 
                mutex_unlock(&adnp->i2c_lock);
 
                                   direction, level, interrupt, pending);
                }
        }
+
+       return;
+
+unlock:
+       mutex_unlock(&adnp->i2c_lock);
 }
 
 static int adnp_gpio_setup(struct adnp *adnp, unsigned int num_gpios)