]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
rtc: isl1208: fix negative digital trim reporting
authorTrent Piepho <tpiepho@impinj.com>
Wed, 2 Jan 2019 16:00:17 +0000 (16:00 +0000)
committerAlexandre Belloni <alexandre.belloni@bootlin.com>
Thu, 10 Jan 2019 21:27:06 +0000 (22:27 +0100)
isl1208_i2c_get_dtr() was returning the dtr value directly, but could
also return a negative error code.  Negative trimming values, e.g. -20,
would get interpreted as an error code, e.g. -ENOTDIR.

This patch offsets the dtr value by 100 so it's positive and won't alias
an error code.

Also fix check that considered a return value of -1 to be success.

Cc: Alessandro Zummo <a.zummo@towertech.it>
Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Trent Piepho <tpiepho@impinj.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
drivers/rtc/rtc-isl1208.c

index 37ab3e1d25f56f944e401a3644ba97e3a964a0b3..263af3d8cd9f58eeb4d81db3bd25b032c907c93e 100644 (file)
@@ -161,6 +161,7 @@ isl1208_i2c_get_atr(struct i2c_client *client)
        return atr;
 }
 
+/* returns adjustment value + 100 */
 static int
 isl1208_i2c_get_dtr(struct i2c_client *client)
 {
@@ -171,7 +172,7 @@ isl1208_i2c_get_dtr(struct i2c_client *client)
        /* dtr encodes adjustments of {-60,-40,-20,0,20,40,60} ppm */
        dtr = ((dtr & 0x3) * 20) * (dtr & (1 << 2) ? -1 : 1);
 
-       return dtr;
+       return dtr + 100;
 }
 
 static int
@@ -248,8 +249,8 @@ isl1208_rtc_proc(struct device *dev, struct seq_file *seq)
                   (sr & ISL1208_REG_SR_RTCF) ? "bad" : "okay");
 
        dtr = isl1208_i2c_get_dtr(client);
-       if (dtr >= 0 - 1)
-               seq_printf(seq, "digital_trim\t: %d ppm\n", dtr);
+       if (dtr >= 0)
+               seq_printf(seq, "digital_trim\t: %d ppm\n", dtr - 100);
 
        atr = isl1208_i2c_get_atr(client);
        if (atr >= 0)
@@ -637,7 +638,7 @@ isl1208_sysfs_show_dtrim(struct device *dev,
        if (dtr < 0)
                return dtr;
 
-       return sprintf(buf, "%d ppm\n", dtr);
+       return sprintf(buf, "%d ppm\n", dtr - 100);
 }
 
 static DEVICE_ATTR(dtrim, S_IRUGO, isl1208_sysfs_show_dtrim, NULL);