Lines Matching +full:1 +full:st
50 .indexed = 1, \
51 .differential = 1, \
53 .channel2 = 1, \
176 static int ad7625_set_sampling_freq(struct ad7625_state *st, u32 freq) in ad7625_set_sampling_freq() argument
189 cnv_wf.duty_length_ns = st->info->timing_spec->conv_high_ns; in ad7625_set_sampling_freq()
191 ret = pwm_round_waveform_might_sleep(st->cnv_pwm, &cnv_wf); in ad7625_set_sampling_freq()
202 st->info->chan_spec.scan_type.realbits, in ad7625_set_sampling_freq()
203 st->ref_clk_rate_hz); in ad7625_set_sampling_freq()
206 clk_gate_wf.duty_offset_ns = st->info->timing_spec->conv_msb_ns; in ad7625_set_sampling_freq()
208 ret = pwm_round_waveform_might_sleep(st->clk_gate_pwm, &clk_gate_wf); in ad7625_set_sampling_freq()
212 st->cnv_wf = cnv_wf; in ad7625_set_sampling_freq()
213 st->clk_gate_wf = clk_gate_wf; in ad7625_set_sampling_freq()
216 target = DIV_ROUND_CLOSEST(st->ref_clk_rate_hz, freq); in ad7625_set_sampling_freq()
217 st->sampling_freq_hz = DIV_ROUND_CLOSEST(st->ref_clk_rate_hz, in ad7625_set_sampling_freq()
227 struct ad7625_state *st = iio_priv(indio_dev); in ad7625_read_raw() local
231 *val = st->sampling_freq_hz; in ad7625_read_raw()
236 *val = st->vref_mv; in ad7625_read_raw()
237 *val2 = chan->scan_type.realbits - 1; in ad7625_read_raw()
250 struct ad7625_state *st = iio_priv(indio_dev); in ad7625_write_raw() local
257 ret = ad7625_set_sampling_freq(st, val); in ad7625_write_raw()
265 static int ad7625_parse_mode(struct device *dev, struct ad7625_state *st, in ad7625_parse_mode() argument
279 st->en_gpios[i] = devm_gpiod_get_optional(dev, en_gpio_buf, in ad7625_parse_mode()
281 if (IS_ERR(st->en_gpios[i])) in ad7625_parse_mode()
282 return dev_err_probe(dev, PTR_ERR(st->en_gpios[i]), in ad7625_parse_mode()
286 if (st->en_gpios[i] && en_always_on[i]) in ad7625_parse_mode()
291 en_may_be_on[i] = en_always_on[i] || st->en_gpios[i]; in ad7625_parse_mode()
292 en_always_off[i] = !en_always_on[i] && !st->en_gpios[i]; in ad7625_parse_mode()
299 st->can_power_down = en_may_be_off[1] && en_may_be_off[0] && in ad7625_parse_mode()
300 st->info->has_power_down_state; in ad7625_parse_mode()
305 st->can_refin = en_may_be_off[1] && en_may_be_on[0]; in ad7625_parse_mode()
307 st->can_ref_4v096 = en_may_be_on[1] && en_may_be_off[0]; in ad7625_parse_mode()
315 en_always_off[1] && en_always_off[0]) in ad7625_parse_mode()
323 st->can_ref_5v = st->can_refin; in ad7625_parse_mode()
329 st->can_narrow_bandwidth = en_may_be_on[2]; in ad7625_parse_mode()
331 st->can_wide_bandwidth = en_may_be_off[2]; in ad7625_parse_mode()
333 st->can_snooze = en_may_be_on[1] && en_may_be_on[0]; in ad7625_parse_mode()
335 st->can_test_pattern = en_may_be_off[3] && en_may_be_on[2] && in ad7625_parse_mode()
336 en_may_be_off[1] && en_may_be_off[0]; in ad7625_parse_mode()
342 static void ad7625_set_en_gpios_for_vref(struct ad7625_state *st, in ad7625_set_en_gpios_for_vref() argument
346 gpiod_set_value_cansleep(st->en_gpios[1], 0); in ad7625_set_en_gpios_for_vref()
347 gpiod_set_value_cansleep(st->en_gpios[0], 1); in ad7625_set_en_gpios_for_vref()
349 gpiod_set_value_cansleep(st->en_gpios[1], 1); in ad7625_set_en_gpios_for_vref()
350 gpiod_set_value_cansleep(st->en_gpios[0], 0); in ad7625_set_en_gpios_for_vref()
356 gpiod_set_value_cansleep(st->en_gpios[1], 1); in ad7625_set_en_gpios_for_vref()
357 gpiod_set_value_cansleep(st->en_gpios[0], 1); in ad7625_set_en_gpios_for_vref()
361 static int ad7960_set_mode(struct ad7625_state *st, enum ad7960_mode mode, in ad7960_set_mode() argument
366 if (!st->can_power_down) in ad7960_set_mode()
369 gpiod_set_value_cansleep(st->en_gpios[2], 0); in ad7960_set_mode()
370 gpiod_set_value_cansleep(st->en_gpios[1], 0); in ad7960_set_mode()
371 gpiod_set_value_cansleep(st->en_gpios[0], 0); in ad7960_set_mode()
376 if (!st->can_snooze) in ad7960_set_mode()
379 gpiod_set_value_cansleep(st->en_gpios[1], 1); in ad7960_set_mode()
380 gpiod_set_value_cansleep(st->en_gpios[0], 1); in ad7960_set_mode()
385 if (!st->can_narrow_bandwidth) in ad7960_set_mode()
388 gpiod_set_value_cansleep(st->en_gpios[2], 1); in ad7960_set_mode()
389 ad7625_set_en_gpios_for_vref(st, have_refin, ref_mv); in ad7960_set_mode()
394 if (!st->can_wide_bandwidth) in ad7960_set_mode()
397 gpiod_set_value_cansleep(st->en_gpios[2], 0); in ad7960_set_mode()
398 ad7625_set_en_gpios_for_vref(st, have_refin, ref_mv); in ad7960_set_mode()
403 if (!st->can_test_pattern) in ad7960_set_mode()
406 gpiod_set_value_cansleep(st->en_gpios[3], 0); in ad7960_set_mode()
407 gpiod_set_value_cansleep(st->en_gpios[2], 1); in ad7960_set_mode()
408 gpiod_set_value_cansleep(st->en_gpios[1], 0); in ad7960_set_mode()
409 gpiod_set_value_cansleep(st->en_gpios[0], 0); in ad7960_set_mode()
420 struct ad7625_state *st = iio_priv(indio_dev); in ad7625_buffer_preenable() local
423 ret = pwm_set_waveform_might_sleep(st->cnv_pwm, &st->cnv_wf, false); in ad7625_buffer_preenable()
427 ret = pwm_set_waveform_might_sleep(st->clk_gate_pwm, in ad7625_buffer_preenable()
428 &st->clk_gate_wf, false); in ad7625_buffer_preenable()
431 pwm_disable(st->cnv_pwm); in ad7625_buffer_preenable()
440 struct ad7625_state *st = iio_priv(indio_dev); in ad7625_buffer_postdisable() local
442 pwm_disable(st->clk_gate_pwm); in ad7625_buffer_postdisable()
443 pwm_disable(st->cnv_pwm); in ad7625_buffer_postdisable()
459 struct ad7625_state *st) in devm_ad7625_pwm_get() argument
464 st->cnv_pwm = devm_pwm_get(dev, "cnv"); in devm_ad7625_pwm_get()
465 if (IS_ERR(st->cnv_pwm)) in devm_ad7625_pwm_get()
466 return dev_err_probe(dev, PTR_ERR(st->cnv_pwm), in devm_ad7625_pwm_get()
470 pwm_disable(st->cnv_pwm); in devm_ad7625_pwm_get()
472 st->clk_gate_pwm = devm_pwm_get(dev, "clk_gate"); in devm_ad7625_pwm_get()
473 if (IS_ERR(st->clk_gate_pwm)) in devm_ad7625_pwm_get()
474 return dev_err_probe(dev, PTR_ERR(st->clk_gate_pwm), in devm_ad7625_pwm_get()
478 pwm_disable(st->clk_gate_pwm); in devm_ad7625_pwm_get()
490 st->ref_clk_rate_hz = ref_clk_rate_hz; in devm_ad7625_pwm_get()
511 struct ad7625_state *st) in devm_ad7625_regulator_setup() argument
531 st->have_refin = ret != -ENODEV; in devm_ad7625_regulator_setup()
533 if (st->have_refin && !st->can_refin) in devm_ad7625_regulator_setup()
537 if (!st->info->has_internal_vref && !st->have_refin && !ref_mv) in devm_ad7625_regulator_setup()
541 if (st->have_refin && ref_mv) in devm_ad7625_regulator_setup()
545 if (ref_mv == 4096 && !st->can_ref_4v096) in devm_ad7625_regulator_setup()
549 if (ref_mv == 5000 && !st->can_ref_5v) in devm_ad7625_regulator_setup()
553 st->vref_mv = ref_mv ?: AD7625_INTERNAL_REF_MV; in devm_ad7625_regulator_setup()
562 struct ad7625_state *st; in ad7625_probe() local
566 indio_dev = devm_iio_device_alloc(dev, sizeof(*st)); in ad7625_probe()
570 st = iio_priv(indio_dev); in ad7625_probe()
572 st->info = device_get_match_data(dev); in ad7625_probe()
573 if (!st->info) in ad7625_probe()
580 if (st->info->has_bandwidth_control) in ad7625_probe()
581 ret = ad7625_parse_mode(dev, st, 4); in ad7625_probe()
583 ret = ad7625_parse_mode(dev, st, 2); in ad7625_probe()
588 ret = devm_ad7625_regulator_setup(dev, st); in ad7625_probe()
593 if (!st->info->has_bandwidth_control) { in ad7625_probe()
594 ad7625_set_en_gpios_for_vref(st, st->have_refin, st->vref_mv); in ad7625_probe()
600 if (st->can_wide_bandwidth) { in ad7625_probe()
601 ret = ad7960_set_mode(st, AD7960_MODE_WIDE_BANDWIDTH, in ad7625_probe()
602 st->have_refin, st->vref_mv); in ad7625_probe()
603 } else if (st->can_narrow_bandwidth) { in ad7625_probe()
604 ret = ad7960_set_mode(st, AD7960_MODE_NARROW_BANDWIDTH, in ad7625_probe()
605 st->have_refin, st->vref_mv); in ad7625_probe()
616 ret = devm_ad7625_pwm_get(dev, st); in ad7625_probe()
620 indio_dev->channels = &st->info->chan_spec; in ad7625_probe()
621 indio_dev->num_channels = 1; in ad7625_probe()
622 indio_dev->name = st->info->name; in ad7625_probe()
626 st->back = devm_iio_backend_get(dev, NULL); in ad7625_probe()
627 if (IS_ERR(st->back)) in ad7625_probe()
628 return dev_err_probe(dev, PTR_ERR(st->back), in ad7625_probe()
631 ret = devm_iio_backend_request_buffer(dev, st->back, indio_dev); in ad7625_probe()
635 ret = devm_iio_backend_enable(dev, st->back); in ad7625_probe()
641 * AD796x device is limited to narrow bandwidth by EN2 == 1, in in ad7625_probe()
644 default_sample_freq = st->info->max_sample_freq_hz; in ad7625_probe()
645 if (st->info->has_bandwidth_control && !st->can_wide_bandwidth) in ad7625_probe()
648 ret = ad7625_set_sampling_freq(st, default_sample_freq); in ad7625_probe()