Index: uspace/drv/time/cmos-rtc/cmos-rtc.c
===================================================================
--- uspace/drv/time/cmos-rtc/cmos-rtc.c	(revision 074324f1d6535b25a5ed0908dce7303c63a45c8e)
+++ uspace/drv/time/cmos-rtc/cmos-rtc.c	(revision f004318f62a18ba5e2e6a83ad09211972e561d18)
@@ -317,7 +317,5 @@
 		/* The RTC is working in 12h mode, check if it is AM or PM */
 		if (t->tm_hour & 0x80) {
-			/* PM flag is active, it must to be cleared
-			 * or the BCD conversion will fail.
-			 */
+			/* PM flag is active, it must be cleared */
 			t->tm_hour &= ~0x80;
 			pm_mode = true;
@@ -357,5 +355,6 @@
 
 	fibril_mutex_unlock(&rtc->mutex);
-	return EOK;
+
+	return rtc_tm_sanity_check(t);
 }
 
@@ -386,6 +385,9 @@
 	reg_b = rtc_register_read(rtc, RTC_STATUS_B);
 
-	/* Force 24h mode of operation */
-	rtc_register_write(rtc, RTC_STATUS_B, reg_b | RTC_MASK_24H);
+	if (!(reg_b & RTC_MASK_24H)) {
+		/* Force 24h mode of operation */
+		reg_b |= RTC_MASK_24H;
+		rtc_register_write(rtc, RTC_STATUS_B, reg_b);
+	}
 
 	if (rtc_register_read(rtc, RTC_YEAR) < 100) {
