struct reset_controller_dev reset;
 };
 
-static int bcm2835_asb_enable(struct bcm2835_power *power, u32 reg)
+static int bcm2835_asb_control(struct bcm2835_power *power, u32 reg, bool enable)
 {
        u64 start;
 
        start = ktime_get_ns();
 
        /* Enable the module's async AXI bridges. */
-       ASB_WRITE(reg, ASB_READ(reg) & ~ASB_REQ_STOP);
+       if (enable) {
+               ASB_WRITE(reg, ASB_READ(reg) & ~ASB_REQ_STOP);
+       } else {
+               ASB_WRITE(reg, ASB_READ(reg) | ASB_REQ_STOP);
+       }
+
        while (ASB_READ(reg) & ASB_ACK) {
                cpu_relax();
                if (ktime_get_ns() - start >= 1000)
        return 0;
 }
 
-static int bcm2835_asb_disable(struct bcm2835_power *power, u32 reg)
+static int bcm2835_asb_enable(struct bcm2835_power *power, u32 reg)
 {
-       u64 start;
-
-       if (!reg)
-               return 0;
-
-       start = ktime_get_ns();
-
-       /* Enable the module's async AXI bridges. */
-       ASB_WRITE(reg, ASB_READ(reg) | ASB_REQ_STOP);
-       while (!(ASB_READ(reg) & ASB_ACK)) {
-               cpu_relax();
-               if (ktime_get_ns() - start >= 1000)
-                       return -ETIMEDOUT;
-       }
+       return bcm2835_asb_control(power, reg, true);
+}
 
-       return 0;
+static int bcm2835_asb_disable(struct bcm2835_power *power, u32 reg)
+{
+       return bcm2835_asb_control(power, reg, false);
 }
 
 static int bcm2835_power_power_off(struct bcm2835_power_domain *pd, u32 pm_reg)