Lines Matching defs:adc
169 static int adc5_read(struct adc5_chip *adc, u16 offset, u8 *data, int len)
171 return regmap_bulk_read(adc->regmap, adc->base + offset, data, len);
174 static int adc5_write(struct adc5_chip *adc, u16 offset, u8 *data, int len)
176 return regmap_bulk_write(adc->regmap, adc->base + offset, data, len);
179 static int adc5_masked_write(struct adc5_chip *adc, u16 offset, u8 mask, u8 val)
181 return regmap_update_bits(adc->regmap, adc->base + offset, mask, val);
233 static int adc5_read_voltage_data(struct adc5_chip *adc, u16 *data)
238 ret = adc5_read(adc, ADC5_USR_DATA0, &rslt_lsb, sizeof(rslt_lsb));
242 ret = adc5_read(adc, ADC5_USR_DATA1, &rslt_msb, sizeof(rslt_lsb));
249 dev_err(adc->dev, "Invalid data:0x%x\n", *data);
253 dev_dbg(adc->dev, "voltage raw code:0x%x\n", *data);
258 static int adc5_poll_wait_eoc(struct adc5_chip *adc)
265 ret = adc5_read(adc, ADC5_USR_STATUS1, &status1,
280 static void adc5_update_dig_param(struct adc5_chip *adc,
296 static int adc5_configure(struct adc5_chip *adc,
303 ret = adc5_read(adc, ADC5_USR_DIG_PARAM, buf, sizeof(buf));
308 adc5_update_dig_param(adc, prop, &buf[0]);
327 if (!adc->poll_eoc)
328 reinit_completion(&adc->complete);
330 return adc5_write(adc, ADC5_USR_DIG_PARAM, buf, sizeof(buf));
333 static int adc7_configure(struct adc5_chip *adc,
339 ret = adc5_masked_write(adc, ADC_APP_SID, ADC_APP_SID_MASK, prop->sid);
343 ret = adc5_read(adc, ADC5_USR_DIG_PARAM, buf, sizeof(buf));
348 adc5_update_dig_param(adc, prop, &buf[0]);
364 if (!adc->poll_eoc)
365 reinit_completion(&adc->complete);
367 ret = adc5_write(adc, ADC5_USR_DIG_PARAM, buf, sizeof(buf));
371 return adc5_write(adc, ADC5_USR_CONV_REQ, &conv_req, 1);
374 static int adc5_do_conversion(struct adc5_chip *adc,
381 mutex_lock(&adc->lock);
383 ret = adc5_configure(adc, prop);
385 dev_err(adc->dev, "ADC configure failed with %d\n", ret);
389 if (adc->poll_eoc) {
390 ret = adc5_poll_wait_eoc(adc);
392 dev_err(adc->dev, "EOC bit not set\n");
396 ret = wait_for_completion_timeout(&adc->complete,
399 dev_dbg(adc->dev, "Did not get completion timeout.\n");
400 ret = adc5_poll_wait_eoc(adc);
402 dev_err(adc->dev, "EOC bit not set\n");
408 ret = adc5_read_voltage_data(adc, data_volt);
410 mutex_unlock(&adc->lock);
415 static int adc7_do_conversion(struct adc5_chip *adc,
423 mutex_lock(&adc->lock);
425 ret = adc7_configure(adc, prop);
427 dev_err(adc->dev, "ADC configure failed with %d\n", ret);
432 wait_for_completion_timeout(&adc->complete, ADC7_CONV_TIMEOUT);
434 ret = adc5_read(adc, ADC5_USR_STATUS1, &status, 1);
439 dev_err(adc->dev, "Unexpected conversion fault\n");
444 ret = adc5_read_voltage_data(adc, data_volt);
447 mutex_unlock(&adc->lock);
452 typedef int (*adc_do_conversion)(struct adc5_chip *adc,
459 struct adc5_chip *adc = dev_id;
461 complete(&adc->complete);
469 struct adc5_chip *adc = iio_priv(indio_dev);
472 for (i = 0; i < adc->nchannels; i++)
473 if (adc->chan_props[i].channel == iiospec->args[0])
482 struct adc5_chip *adc = iio_priv(indio_dev);
485 for (i = 0; i < adc->nchannels; i++) {
486 v_channel = (adc->chan_props[i].sid << ADC_CHANNEL_OFFSET) |
487 adc->chan_props[i].channel;
499 struct adc5_chip *adc = iio_priv(indio_dev);
504 prop = &adc->chan_props[chan->address];
508 ret = do_conv(adc, prop, chan,
515 adc->data,
674 static int adc5_get_dt_channel_data(struct adc5_chip *adc,
683 struct device *dev = adc->dev;
695 if (adc->data->info == &adc7_info) {
742 adc->data->adc_chans[prop->channel].prescale_index;
749 ret = adc5_read(adc, ADC5_USR_REVISION1, dig_version,
761 adc->data->info == &adc7_info)
859 .compatible = "qcom,spmi-adc-rev2",
866 static int adc5_get_dt_data(struct adc5_chip *adc, struct device_node *node)
877 adc->nchannels = of_get_available_child_count(node);
878 if (!adc->nchannels)
881 adc->iio_chans = devm_kcalloc(adc->dev, adc->nchannels,
882 sizeof(*adc->iio_chans), GFP_KERNEL);
883 if (!adc->iio_chans)
886 adc->chan_props = devm_kcalloc(adc->dev, adc->nchannels,
887 sizeof(*adc->chan_props), GFP_KERNEL);
888 if (!adc->chan_props)
891 chan_props = adc->chan_props;
892 iio_chan = adc->iio_chans;
898 adc->data = data;
901 ret = adc5_get_dt_channel_data(adc, &prop, child, data);
931 struct adc5_chip *adc;
944 indio_dev = devm_iio_device_alloc(dev, sizeof(*adc));
948 adc = iio_priv(indio_dev);
949 adc->regmap = regmap;
950 adc->dev = dev;
951 adc->base = reg;
953 init_completion(&adc->complete);
954 mutex_init(&adc->lock);
956 ret = adc5_get_dt_data(adc, node);
958 dev_err(dev, "adc get dt data failed\n");
966 adc->poll_eoc = true;
969 "pm-adc5", adc);
976 indio_dev->info = adc->data->info;
977 indio_dev->channels = adc->iio_chans;
978 indio_dev->num_channels = adc->nchannels;