goto err_early;
        }
 
+       if (arizona->pdata.reset) {
+               /* Start out with /RESET low to put the chip into reset */
+               ret = gpio_request_one(arizona->pdata.reset,
+                                      GPIOF_DIR_OUT | GPIOF_INIT_LOW,
+                                      "arizona /RESET");
+               if (ret != 0) {
+                       dev_err(dev, "Failed to request /RESET: %d\n", ret);
+                       goto err_early;
+               }
+       }
+
        ret = regulator_bulk_enable(arizona->num_core_supplies,
                                    arizona->core_supplies);
        if (ret != 0) {
                goto err_enable;
        }
 
-       if (arizona->pdata.reset) {
-               /* Start out with /RESET low to put the chip into reset */
-               ret = gpio_request_one(arizona->pdata.reset,
-                                      GPIOF_DIR_OUT | GPIOF_INIT_LOW,
-                                      "arizona /RESET");
-               if (ret != 0) {
-                       dev_err(dev, "Failed to request /RESET: %d\n", ret);
-                       goto err_dcvdd;
-               }
-
+       if (arizona->pdata.reset)
                gpio_set_value_cansleep(arizona->pdata.reset, 1);
-       }
 
        regcache_cache_only(arizona->regmap, false);
 
        arizona_irq_exit(arizona);
 err_reset:
        if (arizona->pdata.reset) {
-               gpio_set_value_cansleep(arizona->pdata.reset, 1);
+               gpio_set_value_cansleep(arizona->pdata.reset, 0);
                gpio_free(arizona->pdata.reset);
        }
-err_dcvdd:
        regulator_disable(arizona->dcvdd);
 err_enable:
        regulator_bulk_disable(arizona->num_core_supplies,