rtc: pcf85063: Fix reading alarm
authorAlexander Stein <alexander.stein@ew.tq-group.com>
Wed, 21 Sep 2022 07:41:41 +0000 (09:41 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 31 Dec 2022 12:14:34 +0000 (13:14 +0100)
[ Upstream commit a6ceee26fd5ed9b5bd37322b1ca88e4548cee4a3 ]

If the alarms are disabled the topmost bit (AEN_*) is set in the alarm
registers. This is also interpreted in BCD number leading to this warning:
rtc rtc0: invalid alarm value: 2022-09-21T80:80:80

Fix this by masking alarm enabling and reserved bits.

Fixes: 05cb3a56ee8c ("rtc: pcf85063: add alarm support")
Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
Link: https://lore.kernel.org/r/20220921074141.3903104-1-alexander.stein@ew.tq-group.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/rtc/rtc-pcf85063.c

index 14da4ab..3e28377 100644 (file)
@@ -167,10 +167,10 @@ static int pcf85063_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
        if (ret)
                return ret;
 
-       alrm->time.tm_sec = bcd2bin(buf[0]);
-       alrm->time.tm_min = bcd2bin(buf[1]);
-       alrm->time.tm_hour = bcd2bin(buf[2]);
-       alrm->time.tm_mday = bcd2bin(buf[3]);
+       alrm->time.tm_sec = bcd2bin(buf[0] & 0x7f);
+       alrm->time.tm_min = bcd2bin(buf[1] & 0x7f);
+       alrm->time.tm_hour = bcd2bin(buf[2] & 0x3f);
+       alrm->time.tm_mday = bcd2bin(buf[3] & 0x3f);
 
        ret = regmap_read(pcf85063->regmap, PCF85063_REG_CTRL2, &val);
        if (ret)