static int mxc_elcdif_fb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg) { int ret = -EINVAL; switch (cmd) { case MXCFB_WAIT_FOR_VSYNC: { struct mxc_elcdif_fb_data *data = (struct mxc_elcdif_fb_data *)info->par; long long timestamp; ret = mxc_elcdif_fb_wait_for_vsync(info); timestamp = ktime_to_ns(data->vsync_nf_timestamp); if ((ret == 0) && copy_to_user((void *)arg, ×tamp, sizeof(timestamp))) { ret = -EFAULT; break; } } break; case MXCFB_GET_FB_BLANK: { struct mxc_elcdif_fb_data *data = (struct mxc_elcdif_fb_data *)info->par; if (put_user(data->cur_blank, (__u32 __user *)arg)) return -EFAULT; break; } default: break; } return ret; }
static int mxc_elcdif_fb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg) { int ret = -EINVAL; switch (cmd) { case MXCFB_WAIT_FOR_VSYNC: ret = mxc_elcdif_fb_wait_for_vsync(info); break; case MXCFB_GET_FB_BLANK: { struct mxc_elcdif_fb_data *data = (struct mxc_elcdif_fb_data *)info->par; if (put_user(data->cur_blank, (__u32 __user *)arg)) return -EFAULT; break; } default: break; } return ret; }