Commit cf4521ed authored by Alexandre Belloni's avatar Alexandre Belloni
Browse files

rtc: pcf8563: let the core handle the alarm resolution



Set RTC_FEATURE_ALARM_RES_MINUTE, so the core knows alarms have a
resolution of a minute. Also, the core will properly round down the alarm
instead of up.

Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@bootlin.com>
Link: https://lore.kernel.org/r/20220309162301.61679-16-alexandre.belloni@bootlin.com
parent e51cdef0
Loading
Loading
Loading
Loading
+1 −13
Original line number Diff line number Diff line
@@ -330,19 +330,6 @@ static int pcf8563_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *tm)
	unsigned char buf[4];
	int err;

	/* The alarm has no seconds, round up to nearest minute */
	if (tm->time.tm_sec) {
		time64_t alarm_time = rtc_tm_to_time64(&tm->time);

		alarm_time += 60 - tm->time.tm_sec;
		rtc_time64_to_tm(alarm_time, &tm->time);
	}

	dev_dbg(dev, "%s, min=%d hour=%d wday=%d mday=%d "
		"enabled=%d pending=%d\n", __func__,
		tm->time.tm_min, tm->time.tm_hour, tm->time.tm_wday,
		tm->time.tm_mday, tm->enabled, tm->pending);

	buf[0] = bin2bcd(tm->time.tm_min);
	buf[1] = bin2bcd(tm->time.tm_hour);
	buf[2] = bin2bcd(tm->time.tm_mday);
@@ -566,6 +553,7 @@ static int pcf8563_probe(struct i2c_client *client,
	pcf8563->rtc->ops = &pcf8563_rtc_ops;
	/* the pcf8563 alarm only supports a minute accuracy */
	pcf8563->rtc->uie_unsupported = 1;
	set_bit(RTC_FEATURE_ALARM_RES_MINUTE, pcf8563->rtc->features);
	pcf8563->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
	pcf8563->rtc->range_max = RTC_TIMESTAMP_END_2099;
	pcf8563->rtc->set_start_time = true;