clear_bit(RTC_FEATURE_UPDATE_INTERRUPT, rtc->rtc_dev->features);
        }
 
-       irq_alarm = platform_get_irq_byname(pdev, "ALARM");
-       if (irq_alarm < 0)
+       irq_alarm = platform_get_irq_byname_optional(pdev, "ALARM");
+       if (irq_alarm >= 0) {
+               ret = devm_request_threaded_irq(&pdev->dev, irq_alarm, NULL,
+                                               da9063_alarm_event,
+                                               IRQF_TRIGGER_LOW | IRQF_ONESHOT,
+                                               "ALARM", rtc);
+               if (ret)
+                       dev_err(&pdev->dev,
+                               "Failed to request ALARM IRQ %d: %d\n",
+                               irq_alarm, ret);
+
+               ret = dev_pm_set_wake_irq(&pdev->dev, irq_alarm);
+               if (ret)
+                       dev_warn(&pdev->dev,
+                                "Failed to set IRQ %d as a wake IRQ: %d\n",
+                                irq_alarm, ret);
+
+               device_init_wakeup(&pdev->dev, true);
+       }  else if (irq_alarm != -ENXIO) {
                return irq_alarm;
-
-       ret = devm_request_threaded_irq(&pdev->dev, irq_alarm, NULL,
-                                       da9063_alarm_event,
-                                       IRQF_TRIGGER_LOW | IRQF_ONESHOT,
-                                       "ALARM", rtc);
-       if (ret)
-               dev_err(&pdev->dev, "Failed to request ALARM IRQ %d: %d\n",
-                       irq_alarm, ret);
-
-       ret = dev_pm_set_wake_irq(&pdev->dev, irq_alarm);
-       if (ret)
-               dev_warn(&pdev->dev,
-                        "Failed to set IRQ %d as a wake IRQ: %d\n",
-                        irq_alarm, ret);
-
-       device_init_wakeup(&pdev->dev, true);
+       } else {
+               clear_bit(RTC_FEATURE_ALARM, rtc->rtc_dev->features);
+       }
 
        return devm_rtc_register_device(rtc->rtc_dev);
 }