diff options
author | Greg Hackmann <ghackmann@google.com> | 2012-05-14 16:21:44 -0700 |
---|---|---|
committer | Greg Hackmann <ghackmann@google.com> | 2012-05-15 14:06:11 -0700 |
commit | c07d65d9fe5e0051156df941afddefcf8d7e8daf (patch) | |
tree | 8d6c9b5b5ba0fb0c038bbbdbbe92166f2197a4fe | |
parent | a447a75f417f2e9127afe0d21cdb8770b9b058f0 (diff) | |
download | samsung-c07d65d9fe5e0051156df941afddefcf8d7e8daf.tar.gz |
s3cfb: fix S3CFB_SET_VSYNC_INT ioctl
S3CFB_SET_VSYNC_INT previously moved the interrupt to back porch instead
of disabling it.
S3CFB_SET_VSYNC_ACTIVE is now redundant. The vsync_active flag is also
redundant, and removing it fixes some heavily-delayed vsync events.
Change-Id: I37d6bb357e0ccb5faa4618ed10573e40ca1a3c54
Signed-off-by: Greg Hackmann <ghackmann@google.com>
-rwxr-xr-x | drivers/video/samsung/s3cfb.c | 13 | ||||
-rw-r--r-- | drivers/video/samsung/s3cfb.h | 2 | ||||
-rw-r--r-- | drivers/video/samsung/s3cfb_fimd6x.c | 11 |
3 files changed, 7 insertions, 19 deletions
diff --git a/drivers/video/samsung/s3cfb.c b/drivers/video/samsung/s3cfb.c index 77e8420ec6d..fbacba99233 100755 --- a/drivers/video/samsung/s3cfb.c +++ b/drivers/video/samsung/s3cfb.c @@ -680,16 +680,6 @@ static int s3cfb_ioctl(struct fb_info *fb, unsigned int cmd, unsigned long arg) } break; - case S3CFB_SET_VSYNC_ACTIVE: - if (get_user(p.vsync, (int __user *)arg)) - ret = -EFAULT; - - fbdev->vsync_active = p.vsync; - wmb(); - if (p.vsync) - wake_up(&fbdev->vsync_wq); - break; - case S3CFB_GET_CURR_FB_INFO: next_fb_info.phy_start_addr = fix->smem_start; next_fb_info.xres = var->xres; @@ -937,8 +927,7 @@ static int s3cfb_wait_for_vsync_thread(void *data) ktime_t prev_timestamp = fbdev->vsync_timestamp; int ret = wait_event_interruptible_timeout(fbdev->vsync_wq, s3cfb_vsync_timestamp_changed(fbdev, - prev_timestamp) && - fbdev->vsync_active, + prev_timestamp), msecs_to_jiffies(100)); if (ret > 0) { char *envp[2]; diff --git a/drivers/video/samsung/s3cfb.h b/drivers/video/samsung/s3cfb.h index d8297dea676..21e581dff40 100644 --- a/drivers/video/samsung/s3cfb.h +++ b/drivers/video/samsung/s3cfb.h @@ -234,7 +234,6 @@ struct s3cfb_global { wait_queue_head_t vsync_wq; ktime_t vsync_timestamp; - bool vsync_active; int vsync_state; struct task_struct *vsync_thread; @@ -308,7 +307,6 @@ struct s3cfb_next_info { struct s3cfb_user_chroma) #define S3CFB_SET_VSYNC_INT _IOW('F', 206, u32) #define S3CFB_GET_VSYNC_INT_STATUS _IOR('F', 207, u32) -#define S3CFB_SET_VSYNC_ACTIVE _IOW('F', 208, u32) #define S3CFB_GET_LCD_WIDTH _IOR('F', 302, int) #define S3CFB_GET_LCD_HEIGHT _IOR('F', 303, int) #define S3CFB_SET_WRITEBACK _IOW('F', 304, u32) diff --git a/drivers/video/samsung/s3cfb_fimd6x.c b/drivers/video/samsung/s3cfb_fimd6x.c index b5b73a1b6b3..bfe85afbdd4 100644 --- a/drivers/video/samsung/s3cfb_fimd6x.c +++ b/drivers/video/samsung/s3cfb_fimd6x.c @@ -308,14 +308,15 @@ int s3cfb_set_vsync_interrupt(struct s3cfb_global *ctrl, int enable) u32 cfg = 0; cfg = readl(ctrl->regs + S3C_VIDINTCON0); - cfg &= ~S3C_VIDINTCON0_FRAMESEL0_MASK; if (enable) { dev_dbg(ctrl->dev, "vsync interrupt is on\n"); - cfg |= S3C_VIDINTCON0_FRAMESEL0_VSYNC; + cfg &= ~S3C_VIDINTCON0_FRAMESEL0_MASK; + cfg |= S3C_VIDINTCON0_INTFRMEN_ENABLE | + S3C_VIDINTCON0_FRAMESEL0_VSYNC; } else { dev_dbg(ctrl->dev, "vsync interrupt is off\n"); - cfg &= ~S3C_VIDINTCON0_FRAMESEL0_VSYNC; + cfg &= ~S3C_VIDINTCON0_INTFRMEN_ENABLE; } writel(cfg, ctrl->regs + S3C_VIDINTCON0); @@ -328,9 +329,9 @@ int s3cfb_get_vsync_interrupt(struct s3cfb_global *ctrl) u32 cfg = 0; cfg = readl(ctrl->regs + S3C_VIDINTCON0); - cfg &= S3C_VIDINTCON0_FRAMESEL0_VSYNC; + cfg &= S3C_VIDINTCON0_INTFRMEN_ENABLE; - if (cfg & S3C_VIDINTCON0_FRAMESEL0_VSYNC) { + if (cfg & S3C_VIDINTCON0_INTFRMEN_ENABLE) { dev_dbg(ctrl->dev, "vsync interrupt is on\n"); return 1; } else { |