obj = media_request_object_find(req, &req_ops, hdl);
        if (obj)
                return obj;
+       /*
+        * If there are no controls in this completed request,
+        * then that can only happen if:
+        *
+        * 1) no controls were present in the queued request, and
+        * 2) v4l2_ctrl_request_complete() could not allocate a
+        *    control handler object to store the completed state in.
+        *
+        * So return ENOMEM to indicate that there was an out-of-memory
+        * error.
+        */
        if (!set)
-               return ERR_PTR(-ENOENT);
+               return ERR_PTR(-ENOMEM);
 
        new_hdl = kzalloc(sizeof(*new_hdl), GFP_KERNEL);
        if (!new_hdl)
        if (!ret)
                ret = v4l2_ctrl_request_bind(req, new_hdl, hdl);
        if (ret) {
+               v4l2_ctrl_handler_free(new_hdl);
                kfree(new_hdl);
-
                return ERR_PTR(ret);
        }
 
         * wants to leave the controls unchanged.
         */
        obj = media_request_object_find(req, &req_ops, main_hdl);
-       if (!obj)
-               return;
+       if (!obj) {
+               int ret;
+
+               /* Create a new request so the driver can return controls */
+               hdl = kzalloc(sizeof(*hdl), GFP_KERNEL);
+               if (!hdl)
+                       return;
+
+               ret = v4l2_ctrl_handler_init(hdl, (main_hdl->nr_of_buckets - 1) * 8);
+               if (!ret)
+                       ret = v4l2_ctrl_request_bind(req, hdl, main_hdl);
+               if (ret) {
+                       v4l2_ctrl_handler_free(hdl);
+                       kfree(hdl);
+                       return;
+               }
+               hdl->request_is_queued = true;
+               obj = media_request_object_find(req, &req_ops, main_hdl);
+       }
        hdl = container_of(obj, struct v4l2_ctrl_handler, req_obj);
 
        list_for_each_entry(ref, &hdl->ctrl_refs, node) {