You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by pk...@apache.org on 2023/11/20 12:28:19 UTC

(nuttx) 03/03: drivers/rtc/rpmsg: Move clock_synchronize rpmsg_rtc_server_settime

This is an automated email from the ASF dual-hosted git repository.

pkarashchenko pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit 11b3adf17fd4e252d880bd9f4dcab54e42e990fe
Author: Xiang Xiao <xi...@xiaomi.com>
AuthorDate: Sun Nov 19 23:39:47 2023 +0800

    drivers/rtc/rpmsg: Move clock_synchronize rpmsg_rtc_server_settime
    
    Signed-off-by: Xiang Xiao <xi...@xiaomi.com>
---
 drivers/timers/rpmsg_rtc.c | 24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/drivers/timers/rpmsg_rtc.c b/drivers/timers/rpmsg_rtc.c
index d1277172c0..0e94e43a89 100644
--- a/drivers/timers/rpmsg_rtc.c
+++ b/drivers/timers/rpmsg_rtc.c
@@ -472,10 +472,22 @@ static int rpmsg_rtc_server_settime(FAR struct rtc_lowerhalf_s *lower,
   ret = server->lower->ops->settime(server->lower, rtctime);
   if (ret >= 0)
     {
-      nxmutex_lock(&server->lock);
       msg.sec  = timegm((FAR struct tm *)rtctime);
       msg.nsec = rtctime->tm_nsec;
       msg.header.command = RPMSG_RTC_SYNC;
+
+      if (ret == 0)
+        {
+          struct timespec tp;
+
+          tp.tv_sec  = msg.sec;
+          tp.tv_nsec = msg.nsec;
+          clock_synchronize(&tp);
+
+          ret = 1; /* Request the upper half skip clock synchronize */
+        }
+
+      nxmutex_lock(&server->lock);
       list_for_every(&server->list, node)
         {
           client = (FAR struct rpmsg_rtc_client_s *)node;
@@ -649,16 +661,6 @@ static int rpmsg_rtc_server_ept_cb(FAR struct rpmsg_endpoint *ept,
         rtctime.tm_nsec = msg->nsec;
 
         header->result = rpmsg_rtc_server_settime(priv, &rtctime);
-        if (header->result >= 0)
-          {
-            struct timespec tp;
-
-            tp.tv_sec  = msg->sec;
-            tp.tv_nsec = msg->nsec;
-
-            clock_synchronize(&tp);
-          }
-
         return rpmsg_send(ept, msg, sizeof(*msg));
       }