struct v4l2_ext_control c;
 
        /* It's a driver bug if this happens. */
-       WARN_ON(!ctrl->is_int);
+       if (WARN_ON(!ctrl->is_int))
+               return 0;
        c.value = 0;
        get_ctrl(ctrl, &c);
        return c.value;
        struct v4l2_ext_control c;
 
        /* It's a driver bug if this happens. */
-       WARN_ON(ctrl->is_ptr || ctrl->type != V4L2_CTRL_TYPE_INTEGER64);
+       if (WARN_ON(ctrl->is_ptr || ctrl->type != V4L2_CTRL_TYPE_INTEGER64))
+               return 0;
        c.value64 = 0;
        get_ctrl(ctrl, &c);
        return c.value64;
        lockdep_assert_held(ctrl->handler->lock);
 
        /* It's a driver bug if this happens. */
-       WARN_ON(!ctrl->is_int);
+       if (WARN_ON(!ctrl->is_int))
+               return -EINVAL;
        ctrl->val = val;
        return set_ctrl(NULL, ctrl, 0);
 }
        lockdep_assert_held(ctrl->handler->lock);
 
        /* It's a driver bug if this happens. */
-       WARN_ON(ctrl->is_ptr || ctrl->type != V4L2_CTRL_TYPE_INTEGER64);
+       if (WARN_ON(ctrl->is_ptr || ctrl->type != V4L2_CTRL_TYPE_INTEGER64))
+               return -EINVAL;
        *ctrl->p_new.p_s64 = val;
        return set_ctrl(NULL, ctrl, 0);
 }
        lockdep_assert_held(ctrl->handler->lock);
 
        /* It's a driver bug if this happens. */
-       WARN_ON(ctrl->type != V4L2_CTRL_TYPE_STRING);
+       if (WARN_ON(ctrl->type != V4L2_CTRL_TYPE_STRING))
+               return -EINVAL;
        strscpy(ctrl->p_new.p_char, s, ctrl->maximum + 1);
        return set_ctrl(NULL, ctrl, 0);
 }
        lockdep_assert_held(ctrl->handler->lock);
 
        /* It's a driver bug if this happens. */
-       WARN_ON(ctrl->type != V4L2_CTRL_TYPE_AREA);
+       if (WARN_ON(ctrl->type != V4L2_CTRL_TYPE_AREA))
+               return -EINVAL;
        *ctrl->p_new.p_area = *area;
        return set_ctrl(NULL, ctrl, 0);
 }