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

Commit 3c6ef89f authored by Sumukh Hallymysore Ravindra's avatar Sumukh Hallymysore Ravindra
Browse files

msm: synx: provide function to enable external signaling



Provide a function to allow the external clients to enable
and/or set-up the external synchronization on the object
before signaling.
This function is optional, and is invoked before calling the
external signal functionality.

Set up enable signal functionality for the camera sync driver.

Change-Id: Ib01adebeae7bd82b59ba62d168d966449fcc5e6f
Signed-off-by: default avatarSumukh Hallymysore Ravindra <shallymy@codeaurora.org>
parent 0006cb4a
Loading
Loading
Loading
Loading
+19 −4
Original line number Diff line number Diff line
@@ -217,7 +217,7 @@ int synx_deregister_callback(s32 synx_obj,

int synx_signal(s32 synx_obj, u32 status)
{
	int rc;
	int rc, ret;
	u32 i = 0;
	u32 idx = 0;
	u32 type;
@@ -321,11 +321,25 @@ int synx_signal(s32 synx_obj, u32 status)
			 * we are already signaled, so don't want to
			 * recursively be signaled
			 */
			bind_ops->deregister_callback(synx_external_callback,
				data, sync_id);
			ret = bind_ops->deregister_callback(
					synx_external_callback, data, sync_id);
			if (ret < 0)
				pr_err("de-registration fail on sync: %d, err: %d\n",
					sync_id, ret);
			pr_debug("signaling external sync: %d, status: %u\n",
				sync_id, status);
			bind_ops->signal(sync_id, status);
			/* optional function to enable external signaling */
			if (bind_ops->enable_signaling)
				ret = bind_ops->enable_signaling(sync_id);
				if (ret < 0) {
					pr_err("enable signaling fail on sync: %d, err: %d\n",
						sync_id, ret);
					continue;
				}
			ret = bind_ops->signal(sync_id, status);
			if (ret < 0)
				pr_err("signaling fail on sync: %d, err: %d\n",
					sync_id, ret);
		} else {
			pr_warn("unimplemented external type: %u\n", type);
		}
@@ -1373,6 +1387,7 @@ static void synx_bind_ops_csl_type(struct bind_operations *vtbl)

	vtbl->register_callback = cam_sync_register_callback;
	vtbl->deregister_callback = cam_sync_deregister_callback;
	vtbl->enable_signaling = cam_sync_get_obj_ref;
	vtbl->signal = cam_sync_signal;

	pr_debug("csl bind functionality set\n");
+3 −0
Original line number Diff line number Diff line
@@ -129,6 +129,8 @@ struct synx_table_row {
 *
 * @register_callback   : Function to register with external sync object
 * @deregister_callback : Function to deregister with external sync object
 * @enable_signaling    : Function to enable the signaling on the external
 *                        sync object (optional)
 * @signal              : Function to signal the external sync object
 */
struct bind_operations {
@@ -136,6 +138,7 @@ struct bind_operations {
		void *userdata, s32 sync_obj);
	int (*deregister_callback)(synx_callback cb_func,
		void *userdata, s32 sync_obj);
	int (*enable_signaling)(s32 sync_obj);
	int (*signal)(s32 sync_obj, u32 status);
};