diff options
Diffstat (limited to 'drivers/opp/core.c')
| -rw-r--r-- | drivers/opp/core.c | 8 | 
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/opp/core.c b/drivers/opp/core.c index c3f3d9249cc5..c2689386a906 100644 --- a/drivers/opp/core.c +++ b/drivers/opp/core.c @@ -998,14 +998,15 @@ static int _set_opp(struct device *dev, struct opp_table *opp_table,  	old_opp = opp_table->current_opp;  	/* Return early if nothing to do */ -	if (opp_table->enabled && old_opp == opp) { +	if (old_opp == opp && opp_table->current_rate == freq && +	    opp_table->enabled) {  		dev_dbg(dev, "%s: OPPs are same, nothing to do\n", __func__);  		return 0;  	}  	dev_dbg(dev, "%s: switching OPP: Freq %lu -> %lu Hz, Level %u -> %u, Bw %u -> %u\n", -		__func__, old_opp->rate, freq, old_opp->level, opp->level, -		old_opp->bandwidth ? old_opp->bandwidth[0].peak : 0, +		__func__, opp_table->current_rate, freq, old_opp->level, +		opp->level, old_opp->bandwidth ? old_opp->bandwidth[0].peak : 0,  		opp->bandwidth ? opp->bandwidth[0].peak : 0);  	scaling_down = _opp_compare_key(old_opp, opp); @@ -1061,6 +1062,7 @@ static int _set_opp(struct device *dev, struct opp_table *opp_table,  	/* Make sure current_opp doesn't get freed */  	dev_pm_opp_get(opp);  	opp_table->current_opp = opp; +	opp_table->current_rate = freq;  	return ret;  }  | 
