// SPDX-License-Identifier: GPL-2.0-only /* * adjd_s311.c - Support for ADJD-S311-CR999 digital color sensor * * Copyright (C) 2012 Peter Meerwald <pmeerw@pmeerw.net> * * driver for ADJD-S311-CR999 digital color sensor (10-bit channels for * red, green, blue, clear); 7-bit I2C slave address 0x74 * * limitations: no calibration, no offset mode, no sleep mode
*/
int ret = i2c_smbus_write_byte_data(data->client, ADJD_S311_CTRL,
ADJD_S311_CTRL_GSSR); if (ret < 0) return ret;
while (tries--) {
ret = i2c_smbus_read_byte_data(data->client, ADJD_S311_CTRL); if (ret < 0) return ret; if (!(ret & ADJD_S311_CTRL_GSSR)) break;
msleep(20);
}
if (tries < 0) {
dev_err(&data->client->dev, "adjd_s311_req_data() failed, data not ready\n"); return -EIO;
}
staticint adjd_s311_read_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int *val, int *val2, long mask)
{ struct adjd_s311_data *data = iio_priv(indio_dev); int ret;
switch (mask) { case IIO_CHAN_INFO_RAW:
ret = adjd_s311_read_data(indio_dev,
ADJD_S311_DATA_REG(chan->address), val); if (ret < 0) return ret; return IIO_VAL_INT; case IIO_CHAN_INFO_HARDWAREGAIN:
ret = i2c_smbus_read_byte_data(data->client,
ADJD_S311_CAP_REG(chan->address)); if (ret < 0) return ret;
*val = ret & ADJD_S311_CAP_MASK; return IIO_VAL_INT; case IIO_CHAN_INFO_INT_TIME:
ret = i2c_smbus_read_word_data(data->client,
ADJD_S311_INT_REG(chan->address)); if (ret < 0) return ret;
*val = 0; /* * not documented, based on measurement: * 4095 LSBs correspond to roughly 4 ms
*/
*val2 = ret & ADJD_S311_INT_MASK; return IIO_VAL_INT_PLUS_MICRO;
} return -EINVAL;
}
staticint adjd_s311_write_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int val, int val2, long mask)
{ struct adjd_s311_data *data = iio_priv(indio_dev);
switch (mask) { case IIO_CHAN_INFO_HARDWAREGAIN: if (val < 0 || val > ADJD_S311_CAP_MASK) return -EINVAL;
return i2c_smbus_write_byte_data(data->client,
ADJD_S311_CAP_REG(chan->address), val); case IIO_CHAN_INFO_INT_TIME: if (val != 0 || val2 < 0 || val2 > ADJD_S311_INT_MASK) return -EINVAL;
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.