Lines Matching +full:gain +full:- +full:scaling +full:- +full:p
1 // SPDX-License-Identifier: GPL-2.0-only
9 * 7-bit I2C slave address 0x4a
88 /* Scale can be multiplied by up to 128x via ALSPGA for measurement gain */
95 * This scaling factor is hidden from userspace and instead accounted for when
165 .scan_index = -1,
174 ret = regmap_read(data->regmap, MAX44000_REG_CFG_RX, &val);
182 return regmap_write_bits(data->regmap, MAX44000_REG_CFG_RX,
192 ret = regmap_read(data->regmap, MAX44000_REG_CFG_RX, &val);
200 return regmap_write_bits(data->regmap, MAX44000_REG_CFG_RX,
211 ret = regmap_bulk_read(data->regmap, MAX44000_REG_ALS_DATA_HI,
240 return -ERANGE;
243 return regmap_write_bits(data->regmap, MAX44000_REG_CFG_TX,
252 ret = regmap_read(data->regmap, MAX44000_REG_CFG_TX, ®val);
257 regval -= 4;
272 switch (chan->type) {
274 mutex_lock(&data->lock);
276 mutex_unlock(&data->lock);
283 mutex_lock(&data->lock);
284 ret = regmap_read(data->regmap, MAX44000_REG_PRX_DATA, ®val);
285 mutex_unlock(&data->lock);
292 mutex_lock(&data->lock);
294 mutex_unlock(&data->lock);
301 return -EINVAL;
305 switch (chan->type) {
312 mutex_lock(&data->lock);
314 mutex_unlock(&data->lock);
322 - max44000_alspga_shift[alspga];
326 return -EINVAL;
330 mutex_lock(&data->lock);
332 mutex_unlock(&data->lock);
341 return -EINVAL;
352 if (mask == IIO_CHAN_INFO_RAW && chan->type == IIO_CURRENT) {
353 mutex_lock(&data->lock);
355 mutex_unlock(&data->lock);
357 } else if (mask == IIO_CHAN_INFO_INT_TIME && chan->type == IIO_LIGHT) {
362 mutex_lock(&data->lock);
364 mutex_unlock(&data->lock);
366 } else if (mask == IIO_CHAN_INFO_SCALE && chan->type == IIO_LIGHT) {
371 mutex_lock(&data->lock);
373 mutex_unlock(&data->lock);
377 return -EINVAL;
384 if (mask == IIO_CHAN_INFO_INT_TIME && chan->type == IIO_LIGHT)
386 else if (mask == IIO_CHAN_INFO_SCALE && chan->type == IIO_LIGHT)
491 static irqreturn_t max44000_trigger_handler(int irq, void *p)
493 struct iio_poll_func *pf = p;
494 struct iio_dev *indio_dev = pf->indio_dev;
500 mutex_lock(&data->lock);
501 if (test_bit(MAX44000_SCAN_INDEX_ALS, indio_dev->active_scan_mask)) {
505 data->scan.channels[index++] = ret;
507 if (test_bit(MAX44000_SCAN_INDEX_PRX, indio_dev->active_scan_mask)) {
508 ret = regmap_read(data->regmap, MAX44000_REG_PRX_DATA, ®val);
511 data->scan.channels[index] = regval;
513 mutex_unlock(&data->lock);
515 iio_push_to_buffers_with_timestamp(indio_dev, &data->scan,
517 iio_trigger_notify_done(indio_dev->trig);
521 mutex_unlock(&data->lock);
522 iio_trigger_notify_done(indio_dev->trig);
532 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
534 return -ENOMEM;
536 data->regmap = devm_regmap_init_i2c(client, &max44000_regmap_config);
537 if (IS_ERR(data->regmap)) {
538 dev_err(&client->dev, "regmap_init failed!\n");
539 return PTR_ERR(data->regmap);
542 mutex_init(&data->lock);
543 indio_dev->info = &max44000_info;
544 indio_dev->name = MAX44000_DRV_NAME;
545 indio_dev->channels = max44000_channels;
546 indio_dev->num_channels = ARRAY_SIZE(max44000_channels);
556 /* Reset ALS scaling bits */
557 ret = regmap_write(data->regmap, MAX44000_REG_CFG_RX,
560 dev_err(&client->dev, "failed to write default CFG_RX: %d\n",
571 dev_err(&client->dev, "failed to write init config: %d\n", ret);
577 ret = regmap_write(data->regmap, MAX44000_REG_CFG_MAIN, reg);
579 dev_err(&client->dev, "failed to write init config: %d\n", ret);
584 ret = regmap_read(data->regmap, MAX44000_REG_STATUS, ®);
586 dev_err(&client->dev, "failed to read init status: %d\n", ret);
590 ret = devm_iio_triggered_buffer_setup(&client->dev, indio_dev, NULL,
593 dev_err(&client->dev, "iio triggered buffer setup failed\n");
597 return devm_iio_device_register(&client->dev, indio_dev);