+ strcpy(v4l2_dev.name, "vdummy");
+ if((res = v4l2_device_register(0, &v4l2_dev)) != 0) {
+ return res;
+ }
+
+ mutex_init(&mutex);
+
+ vbops.queue_setup = queue_setup;
+ vbops.buf_prepare = buf_prepare;
+ vbops.buf_queue = buf_queue;
+ vbops.start_streaming = start_streaming;
+ vbops.stop_streaming = stop_streaming;
+ vbops.wait_prepare = vb2_ops_wait_prepare;
+ vbops.wait_finish = vb2_ops_wait_finish;
+
+ vbq.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+ vbq.io_modes = VB2_MMAP | VB2_READ;
+ vbq.buf_struct_size = sizeof *buflist;
+ vbq.ops = &vbops;
+ vbq.mem_ops = &vb2_vmalloc_memops;
+ vbq.timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
+ vbq.min_buffers_needed = 1;
+ vbq.lock = &mutex;
+ vbq.gfp_flags = GFP_KERNEL;
+
+ if((res = vb2_queue_init(&vbq)) != 0) {
+ printk(KERN_ALERT "vdummy: failed to initialize videobuf2 queue\n");
+ v4l2_device_unregister(&v4l2_dev);
+ return res;
+ }
+