[media] v4l2-events/fh: merge v4l2_events into v4l2_fh
[pandora-kernel.git] / drivers / media / video / v4l2-ctrls.c
index 5f31666..a532561 100644 (file)
@@ -1013,6 +1013,7 @@ static int handler_new_ref(struct v4l2_ctrl_handler *hdl,
           insertion is an O(1) operation. */
        if (list_empty(&hdl->ctrl_refs) || id > node2id(hdl->ctrl_refs.prev)) {
                list_add_tail(&new_ref->node, &hdl->ctrl_refs);
+               hdl->nr_of_refs++;
                goto insert_in_hash;
        }
 
@@ -1263,6 +1264,7 @@ void v4l2_ctrl_auto_cluster(unsigned ncontrols, struct v4l2_ctrl **controls,
 
        v4l2_ctrl_cluster(ncontrols, controls);
        WARN_ON(ncontrols <= 1);
+       WARN_ON(manual_val < master->minimum || manual_val > master->maximum);
        master->is_auto = true;
        master->manual_mode_value = manual_val;
        master->flags |= V4L2_CTRL_FLAG_UPDATE;
@@ -2061,3 +2063,20 @@ void v4l2_ctrl_del_fh(struct v4l2_ctrl *ctrl, struct v4l2_fh *fh)
        v4l2_ctrl_unlock(ctrl);
 }
 EXPORT_SYMBOL(v4l2_ctrl_del_fh);
+
+int v4l2_ctrl_subscribe_fh(struct v4l2_fh *fh,
+                       struct v4l2_event_subscription *sub, unsigned n)
+{
+       struct v4l2_ctrl_handler *hdl = fh->ctrl_handler;
+       int ret = 0;
+
+       if (!ret) {
+               if (hdl->nr_of_refs * 2 > n)
+                       n = hdl->nr_of_refs * 2;
+               ret = v4l2_event_alloc(fh, n);
+       }
+       if (!ret)
+               ret = v4l2_event_subscribe(fh, sub);
+       return ret;
+}
+EXPORT_SYMBOL(v4l2_ctrl_subscribe_fh);