// SPDX-License-Identifier: GPL-2.0-only /* * Digital temperature sensor with integrated Non-volatile memory * Copyright (c) 2021 Puranjay Mohan <puranjay12@gmail.com> * * Driver for the Texas Instruments TMP117 Temperature Sensor * (7-bit I2C slave address (0x48 - 0x4B), changeable via ADD pins) * * Note: This driver assumes that the sensor has been calibrated beforehand.
*/
staticint tmp117_read_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *channel, int *val, int *val2, long mask)
{ struct tmp117_data *data = iio_priv(indio_dev);
s32 ret;
switch (mask) { case IIO_CHAN_INFO_RAW:
ret = i2c_smbus_read_word_swapped(data->client,
TMP117_REG_TEMP); if (ret < 0) return ret;
*val = sign_extend32(ret, 15); return IIO_VAL_INT;
case IIO_CHAN_INFO_CALIBBIAS:
ret = i2c_smbus_read_word_swapped(data->client,
TMP117_REG_TEMP_OFFSET); if (ret < 0) return ret;
*val = sign_extend32(ret, 15); return IIO_VAL_INT;
case IIO_CHAN_INFO_SCALE: /* * Conversion from 10s of uC to mC * as IIO reports temperature in mC
*/
*val = TMP117_RESOLUTION_10UC / MICRODEGREE_PER_10MILLIDEGREE;
*val2 = (TMP117_RESOLUTION_10UC %
MICRODEGREE_PER_10MILLIDEGREE) * 100;
return IIO_VAL_INT_PLUS_MICRO;
default: return -EINVAL;
}
}
staticint tmp117_write_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *channel, int val, int val2, long mask)
{ struct tmp117_data *data = iio_priv(indio_dev);
s16 off;
switch (mask) { case IIO_CHAN_INFO_CALIBBIAS:
off = clamp_t(int, val, S16_MIN, S16_MAX); if (off == data->calibbias) return 0;
data->calibbias = off; return i2c_smbus_write_word_swapped(data->client,
TMP117_REG_TEMP_OFFSET, off);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.