Lines Matching refs:st

87 typedef int (*ad5064_write_func)(struct ad5064_state *st, unsigned int cmd,
192 static int ad5064_write(struct ad5064_state *st, unsigned int cmd, in ad5064_write() argument
197 return st->write(st, cmd, addr, val); in ad5064_write()
200 static int ad5064_sync_powerdown_mode(struct ad5064_state *st, in ad5064_sync_powerdown_mode() argument
207 if (st->chip_info->regmap_type == AD5064_REGMAP_LTC) { in ad5064_sync_powerdown_mode()
211 if (st->chip_info->regmap_type == AD5064_REGMAP_ADI2) in ad5064_sync_powerdown_mode()
219 if (st->pwr_down[chan->channel]) in ad5064_sync_powerdown_mode()
220 val |= st->pwr_down_mode[chan->channel] << shift; in ad5064_sync_powerdown_mode()
223 ret = ad5064_write(st, AD5064_CMD_POWERDOWN_DAC, address, val, 0); in ad5064_sync_powerdown_mode()
241 struct ad5064_state *st = iio_priv(indio_dev); in ad5064_get_powerdown_mode() local
243 return st->pwr_down_mode[chan->channel] - 1; in ad5064_get_powerdown_mode()
249 struct ad5064_state *st = iio_priv(indio_dev); in ad5064_set_powerdown_mode() local
252 mutex_lock(&st->lock); in ad5064_set_powerdown_mode()
253 st->pwr_down_mode[chan->channel] = mode + 1; in ad5064_set_powerdown_mode()
255 ret = ad5064_sync_powerdown_mode(st, chan); in ad5064_set_powerdown_mode()
256 mutex_unlock(&st->lock); in ad5064_set_powerdown_mode()
278 struct ad5064_state *st = iio_priv(indio_dev); in ad5064_read_dac_powerdown() local
280 return sysfs_emit(buf, "%d\n", st->pwr_down[chan->channel]); in ad5064_read_dac_powerdown()
287 struct ad5064_state *st = iio_priv(indio_dev); in ad5064_write_dac_powerdown() local
295 mutex_lock(&st->lock); in ad5064_write_dac_powerdown()
296 st->pwr_down[chan->channel] = pwr_down; in ad5064_write_dac_powerdown()
298 ret = ad5064_sync_powerdown_mode(st, chan); in ad5064_write_dac_powerdown()
299 mutex_unlock(&st->lock); in ad5064_write_dac_powerdown()
303 static int ad5064_get_vref(struct ad5064_state *st, in ad5064_get_vref() argument
308 if (st->use_internal_vref) in ad5064_get_vref()
309 return st->chip_info->internal_vref; in ad5064_get_vref()
311 i = st->chip_info->shared_vref ? 0 : chan->channel; in ad5064_get_vref()
312 return regulator_get_voltage(st->vref_reg[i].consumer); in ad5064_get_vref()
321 struct ad5064_state *st = iio_priv(indio_dev); in ad5064_read_raw() local
326 *val = st->dac_cache[chan->channel]; in ad5064_read_raw()
329 scale_uv = ad5064_get_vref(st, chan); in ad5064_read_raw()
345 struct ad5064_state *st = iio_priv(indio_dev); in ad5064_write_raw() local
353 mutex_lock(&st->lock); in ad5064_write_raw()
354 ret = ad5064_write(st, AD5064_CMD_WRITE_INPUT_N_UPDATE_N, in ad5064_write_raw()
357 st->dac_cache[chan->channel] = val; in ad5064_write_raw()
358 mutex_unlock(&st->lock); in ad5064_write_raw()
778 static inline unsigned int ad5064_num_vref(struct ad5064_state *st) in ad5064_num_vref() argument
780 return st->chip_info->shared_vref ? 1 : st->chip_info->num_channels; in ad5064_num_vref()
790 static const char *ad5064_vref_name(struct ad5064_state *st, in ad5064_vref_name() argument
793 return st->chip_info->shared_vref ? "vref" : ad5064_vref_names[vref]; in ad5064_vref_name()
796 static int ad5064_set_config(struct ad5064_state *st, unsigned int val) in ad5064_set_config() argument
800 switch (st->chip_info->regmap_type) { in ad5064_set_config()
809 return ad5064_write(st, cmd, 0, val, 0); in ad5064_set_config()
812 static int ad5064_request_vref(struct ad5064_state *st, struct device *dev) in ad5064_request_vref() argument
817 for (i = 0; i < ad5064_num_vref(st); ++i) in ad5064_request_vref()
818 st->vref_reg[i].supply = ad5064_vref_name(st, i); in ad5064_request_vref()
820 if (!st->chip_info->internal_vref) in ad5064_request_vref()
821 return devm_regulator_bulk_get(dev, ad5064_num_vref(st), in ad5064_request_vref()
822 st->vref_reg); in ad5064_request_vref()
829 st->vref_reg[0].consumer = devm_regulator_get_optional(dev, "vref"); in ad5064_request_vref()
830 if (!IS_ERR(st->vref_reg[0].consumer)) in ad5064_request_vref()
833 ret = PTR_ERR(st->vref_reg[0].consumer); in ad5064_request_vref()
838 st->use_internal_vref = true; in ad5064_request_vref()
839 ret = ad5064_set_config(st, AD5064_CONFIG_INT_VREF_ENABLE); in ad5064_request_vref()
848 struct ad5064_state *st = data; in ad5064_bulk_reg_disable() local
850 regulator_bulk_disable(ad5064_num_vref(st), st->vref_reg); in ad5064_bulk_reg_disable()
857 struct ad5064_state *st; in ad5064_probe() local
862 indio_dev = devm_iio_device_alloc(dev, sizeof(*st)); in ad5064_probe()
866 st = iio_priv(indio_dev); in ad5064_probe()
867 mutex_init(&st->lock); in ad5064_probe()
869 st->chip_info = &ad5064_chip_info_tbl[type]; in ad5064_probe()
870 st->dev = dev; in ad5064_probe()
871 st->write = write; in ad5064_probe()
873 ret = ad5064_request_vref(st, dev); in ad5064_probe()
877 if (!st->use_internal_vref) { in ad5064_probe()
878 ret = regulator_bulk_enable(ad5064_num_vref(st), st->vref_reg); in ad5064_probe()
882 ret = devm_add_action_or_reset(dev, ad5064_bulk_reg_disable, st); in ad5064_probe()
890 indio_dev->channels = st->chip_info->channels; in ad5064_probe()
891 indio_dev->num_channels = st->chip_info->num_channels; in ad5064_probe()
895 for (i = 0; i < st->chip_info->num_channels; ++i) { in ad5064_probe()
896 st->pwr_down_mode[i] = AD5064_LDAC_PWRDN_1K; in ad5064_probe()
897 st->dac_cache[i] = midscale; in ad5064_probe()
905 static int ad5064_spi_write(struct ad5064_state *st, unsigned int cmd, in ad5064_spi_write() argument
908 struct spi_device *spi = to_spi_device(st->dev); in ad5064_spi_write()
910 st->data.spi = cpu_to_be32(AD5064_CMD(cmd) | AD5064_ADDR(addr) | val); in ad5064_spi_write()
911 return spi_write(spi, &st->data.spi, sizeof(st->data.spi)); in ad5064_spi_write()
970 static int ad5064_i2c_write(struct ad5064_state *st, unsigned int cmd, in ad5064_i2c_write() argument
973 struct i2c_client *i2c = to_i2c_client(st->dev); in ad5064_i2c_write()
977 switch (st->chip_info->regmap_type) { in ad5064_i2c_write()
986 st->data.i2c[0] = (cmd << cmd_shift) | addr; in ad5064_i2c_write()
987 put_unaligned_be16(val, &st->data.i2c[1]); in ad5064_i2c_write()
989 ret = i2c_master_send(i2c, st->data.i2c, 3); in ad5064_i2c_write()