• Home
  • Raw
  • Download

Lines Matching refs:adc

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