summaryrefslogtreecommitdiffstats
path: root/drivers/staging/greybus/interface.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/greybus/interface.c')
-rw-r--r--drivers/staging/greybus/interface.c55
1 files changed, 55 insertions, 0 deletions
diff --git a/drivers/staging/greybus/interface.c b/drivers/staging/greybus/interface.c
index 577d15fb5bd2..3eb8754961f1 100644
--- a/drivers/staging/greybus/interface.c
+++ b/drivers/staging/greybus/interface.c
@@ -865,6 +865,61 @@ void gb_interface_disable(struct gb_interface *intf)
intf->enabled = false;
}
+/*
+ * Enable TimeSync on an Interface control connection.
+ *
+ * Locking: Takes and releases the interface mutex.
+ */
+int gb_interface_timesync_enable(struct gb_interface *intf, u8 count,
+ u64 frame_time, u32 strobe_delay, u32 refclk)
+{
+ int ret = -ENODEV;
+
+ mutex_lock(&intf->mutex);
+ if (intf->enabled) {
+ ret = gb_control_timesync_enable(intf->control, count,
+ frame_time, strobe_delay,
+ refclk);
+ }
+ mutex_unlock(&intf->mutex);
+ return ret;
+}
+
+/*
+ * Disable TimeSync on an Interface control connection.
+ *
+ * Locking: Takes and releases the interface mutex.
+ */
+int gb_interface_timesync_disable(struct gb_interface *intf)
+{
+ int ret = -ENODEV;
+
+ mutex_lock(&intf->mutex);
+ if (intf->enabled)
+ ret = gb_control_timesync_disable(intf->control);
+ mutex_unlock(&intf->mutex);
+ return ret;
+}
+
+/*
+ * Transmit the Authoritative FrameTime via an Interface control connection.
+ *
+ * Locking: Takes and releases the interface mutex.
+ */
+int gb_interface_timesync_authoritative(struct gb_interface *intf,
+ u64 *frame_time)
+{
+ int ret = -ENODEV;
+
+ mutex_lock(&intf->mutex);
+ if (intf->enabled) {
+ ret = gb_control_timesync_authoritative(intf->control,
+ frame_time);
+ }
+ mutex_unlock(&intf->mutex);
+ return ret;
+}
+
/* Register an interface. */
int gb_interface_add(struct gb_interface *intf)
{