Lines Matching +full:cs +full:- +full:2

1 // SPDX-License-Identifier: GPL-2.0
41 static const unsigned int ad7606_16bit_hw_scale_avail[2][2] = {
45 static const unsigned int ad7606_18bit_hw_scale_avail[2][2] = {
49 static const unsigned int ad7606c_16bit_single_ended_unipolar_scale_avail[3][2] = {
53 static const unsigned int ad7606c_16bit_single_ended_bipolar_scale_avail[5][2] = {
57 static const unsigned int ad7606c_16bit_differential_bipolar_scale_avail[4][2] = {
61 static const unsigned int ad7606c_18bit_single_ended_unipolar_scale_avail[3][2] = {
65 static const unsigned int ad7606c_18bit_single_ended_bipolar_scale_avail[5][2] = {
69 static const unsigned int ad7606c_18bit_differential_bipolar_scale_avail[4][2] = {
73 static const unsigned int ad7606_16bit_sw_scale_avail[3][2] = {
77 static const unsigned int ad7607_hw_scale_avail[2][2] = {
81 static const unsigned int ad7609_hw_scale_avail[2][2] = {
86 1, 2, 4, 8, 16, 32, 64,
90 1, 2, 4, 8, 16, 32, 64, 128, 256,
94 1, 2, 4, 8, 16, 32, 64, 128,
101 AD7605_CHANNEL(2),
109 AD7606_CHANNEL(2, 16),
121 AD7606_CHANNEL(2, 18),
133 AD7606_CHANNEL(2, 14),
145 AD7606_CHANNEL(2, 18),
157 * -SER/PAR
158 * -SEQEN
160 * -WR/BURST
161 * -DB4/SER1W
167 AD7606_CHANNEL(2, 16),
200 .name = "ad7605-4",
209 .name = "ad7606-8",
220 .name = "ad7606-6",
231 .name = "ad7606-4",
326 if (st->gpio_reset) { in ad7606_reset()
327 gpiod_set_value(st->gpio_reset, 1); in ad7606_reset()
329 gpiod_set_value(st->gpio_reset, 0); in ad7606_reset()
333 return -ENODEV; in ad7606_reset()
341 struct ad7606_chan_scale *cs = &st->chan_scales[ch]; in ad7606_16bit_chan_scale_setup() local
343 if (!st->sw_mode_en) { in ad7606_16bit_chan_scale_setup()
344 /* tied to logic low, analog input range is +/- 5V */ in ad7606_16bit_chan_scale_setup()
345 cs->range = 0; in ad7606_16bit_chan_scale_setup()
346 cs->scale_avail = ad7606_16bit_hw_scale_avail; in ad7606_16bit_chan_scale_setup()
347 cs->num_scales = ARRAY_SIZE(ad7606_16bit_hw_scale_avail); in ad7606_16bit_chan_scale_setup()
353 cs->range = 2; in ad7606_16bit_chan_scale_setup()
354 cs->scale_avail = ad7606_16bit_sw_scale_avail; in ad7606_16bit_chan_scale_setup()
355 cs->num_scales = ARRAY_SIZE(ad7606_16bit_sw_scale_avail); in ad7606_16bit_chan_scale_setup()
364 unsigned int num_channels = st->chip_info->num_adc_channels; in ad7606_get_chan_config()
365 unsigned int offset = indio_dev->num_channels - st->chip_info->num_adc_channels; in ad7606_get_chan_config()
366 struct device *dev = st->dev; in ad7606_get_chan_config()
373 u32 pins[2]; in ad7606_get_chan_config()
392 ret = fwnode_property_read_u32_array(child, "diff-channels", in ad7606_get_chan_config()
398 return -EINVAL; in ad7606_get_chan_config()
407 return -EINVAL; in ad7606_get_chan_config()
420 struct ad7606_chan_scale *cs = &st->chan_scales[ch]; in ad7606c_18bit_chan_scale_setup() local
424 if (!st->sw_mode_en) { in ad7606c_18bit_chan_scale_setup()
425 cs->range = 0; in ad7606c_18bit_chan_scale_setup()
426 cs->scale_avail = ad7606_18bit_hw_scale_avail; in ad7606c_18bit_chan_scale_setup()
427 cs->num_scales = ARRAY_SIZE(ad7606_18bit_hw_scale_avail); in ad7606c_18bit_chan_scale_setup()
436 cs->scale_avail = ad7606c_18bit_differential_bipolar_scale_avail; in ad7606c_18bit_chan_scale_setup()
437 cs->num_scales = in ad7606c_18bit_chan_scale_setup()
440 cs->reg_offset = 8; in ad7606c_18bit_chan_scale_setup()
441 cs->range = 1; in ad7606c_18bit_chan_scale_setup()
442 chan->differential = 1; in ad7606c_18bit_chan_scale_setup()
443 chan->channel2 = chan->channel; in ad7606c_18bit_chan_scale_setup()
448 chan->differential = 0; in ad7606c_18bit_chan_scale_setup()
451 cs->scale_avail = ad7606c_18bit_single_ended_bipolar_scale_avail; in ad7606c_18bit_chan_scale_setup()
452 cs->num_scales = in ad7606c_18bit_chan_scale_setup()
454 /* Bipolar single-ended ranges start at 0 (b0000) */ in ad7606c_18bit_chan_scale_setup()
455 cs->reg_offset = 0; in ad7606c_18bit_chan_scale_setup()
456 cs->range = 3; in ad7606c_18bit_chan_scale_setup()
457 chan->scan_type.sign = 's'; in ad7606c_18bit_chan_scale_setup()
462 cs->scale_avail = ad7606c_18bit_single_ended_unipolar_scale_avail; in ad7606c_18bit_chan_scale_setup()
463 cs->num_scales = in ad7606c_18bit_chan_scale_setup()
465 /* Unipolar single-ended ranges start at 5 (b0101) */ in ad7606c_18bit_chan_scale_setup()
466 cs->reg_offset = 5; in ad7606c_18bit_chan_scale_setup()
467 cs->range = 1; in ad7606c_18bit_chan_scale_setup()
468 chan->scan_type.sign = 'u'; in ad7606c_18bit_chan_scale_setup()
477 struct ad7606_chan_scale *cs = &st->chan_scales[ch]; in ad7606c_16bit_chan_scale_setup() local
481 if (!st->sw_mode_en) { in ad7606c_16bit_chan_scale_setup()
482 cs->range = 0; in ad7606c_16bit_chan_scale_setup()
483 cs->scale_avail = ad7606_16bit_hw_scale_avail; in ad7606c_16bit_chan_scale_setup()
484 cs->num_scales = ARRAY_SIZE(ad7606_16bit_hw_scale_avail); in ad7606c_16bit_chan_scale_setup()
493 cs->scale_avail = ad7606c_16bit_differential_bipolar_scale_avail; in ad7606c_16bit_chan_scale_setup()
494 cs->num_scales = in ad7606c_16bit_chan_scale_setup()
497 cs->reg_offset = 8; in ad7606c_16bit_chan_scale_setup()
498 cs->range = 1; in ad7606c_16bit_chan_scale_setup()
499 chan->differential = 1; in ad7606c_16bit_chan_scale_setup()
500 chan->channel2 = chan->channel; in ad7606c_16bit_chan_scale_setup()
501 chan->scan_type.sign = 's'; in ad7606c_16bit_chan_scale_setup()
506 chan->differential = 0; in ad7606c_16bit_chan_scale_setup()
509 cs->scale_avail = ad7606c_16bit_single_ended_bipolar_scale_avail; in ad7606c_16bit_chan_scale_setup()
510 cs->num_scales = in ad7606c_16bit_chan_scale_setup()
512 /* Bipolar single-ended ranges start at 0 (b0000) */ in ad7606c_16bit_chan_scale_setup()
513 cs->reg_offset = 0; in ad7606c_16bit_chan_scale_setup()
514 cs->range = 3; in ad7606c_16bit_chan_scale_setup()
515 chan->scan_type.sign = 's'; in ad7606c_16bit_chan_scale_setup()
520 cs->scale_avail = ad7606c_16bit_single_ended_unipolar_scale_avail; in ad7606c_16bit_chan_scale_setup()
521 cs->num_scales = in ad7606c_16bit_chan_scale_setup()
523 /* Unipolar single-ended ranges start at 5 (b0101) */ in ad7606c_16bit_chan_scale_setup()
524 cs->reg_offset = 5; in ad7606c_16bit_chan_scale_setup()
525 cs->range = 1; in ad7606c_16bit_chan_scale_setup()
526 chan->scan_type.sign = 'u'; in ad7606c_16bit_chan_scale_setup()
535 struct ad7606_chan_scale *cs = &st->chan_scales[ch]; in ad7607_chan_scale_setup() local
537 cs->range = 0; in ad7607_chan_scale_setup()
538 cs->scale_avail = ad7607_hw_scale_avail; in ad7607_chan_scale_setup()
539 cs->num_scales = ARRAY_SIZE(ad7607_hw_scale_avail); in ad7607_chan_scale_setup()
547 struct ad7606_chan_scale *cs = &st->chan_scales[ch]; in ad7608_chan_scale_setup() local
549 cs->range = 0; in ad7608_chan_scale_setup()
550 cs->scale_avail = ad7606_18bit_hw_scale_avail; in ad7608_chan_scale_setup()
551 cs->num_scales = ARRAY_SIZE(ad7606_18bit_hw_scale_avail); in ad7608_chan_scale_setup()
559 struct ad7606_chan_scale *cs = &st->chan_scales[ch]; in ad7609_chan_scale_setup() local
561 cs->range = 0; in ad7609_chan_scale_setup()
562 cs->scale_avail = ad7609_hw_scale_avail; in ad7609_chan_scale_setup()
563 cs->num_scales = ARRAY_SIZE(ad7609_hw_scale_avail); in ad7609_chan_scale_setup()
575 guard(mutex)(&st->lock); in ad7606_reg_access()
578 ret = st->bops->reg_read(st, reg); in ad7606_reg_access()
584 return st->bops->reg_write(st, reg, writeval); in ad7606_reg_access()
593 pwm_get_state(st->cnvst_pwm, &cnvst_pwm_state); in ad7606_pwm_set_high()
597 ret = pwm_apply_might_sleep(st->cnvst_pwm, &cnvst_pwm_state); in ad7606_pwm_set_high()
607 pwm_get_state(st->cnvst_pwm, &cnvst_pwm_state); in ad7606_pwm_set_low()
611 ret = pwm_apply_might_sleep(st->cnvst_pwm, &cnvst_pwm_state); in ad7606_pwm_set_low()
620 pwm_get_state(st->cnvst_pwm, &cnvst_pwm_state); in ad7606_pwm_set_swing()
622 cnvst_pwm_state.duty_cycle = cnvst_pwm_state.period / 2; in ad7606_pwm_set_swing()
624 return pwm_apply_might_sleep(st->cnvst_pwm, &cnvst_pwm_state); in ad7606_pwm_set_swing()
631 pwm_get_state(st->cnvst_pwm, &cnvst_pwm_state); in ad7606_pwm_is_swinging()
644 return -EINVAL; in ad7606_set_sampling_freq()
647 pwm_get_state(st->cnvst_pwm, &cnvst_pwm_state); in ad7606_set_sampling_freq()
655 cnvst_pwm_state.duty_cycle = cnvst_pwm_state.period / 2; in ad7606_set_sampling_freq()
659 return pwm_apply_might_sleep(st->cnvst_pwm, &cnvst_pwm_state); in ad7606_set_sampling_freq()
664 unsigned int num = st->chip_info->num_adc_channels; in ad7606_read_samples()
666 return st->bops->read_block(st->dev, num, &st->data); in ad7606_read_samples()
672 struct iio_dev *indio_dev = pf->indio_dev; in ad7606_trigger_handler()
676 guard(mutex)(&st->lock); in ad7606_trigger_handler()
682 iio_push_to_buffers_with_timestamp(indio_dev, &st->data, in ad7606_trigger_handler()
685 iio_trigger_notify_done(indio_dev->trig); in ad7606_trigger_handler()
687 gpiod_set_value(st->gpio_convst, 1); in ad7606_trigger_handler()
696 unsigned int realbits = st->chip_info->channels[1].scan_type.realbits; in ad7606_scan_direct()
700 if (st->gpio_convst) { in ad7606_scan_direct()
701 gpiod_set_value(st->gpio_convst, 1); in ad7606_scan_direct()
714 if (!st->back) { in ad7606_scan_direct()
715 ret = wait_for_completion_timeout(&st->completion, in ad7606_scan_direct()
718 ret = -ETIMEDOUT; in ad7606_scan_direct()
729 chan = &indio_dev->channels[ch + 1]; in ad7606_scan_direct()
730 if (chan->scan_type.sign == 'u') { in ad7606_scan_direct()
732 *val = st->data.buf32[ch]; in ad7606_scan_direct()
734 *val = st->data.buf16[ch]; in ad7606_scan_direct()
737 *val = sign_extend32(st->data.buf32[ch], realbits - 1); in ad7606_scan_direct()
739 *val = sign_extend32(st->data.buf16[ch], realbits - 1); in ad7606_scan_direct()
743 if (!st->gpio_convst) { in ad7606_scan_direct()
748 gpiod_set_value(st->gpio_convst, 0); in ad7606_scan_direct()
761 struct ad7606_chan_scale *cs; in ad7606_read_raw() local
767 return -EBUSY; in ad7606_read_raw()
768 ret = ad7606_scan_direct(indio_dev, chan->address, val); in ad7606_read_raw()
774 if (st->sw_mode_en) in ad7606_read_raw()
775 ch = chan->address; in ad7606_read_raw()
776 cs = &st->chan_scales[ch]; in ad7606_read_raw()
777 *val = cs->scale_avail[cs->range][0]; in ad7606_read_raw()
778 *val2 = cs->scale_avail[cs->range][1]; in ad7606_read_raw()
781 *val = st->oversampling; in ad7606_read_raw()
788 pwm_get_state(st->cnvst_pwm, &cnvst_pwm_state); in ad7606_read_raw()
792 return -EINVAL; in ad7606_read_raw()
801 struct ad7606_chan_scale *cs = &st->chan_scales[0]; in in_voltage_scale_available_show() local
802 const unsigned int (*vals)[2] = cs->scale_avail; in in_voltage_scale_available_show()
806 for (i = 0; i < cs->num_scales; i++) in in_voltage_scale_available_show()
807 len += scnprintf(buf + len, PAGE_SIZE - len, "%u.%06u ", in in_voltage_scale_available_show()
809 buf[len - 1] = '\n'; in in_voltage_scale_available_show()
820 gpiod_set_value(st->gpio_range, val); in ad7606_write_scale_hw()
830 values[0] = val & GENMASK(2, 0); in ad7606_write_os_hw()
832 gpiod_multi_set_value_cansleep(st->gpio_os, values); in ad7606_write_os_hw()
835 if (st->chip_info->os_req_reset) in ad7606_write_os_hw()
849 struct ad7606_chan_scale *cs; in ad7606_write_raw() local
852 guard(mutex)(&st->lock); in ad7606_write_raw()
856 if (st->sw_mode_en) in ad7606_write_raw()
857 ch = chan->address; in ad7606_write_raw()
858 cs = &st->chan_scales[ch]; in ad7606_write_raw()
859 for (i = 0; i < cs->num_scales; i++) { in ad7606_write_raw()
860 scale_avail_uv[i] = cs->scale_avail[i][0] * MICRO + in ad7606_write_raw()
861 cs->scale_avail[i][1]; in ad7606_write_raw()
864 i = find_closest(val, scale_avail_uv, cs->num_scales); in ad7606_write_raw()
867 return -EBUSY; in ad7606_write_raw()
868 ret = st->write_scale(indio_dev, ch, i + cs->reg_offset); in ad7606_write_raw()
872 cs->range = i; in ad7606_write_raw()
877 return -EINVAL; in ad7606_write_raw()
878 i = find_closest(val, st->oversampling_avail, in ad7606_write_raw()
879 st->num_os_ratios); in ad7606_write_raw()
882 return -EBUSY; in ad7606_write_raw()
883 ret = st->write_os(indio_dev, i); in ad7606_write_raw()
887 st->oversampling = st->oversampling_avail[i]; in ad7606_write_raw()
892 return -EINVAL; in ad7606_write_raw()
895 return -EINVAL; in ad7606_write_raw()
905 const unsigned int *vals = st->oversampling_avail; in ad7606_oversampling_ratio_avail()
909 for (i = 0; i < st->num_os_ratios; i++) in ad7606_oversampling_ratio_avail()
910 len += scnprintf(buf + len, PAGE_SIZE - len, "%u ", vals[i]); in ad7606_oversampling_ratio_avail()
911 buf[len - 1] = '\n'; in ad7606_oversampling_ratio_avail()
949 struct device *dev = st->dev; in ad7606_request_gpios()
951 st->gpio_convst = devm_gpiod_get_optional(dev, "adi,conversion-start", in ad7606_request_gpios()
954 if (IS_ERR(st->gpio_convst)) in ad7606_request_gpios()
955 return PTR_ERR(st->gpio_convst); in ad7606_request_gpios()
957 st->gpio_reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW); in ad7606_request_gpios()
958 if (IS_ERR(st->gpio_reset)) in ad7606_request_gpios()
959 return PTR_ERR(st->gpio_reset); in ad7606_request_gpios()
961 st->gpio_range = devm_gpiod_get_optional(dev, "adi,range", in ad7606_request_gpios()
963 if (IS_ERR(st->gpio_range)) in ad7606_request_gpios()
964 return PTR_ERR(st->gpio_range); in ad7606_request_gpios()
966 st->gpio_standby = devm_gpiod_get_optional(dev, "standby", in ad7606_request_gpios()
968 if (IS_ERR(st->gpio_standby)) in ad7606_request_gpios()
969 return PTR_ERR(st->gpio_standby); in ad7606_request_gpios()
971 st->gpio_frstdata = devm_gpiod_get_optional(dev, "adi,first-data", in ad7606_request_gpios()
973 if (IS_ERR(st->gpio_frstdata)) in ad7606_request_gpios()
974 return PTR_ERR(st->gpio_frstdata); in ad7606_request_gpios()
976 if (!st->chip_info->oversampling_num) in ad7606_request_gpios()
979 st->gpio_os = devm_gpiod_get_array_optional(dev, in ad7606_request_gpios()
980 "adi,oversampling-ratio", in ad7606_request_gpios()
982 return PTR_ERR_OR_ZERO(st->gpio_os); in ad7606_request_gpios()
998 if (st->gpio_convst) { in ad7606_interrupt()
999 gpiod_set_value(st->gpio_convst, 0); in ad7606_interrupt()
1003 dev_err(st->dev, "PWM set low failed"); in ad7606_interrupt()
1007 iio_trigger_poll_nested(st->trig); in ad7606_interrupt()
1009 complete(&st->completion); in ad7606_interrupt()
1021 if (st->trig != trig) in ad7606_validate_trigger()
1022 return -EINVAL; in ad7606_validate_trigger()
1031 gpiod_set_value(st->gpio_convst, 1); in ad7606_buffer_postenable()
1040 gpiod_set_value(st->gpio_convst, 0); in ad7606_buffer_predisable()
1051 struct ad7606_chan_scale *cs; in ad7606_read_avail() local
1056 *vals = st->oversampling_avail; in ad7606_read_avail()
1057 *length = st->num_os_ratios; in ad7606_read_avail()
1063 if (st->sw_mode_en) in ad7606_read_avail()
1064 ch = chan->address; in ad7606_read_avail()
1066 cs = &st->chan_scales[ch]; in ad7606_read_avail()
1067 *vals = (int *)cs->scale_avail; in ad7606_read_avail()
1068 *length = cs->num_scales * 2; in ad7606_read_avail()
1073 return -EINVAL; in ad7606_read_avail()
1100 if (!st->bops->update_scan_mode) in ad7606_update_scan_mode()
1103 return st->bops->update_scan_mode(indio_dev, scan_mask); in ad7606_update_scan_mode()
1164 readval = st->bops->reg_read(st, addr); in ad7606_write_mask()
1171 return st->bops->reg_write(st, addr, readval); in ad7606_write_mask()
1207 AD7616_OS_MASK, val << 2); in ad7616_write_os_sw()
1223 return st->bops->reg_write(st, AD7606_OS_MODE, val); in ad7606_write_os_sw()
1236 st->write_scale = ad7616_write_scale_sw; in ad7616_sw_mode_setup()
1237 st->write_os = &ad7616_write_os_sw; in ad7616_sw_mode_setup()
1239 if (st->bops->sw_mode_config) { in ad7616_sw_mode_setup()
1240 ret = st->bops->sw_mode_config(indio_dev); in ad7616_sw_mode_setup()
1263 if (st->gpio_os) in ad7606b_sw_mode_setup()
1264 gpiod_multi_set_value_cansleep(st->gpio_os, os); in ad7606b_sw_mode_setup()
1267 st->oversampling_avail = ad7606b_oversampling_avail; in ad7606b_sw_mode_setup()
1268 st->num_os_ratios = ARRAY_SIZE(ad7606b_oversampling_avail); in ad7606b_sw_mode_setup()
1270 st->write_scale = ad7606_write_scale_sw; in ad7606b_sw_mode_setup()
1271 st->write_os = &ad7606_write_os_sw; in ad7606b_sw_mode_setup()
1273 if (!st->bops->sw_mode_config) in ad7606b_sw_mode_setup()
1276 return st->bops->sw_mode_config(indio_dev); in ad7606b_sw_mode_setup()
1282 unsigned int offset = indio_dev->num_channels - st->chip_info->num_adc_channels; in ad7606_chan_scales_setup()
1288 size = indio_dev->num_channels * sizeof(*indio_dev->channels); in ad7606_chan_scales_setup()
1289 chans = devm_kzalloc(st->dev, size, GFP_KERNEL); in ad7606_chan_scales_setup()
1291 return -ENOMEM; in ad7606_chan_scales_setup()
1293 memcpy(chans, indio_dev->channels, size); in ad7606_chan_scales_setup()
1294 indio_dev->channels = chans; in ad7606_chan_scales_setup()
1296 for (ch = 0; ch < st->chip_info->num_adc_channels; ch++) { in ad7606_chan_scales_setup()
1297 ret = st->chip_info->scale_setup_cb(indio_dev, &chans[ch + offset], ch); in ad7606_chan_scales_setup()
1320 return -ENOMEM; in ad7606_probe()
1325 st->dev = dev; in ad7606_probe()
1326 mutex_init(&st->lock); in ad7606_probe()
1327 st->bops = bops; in ad7606_probe()
1328 st->base_address = base_address; in ad7606_probe()
1329 st->oversampling = 1; in ad7606_probe()
1336 st->chip_info = chip_info; in ad7606_probe()
1338 if (st->chip_info->oversampling_num) { in ad7606_probe()
1339 st->oversampling_avail = st->chip_info->oversampling_avail; in ad7606_probe()
1340 st->num_os_ratios = st->chip_info->oversampling_num; in ad7606_probe()
1347 if (st->gpio_os) { in ad7606_probe()
1348 if (st->gpio_range) in ad7606_probe()
1349 indio_dev->info = &ad7606_info_os_and_range; in ad7606_probe()
1351 indio_dev->info = &ad7606_info_os; in ad7606_probe()
1353 if (st->gpio_range) in ad7606_probe()
1354 indio_dev->info = &ad7606_info_range; in ad7606_probe()
1356 indio_dev->info = &ad7606_info_no_os_or_range; in ad7606_probe()
1358 indio_dev->modes = INDIO_DIRECT_MODE; in ad7606_probe()
1359 indio_dev->name = chip_info->name; in ad7606_probe()
1360 indio_dev->channels = st->chip_info->channels; in ad7606_probe()
1361 indio_dev->num_channels = st->chip_info->num_channels; in ad7606_probe()
1365 dev_warn(st->dev, "failed to RESET: no RESET GPIO specified\n"); in ad7606_probe()
1368 if (st->chip_info->init_delay_ms) { in ad7606_probe()
1369 if (msleep_interruptible(st->chip_info->init_delay_ms)) in ad7606_probe()
1370 return -ERESTARTSYS; in ad7606_probe()
1374 if (!st->gpio_convst) { in ad7606_probe()
1375 st->cnvst_pwm = devm_pwm_get(dev, NULL); in ad7606_probe()
1376 if (IS_ERR(st->cnvst_pwm)) in ad7606_probe()
1377 return PTR_ERR(st->cnvst_pwm); in ad7606_probe()
1394 st->cnvst_pwm); in ad7606_probe()
1399 if (st->bops->iio_backend_config) { in ad7606_probe()
1405 chip_info->max_samplerate ? : 2 * KILO); in ad7606_probe()
1409 ret = st->bops->iio_backend_config(dev, indio_dev); in ad7606_probe()
1413 indio_dev->setup_ops = &ad7606_backend_buffer_ops; in ad7606_probe()
1417 if (!st->gpio_convst) in ad7606_probe()
1418 return dev_err_probe(dev, -EINVAL, in ad7606_probe()
1421 init_completion(&st->completion); in ad7606_probe()
1422 st->trig = devm_iio_trigger_alloc(dev, "%s-dev%d", in ad7606_probe()
1423 indio_dev->name, in ad7606_probe()
1425 if (!st->trig) in ad7606_probe()
1426 return -ENOMEM; in ad7606_probe()
1428 st->trig->ops = &ad7606_trigger_ops; in ad7606_probe()
1429 iio_trigger_set_drvdata(st->trig, indio_dev); in ad7606_probe()
1430 ret = devm_iio_trigger_register(dev, st->trig); in ad7606_probe()
1434 indio_dev->trig = iio_trigger_get(st->trig); in ad7606_probe()
1438 chip_info->name, indio_dev); in ad7606_probe()
1450 st->write_scale = ad7606_write_scale_hw; in ad7606_probe()
1451 st->write_os = ad7606_write_os_hw; in ad7606_probe()
1453 st->sw_mode_en = st->chip_info->sw_setup_cb && in ad7606_probe()
1454 device_property_present(st->dev, "adi,sw-mode"); in ad7606_probe()
1455 if (st->sw_mode_en) { in ad7606_probe()
1456 indio_dev->info = &ad7606_info_sw_mode; in ad7606_probe()
1457 st->chip_info->sw_setup_cb(indio_dev); in ad7606_probe()
1475 if (st->gpio_standby) { in ad7606_suspend()
1476 gpiod_set_value(st->gpio_range, 1); in ad7606_suspend()
1477 gpiod_set_value(st->gpio_standby, 1); in ad7606_suspend()
1488 if (st->gpio_standby) { in ad7606_resume()
1489 gpiod_set_value(st->gpio_range, st->chan_scales[0].range); in ad7606_resume()
1490 gpiod_set_value(st->gpio_standby, 1); in ad7606_resume()