Lines Matching refs:data

239 	 * data reads, configuration updates
257 static bool ads1015_event_channel_enabled(struct ads1015_data *data)
259 return (data->event_channel != ADS1015_CHANNELS);
262 static void ads1015_event_channel_enable(struct ads1015_data *data, int chan,
265 WARN_ON(ads1015_event_channel_enabled(data));
267 data->event_channel = chan;
268 data->comp_mode = comp_mode;
271 static void ads1015_event_channel_disable(struct ads1015_data *data, int chan)
273 data->event_channel = ADS1015_CHANNELS;
320 static int ads1015_set_power_state(struct ads1015_data *data, bool on)
323 struct device *dev = regmap_get_device(data->regmap);
339 static int ads1015_set_power_state(struct ads1015_data *data, bool on)
347 int ads1015_get_adc_result(struct ads1015_data *data, int chan, int *val)
355 ret = regmap_read(data->regmap, ADS1015_CFG_REG, &old);
359 pga = data->channel_data[chan].pga;
360 dr = data->channel_data[chan].data_rate;
366 if (ads1015_event_channel_enabled(data)) {
368 cfg |= data->thresh_data[chan].comp_queue <<
370 data->comp_mode <<
376 ret = regmap_write(data->regmap, ADS1015_CFG_REG, cfg);
379 data->conv_invalid = true;
381 if (data->conv_invalid) {
383 conv_time = DIV_ROUND_UP(USEC_PER_SEC, data->data_rate[dr_old]);
384 conv_time += DIV_ROUND_UP(USEC_PER_SEC, data->data_rate[dr]);
387 data->conv_invalid = false;
390 return regmap_read(data->regmap, ADS1015_CONV_REG, val);
397 struct ads1015_data *data = iio_priv(indio_dev);
407 mutex_lock(&data->lock);
410 ret = ads1015_get_adc_result(data, chan, &res);
412 mutex_unlock(&data->lock);
417 mutex_unlock(&data->lock);
428 static int ads1015_set_scale(struct ads1015_data *data,
438 data->channel_data[chan->address].pga = i;
446 static int ads1015_set_data_rate(struct ads1015_data *data, int chan, int rate)
451 if (data->data_rate[i] == rate) {
452 data->channel_data[chan].data_rate = i;
465 struct ads1015_data *data = iio_priv(indio_dev);
467 mutex_lock(&data->lock);
476 if (ads1015_event_channel_enabled(data) &&
477 data->event_channel != chan->address) {
482 ret = ads1015_set_power_state(data, true);
486 ret = ads1015_get_adc_result(data, chan->address, val);
488 ads1015_set_power_state(data, false);
494 ret = ads1015_set_power_state(data, false);
504 idx = data->channel_data[chan->address].pga;
510 idx = data->channel_data[chan->address].data_rate;
511 *val = data->data_rate[idx];
518 mutex_unlock(&data->lock);
527 struct ads1015_data *data = iio_priv(indio_dev);
530 mutex_lock(&data->lock);
533 ret = ads1015_set_scale(data, chan, val, val2);
536 ret = ads1015_set_data_rate(data, chan->address, val);
542 mutex_unlock(&data->lock);
552 struct ads1015_data *data = iio_priv(indio_dev);
558 mutex_lock(&data->lock);
563 data->thresh_data[chan->address].high_thresh :
564 data->thresh_data[chan->address].low_thresh;
568 dr = data->channel_data[chan->address].data_rate;
569 comp_queue = data->thresh_data[chan->address].comp_queue;
571 USEC_PER_SEC / data->data_rate[dr];
582 mutex_unlock(&data->lock);
592 struct ads1015_data *data = iio_priv(indio_dev);
599 mutex_lock(&data->lock);
608 data->thresh_data[chan->address].high_thresh = val;
610 data->thresh_data[chan->address].low_thresh = val;
613 dr = data->channel_data[chan->address].data_rate;
618 USEC_PER_SEC / data->data_rate[dr])
621 data->thresh_data[chan->address].comp_queue = i;
628 mutex_unlock(&data->lock);
637 struct ads1015_data *data = iio_priv(indio_dev);
640 mutex_lock(&data->lock);
641 if (data->event_channel == chan->address) {
647 ret = (data->comp_mode == ADS1015_CFG_COMP_MODE_WINDOW);
654 mutex_unlock(&data->lock);
659 static int ads1015_enable_event_config(struct ads1015_data *data,
662 int low_thresh = data->thresh_data[chan->address].low_thresh;
663 int high_thresh = data->thresh_data[chan->address].high_thresh;
667 if (ads1015_event_channel_enabled(data)) {
668 if (data->event_channel != chan->address ||
669 (data->comp_mode == ADS1015_CFG_COMP_MODE_TRAD &&
680 ret = regmap_write(data->regmap, ADS1015_LO_THRESH_REG,
685 ret = regmap_write(data->regmap, ADS1015_HI_THRESH_REG,
690 ret = ads1015_set_power_state(data, true);
694 ads1015_event_channel_enable(data, chan->address, comp_mode);
696 ret = ads1015_get_adc_result(data, chan->address, &val);
698 ads1015_event_channel_disable(data, chan->address);
699 ads1015_set_power_state(data, false);
705 static int ads1015_disable_event_config(struct ads1015_data *data,
710 if (!ads1015_event_channel_enabled(data))
713 if (data->event_channel != chan->address)
716 if (data->comp_mode == ADS1015_CFG_COMP_MODE_TRAD &&
720 ret = regmap_update_bits(data->regmap, ADS1015_CFG_REG,
727 ads1015_event_channel_disable(data, chan->address);
729 return ads1015_set_power_state(data, false);
736 struct ads1015_data *data = iio_priv(indio_dev);
741 mutex_lock(&data->lock);
746 mutex_unlock(&data->lock);
751 ret = ads1015_enable_event_config(data, chan, comp_mode);
753 ret = ads1015_disable_event_config(data, chan, comp_mode);
756 mutex_unlock(&data->lock);
764 struct ads1015_data *data = iio_priv(indio_dev);
769 ret = regmap_read(data->regmap, ADS1015_CONV_REG, &val);
773 if (ads1015_event_channel_enabled(data)) {
777 dir = data->comp_mode == ADS1015_CFG_COMP_MODE_TRAD ?
779 code = IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, data->event_channel,
789 struct ads1015_data *data = iio_priv(indio_dev);
792 if (ads1015_event_channel_enabled(data))
862 struct ads1015_data *data = iio_priv(indio_dev);
903 data->channel_data[channel].pga = pga;
904 data->channel_data[channel].data_rate = data_rate;
917 struct ads1015_data *data = iio_priv(indio_dev);
924 data->channel_data[k].pga = ADS1015_DEFAULT_PGA;
925 data->channel_data[k].data_rate = ADS1015_DEFAULT_DATA_RATE;
929 static int ads1015_set_conv_mode(struct ads1015_data *data, int mode)
931 return regmap_update_bits(data->regmap, ADS1015_CFG_REG,
940 struct ads1015_data *data;
945 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
949 data = iio_priv(indio_dev);
952 mutex_init(&data->lock);
965 data->data_rate = (unsigned int *) &ads1015_data_rate;
971 data->data_rate = (unsigned int *) &ads1115_data_rate;
978 data->event_channel = ADS1015_CHANNELS;
986 data->thresh_data[i].low_thresh = -1 << (realbits - 1);
987 data->thresh_data[i].high_thresh = (1 << (realbits - 1)) - 1;
993 data->regmap = devm_regmap_init_i2c(client, &ads1015_regmap_config);
994 if (IS_ERR(data->regmap)) {
996 return PTR_ERR(data->regmap);
1029 ret = regmap_update_bits(data->regmap, ADS1015_CFG_REG,
1042 ret = ads1015_set_conv_mode(data, ADS1015_CONTINUOUS);
1046 data->conv_invalid = true;
1067 struct ads1015_data *data = iio_priv(indio_dev);
1076 return ads1015_set_conv_mode(data, ADS1015_SINGLESHOT);
1083 struct ads1015_data *data = iio_priv(indio_dev);
1085 return ads1015_set_conv_mode(data, ADS1015_SINGLESHOT);
1091 struct ads1015_data *data = iio_priv(indio_dev);
1094 ret = ads1015_set_conv_mode(data, ADS1015_CONTINUOUS);
1096 data->conv_invalid = true;
1117 .data = (void *)ADS1015
1121 .data = (void *)ADS1115