diff mbox

[v2] media/v4l2-ctrls: Always run s_ctrl on volatile ctrls

Message ID 1424175681-19787-1-git-send-email-ricardo.ribalda@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Ricardo Ribalda Delgado Feb. 17, 2015, 12:21 p.m. UTC
Volatile controls can change their value outside the v4l-ctrl framework.
We should ignore the cached written value of the ctrl when evaluating if
we should run s_ctrl.

Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
---

v2: Do volatile test, once you know ctrl is not NULL

 drivers/media/v4l2-core/v4l2-ctrls.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

Comments

Sakari Ailus Feb. 17, 2015, 12:47 p.m. UTC | #1
Hi Ricardo,

Thanks for the patch!

Ricardo Ribalda Delgado wrote:
> Volatile controls can change their value outside the v4l-ctrl framework.
> We should ignore the cached written value of the ctrl when evaluating if
> we should run s_ctrl.
> 
> Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>

Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Ricardo Ribalda Delgado Feb. 17, 2015, 2:43 p.m. UTC | #2
Hello Sakari

On Tue, Feb 17, 2015 at 1:47 PM, Sakari Ailus
<sakari.ailus@linux.intel.com> wrote:
> Hi Ricardo,
>
> Thanks for the patch!

Thank you

>
>
> Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>

Could you take a look to v3 of the patch

Thanks!
>
> --
> Sakari Ailus
> sakari.ailus@linux.intel.com
diff mbox

Patch

diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
index 45c5b47..f0f58dd 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls.c
@@ -1605,10 +1605,13 @@  static int cluster_changed(struct v4l2_ctrl *master)
 
 	for (i = 0; i < master->ncontrols; i++) {
 		struct v4l2_ctrl *ctrl = master->cluster[i];
-		bool ctrl_changed = false;
+		bool ctrl_changed;
 
 		if (ctrl == NULL)
 			continue;
+
+		ctrl_changed = ctrl->flags & V4L2_CTRL_FLAG_VOLATILE;
+
 		for (idx = 0; !ctrl_changed && idx < ctrl->elems; idx++)
 			ctrl_changed = !ctrl->type_ops->equal(ctrl, idx,
 				ctrl->p_cur, ctrl->p_new);