count = rdev->deferred_disables;
        rdev->deferred_disables = 0;
 
+       /*
+        * Workqueue functions queue the new work instance while the previous
+        * work instance is being processed. Cancel the queued work instance
+        * as the work instance under processing does the job of the queued
+        * work instance.
+        */
+       cancel_delayed_work(&rdev->disable_work);
+
        for (i = 0; i < count; i++) {
                ret = _regulator_disable(rdev);
                if (ret != 0)
 
        mutex_lock(&rdev->mutex);
        rdev->deferred_disables++;
+       mod_delayed_work(system_power_efficient_wq, &rdev->disable_work,
+                        msecs_to_jiffies(ms));
        mutex_unlock(&rdev->mutex);
 
-       queue_delayed_work(system_power_efficient_wq, &rdev->disable_work,
-                          msecs_to_jiffies(ms));
        return 0;
 }
 EXPORT_SYMBOL_GPL(regulator_disable_deferred);