On 19-07-19, 17:05, k.konieczny@xxxxxxxxxxxxxxxxxxx wrote: > Add enable regulators to dev_pm_opp_set_regulators() and disable > regulators to dev_pm_opp_put_regulators(). Even if bootloader > leaves regulators enabled, they should be enabled in kernel in > order to increase the reference count. > > Signed-off-by: Kamil Konieczny <k.konieczny@xxxxxxxxxxxxxxxxxxx> > --- > Changes in v3: > - corrected error path in enable > - improved commit message > Changes in v2: > - move regulator enable and disable into loop > --- > drivers/opp/core.c | 16 +++++++++++++--- > 1 file changed, 13 insertions(+), 3 deletions(-) > > diff --git a/drivers/opp/core.c b/drivers/opp/core.c > index 0e7703fe733f..a8a480cdabab 100644 > --- a/drivers/opp/core.c > +++ b/drivers/opp/core.c > @@ -1570,6 +1570,12 @@ struct opp_table *dev_pm_opp_set_regulators(struct device *dev, > goto free_regulators; > } > > + ret = regulator_enable(reg); > + if (ret < 0) { > + regulator_put(reg); > + goto free_regulators; > + } > + > opp_table->regulators[i] = reg; > } > > @@ -1583,8 +1589,10 @@ struct opp_table *dev_pm_opp_set_regulators(struct device *dev, > return opp_table; > > free_regulators: > - while (i != 0) > - regulator_put(opp_table->regulators[--i]); > + while (i--) { > + regulator_disable(opp_table->regulators[i]); > + regulator_put(opp_table->regulators[i]); > + } > > kfree(opp_table->regulators); > opp_table->regulators = NULL; > @@ -1610,8 +1618,10 @@ void dev_pm_opp_put_regulators(struct opp_table *opp_table) > /* Make sure there are no concurrent readers while updating opp_table */ > WARN_ON(!list_empty(&opp_table->opp_list)); > > - for (i = opp_table->regulator_count - 1; i >= 0; i--) > + for (i = opp_table->regulator_count - 1; i >= 0; i--) { > + regulator_disable(opp_table->regulators[i]); > regulator_put(opp_table->regulators[i]); > + } > > _free_set_opp_data(opp_table); Applied. Thanks. -- viresh