Message ID | 20221126141806.62205-2-andriy.shevchenko@linux.intel.com (mailing list archive) |
---|---|
State | Handled Elsewhere |
Headers | show |
Series | [v1,1/5] rtc: isl12022: Get rid of unneeded private struct isl12022 | expand |
On 26/11/2022 15.18, Andy Shevchenko wrote: > We are reading 10-bit value in a 16-bit register in LE format. > Make this explicit by using __le16 type for it and corresponding > conversion function. > > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> > --- > drivers/rtc/rtc-isl12022.c | 9 +++++---- > 1 file changed, 5 insertions(+), 4 deletions(-) > > diff --git a/drivers/rtc/rtc-isl12022.c b/drivers/rtc/rtc-isl12022.c > index 44058fa27277..bf1aa6f6560d 100644 > --- a/drivers/rtc/rtc-isl12022.c > +++ b/drivers/rtc/rtc-isl12022.c > @@ -19,6 +19,8 @@ > #include <linux/regmap.h> > #include <linux/hwmon.h> > > +#include <asm/byteorder.h> > + > /* ISL register offsets */ > #define ISL12022_REG_SC 0x00 > #define ISL12022_REG_MN 0x01 > @@ -63,17 +65,16 @@ static umode_t isl12022_hwmon_is_visible(const void *data, > static int isl12022_hwmon_read_temp(struct device *dev, long *mC) > { > struct regmap *regmap = dev_get_drvdata(dev); > - u8 temp_buf[2]; > int temp, ret; > + __le16 buf; > > - ret = regmap_bulk_read(regmap, ISL12022_REG_TEMP_L, > - temp_buf, sizeof(temp_buf)); > + ret = regmap_bulk_read(regmap, ISL12022_REG_TEMP_L, &buf, sizeof(buf)); > if (ret) > return ret; > /* > * Temperature is represented as a 10-bit number, unit half-Kelvins. > */ > - temp = (temp_buf[1] << 8) | temp_buf[0]; > + temp = le16_to_cpu(buf); Makes sense. Perhaps we should throw in "& 0x3ff" just in case there were ever any garbage bits set in the temp_h register. With or without that, Acked-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
diff --git a/drivers/rtc/rtc-isl12022.c b/drivers/rtc/rtc-isl12022.c index 44058fa27277..bf1aa6f6560d 100644 --- a/drivers/rtc/rtc-isl12022.c +++ b/drivers/rtc/rtc-isl12022.c @@ -19,6 +19,8 @@ #include <linux/regmap.h> #include <linux/hwmon.h> +#include <asm/byteorder.h> + /* ISL register offsets */ #define ISL12022_REG_SC 0x00 #define ISL12022_REG_MN 0x01 @@ -63,17 +65,16 @@ static umode_t isl12022_hwmon_is_visible(const void *data, static int isl12022_hwmon_read_temp(struct device *dev, long *mC) { struct regmap *regmap = dev_get_drvdata(dev); - u8 temp_buf[2]; int temp, ret; + __le16 buf; - ret = regmap_bulk_read(regmap, ISL12022_REG_TEMP_L, - temp_buf, sizeof(temp_buf)); + ret = regmap_bulk_read(regmap, ISL12022_REG_TEMP_L, &buf, sizeof(buf)); if (ret) return ret; /* * Temperature is represented as a 10-bit number, unit half-Kelvins. */ - temp = (temp_buf[1] << 8) | temp_buf[0]; + temp = le16_to_cpu(buf); temp *= 500; temp -= 273000;
We are reading 10-bit value in a 16-bit register in LE format. Make this explicit by using __le16 type for it and corresponding conversion function. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> --- drivers/rtc/rtc-isl12022.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)