Lines Matching refs:st
68 typedef int (*ad5064_write_func)(struct ad5064_state *st, unsigned int cmd,
124 static int ad5064_write(struct ad5064_state *st, unsigned int cmd, in ad5064_write() argument
129 return st->write(st, cmd, addr, val); in ad5064_write()
132 static int ad5064_sync_powerdown_mode(struct ad5064_state *st, in ad5064_sync_powerdown_mode() argument
140 if (st->pwr_down[chan->channel]) in ad5064_sync_powerdown_mode()
141 val |= st->pwr_down_mode[chan->channel] << 8; in ad5064_sync_powerdown_mode()
143 ret = ad5064_write(st, AD5064_CMD_POWERDOWN_DAC, 0, val, 0); in ad5064_sync_powerdown_mode()
157 struct ad5064_state *st = iio_priv(indio_dev); in ad5064_get_powerdown_mode() local
159 return st->pwr_down_mode[chan->channel] - 1; in ad5064_get_powerdown_mode()
165 struct ad5064_state *st = iio_priv(indio_dev); in ad5064_set_powerdown_mode() local
169 st->pwr_down_mode[chan->channel] = mode + 1; in ad5064_set_powerdown_mode()
171 ret = ad5064_sync_powerdown_mode(st, chan); in ad5064_set_powerdown_mode()
187 struct ad5064_state *st = iio_priv(indio_dev); in ad5064_read_dac_powerdown() local
189 return sprintf(buf, "%d\n", st->pwr_down[chan->channel]); in ad5064_read_dac_powerdown()
196 struct ad5064_state *st = iio_priv(indio_dev); in ad5064_write_dac_powerdown() local
205 st->pwr_down[chan->channel] = pwr_down; in ad5064_write_dac_powerdown()
207 ret = ad5064_sync_powerdown_mode(st, chan); in ad5064_write_dac_powerdown()
212 static int ad5064_get_vref(struct ad5064_state *st, in ad5064_get_vref() argument
217 if (st->use_internal_vref) in ad5064_get_vref()
218 return st->chip_info->internal_vref; in ad5064_get_vref()
220 i = st->chip_info->shared_vref ? 0 : chan->channel; in ad5064_get_vref()
221 return regulator_get_voltage(st->vref_reg[i].consumer); in ad5064_get_vref()
230 struct ad5064_state *st = iio_priv(indio_dev); in ad5064_read_raw() local
235 *val = st->dac_cache[chan->channel]; in ad5064_read_raw()
238 scale_uv = ad5064_get_vref(st, chan); in ad5064_read_raw()
254 struct ad5064_state *st = iio_priv(indio_dev); in ad5064_write_raw() local
263 ret = ad5064_write(st, AD5064_CMD_WRITE_INPUT_N_UPDATE_N, in ad5064_write_raw()
266 st->dac_cache[chan->channel] = val; in ad5064_write_raw()
423 static inline unsigned int ad5064_num_vref(struct ad5064_state *st) in ad5064_num_vref() argument
425 return st->chip_info->shared_vref ? 1 : st->chip_info->num_channels; in ad5064_num_vref()
435 static const char * const ad5064_vref_name(struct ad5064_state *st, in ad5064_vref_name() argument
438 return st->chip_info->shared_vref ? "vref" : ad5064_vref_names[vref]; in ad5064_vref_name()
445 struct ad5064_state *st; in ad5064_probe() local
450 indio_dev = devm_iio_device_alloc(dev, sizeof(*st)); in ad5064_probe()
454 st = iio_priv(indio_dev); in ad5064_probe()
457 st->chip_info = &ad5064_chip_info_tbl[type]; in ad5064_probe()
458 st->dev = dev; in ad5064_probe()
459 st->write = write; in ad5064_probe()
461 for (i = 0; i < ad5064_num_vref(st); ++i) in ad5064_probe()
462 st->vref_reg[i].supply = ad5064_vref_name(st, i); in ad5064_probe()
464 ret = devm_regulator_bulk_get(dev, ad5064_num_vref(st), in ad5064_probe()
465 st->vref_reg); in ad5064_probe()
467 if (!st->chip_info->internal_vref) in ad5064_probe()
469 st->use_internal_vref = true; in ad5064_probe()
470 ret = ad5064_write(st, AD5064_CMD_CONFIG, 0, in ad5064_probe()
478 ret = regulator_bulk_enable(ad5064_num_vref(st), st->vref_reg); in ad5064_probe()
487 indio_dev->channels = st->chip_info->channels; in ad5064_probe()
488 indio_dev->num_channels = st->chip_info->num_channels; in ad5064_probe()
492 for (i = 0; i < st->chip_info->num_channels; ++i) { in ad5064_probe()
493 st->pwr_down_mode[i] = AD5064_LDAC_PWRDN_1K; in ad5064_probe()
494 st->dac_cache[i] = midscale; in ad5064_probe()
504 if (!st->use_internal_vref) in ad5064_probe()
505 regulator_bulk_disable(ad5064_num_vref(st), st->vref_reg); in ad5064_probe()
513 struct ad5064_state *st = iio_priv(indio_dev); in ad5064_remove() local
517 if (!st->use_internal_vref) in ad5064_remove()
518 regulator_bulk_disable(ad5064_num_vref(st), st->vref_reg); in ad5064_remove()
525 static int ad5064_spi_write(struct ad5064_state *st, unsigned int cmd, in ad5064_spi_write() argument
528 struct spi_device *spi = to_spi_device(st->dev); in ad5064_spi_write()
530 st->data.spi = cpu_to_be32(AD5064_CMD(cmd) | AD5064_ADDR(addr) | val); in ad5064_spi_write()
531 return spi_write(spi, &st->data.spi, sizeof(st->data.spi)); in ad5064_spi_write()
597 static int ad5064_i2c_write(struct ad5064_state *st, unsigned int cmd, in ad5064_i2c_write() argument
600 struct i2c_client *i2c = to_i2c_client(st->dev); in ad5064_i2c_write()
602 st->data.i2c[0] = (cmd << 4) | addr; in ad5064_i2c_write()
603 put_unaligned_be16(val, &st->data.i2c[1]); in ad5064_i2c_write()
604 return i2c_master_send(i2c, st->data.i2c, 3); in ad5064_i2c_write()