mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-10 22:40:54 -04:00
Merge "clk: qcom: Fix race condition when unvoting regulators in sync_state"
This commit is contained in:
commit
48d7c9d79e
1 changed files with 8 additions and 0 deletions
|
|
@ -9,6 +9,8 @@
|
|||
#include "vdd-class.h"
|
||||
#include "clk-regmap.h"
|
||||
|
||||
static DEFINE_MUTEX(vdd_lock);
|
||||
|
||||
/*
|
||||
* Aggregate the vdd_class level votes and call regulator framework functions
|
||||
* to enforce the highest vote.
|
||||
|
|
@ -87,12 +89,15 @@ int clk_vote_vdd_level(struct clk_vdd_class_data *vdd_data, int level)
|
|||
if (level >= vdd_class->num_levels)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&vdd_lock);
|
||||
vdd_class->level_votes[level]++;
|
||||
|
||||
ret = clk_aggregate_vdd(vdd_class);
|
||||
if (ret)
|
||||
vdd_class->level_votes[level]--;
|
||||
|
||||
mutex_unlock(&vdd_lock);
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_vote_vdd_level);
|
||||
|
|
@ -122,12 +127,15 @@ int clk_unvote_vdd_level(struct clk_vdd_class_data *vdd_data, int level)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
mutex_lock(&vdd_lock);
|
||||
vdd_class->level_votes[level]--;
|
||||
|
||||
ret = clk_aggregate_vdd(vdd_class);
|
||||
if (ret)
|
||||
vdd_class->level_votes[level]++;
|
||||
|
||||
mutex_unlock(&vdd_lock);
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_unvote_vdd_level);
|
||||
|
|
|
|||
Loading…
Reference in a new issue