Commit 5a573925 authored by Sakari Ailus's avatar Sakari Ailus Committed by Mauro Carvalho Chehab

[media] v4l: ctrls: Provide an unlocked variant of v4l2_ctrl_modify_range()

Drivers may use the v4l2_ctrl_modify_range() internally as part of other
operations that need to be both serialised using a driver's lock which can
also be used to serialise access to the control handler. Provide an unlocked
version of the function, __v4l2_ctrl_modify_range() which then may be used
by drivers for the purpose.
Signed-off-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
parent 605b3840
...@@ -3213,12 +3213,14 @@ void v4l2_ctrl_notify(struct v4l2_ctrl *ctrl, v4l2_ctrl_notify_fnc notify, void ...@@ -3213,12 +3213,14 @@ void v4l2_ctrl_notify(struct v4l2_ctrl *ctrl, v4l2_ctrl_notify_fnc notify, void
} }
EXPORT_SYMBOL(v4l2_ctrl_notify); EXPORT_SYMBOL(v4l2_ctrl_notify);
int v4l2_ctrl_modify_range(struct v4l2_ctrl *ctrl, int __v4l2_ctrl_modify_range(struct v4l2_ctrl *ctrl,
s64 min, s64 max, u64 step, s64 def) s64 min, s64 max, u64 step, s64 def)
{ {
int ret; int ret;
struct v4l2_ext_control c; struct v4l2_ext_control c;
lockdep_assert_held(ctrl->handler->lock);
switch (ctrl->type) { switch (ctrl->type) {
case V4L2_CTRL_TYPE_INTEGER: case V4L2_CTRL_TYPE_INTEGER:
case V4L2_CTRL_TYPE_INTEGER64: case V4L2_CTRL_TYPE_INTEGER64:
...@@ -3237,7 +3239,6 @@ int v4l2_ctrl_modify_range(struct v4l2_ctrl *ctrl, ...@@ -3237,7 +3239,6 @@ int v4l2_ctrl_modify_range(struct v4l2_ctrl *ctrl,
default: default:
return -EINVAL; return -EINVAL;
} }
v4l2_ctrl_lock(ctrl);
ctrl->minimum = min; ctrl->minimum = min;
ctrl->maximum = max; ctrl->maximum = max;
ctrl->step = step; ctrl->step = step;
...@@ -3249,10 +3250,9 @@ int v4l2_ctrl_modify_range(struct v4l2_ctrl *ctrl, ...@@ -3249,10 +3250,9 @@ int v4l2_ctrl_modify_range(struct v4l2_ctrl *ctrl,
ret = set_ctrl(NULL, ctrl, &c, V4L2_EVENT_CTRL_CH_RANGE); ret = set_ctrl(NULL, ctrl, &c, V4L2_EVENT_CTRL_CH_RANGE);
else else
send_event(NULL, ctrl, V4L2_EVENT_CTRL_CH_RANGE); send_event(NULL, ctrl, V4L2_EVENT_CTRL_CH_RANGE);
v4l2_ctrl_unlock(ctrl);
return ret; return ret;
} }
EXPORT_SYMBOL(v4l2_ctrl_modify_range); EXPORT_SYMBOL(__v4l2_ctrl_modify_range);
static int v4l2_ctrl_add_event(struct v4l2_subscribed_event *sev, unsigned elems) static int v4l2_ctrl_add_event(struct v4l2_subscribed_event *sev, unsigned elems)
{ {
......
...@@ -620,6 +620,11 @@ void v4l2_ctrl_activate(struct v4l2_ctrl *ctrl, bool active); ...@@ -620,6 +620,11 @@ void v4l2_ctrl_activate(struct v4l2_ctrl *ctrl, bool active);
*/ */
void v4l2_ctrl_grab(struct v4l2_ctrl *ctrl, bool grabbed); void v4l2_ctrl_grab(struct v4l2_ctrl *ctrl, bool grabbed);
/** __v4l2_ctrl_modify_range() - Unlocked variant of v4l2_ctrl_modify_range() */
int __v4l2_ctrl_modify_range(struct v4l2_ctrl *ctrl,
s64 min, s64 max, u64 step, s64 def);
/** v4l2_ctrl_modify_range() - Update the range of a control. /** v4l2_ctrl_modify_range() - Update the range of a control.
* @ctrl: The control to update. * @ctrl: The control to update.
* @min: The control's minimum value. * @min: The control's minimum value.
...@@ -637,8 +642,17 @@ void v4l2_ctrl_grab(struct v4l2_ctrl *ctrl, bool grabbed); ...@@ -637,8 +642,17 @@ void v4l2_ctrl_grab(struct v4l2_ctrl *ctrl, bool grabbed);
* This function assumes that the control handler is not locked and will * This function assumes that the control handler is not locked and will
* take the lock itself. * take the lock itself.
*/ */
int v4l2_ctrl_modify_range(struct v4l2_ctrl *ctrl, static inline int v4l2_ctrl_modify_range(struct v4l2_ctrl *ctrl,
s64 min, s64 max, u64 step, s64 def); s64 min, s64 max, u64 step, s64 def)
{
int rval;
v4l2_ctrl_lock(ctrl);
rval = __v4l2_ctrl_modify_range(ctrl, min, max, step, def);
v4l2_ctrl_unlock(ctrl);
return rval;
}
/** v4l2_ctrl_notify() - Function to set a notify callback for a control. /** v4l2_ctrl_notify() - Function to set a notify callback for a control.
* @ctrl: The control. * @ctrl: The control.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment