static int mdp_do_histogram(struct fb_info *info, struct mdp_histogram *hist) { int ret = 0; if (!hist->frame_cnt || (hist->bin_cnt == 0)) return -EINVAL; if ((mdp_rev <= MDP_REV_41 && hist->bin_cnt > MDP_REV41_HIST_MAX_BIN) || (mdp_rev == MDP_REV_42 && hist->bin_cnt > MDP_REV42_HIST_MAX_BIN)) return -EINVAL; mutex_lock(&mdp_hist_mutex); if (!mdp_is_hist_data) { pr_err("%s - histogram not ready\n", __func__); ret = -EPERM; goto error; } if (!mdp_is_hist_start) { pr_err("%s histogram not started\n", __func__); ret = -EPERM; goto error; } mdp_hist_frame_cnt = hist->frame_cnt; mutex_unlock(&mdp_hist_mutex); if (wait_for_completion_killable(&mdp_hist_comp)) { pr_err("%s(): histogram bin collection killed", __func__); return -EINVAL; } mutex_lock(&mdp_hist_mutex); if (mdp_is_hist_data && mdp_is_hist_init) ret = _mdp_copy_hist_data(hist); error: mutex_unlock(&mdp_hist_mutex); return ret; }
static int mdp_do_histogram(struct fb_info *info, struct mdp_histogram *hist) { int ret = 0; if (!hist->frame_cnt || (hist->bin_cnt == 0)) return -EINVAL; if ((mdp_rev <= MDP_REV_41 && hist->bin_cnt > MDP_REV41_HIST_MAX_BIN) || (mdp_rev == MDP_REV_42 && hist->bin_cnt > MDP_REV42_HIST_MAX_BIN)) return -EINVAL; mutex_lock(&mdp_hist_mutex); if (!mdp_is_hist_data) { ret = -EINVAL; goto error; } if (!mdp_is_hist_start) { printk(KERN_ERR "%s histogram not started\n", __func__); ret = -EPERM; goto error; } INIT_COMPLETION(mdp_hist_comp); mdp_hist_frame_cnt = hist->frame_cnt; mutex_unlock(&mdp_hist_mutex); wait_for_completion_killable(&mdp_hist_comp); mutex_lock(&mdp_hist_mutex); if (mdp_is_hist_data) ret = _mdp_copy_hist_data(hist); error: mutex_unlock(&mdp_hist_mutex); return ret; }