rtc: ds1307: handle oscillator failure flags for ds1388 variant
authorChris Packham <chris.packham@alliedtelesis.co.nz>
Fri, 7 Feb 2020 03:18:11 +0000 (16:18 +1300)
committerAlexandre Belloni <alexandre.belloni@bootlin.com>
Sun, 22 Mar 2020 20:40:01 +0000 (21:40 +0100)
The FLAG register is at a different location to the other supported RTCs
so this requires an extra case in the existing switch statement.

Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz>
Link: https://lore.kernel.org/r/20200207031812.14424-2-chris.packham@alliedtelesis.co.nz
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
drivers/rtc/rtc-ds1307.c

index 1f7e8ae..31a38d4 100644 (file)
@@ -144,6 +144,8 @@ enum ds_type {
 #      define M41TXX_BIT_CALIB_SIGN    BIT(5)
 #      define M41TXX_M_CALIBRATION     GENMASK(4, 0)
 
+#define DS1388_REG_FLAG                        0x0b
+#      define DS1388_BIT_OSF           BIT(7)
 /* negative offset step is -2.034ppm */
 #define M41TXX_NEG_OFFSET_STEP_PPB     2034
 /* positive offset step is +4.068ppm */
@@ -252,6 +254,13 @@ static int ds1307_get_time(struct device *dev, struct rtc_time *t)
                if (tmp & DS1340_BIT_OSF)
                        return -EINVAL;
                break;
+       case ds_1388:
+               ret = regmap_read(ds1307->regmap, DS1388_REG_FLAG, &tmp);
+               if (ret)
+                       return ret;
+               if (tmp & DS1388_BIT_OSF)
+                       return -EINVAL;
+               break;
        case mcp794xx:
                if (!(tmp & MCP794XX_BIT_ST))
                        return -EINVAL;