int devfreq_update_status()

in devfreq.c [219:255]


int devfreq_update_status(struct devfreq *devfreq, unsigned long freq)
{
	int lev, prev_lev, ret = 0;
	u64 cur_time;

	lockdep_assert_held(&devfreq->lock);
	cur_time = get_jiffies_64();

	/* Immediately exit if previous_freq is not initialized yet. */
	if (!devfreq->previous_freq)
		goto out;

	prev_lev = devfreq_get_freq_level(devfreq, devfreq->previous_freq);
	if (prev_lev < 0) {
		ret = prev_lev;
		goto out;
	}

	devfreq->stats.time_in_state[prev_lev] +=
			cur_time - devfreq->stats.last_update;

	lev = devfreq_get_freq_level(devfreq, freq);
	if (lev < 0) {
		ret = lev;
		goto out;
	}

	if (lev != prev_lev) {
		devfreq->stats.trans_table[
			(prev_lev * devfreq->profile->max_state) + lev]++;
		devfreq->stats.total_trans++;
	}

out:
	devfreq->stats.last_update = cur_time;
	return ret;
}