/*
*  raise ddr frequency up temporarily
*  @req_bw, KB
*/
void dfs_freq_raise_quirk(unsigned int req_bw)
{
	if(req_bw == 0)
		return;

	spin_lock(&dfs_req_lock);
	if(user_requests.req_quirk || devfreq_request_ignore() ){
		spin_unlock(&dfs_req_lock);
		return;
	}
	user_requests.req_quirk = req_bw;
	spin_unlock(&dfs_req_lock);

	mutex_lock(&g_devfreq->lock);
	devfreq_min_freq_cnt_reset(-1, 1);
	update_devfreq(g_devfreq);
	devfreq_min_freq_cnt_reset(-1, 0);
	user_requests.req_quirk = 0;
	mutex_unlock(&g_devfreq->lock);
}
Пример #2
0
void dfs_request_bw_timeout(unsigned int req_bw)
{
	struct userspace_data *user_data;
	unsigned int req_freq;

	if(req_bw == 0)
		return;

	spin_lock(&dfs_req_lock);
	if(user_requests.req_timeout || devfreq_request_ignore() ){
		spin_unlock(&dfs_req_lock);
		return;
	}
	spin_unlock(&dfs_req_lock);

	if(g_devfreq && g_devfreq->data){
		user_data = (struct userspace_data *)(g_devfreq->data);
		if(user_data->convert_bw_to_freq){
			req_freq = (user_data->convert_bw_to_freq)(req_bw);
			printk("*** %s, req_freq:%d ***\n", __func__, req_freq );
		}
	}
	spin_lock(&dfs_req_lock);
	user_requests.req_timeout = req_freq;
	spin_unlock(&dfs_req_lock);
#if 0
	if(req_bw)
		mod_timer(&dfs_req_timer, jiffies+dfs_req_timeout);
	else
		del_timer_sync(&dfs_req_timer);
#endif

	if(req_freq){
		mutex_lock(&g_devfreq->lock);
		devfreq_min_freq_cnt_reset(-1, 1);
		update_devfreq(g_devfreq);
		devfreq_min_freq_cnt_reset(-1, 0);
		dfs_req_timer_timeout(1);
		mutex_unlock(&g_devfreq->lock);
	}
}