struct mcam_camera *cam = vb2_get_drv_priv(vq);
        int minbufs = (cam->buffer_mode == B_DMA_contig) ? 3 : 2;
 
-       sizes[0] = cam->pix_format.sizeimage;
+       if (fmt && fmt->fmt.pix.sizeimage < cam->pix_format.sizeimage)
+               return -EINVAL;
+       sizes[0] = fmt ? fmt->fmt.pix.sizeimage : cam->pix_format.sizeimage;
        *num_planes = 1; /* Someday we have to support planar formats... */
        if (*nbufs < minbufs)
                *nbufs = minbufs;
         * Can't do anything if the device is not idle
         * Also can't if there are streaming buffers in place.
         */
-       if (cam->state != S_IDLE || cam->vb_queue.num_buffers > 0)
+       if (cam->state != S_IDLE || vb2_is_busy(&cam->vb_queue))
                return -EBUSY;
 
        f = mcam_find_format(fmt->fmt.pix.pixelformat);
        .vidioc_g_input         = mcam_vidioc_g_input,
        .vidioc_s_input         = mcam_vidioc_s_input,
        .vidioc_reqbufs         = vb2_ioctl_reqbufs,
+       .vidioc_create_bufs     = vb2_ioctl_create_bufs,
        .vidioc_querybuf        = vb2_ioctl_querybuf,
        .vidioc_qbuf            = vb2_ioctl_qbuf,
        .vidioc_dqbuf           = vb2_ioctl_dqbuf,