int rtc_update_irq_enable(struct rtc_device *rtc, unsigned int enabled)
 {
-       int err;
+       int rc = 0, err;
 
        err = mutex_lock_interruptible(&rtc->ops_lock);
        if (err)
                struct rtc_time tm;
                ktime_t now, onesec;
 
-               __rtc_read_time(rtc, &tm);
+               rc = __rtc_read_time(rtc, &tm);
+               if (rc)
+                       goto out;
                onesec = ktime_set(1, 0);
                now = rtc_tm_to_ktime(tm);
                rtc->uie_rtctimer.node.expires = ktime_add(now, onesec);
 
 out:
        mutex_unlock(&rtc->ops_lock);
+
+       /*
+        * __rtc_read_time() failed, this probably means that the RTC time has
+        * never been set or less probably there is a transient error on the
+        * bus. In any case, avoid enabling emulation has this will fail when
+        * reading the time too.
+        */
+       if (rc)
+               return rc;
+
 #ifdef CONFIG_RTC_INTF_DEV_UIE_EMUL
        /*
         * Enable emulation if the driver returned -EINVAL to signal that it has