Message ID | 20190102160002.23670-1-tpiepho@impinj.com |
---|---|
State | Accepted |
Headers | show |
Series | rtc: isl1208: fix negative digital trim reporting | expand |
On 02/01/2019 16:00:17+0000, Trent Piepho wrote: > 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> > --- > drivers/rtc/rtc-isl1208.c | 9 +++++---- > 1 file changed, 5 insertions(+), 4 deletions(-) > Applied, thanks. It would be great if you could also implement .read_offset and .set_offset instead of the custom dtrim attribute.
diff --git a/drivers/rtc/rtc-isl1208.c b/drivers/rtc/rtc-isl1208.c index 53e965888ead..320dd15331f4 100644 --- a/drivers/rtc/rtc-isl1208.c +++ b/drivers/rtc/rtc-isl1208.c @@ -200,6 +200,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) { @@ -210,7 +211,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 @@ -287,8 +288,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) @@ -677,7 +678,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);
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> --- drivers/rtc/rtc-isl1208.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)