diff --git a/drivers/staging/greybus/control.c b/drivers/staging/greybus/control.c index 13c68f3f01de..7a838068c1ad 100644 --- a/drivers/staging/greybus/control.c +++ b/drivers/staging/greybus/control.c @@ -177,6 +177,20 @@ int gb_control_timesync_disable(struct gb_control *control) NULL, 0); } +int gb_control_timesync_get_last_event(struct gb_control *control, + u64 *frame_time) +{ + struct gb_control_timesync_get_last_event_response response; + int ret; + + ret = gb_operation_sync(control->connection, + GB_CONTROL_TYPE_TIMESYNC_GET_LAST_EVENT, + NULL, 0, &response, sizeof(response)); + if (!ret) + *frame_time = le64_to_cpu(response.frame_time); + return ret; +} + int gb_control_timesync_authoritative(struct gb_control *control, u64 *frame_time, u8 count) { diff --git a/drivers/staging/greybus/control.h b/drivers/staging/greybus/control.h index 773cdde4dc44..02b583901029 100644 --- a/drivers/staging/greybus/control.h +++ b/drivers/staging/greybus/control.h @@ -43,6 +43,8 @@ int gb_control_get_manifest_operation(struct gb_interface *intf, void *manifest, int gb_control_timesync_enable(struct gb_control *control, u8 count, u64 frame_time, u32 strobe_delay, u32 refclk); int gb_control_timesync_disable(struct gb_control *control); +int gb_control_timesync_get_last_event(struct gb_control *control, + u64 *frame_time); int gb_control_timesync_authoritative(struct gb_control *control, u64 *frame_time, u8 count); diff --git a/drivers/staging/greybus/greybus_protocols.h b/drivers/staging/greybus/greybus_protocols.h index ca5eb3b580aa..40bd6c0a4a62 100644 --- a/drivers/staging/greybus/greybus_protocols.h +++ b/drivers/staging/greybus/greybus_protocols.h @@ -123,6 +123,7 @@ struct gb_protocol_version_response { #define GB_CONTROL_TYPE_TIMESYNC_AUTHORITATIVE 0x09 /* Unused 0x0a */ #define GB_CONTROL_TYPE_BUNDLE_VERSION 0x0b +#define GB_CONTROL_TYPE_TIMESYNC_GET_LAST_EVENT 0x0d #define GB_CONTROL_TYPE_MODE_SWITCH 0x0e struct gb_control_version_request { @@ -179,6 +180,11 @@ struct gb_control_timesync_authoritative_request { } __packed; /* timesync authoritative response has no payload */ +/* timesync get_last_event_request has no payload */ +struct gb_control_timesync_get_last_event_response { + __le64 frame_time; +} __packed; + /* APBridge protocol */ /* request APB1 log */