Lines Matching +full:full +full:- +full:bit
1 // SPDX-License-Identifier: GPL-2.0-only
3 * isl29125.c - Support for Intersil ISL29125 RGB light sensor
7 * RGB light sensor with 16-bit channels for red, green, blue);
8 * 7-bit I2C slave address 0x44
10 * TODO: interrupt support, IR compensation, thresholds, 12bit
44 #define ISL29125_SENSING_RANGE_0 5722 /* 375 lux full range */
45 #define ISL29125_SENSING_RANGE_1 152590 /* 10k lux full range */
47 #define ISL29125_MODE_RANGE BIT(3)
49 #define ISL29125_STATUS_CONV BIT(1)
54 u16 buffer[8]; /* 3x 16-bit, padding, 8 bytes timestamp */
60 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
61 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
92 ret = i2c_smbus_write_byte_data(data->client, ISL29125_CONF1, in isl29125_read_data()
93 data->conf1 | isl29125_regs[si].mode); in isl29125_read_data()
99 while (tries--) { in isl29125_read_data()
100 ret = i2c_smbus_read_byte_data(data->client, ISL29125_STATUS); in isl29125_read_data()
109 dev_err(&data->client->dev, "data not ready\n"); in isl29125_read_data()
110 ret = -EIO; in isl29125_read_data()
114 ret = i2c_smbus_read_word_data(data->client, isl29125_regs[si].data); in isl29125_read_data()
117 i2c_smbus_write_byte_data(data->client, ISL29125_CONF1, data->conf1); in isl29125_read_data()
133 ret = isl29125_read_data(data, chan->scan_index); in isl29125_read_raw()
141 if (data->conf1 & ISL29125_MODE_RANGE) in isl29125_read_raw()
142 *val2 = ISL29125_SENSING_RANGE_1; /*10k lux full range*/ in isl29125_read_raw()
144 *val2 = ISL29125_SENSING_RANGE_0; /*375 lux full range*/ in isl29125_read_raw()
147 return -EINVAL; in isl29125_read_raw()
159 return -EINVAL; in isl29125_write_raw()
161 data->conf1 |= ISL29125_MODE_RANGE; in isl29125_write_raw()
163 data->conf1 &= ~ISL29125_MODE_RANGE; in isl29125_write_raw()
165 return -EINVAL; in isl29125_write_raw()
166 return i2c_smbus_write_byte_data(data->client, ISL29125_CONF1, in isl29125_write_raw()
167 data->conf1); in isl29125_write_raw()
169 return -EINVAL; in isl29125_write_raw()
176 struct iio_dev *indio_dev = pf->indio_dev; in isl29125_trigger_handler()
180 for_each_set_bit(i, indio_dev->active_scan_mask, in isl29125_trigger_handler()
181 indio_dev->masklength) { in isl29125_trigger_handler()
182 int ret = i2c_smbus_read_word_data(data->client, in isl29125_trigger_handler()
187 data->buffer[j++] = ret; in isl29125_trigger_handler()
190 iio_push_to_buffers_with_timestamp(indio_dev, data->buffer, in isl29125_trigger_handler()
194 iio_trigger_notify_done(indio_dev->trig); in isl29125_trigger_handler()
220 data->conf1 |= ISL29125_MODE_RGB; in isl29125_buffer_postenable()
221 return i2c_smbus_write_byte_data(data->client, ISL29125_CONF1, in isl29125_buffer_postenable()
222 data->conf1); in isl29125_buffer_postenable()
229 data->conf1 &= ~ISL29125_MODE_MASK; in isl29125_buffer_predisable()
230 data->conf1 |= ISL29125_MODE_PD; in isl29125_buffer_predisable()
231 return i2c_smbus_write_byte_data(data->client, ISL29125_CONF1, in isl29125_buffer_predisable()
232 data->conf1); in isl29125_buffer_predisable()
247 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data)); in isl29125_probe()
249 return -ENOMEM; in isl29125_probe()
253 data->client = client; in isl29125_probe()
255 indio_dev->info = &isl29125_info; in isl29125_probe()
256 indio_dev->name = ISL29125_DRV_NAME; in isl29125_probe()
257 indio_dev->channels = isl29125_channels; in isl29125_probe()
258 indio_dev->num_channels = ARRAY_SIZE(isl29125_channels); in isl29125_probe()
259 indio_dev->modes = INDIO_DIRECT_MODE; in isl29125_probe()
261 ret = i2c_smbus_read_byte_data(data->client, ISL29125_DEVICE_ID); in isl29125_probe()
265 return -ENODEV; in isl29125_probe()
267 data->conf1 = ISL29125_MODE_PD | ISL29125_MODE_RANGE; in isl29125_probe()
268 ret = i2c_smbus_write_byte_data(data->client, ISL29125_CONF1, in isl29125_probe()
269 data->conf1); in isl29125_probe()
273 ret = i2c_smbus_write_byte_data(data->client, ISL29125_STATUS, 0); in isl29125_probe()
295 return i2c_smbus_write_byte_data(data->client, ISL29125_CONF1, in isl29125_powerdown()
296 (data->conf1 & ~ISL29125_MODE_MASK) | ISL29125_MODE_PD); in isl29125_powerdown()
322 return i2c_smbus_write_byte_data(data->client, ISL29125_CONF1, in isl29125_resume()
323 data->conf1); in isl29125_resume()