Lines Matching +full:vss +full:- +full:supply
1 // SPDX-License-Identifier: GPL-2.0-only
63 * struct ad5791_chip_info - chip specific information
72 * struct ad5791_state - driver instance specific data
74 * @reg_vdd: positive supply regulator
75 * @reg_vss: negative supply regulator
78 * @vref_neg_mv: voltage of the negative supply
110 st->data[0].d32 = cpu_to_be32(AD5791_CMD_WRITE | in ad5791_spi_write()
114 return spi_write(st->spi, &st->data[0].d8[1], 3); in ad5791_spi_write()
122 .tx_buf = &st->data[0].d8[1], in ad5791_spi_read()
127 .tx_buf = &st->data[1].d8[1], in ad5791_spi_read()
128 .rx_buf = &st->data[2].d8[1], in ad5791_spi_read()
134 st->data[0].d32 = cpu_to_be32(AD5791_CMD_READ | in ad5791_spi_read()
136 st->data[1].d32 = cpu_to_be32(AD5791_ADDR(AD5791_ADDR_NOOP)); in ad5791_spi_read()
138 ret = spi_sync_transfer(st->spi, xfers, ARRAY_SIZE(xfers)); in ad5791_spi_read()
140 *val = be32_to_cpu(st->data[2].d32); in ad5791_spi_read()
155 return st->pwr_down_mode; in ad5791_get_powerdown_mode()
163 st->pwr_down_mode = mode; in ad5791_set_powerdown_mode()
180 return sysfs_emit(buf, "%d\n", st->pwr_down); in ad5791_read_dac_powerdown()
196 st->ctrl &= ~(AD5791_CTRL_OPGND | AD5791_CTRL_DACTRI); in ad5791_write_dac_powerdown()
198 if (st->pwr_down_mode == AD5791_DAC_PWRDN_6K) in ad5791_write_dac_powerdown()
199 st->ctrl |= AD5791_CTRL_OPGND; in ad5791_write_dac_powerdown()
200 else if (st->pwr_down_mode == AD5791_DAC_PWRDN_3STATE) in ad5791_write_dac_powerdown()
201 st->ctrl |= AD5791_CTRL_DACTRI; in ad5791_write_dac_powerdown()
203 st->pwr_down = pwr_down; in ad5791_write_dac_powerdown()
205 ret = ad5791_spi_write(st, AD5791_ADDR_CTRL, st->ctrl); in ad5791_write_dac_powerdown()
258 ret = ad5791_spi_read(st, chan->address, val); in ad5791_read_raw()
262 *val >>= chan->scan_type.shift; in ad5791_read_raw()
265 *val = st->vref_mv; in ad5791_read_raw()
266 *val2 = (1 << chan->scan_type.realbits) - 1; in ad5791_read_raw()
269 val64 = (((u64)st->vref_neg_mv) << chan->scan_type.realbits); in ad5791_read_raw()
270 do_div(val64, st->vref_mv); in ad5791_read_raw()
271 *val = -val64; in ad5791_read_raw()
274 return -EINVAL; in ad5791_read_raw()
327 val &= GENMASK(chan->scan_type.realbits - 1, 0); in ad5791_write_raw()
328 val <<= chan->scan_type.shift; in ad5791_write_raw()
330 return ad5791_spi_write(st, chan->address, val); in ad5791_write_raw()
333 return -EINVAL; in ad5791_write_raw()
344 struct ad5791_platform_data *pdata = spi->dev.platform_data; in ad5791_probe()
349 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st)); in ad5791_probe()
351 return -ENOMEM; in ad5791_probe()
353 st->reg_vdd = devm_regulator_get(&spi->dev, "vdd"); in ad5791_probe()
354 if (!IS_ERR(st->reg_vdd)) { in ad5791_probe()
355 ret = regulator_enable(st->reg_vdd); in ad5791_probe()
359 ret = regulator_get_voltage(st->reg_vdd); in ad5791_probe()
366 st->reg_vss = devm_regulator_get(&spi->dev, "vss"); in ad5791_probe()
367 if (!IS_ERR(st->reg_vss)) { in ad5791_probe()
368 ret = regulator_enable(st->reg_vss); in ad5791_probe()
372 ret = regulator_get_voltage(st->reg_vss); in ad5791_probe()
379 st->pwr_down = true; in ad5791_probe()
380 st->spi = spi; in ad5791_probe()
382 if (!IS_ERR(st->reg_vss) && !IS_ERR(st->reg_vdd)) { in ad5791_probe()
383 st->vref_mv = (pos_voltage_uv + neg_voltage_uv) / 1000; in ad5791_probe()
384 st->vref_neg_mv = neg_voltage_uv / 1000; in ad5791_probe()
386 st->vref_mv = pdata->vref_pos_mv + pdata->vref_neg_mv; in ad5791_probe()
387 st->vref_neg_mv = pdata->vref_neg_mv; in ad5791_probe()
389 dev_warn(&spi->dev, "reference voltage unspecified\n"); in ad5791_probe()
396 st->chip_info = &ad5791_chip_info_tbl[spi_get_device_id(spi) in ad5791_probe()
397 ->driver_data]; in ad5791_probe()
400 st->ctrl = AD5761_CTRL_LINCOMP(st->chip_info->get_lin_comp(st->vref_mv)) in ad5791_probe()
401 | ((pdata && pdata->use_rbuf_gain2) ? 0 : AD5791_CTRL_RBUF) | in ad5791_probe()
404 ret = ad5791_spi_write(st, AD5791_ADDR_CTRL, st->ctrl | in ad5791_probe()
410 indio_dev->info = &ad5791_info; in ad5791_probe()
411 indio_dev->modes = INDIO_DIRECT_MODE; in ad5791_probe()
412 indio_dev->channels in ad5791_probe()
413 = &ad5791_channels[spi_get_device_id(spi)->driver_data]; in ad5791_probe()
414 indio_dev->num_channels = 1; in ad5791_probe()
415 indio_dev->name = spi_get_device_id(st->spi)->name; in ad5791_probe()
423 if (!IS_ERR(st->reg_vss)) in ad5791_probe()
424 regulator_disable(st->reg_vss); in ad5791_probe()
426 if (!IS_ERR(st->reg_vdd)) in ad5791_probe()
427 regulator_disable(st->reg_vdd); in ad5791_probe()
437 if (!IS_ERR(st->reg_vdd)) in ad5791_remove()
438 regulator_disable(st->reg_vdd); in ad5791_remove()
440 if (!IS_ERR(st->reg_vss)) in ad5791_remove()
441 regulator_disable(st->reg_vss); in ad5791_remove()