int s3cfb_disable_window(struct s3cfb_global *fbdev, int id)
{
	struct s3cfb_window *win = fbdev->fb[id]->par;
#ifdef FEATURE_BUSFREQ_LOCK
	int enabled_win = 0;
#endif
#if defined(CONFIG_CPU_EXYNOS4212) || defined(CONFIG_CPU_EXYNOS4412)
#ifdef CONFIG_BUSFREQ_OPP
	int win_status;
#endif
#endif

	if (win->enabled)
		atomic_dec(&fbdev->enabled_win);

	if (fbdev->regs != 0 && s3cfb_window_off(fbdev, id)) {
		win->enabled = 1;
		return -EFAULT;
	} else {
#ifdef FEATURE_BUSFREQ_LOCK
		enabled_win = atomic_read(&fbdev->enabled_win);
		if (enabled_win < 2)
			s3cfb_busfreq_lock(fbdev, 0);
#endif
		win->enabled = 0;
#if defined(CONFIG_CPU_EXYNOS4212) || defined(CONFIG_CPU_EXYNOS4412)
#ifdef CONFIG_BUSFREQ_OPP
		win_status = window_on_off_status(fbdev);
		if ((win_status & ~(1 << CONFIG_FB_S5P_DEFAULT_WINDOW)) == 0)
			dev_unlock(fbdev->bus_dev, fbdev->dev);
#endif
#endif
		return 0;
	}
}
Example #2
0
int s3cfb_disable_window(struct s3cfb_global *fbdev, int id)
{
	struct s3cfb_window *win = fbdev->fb[id]->par;

	if (win->enabled)
		atomic_dec(&fbdev->enabled_win);

	if (s3cfb_window_off(fbdev, id)) {
		win->enabled = 1;
		return -EFAULT;
	} else {
		win->enabled = 0;

#ifdef CONFIG_BUSFREQ_OPP
		if (soc_is_exynos4212() || soc_is_exynos4412()) {
			int win_status = 0, i;
			for (i = 0; i < 5; i++) {		/* exynos4x12 has 5 windows */
				win = fbdev->fb[i]->par;
				if (win->enabled)
					win_status |= (1 << i);
			}
			win_status &= ~(1 << CONFIG_FB_S5P_DEFAULT_WINDOW);
			if (0 == win_status)	//check if all window be turned off except default
				dev_unlock(fbdev->bus_dev, fbdev->dev);
		}
#endif
		return 0;
	}
}
Example #3
0
static void s3cfb_set_window(struct s3cfb_global *ctrl, int id, int enable)
{
	struct s3cfb_window *win = ctrl->fb[id]->par;

	if (enable) {
		s3cfb_window_on(ctrl, id);
		win->enabled = 1;
	} else {
		s3cfb_window_off(ctrl, id);
		win->enabled = 0;
	}
}
Example #4
0
static int s3cfb_disable_window(int id)
{
	struct s3cfb_window *win = ctrl->fb[id]->par;

	if (s3cfb_window_off(ctrl, id)) {
		win->enabled = 1;
		return -EFAULT;
	} else {
		win->enabled = 0;
		return 0;
	}
}
Example #5
0
int s3cfb_disable_window(struct s3cfb_global *fbdev, int id)
{
	struct s3cfb_window *win = fbdev->fb[id]->par;

	if (win->enabled)
		atomic_dec(&fbdev->enabled_win);

	if (s3cfb_window_off(fbdev, id)) {
		win->enabled = 1;
		return -EFAULT;
	} else {
		win->enabled = 0;
		return 0;
	}
}