Lines Matching +full:led +full:- +full:current +full:- +full:microamp

1 // SPDX-License-Identifier: GPL-2.0+
3 * max30100.c - Support for MAX30100 heart rate and pulse oximeter sensor
76 __be16 buffer[2]; /* 2 16-bit channels */
147 .scan_index = -1,
153 return regmap_update_bits(data->regmap, MAX30100_REG_MODE_CONFIG, in max30100_set_powermode()
162 ret = regmap_write(data->regmap, MAX30100_REG_FIFO_WR_PTR, 0); in max30100_clear_fifo()
166 ret = regmap_write(data->regmap, MAX30100_REG_FIFO_OVR_CTR, 0); in max30100_clear_fifo()
170 return regmap_write(data->regmap, MAX30100_REG_FIFO_RD_PTR, 0); in max30100_clear_fifo()
202 ret = regmap_read(data->regmap, MAX30100_REG_INT_STATUS, &val); in max30100_fifo_count()
208 return MAX30100_REG_FIFO_DATA_ENTRY_COUNT - 1; in max30100_fifo_count()
217 ret = i2c_smbus_read_i2c_block_data(data->client, in max30100_read_measurement()
220 (u8 *) &data->buffer); in max30100_read_measurement()
231 mutex_lock(&data->lock); in max30100_interrupt_handler()
238 iio_push_to_buffers(data->indio_dev, data->buffer); in max30100_interrupt_handler()
239 cnt--; in max30100_interrupt_handler()
242 mutex_unlock(&data->lock); in max30100_interrupt_handler()
251 /* LED turned off */ in max30100_get_current_idx()
264 return -EINVAL; in max30100_get_current_idx()
269 struct device *dev = &data->client->dev; in max30100_led_init()
273 ret = device_property_read_u32_array(dev, "maxim,led-current-microamp", in max30100_led_init()
276 /* Default to 24 mA RED LED, 50 mA IR LED */ in max30100_led_init()
280 dev_warn(dev, "no led-current-microamp set"); in max30100_led_init()
282 return regmap_write(data->regmap, MAX30100_REG_LED_CONFIG, reg); in max30100_led_init()
285 /* RED LED current */ in max30100_led_init()
288 dev_err(dev, "invalid RED current setting %d", val[0]); in max30100_led_init()
292 ret = regmap_update_bits(data->regmap, MAX30100_REG_LED_CONFIG, in max30100_led_init()
299 /* IR LED current */ in max30100_led_init()
302 dev_err(dev, "invalid IR current setting %d", val[1]); in max30100_led_init()
306 return regmap_update_bits(data->regmap, MAX30100_REG_LED_CONFIG, in max30100_led_init()
314 /* setup LED current settings */ in max30100_chip_init()
319 /* enable hi-res SPO2 readings at 100Hz */ in max30100_chip_init()
320 ret = regmap_write(data->regmap, MAX30100_REG_SPO2_CONFIG, in max30100_chip_init()
327 ret = regmap_update_bits(data->regmap, MAX30100_REG_MODE_CONFIG, in max30100_chip_init()
335 return regmap_update_bits(data->regmap, MAX30100_REG_INT_ENABLE, in max30100_chip_init()
346 ret = regmap_read(data->regmap, MAX30100_REG_TEMP_INTEGER, &reg); in max30100_read_temp()
351 ret = regmap_read(data->regmap, MAX30100_REG_TEMP_FRACTION, &reg); in max30100_read_temp()
366 ret = regmap_update_bits(data->regmap, MAX30100_REG_MODE_CONFIG, in max30100_get_temp()
382 int ret = -EINVAL; in max30100_read_raw()
390 mutex_lock(&indio_dev->mlock); in max30100_read_raw()
393 ret = -EAGAIN; in max30100_read_raw()
401 mutex_unlock(&indio_dev->mlock); in max30100_read_raw()
424 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data)); in max30100_probe()
426 return -ENOMEM; in max30100_probe()
428 indio_dev->name = MAX30100_DRV_NAME; in max30100_probe()
429 indio_dev->channels = max30100_channels; in max30100_probe()
430 indio_dev->info = &max30100_info; in max30100_probe()
431 indio_dev->num_channels = ARRAY_SIZE(max30100_channels); in max30100_probe()
432 indio_dev->available_scan_masks = max30100_scan_masks; in max30100_probe()
433 indio_dev->modes = INDIO_DIRECT_MODE; in max30100_probe()
435 ret = devm_iio_kfifo_buffer_setup(&client->dev, indio_dev, in max30100_probe()
441 data->indio_dev = indio_dev; in max30100_probe()
442 data->client = client; in max30100_probe()
444 mutex_init(&data->lock); in max30100_probe()
447 data->regmap = devm_regmap_init_i2c(client, &max30100_regmap_config); in max30100_probe()
448 if (IS_ERR(data->regmap)) { in max30100_probe()
449 dev_err(&client->dev, "regmap initialization failed.\n"); in max30100_probe()
450 return PTR_ERR(data->regmap); in max30100_probe()
458 if (client->irq <= 0) { in max30100_probe()
459 dev_err(&client->dev, "no valid irq defined\n"); in max30100_probe()
460 return -EINVAL; in max30100_probe()
462 ret = devm_request_threaded_irq(&client->dev, client->irq, in max30100_probe()
467 dev_err(&client->dev, "request irq (%d) failed\n", client->irq); in max30100_probe()