Lines Matching +full:ds86 +full:- +full:2015 +full:- +full:0004
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * IIO driver for Lite-On LTR390 ALS and UV sensor
4 * (7-bit I2C slave address 0x53)
12 …* https://optoelectronics.liteon.com/upload/download/DS86-2015-0004/LTR-390UV_Final_%20DS_V1%201…
15 * - Support for configurable gain and resolution
16 * - Sensor suspend/resume support
17 * - Add support for reading the ALS
18 * - Interrupt support
65 * At 20-bit resolution (integration time: 400ms) and 18x gain, 2300 counts of
68 * For the default resolution of 18-bit (integration time: 100ms) and default
122 struct device *dev = &data->client->dev; in ltr390_register_read()
126 ret = regmap_bulk_read(data->regmap, register_address, recieve_buffer, in ltr390_register_read()
140 if (data->mode == mode) in ltr390_set_mode()
145 ret = regmap_clear_bits(data->regmap, LTR390_MAIN_CTRL, LTR390_UVS_MODE); in ltr390_set_mode()
149 ret = regmap_set_bits(data->regmap, LTR390_MAIN_CTRL, LTR390_UVS_MODE); in ltr390_set_mode()
156 data->mode = mode; in ltr390_set_mode()
165 return DIV_ROUND_CLOSEST(23 * data->gain * data->int_time_us, 10 * orig_gain * orig_int_time); in ltr390_counts_per_uvi()
173 ret = regmap_read(data->regmap, LTR390_ALS_UVS_MEAS_RATE, &value); in ltr390_get_samp_freq_or_period()
188 guard(mutex)(&data->lock); in ltr390_read_raw()
191 switch (chan->type) { in ltr390_read_raw()
213 return -EINVAL; in ltr390_read_raw()
218 switch (chan->type) { in ltr390_read_raw()
226 *val2 = data->gain * data->int_time_us; in ltr390_read_raw()
230 return -EINVAL; in ltr390_read_raw()
234 *val = data->int_time_us; in ltr390_read_raw()
242 return -EINVAL; in ltr390_read_raw()
303 guard(mutex)(&data->lock); in ltr390_set_gain()
304 ret = regmap_update_bits(data->regmap, in ltr390_set_gain()
310 data->gain = ltr390_gain_map[idx]; in ltr390_set_gain()
314 return -EINVAL; in ltr390_set_gain()
325 guard(mutex)(&data->lock); in ltr390_set_int_time()
326 ret = regmap_update_bits(data->regmap, in ltr390_set_int_time()
333 data->int_time_us = ltr390_int_time_map_us[idx]; in ltr390_set_int_time()
337 return -EINVAL; in ltr390_set_int_time()
348 guard(mutex)(&data->lock); in ltr390_set_samp_freq()
349 return regmap_update_bits(data->regmap, in ltr390_set_samp_freq()
354 return -EINVAL; in ltr390_set_samp_freq()
377 return -EINVAL; in ltr390_read_avail()
389 return -EINVAL; in ltr390_write_raw()
395 return -EINVAL; in ltr390_write_raw()
401 return -EINVAL; in ltr390_write_raw()
406 return -EINVAL; in ltr390_write_raw()
415 ret = regmap_read(data->regmap, LTR390_INT_PST, &prst); in ltr390_read_intr_prst()
431 return -EINVAL; in ltr390_write_intr_prst()
435 return -EINVAL; in ltr390_write_intr_prst()
437 guard(mutex)(&data->lock); in ltr390_write_intr_prst()
438 ret = regmap_update_bits(data->regmap, in ltr390_write_intr_prst()
470 return -EINVAL; in ltr390_read_threshold()
480 guard(mutex)(&data->lock); in ltr390_write_threshold()
483 return regmap_bulk_write(data->regmap, LTR390_THRESH_UP, &val, 3); in ltr390_write_threshold()
486 return regmap_bulk_write(data->regmap, LTR390_THRESH_LOW, &val, 3); in ltr390_write_threshold()
489 return -EINVAL; in ltr390_write_threshold()
508 return -EINVAL; in ltr390_read_event_value()
522 return -EINVAL; in ltr390_write_event_value()
528 return -EINVAL; in ltr390_write_event_value()
533 return -EINVAL; in ltr390_write_event_value()
545 ret = regmap_read(data->regmap, LTR390_INT_CFG, &status); in ltr390_read_event_config()
562 return regmap_clear_bits(data->regmap, LTR390_INT_CFG, LTR390_LS_INT_EN); in ltr390_write_event_config()
564 guard(mutex)(&data->lock); in ltr390_write_event_config()
565 ret = regmap_set_bits(data->regmap, LTR390_INT_CFG, LTR390_LS_INT_EN); in ltr390_write_event_config()
569 switch (chan->type) { in ltr390_write_event_config()
575 return regmap_clear_bits(data->regmap, LTR390_INT_CFG, LTR390_LS_INT_SEL_UVS); in ltr390_write_event_config()
582 return regmap_set_bits(data->regmap, LTR390_INT_CFG, LTR390_LS_INT_SEL_UVS); in ltr390_write_event_config()
585 return -EINVAL; in ltr390_write_event_config()
606 ret = regmap_read(data->regmap, LTR390_MAIN_STATUS, &status); in ltr390_interrupt_handler()
610 switch (data->mode) { in ltr390_interrupt_handler()
638 dev = &client->dev; in ltr390_probe()
641 return -ENOMEM; in ltr390_probe()
645 data->regmap = devm_regmap_init_i2c(client, <r390_regmap_config); in ltr390_probe()
646 if (IS_ERR(data->regmap)) in ltr390_probe()
647 return dev_err_probe(dev, PTR_ERR(data->regmap), in ltr390_probe()
650 data->client = client; in ltr390_probe()
652 data->int_time_us = 100000; in ltr390_probe()
654 data->gain = 3; in ltr390_probe()
656 data->mode = LTR390_SET_ALS_MODE; in ltr390_probe()
658 mutex_init(&data->lock); in ltr390_probe()
660 indio_dev->info = <r390_info; in ltr390_probe()
661 indio_dev->channels = ltr390_channels; in ltr390_probe()
662 indio_dev->num_channels = ARRAY_SIZE(ltr390_channels); in ltr390_probe()
663 indio_dev->name = "ltr390"; in ltr390_probe()
665 ret = regmap_read(data->regmap, LTR390_PART_ID, &part_number); in ltr390_probe()
675 regmap_set_bits(data->regmap, LTR390_MAIN_CTRL, LTR390_SW_RESET); in ltr390_probe()
680 ret = regmap_set_bits(data->regmap, LTR390_MAIN_CTRL, LTR390_SENSOR_ENABLE); in ltr390_probe()
684 if (client->irq) { in ltr390_probe()
685 ret = devm_request_threaded_irq(dev, client->irq, in ltr390_probe()
692 "request irq (%d) failed\n", client->irq); in ltr390_probe()
703 return regmap_clear_bits(data->regmap, LTR390_MAIN_CTRL, in ltr390_suspend()
712 return regmap_set_bits(data->regmap, LTR390_MAIN_CTRL, in ltr390_resume()
742 MODULE_DESCRIPTION("Lite-On LTR390 ALS and UV sensor Driver");