Lines Matching full:adc
57 static int mcp3911_read(struct mcp3911 *adc, u8 reg, u32 *val, u8 len) in mcp3911_read() argument
61 reg = MCP3911_REG_READ(reg, adc->dev_addr); in mcp3911_read()
62 ret = spi_write_then_read(adc->spi, ®, 1, val, len); in mcp3911_read()
68 dev_dbg(&adc->spi->dev, "reading 0x%x from register 0x%x\n", *val, in mcp3911_read()
73 static int mcp3911_write(struct mcp3911 *adc, u8 reg, u32 val, u8 len) in mcp3911_write() argument
75 dev_dbg(&adc->spi->dev, "writing 0x%x to register 0x%x\n", val, reg); in mcp3911_write()
79 val |= MCP3911_REG_WRITE(reg, adc->dev_addr); in mcp3911_write()
81 return spi_write(adc->spi, &val, len + 1); in mcp3911_write()
84 static int mcp3911_update(struct mcp3911 *adc, u8 reg, u32 mask, in mcp3911_update() argument
90 ret = mcp3911_read(adc, reg, &tmp, len); in mcp3911_update()
96 return mcp3911_write(adc, reg, val, len); in mcp3911_update()
103 struct mcp3911 *adc = iio_priv(indio_dev); in mcp3911_read_raw() local
106 mutex_lock(&adc->lock); in mcp3911_read_raw()
109 ret = mcp3911_read(adc, in mcp3911_read_raw()
120 ret = mcp3911_read(adc, in mcp3911_read_raw()
129 if (adc->vref) { in mcp3911_read_raw()
130 ret = regulator_get_voltage(adc->vref); in mcp3911_read_raw()
156 mutex_unlock(&adc->lock); in mcp3911_read_raw()
164 struct mcp3911 *adc = iio_priv(indio_dev); in mcp3911_write_raw() local
167 mutex_lock(&adc->lock); in mcp3911_write_raw()
176 ret = mcp3911_write(adc, MCP3911_OFFCAL(channel->channel), val, in mcp3911_write_raw()
182 ret = mcp3911_update(adc, MCP3911_REG_STATUSCOM, in mcp3911_write_raw()
189 mutex_unlock(&adc->lock); in mcp3911_write_raw()
212 static int mcp3911_config(struct mcp3911 *adc, struct device_node *of_node) in mcp3911_config() argument
217 of_property_read_u32(of_node, "device-addr", &adc->dev_addr); in mcp3911_config()
218 if (adc->dev_addr > 3) { in mcp3911_config()
219 dev_err(&adc->spi->dev, in mcp3911_config()
221 adc->dev_addr); in mcp3911_config()
224 dev_dbg(&adc->spi->dev, "use device address %i\n", adc->dev_addr); in mcp3911_config()
226 ret = mcp3911_read(adc, MCP3911_REG_CONFIG, &configreg, 2); in mcp3911_config()
230 if (adc->vref) { in mcp3911_config()
231 dev_dbg(&adc->spi->dev, "use external voltage reference\n"); in mcp3911_config()
234 dev_dbg(&adc->spi->dev, in mcp3911_config()
239 if (adc->clki) { in mcp3911_config()
240 dev_dbg(&adc->spi->dev, "use external clock as clocksource\n"); in mcp3911_config()
243 dev_dbg(&adc->spi->dev, in mcp3911_config()
248 return mcp3911_write(adc, MCP3911_REG_CONFIG, configreg, 2); in mcp3911_config()
254 struct mcp3911 *adc; in mcp3911_probe() local
257 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*adc)); in mcp3911_probe()
261 adc = iio_priv(indio_dev); in mcp3911_probe()
262 adc->spi = spi; in mcp3911_probe()
264 adc->vref = devm_regulator_get_optional(&adc->spi->dev, "vref"); in mcp3911_probe()
265 if (IS_ERR(adc->vref)) { in mcp3911_probe()
266 if (PTR_ERR(adc->vref) == -ENODEV) { in mcp3911_probe()
267 adc->vref = NULL; in mcp3911_probe()
269 dev_err(&adc->spi->dev, in mcp3911_probe()
271 PTR_ERR(adc->vref)); in mcp3911_probe()
272 return PTR_ERR(adc->vref); in mcp3911_probe()
276 ret = regulator_enable(adc->vref); in mcp3911_probe()
281 adc->clki = devm_clk_get(&adc->spi->dev, NULL); in mcp3911_probe()
282 if (IS_ERR(adc->clki)) { in mcp3911_probe()
283 if (PTR_ERR(adc->clki) == -ENOENT) { in mcp3911_probe()
284 adc->clki = NULL; in mcp3911_probe()
286 dev_err(&adc->spi->dev, in mcp3911_probe()
287 "failed to get adc clk (%ld)\n", in mcp3911_probe()
288 PTR_ERR(adc->clki)); in mcp3911_probe()
289 ret = PTR_ERR(adc->clki); in mcp3911_probe()
293 ret = clk_prepare_enable(adc->clki); in mcp3911_probe()
295 dev_err(&adc->spi->dev, in mcp3911_probe()
301 ret = mcp3911_config(adc, spi->dev.of_node); in mcp3911_probe()
313 mutex_init(&adc->lock); in mcp3911_probe()
322 clk_disable_unprepare(adc->clki); in mcp3911_probe()
324 if (adc->vref) in mcp3911_probe()
325 regulator_disable(adc->vref); in mcp3911_probe()
333 struct mcp3911 *adc = iio_priv(indio_dev); in mcp3911_remove() local
337 clk_disable_unprepare(adc->clki); in mcp3911_remove()
338 if (adc->vref) in mcp3911_remove()
339 regulator_disable(adc->vref); in mcp3911_remove()