struct pcf50633_rtc {
        int alarm_enabled;
        int second_enabled;
+       int alarm_pending;
 
        struct pcf50633 *pcf;
        struct rtc_device *rtc_dev;
        rtc = dev_get_drvdata(dev);
 
        alrm->enabled = rtc->alarm_enabled;
+       alrm->pending = rtc->alarm_pending;
 
        ret = pcf50633_read_block(rtc->pcf, PCF50633_REG_RTCSCA,
                                PCF50633_TI_EXTENT, &pcf_tm.time[0]);
        /* Returns 0 on success */
        ret = pcf50633_write_block(rtc->pcf, PCF50633_REG_RTCSCA,
                                PCF50633_TI_EXTENT, &pcf_tm.time[0]);
+       if (!alrm->enabled)
+               rtc->alarm_pending = 0;
 
        if (!alarm_masked || alrm->enabled)
                pcf50633_irq_unmask(rtc->pcf, PCF50633_IRQ_ALARM);
        switch (irq) {
        case PCF50633_IRQ_ALARM:
                rtc_update_irq(rtc->rtc_dev, 1, RTC_AF | RTC_IRQF);
+               rtc->alarm_pending = 1;
                break;
        case PCF50633_IRQ_SECOND:
                rtc_update_irq(rtc->rtc_dev, 1, RTC_UF | RTC_IRQF);