Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a99f3157 authored by Ricardo Ribalda's avatar Ricardo Ribalda Committed by Greg Kroah-Hartman
Browse files

media: uvcvideo: Return the number of processed controls



commit ba4fafb02ad6a4eb2e00f861893b5db42ba54369 upstream.

If we let know our callers that we have not done anything, they will be
able to optimize their decisions.

Cc: stable@kernel.org
Fixes: b4012002 ("[media] uvcvideo: Add support for control events")
Reviewed-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: default avatarRicardo Ribalda <ribalda@chromium.org>
Message-ID: <20250224-uvc-data-backup-v2-1-de993ed9823b@chromium.org>
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarHans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: default avatarRicardo Ribalda <ribalda@chromium.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 82191a21
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -1560,11 +1560,16 @@ int uvc_ctrl_begin(struct uvc_video_chain *chain)
	return mutex_lock_interruptible(&chain->ctrl_mutex) ? -ERESTARTSYS : 0;
}

/*
 * Returns the number of uvc controls that have been correctly set, or a
 * negative number if there has been an error.
 */
static int uvc_ctrl_commit_entity(struct uvc_device *dev,
				  struct uvc_fh *handle,
				  struct uvc_entity *entity,
				  int rollback)
{
	unsigned int processed_ctrls = 0;
	struct uvc_control *ctrl;
	unsigned int i;
	int ret;
@@ -1598,6 +1603,9 @@ static int uvc_ctrl_commit_entity(struct uvc_device *dev,
		else
			ret = 0;

		if (!ret)
			processed_ctrls++;

		if (rollback || ret < 0)
			memcpy(uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT),
			       uvc_ctrl_data(ctrl, UVC_CTRL_DATA_BACKUP),
@@ -1613,7 +1621,7 @@ static int uvc_ctrl_commit_entity(struct uvc_device *dev,
			uvc_ctrl_set_handle(handle, ctrl, handle);
	}

	return 0;
	return processed_ctrls;
}

int __uvc_ctrl_commit(struct uvc_fh *handle, int rollback,
@@ -1634,6 +1642,7 @@ int __uvc_ctrl_commit(struct uvc_fh *handle, int rollback,

	if (!rollback)
		uvc_ctrl_send_events(handle, xctrls, xctrls_count);
	ret = 0;
done:
	mutex_unlock(&chain->ctrl_mutex);
	return ret;