/** * max30208_request() - Request a reading * @data: Struct comprising member elements of the device * * Requests a reading from the device and waits until the conversion is ready.
*/ staticint max30208_request(struct max30208_data *data)
{ /* * Sensor can take up to 500 ms to respond so execute a total of * 10 retries to give the device sufficient time.
*/ int retries = 10;
u8 regval; int ret;
ret = i2c_smbus_read_byte_data(data->client, MAX30208_TEMP_SENSOR_SETUP); if (ret < 0) return ret;
regval = ret | MAX30208_TEMP_SENSOR_SETUP_CONV;
ret = i2c_smbus_write_byte_data(data->client, MAX30208_TEMP_SENSOR_SETUP, regval); if (ret) return ret;
while (retries--) {
ret = i2c_smbus_read_byte_data(data->client, MAX30208_STATUS); if (ret < 0) return ret;
staticint max30208_update_temp(struct max30208_data *data)
{
u8 data_count; int ret;
mutex_lock(&data->lock);
ret = max30208_request(data); if (ret) goto unlock;
ret = i2c_smbus_read_byte_data(data->client, MAX30208_FIFO_OVF_CNTR); if (ret < 0) goto unlock; elseif (!ret) {
ret = i2c_smbus_read_byte_data(data->client, MAX30208_FIFO_DATA_CNTR); if (ret < 0) goto unlock;
data_count = ret;
} else
data_count = 1;
while (data_count) {
ret = i2c_smbus_read_word_swapped(data->client, MAX30208_FIFO_DATA); if (ret < 0) goto unlock;
data_count--;
}
unlock:
mutex_unlock(&data->lock); return ret;
}
/** * max30208_config_setup() - Set up FIFO configuration register * @data: Struct comprising member elements of the device * * Sets the rollover bit to '1' to enable overwriting FIFO during overflow.
*/ staticint max30208_config_setup(struct max30208_data *data)
{
u8 regval; int ret;
ret = i2c_smbus_read_byte_data(data->client, MAX30208_FIFO_CONFIG); if (ret < 0) return ret;
regval = ret | MAX30208_FIFO_CONFIG_RO;
ret = i2c_smbus_write_byte_data(data->client, MAX30208_FIFO_CONFIG, regval); if (ret) return ret;
return 0;
}
staticint max30208_read(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int *val, int *val2, long mask)
{ struct max30208_data *data = iio_priv(indio_dev); int ret;
switch (mask) { case IIO_CHAN_INFO_RAW:
ret = max30208_update_temp(data); if (ret < 0) return ret;
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.