Lines Matching defs:adc
13 #include <linux/iio/adc/qcom-vadc-common.h>
29 * drivers/hwmon/pm8xxx-adc.c
309 * include/linux/mfd/pm8xxx/pm8xxx-adc.h
419 struct pm8xxx_xoadc *adc = iio_priv(indio_dev);
421 complete(&adc->complete);
427 pm8xxx_get_channel(struct pm8xxx_xoadc *adc, u8 chan)
431 for (i = 0; i < adc->nchans; i++) {
432 struct pm8xxx_chan_info *ch = &adc->chans[i];
439 static int pm8xxx_read_channel_rsv(struct pm8xxx_xoadc *adc,
449 dev_dbg(adc->dev, "read channel \"%s\", amux %d, prescale/mux: %d, rsv %d\n",
452 mutex_lock(&adc->lock);
457 ret = regmap_write(adc->map, ADC_ARB_USRP_AMUX_CNTRL, val);
464 if (adc->variant->broken_ratiometric && !force_ratiometric) {
494 ret = regmap_update_bits(adc->map,
501 ret = regmap_write(adc->map, ADC_ARB_USRP_ANA_PARAM,
507 ret = regmap_write(adc->map, ADC_ARB_USRP_DIG_PARAM,
514 ret = regmap_write(adc->map, ADC_ARB_USRP_ANA_PARAM,
520 ret = regmap_write(adc->map, ADC_ARB_USRP_CNTRL,
524 ret = regmap_write(adc->map, ADC_ARB_USRP_CNTRL,
531 reinit_completion(&adc->complete);
532 ret = regmap_write(adc->map, ADC_ARB_USRP_CNTRL,
539 ret = wait_for_completion_timeout(&adc->complete,
542 dev_err(adc->dev, "conversion timed out\n");
547 ret = regmap_read(adc->map, ADC_ARB_USRP_DATA0, &val);
551 ret = regmap_read(adc->map, ADC_ARB_USRP_DATA1, &val);
558 ret = regmap_write(adc->map, ADC_ARB_USRP_CNTRL, 0);
561 ret = regmap_write(adc->map, ADC_ARB_USRP_CNTRL, 0);
566 mutex_unlock(&adc->lock);
570 static int pm8xxx_read_channel(struct pm8xxx_xoadc *adc,
579 return pm8xxx_read_channel_rsv(adc, ch, 0xff, adc_code, false);
582 static int pm8xxx_calibrate_device(struct pm8xxx_xoadc *adc)
591 adc->graph[VADC_CALIB_ABSOLUTE].dx = VADC_ABSOLUTE_RANGE_UV;
592 adc->graph[VADC_CALIB_RATIOMETRIC].dx = VADC_RATIOMETRIC_RANGE;
595 ch = pm8xxx_get_channel(adc, PM8XXX_CHANNEL_125V);
598 ret = pm8xxx_read_channel(adc, ch, &read_1250v);
600 dev_err(adc->dev, "could not read 1.25V reference channel\n");
603 ch = pm8xxx_get_channel(adc, PM8XXX_CHANNEL_INTERNAL);
606 ret = pm8xxx_read_channel(adc, ch, &read_0625v);
608 dev_err(adc->dev, "could not read 0.625V reference channel\n");
612 dev_err(adc->dev, "read same ADC code for 1.25V and 0.625V\n");
616 adc->graph[VADC_CALIB_ABSOLUTE].dy = read_1250v - read_0625v;
617 adc->graph[VADC_CALIB_ABSOLUTE].gnd = read_0625v;
619 dev_info(adc->dev, "absolute calibration dx = %d uV, dy = %d units\n",
620 VADC_ABSOLUTE_RANGE_UV, adc->graph[VADC_CALIB_ABSOLUTE].dy);
623 ch = pm8xxx_get_channel(adc, PM8XXX_CHANNEL_MUXOFF);
626 ret = pm8xxx_read_channel_rsv(adc, ch, AMUX_RSV5,
629 dev_err(adc->dev, "could not read MUXOFF reference channel\n");
632 ret = pm8xxx_read_channel_rsv(adc, ch, AMUX_RSV4,
635 dev_err(adc->dev, "could not read MUXOFF reference channel\n");
638 adc->graph[VADC_CALIB_RATIOMETRIC].dy =
640 adc->graph[VADC_CALIB_RATIOMETRIC].gnd = read_nomux_rsv4;
642 dev_info(adc->dev, "ratiometric calibration dx = %d, dy = %d units\n",
644 adc->graph[VADC_CALIB_RATIOMETRIC].dy);
653 struct pm8xxx_xoadc *adc = iio_priv(indio_dev);
660 ch = pm8xxx_get_channel(adc, chan->address);
662 dev_err(adc->dev, "no such channel %lu\n",
666 ret = pm8xxx_read_channel(adc, ch, &adc_code);
671 &adc->graph[ch->calibration],
680 ch = pm8xxx_get_channel(adc, chan->address);
682 dev_err(adc->dev, "no such channel %lu\n",
686 ret = pm8xxx_read_channel(adc, ch, &adc_code);
700 struct pm8xxx_xoadc *adc = iio_priv(indio_dev);
721 for (i = 0; i < adc->nchans; i++)
722 if (adc->chans[i].hwchan->pre_scale_mux == pre_scale_mux &&
723 adc->chans[i].hwchan->amux_channel == amux_channel)
823 static int pm8xxx_xoadc_parse_channels(struct pm8xxx_xoadc *adc)
830 adc->nchans = device_get_child_node_count(adc->dev);
831 if (!adc->nchans) {
832 dev_err(adc->dev, "no channel children\n");
835 dev_dbg(adc->dev, "found %d ADC channels\n", adc->nchans);
837 adc->iio_chans = devm_kcalloc(adc->dev, adc->nchans,
838 sizeof(*adc->iio_chans), GFP_KERNEL);
839 if (!adc->iio_chans)
842 adc->chans = devm_kcalloc(adc->dev, adc->nchans,
843 sizeof(*adc->chans), GFP_KERNEL);
844 if (!adc->chans)
848 device_for_each_child_node(adc->dev, child) {
849 ch = &adc->chans[i];
850 ret = pm8xxx_xoadc_parse_channel(adc->dev, child,
851 adc->variant->channels,
852 &adc->iio_chans[i],
862 ch = pm8xxx_get_channel(adc, PM8XXX_CHANNEL_125V);
864 dev_err(adc->dev, "missing 1.25V reference channel\n");
867 ch = pm8xxx_get_channel(adc, PM8XXX_CHANNEL_INTERNAL);
869 dev_err(adc->dev, "missing 0.625V reference channel\n");
872 ch = pm8xxx_get_channel(adc, PM8XXX_CHANNEL_MUXOFF);
874 dev_err(adc->dev, "missing MUXOFF reference channel\n");
884 struct pm8xxx_xoadc *adc;
894 indio_dev = devm_iio_device_alloc(dev, sizeof(*adc));
899 adc = iio_priv(indio_dev);
900 adc->dev = dev;
901 adc->variant = variant;
902 init_completion(&adc->complete);
903 mutex_init(&adc->lock);
905 ret = pm8xxx_xoadc_parse_channels(adc);
914 adc->map = map;
917 adc->vref = devm_regulator_get(dev, "xoadc-ref");
918 if (IS_ERR(adc->vref))
919 return dev_err_probe(dev, PTR_ERR(adc->vref),
921 ret = regulator_enable(adc->vref);
937 indio_dev->channels = adc->iio_chans;
938 indio_dev->num_channels = adc->nchans;
944 ret = pm8xxx_calibrate_device(adc);
955 regulator_disable(adc->vref);
963 struct pm8xxx_xoadc *adc = iio_priv(indio_dev);
967 regulator_disable(adc->vref);
997 .compatible = "qcom,pm8018-adc",
1001 .compatible = "qcom,pm8038-adc",
1005 .compatible = "qcom,pm8058-adc",
1009 .compatible = "qcom,pm8921-adc",
1018 .name = "pm8xxx-adc",