int s3cfb_close_fifo(int id, int (*do_priv) (void *), void *param) { struct s3cfb_global *fbdev = get_fimd_global(id); struct s3cfb_window *win = fbdev->fb[id]->par; win->path = DATA_PATH_DMA; dev_dbg(fbdev->dev, "[fb%d] close fifo\n", win->id); if (do_priv) { s3cfb_display_off(fbdev); if (do_priv(param)) { dev_err(fbdev->dev, "failed to run for" "private fifo close\n"); s3cfb_enable_window(fbdev, id); s3cfb_display_on(fbdev); return -EFAULT; } s3cfb_disable_window(fbdev, id); s3cfb_disable_localpath(fbdev, id); s3cfb_display_on(fbdev); } else { s3cfb_disable_window(fbdev, id); s3cfb_disable_localpath(fbdev, id); } return 0; }
/* new function to close fifo */ int s3cfb_close_fifo(int id, int (*do_priv)(void *), void *param, int sleep) { struct s3cfb_window *win = ctrl->fb[id]->par; dev_dbg(ctrl->dev, "[fb%d] close fifo\n", win->id); if (sleep) win->path = DATA_PATH_FIFO; else win->path = DATA_PATH_DMA; s3cfb_set_vsync_interrupt(ctrl, 1); s3cfb_wait_for_vsync(); s3cfb_set_vsync_interrupt(ctrl, 0); s3cfb_display_off(ctrl); s3cfb_check_line_count(ctrl); s3cfb_disable_window(id); if (do_priv) { if (do_priv(param)) { dev_err(ctrl->dev, "failed to run for private fifo close\n"); s3cfb_enable_window(id); s3cfb_display_on(ctrl); return -EFAULT; } } s3cfb_display_on(ctrl); return 0; }
int s3cfb_open_fifo(int id, int ch, int (*do_priv) (void *), void *param) { struct s3cfb_global *fbdev = get_fimd_global(id); struct s3cfb_window *win = fbdev->fb[id]->par; dev_dbg(fbdev->dev, "[fb%d] open fifo\n", win->id); if (win->path == DATA_PATH_DMA) { dev_err(fbdev->dev, "WIN%d is busy.\n", id); return -EFAULT; } win->local_channel = ch; if (do_priv) { if (do_priv(param)) { dev_err(fbdev->dev, "failed to run for " "private fifo open\n"); s3cfb_enable_window(fbdev, id); return -EFAULT; } } s3cfb_set_window_control(fbdev, id); s3cfb_enable_window(fbdev, id); s3cfb_enable_localpath(fbdev, id); return 0; }
/* new function to open fifo */ int s3cfb_open_fifo(int id, int ch, int (*do_priv)(void *), void *param) { struct s3cfb_window *win = ctrl->fb[id]->par; dev_dbg(ctrl->dev, "[fb%d] open fifo\n", win->id); win->path = DATA_PATH_FIFO; win->local_channel = ch; s3cfb_set_vsync_interrupt(ctrl, 1); s3cfb_wait_for_vsync(); s3cfb_set_vsync_interrupt(ctrl, 0); if (do_priv) { if (do_priv(param)) { dev_err(ctrl->dev, "failed to run for private fifo open\n"); s3cfb_enable_window(id); return -EFAULT; } } s3cfb_set_window_control(ctrl, id); s3cfb_enable_window(id); return 0; }