aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/rtc/rtc-ds1511.c
diff options
context:
space:
mode:
authorAlexandre Belloni <alexandre.belloni@bootlin.com>2024-02-28 00:04:23 +0100
committerAlexandre Belloni <alexandre.belloni@bootlin.com>2024-02-29 22:15:47 +0100
commitf891570be594de6d5404354ab2c2ecbdc508cbd7 (patch)
tree2779121ff7cbc370d34e081f0ce91002d14ca941 /drivers/rtc/rtc-ds1511.c
parent434c9d03ea0db6bb8b1aebb6950781a0496028dd (diff)
downloadlinux-f891570be594de6d5404354ab2c2ecbdc508cbd7.tar.gz
rtc: ds1511: let the core know when alarm are not supported
Instead of failing function calls, let the core know alarms are not supported so it can fail early and avoid unnecessary calls. Link: https://lore.kernel.org/r/20240227230431.1837717-8-alexandre.belloni@bootlin.com Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Diffstat (limited to 'drivers/rtc/rtc-ds1511.c')
-rw-r--r--drivers/rtc/rtc-ds1511.c24
1 files changed, 9 insertions, 15 deletions
diff --git a/drivers/rtc/rtc-ds1511.c b/drivers/rtc/rtc-ds1511.c
index b0dfdda2c8fcd..c81f464e6a501 100644
--- a/drivers/rtc/rtc-ds1511.c
+++ b/drivers/rtc/rtc-ds1511.c
@@ -188,9 +188,6 @@ static int ds1511_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
struct rtc_plat_data *pdata = dev_get_drvdata(dev);
unsigned long flags;
- if (pdata->irq <= 0)
- return -EINVAL;
-
pdata->alrm_mday = alrm->time.tm_mday;
pdata->alrm_hour = alrm->time.tm_hour;
pdata->alrm_min = alrm->time.tm_min;
@@ -219,9 +216,6 @@ static int ds1511_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
{
struct rtc_plat_data *pdata = dev_get_drvdata(dev);
- if (pdata->irq <= 0)
- return -EINVAL;
-
alrm->time.tm_mday = pdata->alrm_mday < 0 ? 0 : pdata->alrm_mday;
alrm->time.tm_hour = pdata->alrm_hour < 0 ? 0 : pdata->alrm_hour;
alrm->time.tm_min = pdata->alrm_min < 0 ? 0 : pdata->alrm_min;
@@ -253,9 +247,6 @@ static int ds1511_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)
struct rtc_plat_data *pdata = dev_get_drvdata(dev);
unsigned long flags;
- if (pdata->irq <= 0)
- return -EINVAL;
-
spin_lock_irqsave(&pdata->lock, flags);
ds1511_rtc_alarm_enable(enabled);
spin_unlock_irqrestore(&pdata->lock, flags);
@@ -349,12 +340,6 @@ static int ds1511_rtc_probe(struct platform_device *pdev)
pdata->rtc->ops = &ds1511_rtc_ops;
- ret = devm_rtc_register_device(pdata->rtc);
- if (ret)
- return ret;
-
- devm_rtc_nvmem_register(pdata->rtc, &ds1511_nvmem_cfg);
-
/*
* if the platform has an interrupt in mind for this device,
* then by all means, set it
@@ -369,6 +354,15 @@ static int ds1511_rtc_probe(struct platform_device *pdev)
}
}
+ if (pdata->irq == 0)
+ clear_bit(RTC_FEATURE_ALARM, pdata->rtc->features);
+
+ ret = devm_rtc_register_device(pdata->rtc);
+ if (ret)
+ return ret;
+
+ devm_rtc_nvmem_register(pdata->rtc, &ds1511_nvmem_cfg);
+
return 0;
}