Merge "clk: Add vdd_class support for handoff and use_max_uV"
This commit is contained in:
commit
0d3136dec2
2 changed files with 12 additions and 3 deletions
|
@ -656,7 +656,7 @@ static int clk_update_vdd(struct clk_vdd_class *vdd_class)
|
||||||
pr_debug("Set Voltage level Min %d, Max %d\n", uv[new_base + i],
|
pr_debug("Set Voltage level Min %d, Max %d\n", uv[new_base + i],
|
||||||
uv[max_lvl + i]);
|
uv[max_lvl + i]);
|
||||||
rc = regulator_set_voltage(r[i], uv[new_base + i],
|
rc = regulator_set_voltage(r[i], uv[new_base + i],
|
||||||
uv[max_lvl + i]);
|
vdd_class->use_max_uV ? INT_MAX : uv[max_lvl + i]);
|
||||||
if (rc)
|
if (rc)
|
||||||
goto set_voltage_fail;
|
goto set_voltage_fail;
|
||||||
|
|
||||||
|
@ -677,11 +677,13 @@ static int clk_update_vdd(struct clk_vdd_class *vdd_class)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
enable_disable_fail:
|
enable_disable_fail:
|
||||||
regulator_set_voltage(r[i], uv[cur_base + i], uv[max_lvl + i]);
|
regulator_set_voltage(r[i], uv[cur_base + i],
|
||||||
|
vdd_class->use_max_uV ? INT_MAX : uv[max_lvl + i]);
|
||||||
|
|
||||||
set_voltage_fail:
|
set_voltage_fail:
|
||||||
for (i--; i >= 0; i--) {
|
for (i--; i >= 0; i--) {
|
||||||
regulator_set_voltage(r[i], uv[cur_base + i], uv[max_lvl + i]);
|
regulator_set_voltage(r[i], uv[cur_base + i],
|
||||||
|
vdd_class->use_max_uV ? INT_MAX : uv[max_lvl + i]);
|
||||||
if (cur_lvl == 0 || cur_lvl == vdd_class->num_levels)
|
if (cur_lvl == 0 || cur_lvl == vdd_class->num_levels)
|
||||||
regulator_disable(r[i]);
|
regulator_disable(r[i]);
|
||||||
else if (level == 0)
|
else if (level == 0)
|
||||||
|
@ -792,6 +794,9 @@ static int clk_vdd_class_init(struct clk_vdd_class *vdd)
|
||||||
{
|
{
|
||||||
struct clk_handoff_vdd *v;
|
struct clk_handoff_vdd *v;
|
||||||
|
|
||||||
|
if (vdd->skip_handoff)
|
||||||
|
return 0;
|
||||||
|
|
||||||
list_for_each_entry(v, &clk_handoff_vdd_list, list) {
|
list_for_each_entry(v, &clk_handoff_vdd_list, list) {
|
||||||
if (v->vdd_class == vdd)
|
if (v->vdd_class == vdd)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -269,6 +269,8 @@ struct regulator;
|
||||||
regulator
|
regulator
|
||||||
* @level_votes: array of votes for each level
|
* @level_votes: array of votes for each level
|
||||||
* @num_levels: specifies the size of level_votes array
|
* @num_levels: specifies the size of level_votes array
|
||||||
|
* @skip_handoff: do not vote for the max possible voltage during init
|
||||||
|
* @use_max_uV: use INT_MAX for max_uV when calling regulator_set_voltage
|
||||||
* @cur_level: the currently set voltage level
|
* @cur_level: the currently set voltage level
|
||||||
* @lock: lock to protect this struct
|
* @lock: lock to protect this struct
|
||||||
*/
|
*/
|
||||||
|
@ -280,6 +282,8 @@ struct clk_vdd_class {
|
||||||
int *vdd_uv;
|
int *vdd_uv;
|
||||||
int *level_votes;
|
int *level_votes;
|
||||||
int num_levels;
|
int num_levels;
|
||||||
|
bool skip_handoff;
|
||||||
|
bool use_max_uV;
|
||||||
unsigned long cur_level;
|
unsigned long cur_level;
|
||||||
struct mutex lock;
|
struct mutex lock;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue