The ``V4L2_BUF_FLAG_REQUEST_FD`` flag was set but the device does not
     support requests for the given buffer type.
 
+EBADR
+    The ``V4L2_BUF_FLAG_REQUEST_FD`` flag was not set but the device requires
+    that the buffer is part of a request.
+
 EBUSY
     The first buffer was queued via a request, but the application now tries
     to queue it directly, or vice versa (it is not permitted to mix the two
 
 
        vb = q->bufs[index];
 
+       if (!req && vb->state != VB2_BUF_STATE_IN_REQUEST &&
+           q->requires_requests) {
+               dprintk(1, "qbuf requires a request\n");
+               return -EBADR;
+       }
+
        if ((req && q->uses_qbuf) ||
            (!req && vb->state != VB2_BUF_STATE_IN_REQUEST &&
             q->uses_requests)) {
            WARN_ON(!q->ops->buf_queue))
                return -EINVAL;
 
+       if (WARN_ON(q->requires_requests && !q->supports_requests))
+               return -EINVAL;
+
        INIT_LIST_HEAD(&q->queued_list);
        INIT_LIST_HEAD(&q->done_list);
        spin_lock_init(&q->done_lock);
 
                return 0;
 
        if (!(b->flags & V4L2_BUF_FLAG_REQUEST_FD)) {
+               if (q->requires_requests) {
+                       dprintk(1, "%s: queue requires requests\n", opname);
+                       return -EBADR;
+               }
                if (q->uses_requests) {
                        dprintk(1, "%s: queue uses requests\n", opname);
                        return -EBUSY;
 
  *              has not been called. This is a vb1 idiom that has been adopted
  *              also by vb2.
  * @supports_requests: this queue supports the Request API.
+ * @requires_requests: this queue requires the Request API. If this is set to 1,
+ *             then supports_requests must be set to 1 as well.
  * @uses_qbuf: qbuf was used directly for this queue. Set to 1 the first
  *             time this is called. Set to 0 when the queue is canceled.
  *             If this is 1, then you cannot queue buffers from a request.
        unsigned                        allow_zero_bytesused:1;
        unsigned                   quirk_poll_must_check_waiting_for_buffers:1;
        unsigned                        supports_requests:1;
+       unsigned                        requires_requests:1;
        unsigned                        uses_qbuf:1;
        unsigned                        uses_requests:1;