On Fri, Jul 20, 2012 at 4:03 PM, Oliver Neukum <oneukum@xxxxxxx> wrote: > On Friday 20 July 2012 14:57:22 Johannes Winkelmann wrote: > >> +/* sysfs attributes */ >> +static struct shtc1_data *shtc1_update_client(struct device *dev) >> +{ >> + struct i2c_client *client = to_i2c_client(dev); >> + struct shtc1_data *data = i2c_get_clientdata(client); >> + >> + char buf[SHTC1_RESPONSE_LENGTH]; > > Is this used for DMA? No > >> + int val; >> + int ret; >> + >> + mutex_lock(&data->update_lock); >> + >> + /* >> + * initialize 'ret' in case we had a valid result before, but >> + * read too quickly in which case we return the last values >> + */ >> + ret = !data->valid; >> + >> + if (time_after(jiffies, data->last_updated + HZ / 10) >> + || !data->valid) { >> + ret = shtc1_update_values(client, data, buf, sizeof(buf)); >> + >> + if (ret) >> + goto out; >> + >> + /* >> + * From datasheet: >> + * T = -45 + 175 * ST / 2^16 >> + * RH = -10 + 120 * SRH / 2^16 >> + * >> + * Adapted for integer fixed point (3 digit) arithmetic >> + */ >> + val = (buf[0] << 8) | buf[1]; >> + data->temperature = ((21875 * val) >> 13) - 45000; >> + val = (buf[3] << 8) | buf[4]; > > We have dedicated macros for conversion of endianness. Like this: val = swab16p((__le16 *)buf); data->temperature = ((21875 * val) >> 13) - 45000; val = swab16p((__le16 *)(buf+2)); data->humidity = ((15000 * val) >> 13) - 10000; > >> + data->humidity = ((15000 * val) >> 13) - 10000; >> + >> + data->last_updated = jiffies; >> + data->valid = 1; >> + } >> + >> +out: >> + mutex_unlock(&data->update_lock); >> + >> + return ret == 0 ? data : NULL; >> +} > Regards > Oliver > Thanks, Johannes _______________________________________________ lm-sensors mailing list lm-sensors@xxxxxxxxxxxxxx http://lists.lm-sensors.org/mailman/listinfo/lm-sensors