]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
rtc: da9063: simplify irq management
authorWolfram Sang <wsa+renesas@sang-engineering.com>
Thu, 20 Mar 2025 10:18:49 +0000 (11:18 +0100)
committerAlexandre Belloni <alexandre.belloni@bootlin.com>
Tue, 8 Apr 2025 14:43:41 +0000 (16:43 +0200)
The code for enabling and disabling the irq is so similar that it can
easily be handled by one function. Like in most other RTC drivers. Save
the duplicated code and one layer of indirection.

Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Link: https://lore.kernel.org/r/20250320102218.10781-2-wsa+renesas@sang-engineering.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
drivers/rtc/rtc-da9063.c

index 859397541f2983fb32163b780245554e0e84084a..d05b8be98087e4b9fc45b1910efce8f784c9b021 100644 (file)
@@ -194,26 +194,17 @@ static void da9063_tm_to_data(struct rtc_time *tm, u8 *data,
                                config->rtc_count_year_mask;
 }
 
-static int da9063_rtc_stop_alarm(struct device *dev)
-{
-       struct da9063_compatible_rtc *rtc = dev_get_drvdata(dev);
-       const struct da9063_compatible_rtc_regmap *config = rtc->config;
-
-       return regmap_update_bits(rtc->regmap,
-                                 config->rtc_alarm_year_reg,
-                                 config->rtc_alarm_on_mask,
-                                 0);
-}
-
-static int da9063_rtc_start_alarm(struct device *dev)
+static int da9063_rtc_alarm_irq_enable(struct device *dev,
+                                      unsigned int enabled)
 {
        struct da9063_compatible_rtc *rtc = dev_get_drvdata(dev);
        const struct da9063_compatible_rtc_regmap *config = rtc->config;
+       u8 set_bit = enabled ? config->rtc_alarm_on_mask : 0;
 
        return regmap_update_bits(rtc->regmap,
                                  config->rtc_alarm_year_reg,
                                  config->rtc_alarm_on_mask,
-                                 config->rtc_alarm_on_mask);
+                                 set_bit);
 }
 
 static int da9063_rtc_read_time(struct device *dev, struct rtc_time *tm)
@@ -312,7 +303,7 @@ static int da9063_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
 
        da9063_tm_to_data(&alrm->time, data, rtc);
 
-       ret = da9063_rtc_stop_alarm(dev);
+       ret = da9063_rtc_alarm_irq_enable(dev, 0);
        if (ret < 0) {
                dev_err(dev, "Failed to stop alarm: %d\n", ret);
                return ret;
@@ -330,7 +321,7 @@ static int da9063_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
        da9063_data_to_tm(data, &rtc->alarm_time, rtc);
 
        if (alrm->enabled) {
-               ret = da9063_rtc_start_alarm(dev);
+               ret = da9063_rtc_alarm_irq_enable(dev, 1);
                if (ret < 0) {
                        dev_err(dev, "Failed to start alarm: %d\n", ret);
                        return ret;
@@ -340,15 +331,6 @@ static int da9063_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
        return ret;
 }
 
-static int da9063_rtc_alarm_irq_enable(struct device *dev,
-                                      unsigned int enabled)
-{
-       if (enabled)
-               return da9063_rtc_start_alarm(dev);
-       else
-               return da9063_rtc_stop_alarm(dev);
-}
-
 static irqreturn_t da9063_alarm_event(int irq, void *data)
 {
        struct da9063_compatible_rtc *rtc = data;