static int devfreq_vbif_ev_handler(struct devfreq *devfreq, unsigned int event, void *data) { int ret; struct devfreq_dev_status stat; memset(&stat, 0, sizeof(stat)); switch (event) { case DEVFREQ_GOV_START: mutex_lock(&df_lock); df = devfreq; if (df->profile->get_dev_status && !df->profile->get_dev_status(df->dev.parent, &stat) && stat.private_data) dev_ab = stat.private_data; else pr_warn("Device doesn't take AB votes!\n"); mutex_unlock(&df_lock); ret = devfreq_vbif_update_bw(0, 0); if (ret) { pr_err("Unable to update BW! Gov start failed!\n"); return ret; } /* * Normally at this point governors start the polling with * devfreq_monitor_start(df); * This governor doesn't poll, but expect external calls * of its devfreq_vbif_update_bw() function */ pr_debug("Enabled MSM VBIF governor\n"); break; case DEVFREQ_GOV_STOP: mutex_lock(&df_lock); df = NULL; mutex_unlock(&df_lock); pr_debug("Disabled MSM VBIF governor\n"); break; } return 0; }
static int devfreq_vbif_ev_handler(struct devfreq *devfreq, unsigned int event, void *data) { int ret; switch (event) { case DEVFREQ_GOV_START: mutex_lock(&df_lock); df = devfreq; mutex_unlock(&df_lock); ret = devfreq_vbif_update_bw(); if (ret) { pr_err("Unable to update BW! Gov start failed!\n"); return ret; } /* * Normally at this point governors start the polling with * devfreq_monitor_start(df); * This governor doesn't poll, but expect external calls * of its devfreq_vbif_update_bw() function */ pr_debug("Enabled MSM VBIF governor\n"); break; case DEVFREQ_GOV_STOP: mutex_lock(&df_lock); df = NULL; mutex_unlock(&df_lock); pr_debug("Disabled MSM VBIF governor\n"); break; } return 0; }