Ejemplo n.º 1
0
static int set_lcdfreq_div(struct device *dev, enum lcdfreq_level level)
{
	struct lcdfreq_info *info = dev_get_drvdata(dev);

	u32 ret;

	mutex_lock(&info->lock);

	if (!info->enable) {
		dev_err(dev, "%s reject. enable flag is %d\n", __func__, info->enable);
		ret = -EINVAL;
		goto exit;
	}

	ret = set_div(dev, info->table[level].cmu_div);

	if (ret) {
		dev_err(dev, "skip to change lcd freq\n");
		goto exit;
	}
#ifdef CONFIG_LCD_FREQ_SWITCH_ACCOUNTING
	do_time_slice(info->level);
#endif

	info->level = level;

exit:
	mutex_unlock(&info->lock);

	return ret;
}
mali_bool set_mali_dvfs_current_step(unsigned int step)
{
	_mali_osk_lock_wait(mali_dvfs_lock, _MALI_OSK_LOCKMODE_RW);
	if(!!time_enable)
		do_time_slice(maliDvfsStatus.currentStep);
	maliDvfsStatus.currentStep = step % MAX_MALI_DVFS_STEPS;
	if (step >= MAX_MALI_DVFS_STEPS)
		mali_runtime_resumed = maliDvfsStatus.currentStep;
	_mali_osk_lock_signal(mali_dvfs_lock, _MALI_OSK_LOCKMODE_RW);
	return MALI_TRUE;
}
Ejemplo n.º 3
0
static ssize_t time_in_state_show(struct device *dev,
		struct device_attribute *attr, char *buf)
{
	struct lcdfreq_info *info = dev_get_lcdfreq(dev);

	do_time_slice(info->level);

	return sprintf(buf, "%llu %d (60Hz)\n%llu %d (40Hz)\n", 
		(unsigned long long)time_in_state[NORMAL], NORMAL,
		(unsigned long long)time_in_state[LIMIT], LIMIT);
}
Ejemplo n.º 4
0
static ssize_t time_in_state_show(struct device *dev,
		struct device_attribute *attr, char *buf)
{
	struct fb_info *fb = dev_get_drvdata(dev);
	struct s3cfb_window *win = fb->par;
	struct s3cfb_global *fbdev = get_fimd_global(win->id);
	struct lcdfreq_info *lcdfreq = fbdev->data;

	do_time_slice(lcdfreq->level);

	return sprintf(buf, "%llu %d (60Hz)\n%llu %d (40Hz)\n", 
		(unsigned long long)time_in_state[LEVEL_NORMAL], LEVEL_NORMAL,
		(unsigned long long)time_in_state[LEVEL_LIMIT], LEVEL_LIMIT);
}
Ejemplo n.º 5
0
static void lcdfreq_early_suspend(struct early_suspend *h)
{
	struct lcdfreq_info *lcdfreq =
		container_of(h, struct lcdfreq_info, early_suspend);

	dev_info(lcdfreq->dev, "%s\n", __func__);

	mutex_lock(&lcdfreq->lock);
	lcdfreq->enable = false;
	lcdfreq->level = LEVEL_NORMAL;
	atomic_set(&lcdfreq->usage, 0);
	do_time_slice(lcdfreq->level);
	mutex_unlock(&lcdfreq->lock);

	return;
}
Ejemplo n.º 6
0
static void lcdfreq_early_suspend(struct early_suspend *h)
{
	struct lcdfreq_info *lcdfreq =
		container_of(h, struct lcdfreq_info, early_suspend);

	dev_info(lcdfreq->dev, "%s\n", __func__);

	mutex_lock(&lcdfreq->lock);
	lcdfreq->enable = false;
	lcdfreq->level = NORMAL;
	atomic_set(&lcdfreq->usage, 0);
#ifdef CONFIG_LCD_FREQ_SWITCH_ACCOUNTING
	do_time_slice(lcdfreq->level);
#endif
	mutex_unlock(&lcdfreq->lock);

	return;
}
Ejemplo n.º 7
0
static int set_lcdfreq_div(struct device *dev, enum lcdfreq_level_idx level)
{
	struct fb_info *fb = dev_get_drvdata(dev);
	struct s3cfb_window *win = fb->par;
	struct s3cfb_global *fbdev = get_fimd_global(win->id);

	struct lcdfreq_info *lcdfreq = fbdev->data;

	u32 div, ret;

	mutex_lock(&lcdfreq->lock);

	if (unlikely(fbdev->system_state == POWER_OFF || !lcdfreq->enable)) {
		dev_err(dev, "%s reject. %d, %d\n", __func__, fbdev->system_state, lcdfreq->enable);
		ret = -EINVAL;
		goto exit;
	}

	div = lcdfreq->table[level].cmu_clkdiv;

	ret = set_div(fbdev, div);

	if (ret) {
		dev_err(dev, "fail to change lcd freq\n");
		goto exit;
	}

#ifdef CONFIG_LCD_FREQ_SWITCH_ACCOUNTING
  do_time_slice(lcdfreq->level);
#endif

	lcdfreq->level = level;

exit:
	mutex_unlock(&lcdfreq->lock);

	return ret;
}