Lines Matching refs:st
68 typedef int (*ad5064_write_func)(struct ad5064_state *st, unsigned int cmd,
128 static int ad5064_write(struct ad5064_state *st, unsigned int cmd, in ad5064_write() argument
133 return st->write(st, cmd, addr, val); in ad5064_write()
136 static int ad5064_sync_powerdown_mode(struct ad5064_state *st, in ad5064_sync_powerdown_mode() argument
144 if (st->pwr_down[chan->channel]) in ad5064_sync_powerdown_mode()
145 val |= st->pwr_down_mode[chan->channel] << 8; in ad5064_sync_powerdown_mode()
147 ret = ad5064_write(st, AD5064_CMD_POWERDOWN_DAC, 0, val, 0); in ad5064_sync_powerdown_mode()
161 struct ad5064_state *st = iio_priv(indio_dev); in ad5064_get_powerdown_mode() local
163 return st->pwr_down_mode[chan->channel] - 1; in ad5064_get_powerdown_mode()
169 struct ad5064_state *st = iio_priv(indio_dev); in ad5064_set_powerdown_mode() local
173 st->pwr_down_mode[chan->channel] = mode + 1; in ad5064_set_powerdown_mode()
175 ret = ad5064_sync_powerdown_mode(st, chan); in ad5064_set_powerdown_mode()
191 struct ad5064_state *st = iio_priv(indio_dev); in ad5064_read_dac_powerdown() local
193 return sprintf(buf, "%d\n", st->pwr_down[chan->channel]); in ad5064_read_dac_powerdown()
200 struct ad5064_state *st = iio_priv(indio_dev); in ad5064_write_dac_powerdown() local
209 st->pwr_down[chan->channel] = pwr_down; in ad5064_write_dac_powerdown()
211 ret = ad5064_sync_powerdown_mode(st, chan); in ad5064_write_dac_powerdown()
216 static int ad5064_get_vref(struct ad5064_state *st, in ad5064_get_vref() argument
221 if (st->use_internal_vref) in ad5064_get_vref()
222 return st->chip_info->internal_vref; in ad5064_get_vref()
224 i = st->chip_info->shared_vref ? 0 : chan->channel; in ad5064_get_vref()
225 return regulator_get_voltage(st->vref_reg[i].consumer); in ad5064_get_vref()
234 struct ad5064_state *st = iio_priv(indio_dev); in ad5064_read_raw() local
239 *val = st->dac_cache[chan->channel]; in ad5064_read_raw()
242 scale_uv = ad5064_get_vref(st, chan); in ad5064_read_raw()
258 struct ad5064_state *st = iio_priv(indio_dev); in ad5064_write_raw() local
267 ret = ad5064_write(st, AD5064_CMD_WRITE_INPUT_N_UPDATE_N, in ad5064_write_raw()
270 st->dac_cache[chan->channel] = val; in ad5064_write_raw()
454 static inline unsigned int ad5064_num_vref(struct ad5064_state *st) in ad5064_num_vref() argument
456 return st->chip_info->shared_vref ? 1 : st->chip_info->num_channels; in ad5064_num_vref()
466 static const char * const ad5064_vref_name(struct ad5064_state *st, in ad5064_vref_name() argument
469 return st->chip_info->shared_vref ? "vref" : ad5064_vref_names[vref]; in ad5064_vref_name()
476 struct ad5064_state *st; in ad5064_probe() local
481 indio_dev = devm_iio_device_alloc(dev, sizeof(*st)); in ad5064_probe()
485 st = iio_priv(indio_dev); in ad5064_probe()
488 st->chip_info = &ad5064_chip_info_tbl[type]; in ad5064_probe()
489 st->dev = dev; in ad5064_probe()
490 st->write = write; in ad5064_probe()
492 for (i = 0; i < ad5064_num_vref(st); ++i) in ad5064_probe()
493 st->vref_reg[i].supply = ad5064_vref_name(st, i); in ad5064_probe()
495 ret = devm_regulator_bulk_get(dev, ad5064_num_vref(st), in ad5064_probe()
496 st->vref_reg); in ad5064_probe()
498 if (!st->chip_info->internal_vref) in ad5064_probe()
500 st->use_internal_vref = true; in ad5064_probe()
501 ret = ad5064_write(st, AD5064_CMD_CONFIG, 0, in ad5064_probe()
509 ret = regulator_bulk_enable(ad5064_num_vref(st), st->vref_reg); in ad5064_probe()
518 indio_dev->channels = st->chip_info->channels; in ad5064_probe()
519 indio_dev->num_channels = st->chip_info->num_channels; in ad5064_probe()
523 for (i = 0; i < st->chip_info->num_channels; ++i) { in ad5064_probe()
524 st->pwr_down_mode[i] = AD5064_LDAC_PWRDN_1K; in ad5064_probe()
525 st->dac_cache[i] = midscale; in ad5064_probe()
535 if (!st->use_internal_vref) in ad5064_probe()
536 regulator_bulk_disable(ad5064_num_vref(st), st->vref_reg); in ad5064_probe()
544 struct ad5064_state *st = iio_priv(indio_dev); in ad5064_remove() local
548 if (!st->use_internal_vref) in ad5064_remove()
549 regulator_bulk_disable(ad5064_num_vref(st), st->vref_reg); in ad5064_remove()
556 static int ad5064_spi_write(struct ad5064_state *st, unsigned int cmd, in ad5064_spi_write() argument
559 struct spi_device *spi = to_spi_device(st->dev); in ad5064_spi_write()
561 st->data.spi = cpu_to_be32(AD5064_CMD(cmd) | AD5064_ADDR(addr) | val); in ad5064_spi_write()
562 return spi_write(spi, &st->data.spi, sizeof(st->data.spi)); in ad5064_spi_write()
627 static int ad5064_i2c_write(struct ad5064_state *st, unsigned int cmd, in ad5064_i2c_write() argument
630 struct i2c_client *i2c = to_i2c_client(st->dev); in ad5064_i2c_write()
633 st->data.i2c[0] = (cmd << 4) | addr; in ad5064_i2c_write()
634 put_unaligned_be16(val, &st->data.i2c[1]); in ad5064_i2c_write()
636 ret = i2c_master_send(i2c, st->data.i2c, 3); in ad5064_i2c_write()