trs80: ensure the rtc digit wrap doesn't catch us out
authorAlan Cox <alan@linux.intel.com>
Mon, 22 Dec 2014 14:30:41 +0000 (14:30 +0000)
committerAlan Cox <alan@linux.intel.com>
Mon, 22 Dec 2014 14:30:41 +0000 (14:30 +0000)
Kernel/platform-trs80/main.c

index b03c22e..63935c5 100644 (file)
@@ -49,8 +49,13 @@ __sfr __at 0xB1 rtc_sech;
 
 uint8_t rtc_secs(void)
 {
-  /* BCD encoded */
-  return rtc_secl + 10 * rtc_sech;
+    uint8_t sl, rv;
+    /* BCD encoded */
+    do {
+        sl = rtc_secl;
+        rv = sl + rtc_sech * 10;
+    } while (sl != rtc_secl);
+    return rv;
 }
 
 #endif