Lines Matching refs: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);
382 struct mcp320x *adc;
386 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*adc));
390 adc = iio_priv(indio_dev);
391 adc->spi = spi;
402 adc->chip_info = chip_info;
404 adc->transfer[0].tx_buf = &adc->tx_buf;
405 adc->transfer[0].len = sizeof(adc->tx_buf);
406 adc->transfer[1].rx_buf = adc->rx_buf;
407 adc->transfer[1].len = DIV_ROUND_UP(chip_info->resolution, 8);
411 spi_message_init_with_transfers(&adc->msg,
412 &adc->transfer[1], 1);
414 spi_message_init_with_transfers(&adc->msg, adc->transfer,
415 ARRAY_SIZE(adc->transfer));
424 adc->transfer[1].len++;
427 adc->start_conv_transfer.delay.value = 8;
428 adc->start_conv_transfer.delay.unit = SPI_DELAY_UNIT_USECS;
429 spi_message_init_with_transfers(&adc->start_conv_msg,
430 &adc->start_conv_transfer, 1);
440 mcp320x_adc_conversion(adc, 0, 1, device_index, &ret);
441 mcp320x_adc_conversion(adc, 0, 1, device_index, &ret);
444 adc->reg = devm_regulator_get(&spi->dev, "vref");
445 if (IS_ERR(adc->reg))
446 return PTR_ERR(adc->reg);
448 ret = regulator_enable(adc->reg);
452 ret = devm_add_action_or_reset(&spi->dev, mcp320x_regulator_disable, adc->reg);
456 mutex_init(&adc->lock);