/* * 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); }
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); } }