File tree Expand file tree Collapse file tree 1 file changed +10
-2
lines changed Expand file tree Collapse file tree 1 file changed +10
-2
lines changed Original file line number Diff line number Diff line change @@ -2396,6 +2396,14 @@ static void regulator_disable_work(struct work_struct *work)
2396
2396
count = rdev -> deferred_disables ;
2397
2397
rdev -> deferred_disables = 0 ;
2398
2398
2399
+ /*
2400
+ * Workqueue functions queue the new work instance while the previous
2401
+ * work instance is being processed. Cancel the queued work instance
2402
+ * as the work instance under processing does the job of the queued
2403
+ * work instance.
2404
+ */
2405
+ cancel_delayed_work (& rdev -> disable_work );
2406
+
2399
2407
for (i = 0 ; i < count ; i ++ ) {
2400
2408
ret = _regulator_disable (rdev );
2401
2409
if (ret != 0 )
@@ -2439,10 +2447,10 @@ int regulator_disable_deferred(struct regulator *regulator, int ms)
2439
2447
2440
2448
mutex_lock (& rdev -> mutex );
2441
2449
rdev -> deferred_disables ++ ;
2450
+ mod_delayed_work (system_power_efficient_wq , & rdev -> disable_work ,
2451
+ msecs_to_jiffies (ms ));
2442
2452
mutex_unlock (& rdev -> mutex );
2443
2453
2444
- queue_delayed_work (system_power_efficient_wq , & rdev -> disable_work ,
2445
- msecs_to_jiffies (ms ));
2446
2454
return 0 ;
2447
2455
}
2448
2456
EXPORT_SYMBOL_GPL (regulator_disable_deferred );
You can’t perform that action at this time.
0 commit comments