On Sun, May 29, 2016 at 07:53:08PM -0700, Matt Ranostay wrote: > Alison, > > Can you give a Tested-by: since I don't own this sensor anymore. > > Thanks, > > Matt Tested it. Verified temp & humidty calcs. Looks great! And, (seeing a pattern here ;)) this comes with another question, probably directed a Jonathan... with regards to temperature calculations: Datasheets give numbers for this method: temp = ((raw * scale) + offset) IIO drivers report numbers for this method: temp = ((raw + offset) * scale) I've figured out the math for translating between them and creating the offset for the driver to report in sysfs, but don't know why we are doing that. 'Our' way seems kind of ugly. For example, for HDC1008 the offset is -40. It's the minimum expected temp value. But, we munge it to be -15887.515151 so we can apply it before scaling. Why do we do it this way in IIO? alisons > > On Sun, May 29, 2016 at 7:52 PM, Matt Ranostay <mranostay@xxxxxxxxx> wrote: > > Shifting sensor data to the right 2 bits was incorrect and caused the > > scaling values + offsets to be invalid. > > > > Reported-by: Alison Schofield <amsfield22@xxxxxxxxx> > > Signed-off-by: Matt Ranostay <mranostay@xxxxxxxxx> > > --- > > drivers/iio/humidity/hdc100x.c | 16 ++++++++-------- > > 1 file changed, 8 insertions(+), 8 deletions(-) > > > > diff --git a/drivers/iio/humidity/hdc100x.c b/drivers/iio/humidity/hdc100x.c > > index 3070983..a03832a 100644 > > --- a/drivers/iio/humidity/hdc100x.c > > +++ b/drivers/iio/humidity/hdc100x.c > > @@ -164,14 +164,14 @@ static int hdc100x_get_measurement(struct hdc100x_data *data, > > dev_err(&client->dev, "cannot read high byte measurement"); > > return ret; > > } > > - val = ret << 6; > > + val = ret << 8; > > > > ret = i2c_smbus_read_byte(client); > > if (ret < 0) { > > dev_err(&client->dev, "cannot read low byte measurement"); > > return ret; > > } > > - val |= ret >> 2; > > + val |= ret; > > > > return val; > > } > > @@ -212,17 +212,17 @@ static int hdc100x_read_raw(struct iio_dev *indio_dev, > > case IIO_CHAN_INFO_SCALE: > > if (chan->type == IIO_TEMP) { > > *val = 165000; > > - *val2 = 65536 >> 2; > > + *val2 = 65536; > > return IIO_VAL_FRACTIONAL; > > } else { > > - *val = 0; > > - *val2 = 10000; > > - return IIO_VAL_INT_PLUS_MICRO; > > + *val = 100; > > + *val2 = 65536; > > + return IIO_VAL_FRACTIONAL; > > } > > break; > > case IIO_CHAN_INFO_OFFSET: > > - *val = -3971; > > - *val2 = 879096; > > + *val = -15887; > > + *val2 = 515151; > > return IIO_VAL_INT_PLUS_MICRO; > > default: > > return -EINVAL; > > -- > > 2.7.4 > > -- To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html