]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
rtc: da9063: Make IRQ as optional
authorBiju Das <biju.das.jz@bp.renesas.com>
Fri, 5 Jan 2024 14:53:42 +0000 (14:53 +0000)
committerAlexandre Belloni <alexandre.belloni@bootlin.com>
Thu, 18 Jan 2024 00:00:21 +0000 (01:00 +0100)
On some platforms (eg: RZ/{G2UL,Five} SMARC EVK), there is no IRQ
populated by default. Add irq optional support.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/r/20240105145344.204453-2-biju.das.jz@bp.renesas.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
drivers/rtc/rtc-da9063.c

index 2f5d60622564a0d83ec3be91bf89710f34e2b1b7..b3a1f852c318b8c8a9a8647c643421bc9b21639a 100644 (file)
@@ -485,25 +485,29 @@ static int da9063_rtc_probe(struct platform_device *pdev)
                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);
 }