• Home
  • Raw
  • Download

Lines Matching full:st

187 static int ad5758_spi_reg_read(struct ad5758_state *st, unsigned int addr)  in ad5758_spi_reg_read()  argument
191 .tx_buf = &st->d32[0], in ad5758_spi_reg_read()
195 .tx_buf = &st->d32[1], in ad5758_spi_reg_read()
196 .rx_buf = &st->d32[2], in ad5758_spi_reg_read()
202 st->d32[0] = cpu_to_be32( in ad5758_spi_reg_read()
205 st->d32[1] = cpu_to_be32(AD5758_WR_FLAG_MSK(AD5758_NOP) << 24); in ad5758_spi_reg_read()
207 ret = spi_sync_transfer(st->spi, t, ARRAY_SIZE(t)); in ad5758_spi_reg_read()
211 return (be32_to_cpu(st->d32[2]) >> 8) & 0xFFFF; in ad5758_spi_reg_read()
214 static int ad5758_spi_reg_write(struct ad5758_state *st, in ad5758_spi_reg_write() argument
218 st->d32[0] = cpu_to_be32((AD5758_WR_FLAG_MSK(addr) << 24) | in ad5758_spi_reg_write()
221 return spi_write(st->spi, &st->d32[0], sizeof(st->d32[0])); in ad5758_spi_reg_write()
224 static int ad5758_spi_write_mask(struct ad5758_state *st, in ad5758_spi_write_mask() argument
231 regval = ad5758_spi_reg_read(st, addr); in ad5758_spi_write_mask()
238 return ad5758_spi_reg_write(st, addr, regval); in ad5758_spi_write_mask()
259 static int ad5758_wait_for_task_complete(struct ad5758_state *st, in ad5758_wait_for_task_complete() argument
268 ret = ad5758_spi_reg_read(st, reg); in ad5758_wait_for_task_complete()
278 dev_err(&st->spi->dev, in ad5758_wait_for_task_complete()
284 static int ad5758_calib_mem_refresh(struct ad5758_state *st) in ad5758_calib_mem_refresh() argument
288 ret = ad5758_spi_reg_write(st, AD5758_KEY, in ad5758_calib_mem_refresh()
291 dev_err(&st->spi->dev, in ad5758_calib_mem_refresh()
297 return ad5758_wait_for_task_complete(st, AD5758_DIGITAL_DIAG_RESULTS, in ad5758_calib_mem_refresh()
301 static int ad5758_soft_reset(struct ad5758_state *st) in ad5758_soft_reset() argument
305 ret = ad5758_spi_reg_write(st, AD5758_KEY, AD5758_KEY_CODE_RESET_1); in ad5758_soft_reset()
309 ret = ad5758_spi_reg_write(st, AD5758_KEY, AD5758_KEY_CODE_RESET_2); in ad5758_soft_reset()
317 static int ad5758_set_dc_dc_conv_mode(struct ad5758_state *st, in ad5758_set_dc_dc_conv_mode() argument
327 ret = ad5758_spi_write_mask(st, AD5758_ADC_CONFIG, in ad5758_set_dc_dc_conv_mode()
334 ret = ad5758_spi_write_mask(st, AD5758_DCDC_CONFIG1, in ad5758_set_dc_dc_conv_mode()
344 ret = ad5758_wait_for_task_complete(st, AD5758_DCDC_CONFIG2, in ad5758_set_dc_dc_conv_mode()
349 st->dc_dc_mode = mode; in ad5758_set_dc_dc_conv_mode()
354 static int ad5758_set_dc_dc_ilim(struct ad5758_state *st, unsigned int ilim) in ad5758_set_dc_dc_ilim() argument
358 ret = ad5758_spi_write_mask(st, AD5758_DCDC_CONFIG2, in ad5758_set_dc_dc_ilim()
367 return ad5758_wait_for_task_complete(st, AD5758_DCDC_CONFIG2, in ad5758_set_dc_dc_ilim()
371 static int ad5758_slew_rate_set(struct ad5758_state *st, in ad5758_slew_rate_set() argument
386 ret = ad5758_spi_write_mask(st, AD5758_DAC_CONFIG, mask, mode); in ad5758_slew_rate_set()
391 return ad5758_wait_for_task_complete(st, AD5758_DIGITAL_DIAG_RESULTS, in ad5758_slew_rate_set()
395 static int ad5758_slew_rate_config(struct ad5758_state *st) in ad5758_slew_rate_config() argument
420 do_div(sr_step, st->slew_time); in ad5758_slew_rate_config()
437 diff_new = abs(st->slew_time - calc_slew_time); in ad5758_slew_rate_config()
445 return ad5758_slew_rate_set(st, sr_clk_idx, sr_step_idx); in ad5758_slew_rate_config()
448 static int ad5758_set_out_range(struct ad5758_state *st, int range) in ad5758_set_out_range() argument
452 ret = ad5758_spi_write_mask(st, AD5758_DAC_CONFIG, in ad5758_set_out_range()
459 return ad5758_wait_for_task_complete(st, AD5758_DIGITAL_DIAG_RESULTS, in ad5758_set_out_range()
463 static int ad5758_internal_buffers_en(struct ad5758_state *st, bool enable) in ad5758_internal_buffers_en() argument
467 ret = ad5758_spi_write_mask(st, AD5758_DAC_CONFIG, in ad5758_internal_buffers_en()
474 return ad5758_wait_for_task_complete(st, AD5758_DIGITAL_DIAG_RESULTS, in ad5758_internal_buffers_en()
478 static int ad5758_reset(struct ad5758_state *st) in ad5758_reset() argument
480 if (st->gpio_reset) { in ad5758_reset()
481 gpiod_set_value(st->gpio_reset, 0); in ad5758_reset()
483 gpiod_set_value(st->gpio_reset, 1); in ad5758_reset()
489 return ad5758_soft_reset(st); in ad5758_reset()
498 struct ad5758_state *st = iio_priv(indio_dev); in ad5758_reg_access() local
501 mutex_lock(&st->lock); in ad5758_reg_access()
503 ret = ad5758_spi_reg_read(st, reg); in ad5758_reg_access()
505 mutex_unlock(&st->lock); in ad5758_reg_access()
512 ret = ad5758_spi_reg_write(st, reg, writeval); in ad5758_reg_access()
514 mutex_unlock(&st->lock); in ad5758_reg_access()
523 struct ad5758_state *st = iio_priv(indio_dev); in ad5758_read_raw() local
528 mutex_lock(&st->lock); in ad5758_read_raw()
529 ret = ad5758_spi_reg_read(st, AD5758_DAC_INPUT); in ad5758_read_raw()
530 mutex_unlock(&st->lock); in ad5758_read_raw()
537 min = st->out_range.min; in ad5758_read_raw()
538 max = st->out_range.max; in ad5758_read_raw()
543 min = st->out_range.min; in ad5758_read_raw()
544 max = st->out_range.max; in ad5758_read_raw()
556 struct ad5758_state *st = iio_priv(indio_dev); in ad5758_write_raw() local
561 mutex_lock(&st->lock); in ad5758_write_raw()
562 ret = ad5758_spi_reg_write(st, AD5758_DAC_INPUT, val); in ad5758_write_raw()
563 mutex_unlock(&st->lock); in ad5758_write_raw()
575 struct ad5758_state *st = iio_priv(indio_dev); in ad5758_read_powerdown() local
577 return sprintf(buf, "%d\n", st->pwr_down); in ad5758_read_powerdown()
585 struct ad5758_state *st = iio_priv(indio_dev); in ad5758_write_powerdown() local
595 mutex_lock(&st->lock); in ad5758_write_powerdown()
606 ret = ad5758_spi_write_mask(st, AD5758_DAC_CONFIG, in ad5758_write_powerdown()
612 st->pwr_down = pwr_down; in ad5758_write_powerdown()
615 mutex_unlock(&st->lock); in ad5758_write_powerdown()
666 static int ad5758_crc_disable(struct ad5758_state *st) in ad5758_crc_disable() argument
671 st->d32[0] = cpu_to_be32(mask); in ad5758_crc_disable()
673 return spi_write(st->spi, &st->d32[0], 4); in ad5758_crc_disable()
676 static int ad5758_find_out_range(struct ad5758_state *st, in ad5758_find_out_range() argument
685 st->out_range.reg = range[i].reg; in ad5758_find_out_range()
686 st->out_range.min = range[i].min; in ad5758_find_out_range()
687 st->out_range.max = range[i].max; in ad5758_find_out_range()
696 static int ad5758_parse_dt(struct ad5758_state *st) in ad5758_parse_dt() argument
702 st->dc_dc_ilim = 0; in ad5758_parse_dt()
703 ret = device_property_read_u32(&st->spi->dev, in ad5758_parse_dt()
706 dev_dbg(&st->spi->dev, in ad5758_parse_dt()
713 dev_dbg(&st->spi->dev, "dc-dc-ilim out of range\n"); in ad5758_parse_dt()
715 st->dc_dc_ilim = index - ad5758_dc_dc_ilim; in ad5758_parse_dt()
718 ret = device_property_read_u32(&st->spi->dev, "adi,dc-dc-mode", in ad5758_parse_dt()
719 &st->dc_dc_mode); in ad5758_parse_dt()
721 dev_err(&st->spi->dev, "Missing \"dc-dc-mode\" property\n"); in ad5758_parse_dt()
725 if (!ad5758_is_valid_mode(st->dc_dc_mode)) in ad5758_parse_dt()
728 if (st->dc_dc_mode == AD5758_DCDC_MODE_DPC_VOLTAGE) { in ad5758_parse_dt()
729 ret = device_property_read_u32_array(&st->spi->dev, in ad5758_parse_dt()
733 dev_err(&st->spi->dev, in ad5758_parse_dt()
740 ret = device_property_read_u32_array(&st->spi->dev, in ad5758_parse_dt()
744 dev_err(&st->spi->dev, in ad5758_parse_dt()
752 ret = ad5758_find_out_range(st, range, size, tmparray[0], tmparray[1]); in ad5758_parse_dt()
754 dev_err(&st->spi->dev, "range invalid\n"); in ad5758_parse_dt()
758 ret = device_property_read_u32(&st->spi->dev, "adi,slew-time-us", &tmp); in ad5758_parse_dt()
760 dev_dbg(&st->spi->dev, "Missing \"slew-time-us\" property\n"); in ad5758_parse_dt()
761 st->slew_time = 0; in ad5758_parse_dt()
763 st->slew_time = tmp; in ad5758_parse_dt()
769 static int ad5758_init(struct ad5758_state *st) in ad5758_init() argument
773 st->gpio_reset = devm_gpiod_get_optional(&st->spi->dev, "reset", in ad5758_init()
775 if (IS_ERR(st->gpio_reset)) in ad5758_init()
776 return PTR_ERR(st->gpio_reset); in ad5758_init()
779 ret = ad5758_crc_disable(st); in ad5758_init()
784 ret = ad5758_reset(st); in ad5758_init()
789 ret = ad5758_crc_disable(st); in ad5758_init()
794 ret = ad5758_calib_mem_refresh(st); in ad5758_init()
798 regval = ad5758_spi_reg_read(st, AD5758_DIGITAL_DIAG_RESULTS); in ad5758_init()
803 ret = ad5758_spi_reg_write(st, AD5758_DIGITAL_DIAG_RESULTS, regval); in ad5758_init()
808 ret = ad5758_set_dc_dc_ilim(st, st->dc_dc_ilim); in ad5758_init()
813 ret = ad5758_set_dc_dc_conv_mode(st, st->dc_dc_mode); in ad5758_init()
818 ret = ad5758_set_out_range(st, st->out_range.reg); in ad5758_init()
823 if (st->slew_time) { in ad5758_init()
824 ret = ad5758_slew_rate_config(st); in ad5758_init()
830 ret = ad5758_internal_buffers_en(st, 1); in ad5758_init()
835 return ad5758_spi_write_mask(st, AD5758_DAC_CONFIG, in ad5758_init()
842 struct ad5758_state *st; in ad5758_probe() local
846 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st)); in ad5758_probe()
850 st = iio_priv(indio_dev); in ad5758_probe()
853 st->spi = spi; in ad5758_probe()
855 mutex_init(&st->lock); in ad5758_probe()
862 ret = ad5758_parse_dt(st); in ad5758_probe()
866 if (st->dc_dc_mode == AD5758_DCDC_MODE_DPC_VOLTAGE) in ad5758_probe()
871 ret = ad5758_init(st); in ad5758_probe()
877 return devm_iio_device_register(&st->spi->dev, indio_dev); in ad5758_probe()