Lines Matching defs:adc
120 static int mcp320x_adc_conversion(struct mcp320x *adc, u8 channel,
125 if (adc->chip_info->conv_time) {
126 ret = spi_sync(adc->spi, &adc->start_conv_msg);
130 usleep_range(adc->chip_info->conv_time,
131 adc->chip_info->conv_time + 100);
134 memset(&adc->rx_buf, 0, sizeof(adc->rx_buf));
135 if (adc->chip_info->num_channels > 1)
136 adc->tx_buf = mcp320x_channel_to_tx_data(device_index, channel,
139 ret = spi_sync(adc->spi, &adc->msg);
145 *val = (adc->rx_buf[0] << 5 | adc->rx_buf[1] >> 3);
150 *val = (adc->rx_buf[0] << 2 | adc->rx_buf[1] >> 6);
153 *val = (adc->rx_buf[0] << 7 | adc->rx_buf[1] >> 1);
158 *val = (adc->rx_buf[0] << 4 | adc->rx_buf[1] >> 4);
161 *val = sign_extend32((adc->rx_buf[0] & 0x1f) << 8
162 | adc->rx_buf[1], 12);
168 u32 raw = be32_to_cpup((__be32 *)adc->rx_buf);
170 if (!(adc->spi->mode & SPI_CPOL))
198 struct mcp320x *adc = iio_priv(indio_dev);
202 mutex_lock(&adc->lock);
204 device_index = spi_get_device_id(adc->spi)->driver_data;
208 ret = mcp320x_adc_conversion(adc, channel->address,
217 ret = regulator_get_voltage(adc->reg);
223 *val2 = adc->chip_info->resolution;
229 mutex_unlock(&adc->lock);
377 struct mcp320x *adc;
381 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*adc));
385 adc = iio_priv(indio_dev);
386 adc->spi = spi;
398 adc->chip_info = chip_info;
400 adc->transfer[0].tx_buf = &adc->tx_buf;
401 adc->transfer[0].len = sizeof(adc->tx_buf);
402 adc->transfer[1].rx_buf = adc->rx_buf;
403 adc->transfer[1].len = DIV_ROUND_UP(chip_info->resolution, 8);
407 spi_message_init_with_transfers(&adc->msg,
408 &adc->transfer[1], 1);
410 spi_message_init_with_transfers(&adc->msg, adc->transfer,
411 ARRAY_SIZE(adc->transfer));
420 adc->transfer[1].len++;
423 adc->start_conv_transfer.delay.value = 8;
424 adc->start_conv_transfer.delay.unit = SPI_DELAY_UNIT_USECS;
425 spi_message_init_with_transfers(&adc->start_conv_msg,
426 &adc->start_conv_transfer, 1);
436 mcp320x_adc_conversion(adc, 0, 1, device_index, &ret);
437 mcp320x_adc_conversion(adc, 0, 1, device_index, &ret);
440 adc->reg = devm_regulator_get(&spi->dev, "vref");
441 if (IS_ERR(adc->reg))
442 return PTR_ERR(adc->reg);
444 ret = regulator_enable(adc->reg);
448 mutex_init(&adc->lock);
457 regulator_disable(adc->reg);
465 struct mcp320x *adc = iio_priv(indio_dev);
468 regulator_disable(adc->reg);