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