Lines Matching +full:vref2 +full:- +full:supply
1 // SPDX-License-Identifier: GPL-2.0+
7 * AD7172-2/AD7172-4/AD7173-8/AD7175-2
8 * AD7175-8/AD7176-2/AD7177-2
18 #include <linux/clk-provider.h>
149 (pin2) < st->info->num_voltage_in && \
150 (pin2) >= st->info->num_voltage_in_div)
156 #define AD7173_MODE_CAL_INT_ZERO 0x4 /* Internal Zero-Scale Calibration */
157 #define AD7173_MODE_CAL_INT_FULL 0x5 /* Internal Full-Scale Calibration */
158 #define AD7173_MODE_CAL_SYS_ZERO 0x6 /* System Zero-Scale Calibration */
159 #define AD7173_MODE_CAL_SYS_FULL 0x7 /* System Full-Scale Calibration */
237 24845000, 24845000, 20725000, 20725000, /* 0-3 */
238 15564000, 13841000, 10390000, 10390000, /* 4-7 */
239 4994000, 2499000, 1000000, 500000, /* 8-11 */
240 395500, 200000, 100000, 59890, /* 12-15 */
241 49920, 20000, 16660, 10000, /* 16-19 */
242 5000, 2500, 2500, /* 20-22 */
246 12422360, 12422360, 12422360, 12422360, /* 0-3 */
247 10362690, 10362690, 7782100, 6290530, /* 4-7 */
248 5194800, 2496900, 1007600, 499900, /* 8-11 */
249 390600, 200300, 100000, 59750, /* 12-15 */
250 49840, 20000, 16650, 10000, /* 16-19 */
251 5000, 2500, 1250, /* 20-22 */
255 6211000, 6211000, 6211000, 6211000, 6211000, 6211000, 5181000, 4444000, /* 0-7 */
256 3115000, 2597000, 1007000, 503800, 381000, 200300, 100500, 59520, /* 8-15 */
257 49680, 20010, 16333, 10000, 5000, 2500, 1250, /* 16-22 */
261 50000000, 41667000, 31250000, 27778000, /* 0-3 */
262 20833000, 17857000, 12500000, 10000000, /* 4-7 */
263 5000000, 2500000, 1000000, 500000, /* 8-11 */
264 397500, 200000, 100000, 59920, /* 12-15 */
265 49960, 20000, 16666, 10000, /* 16-19 */
279 [AD7173_SETUP_REF_SEL_EXT_REF2] = "vref2",
280 [AD7173_SETUP_REF_SEL_INT_REF] = "refout-avss",
285 "ext-clk", "xtal"
321 st->channels[chan->address].syscalib_mode = mode; in ad7173_set_syscalib_mode()
331 return st->channels[chan->address].syscalib_mode; in ad7173_get_syscalib_mode()
348 return -EBUSY; in ad7173_write_syscalib()
350 mode = st->channels[chan->address].syscalib_mode; in ad7173_write_syscalib()
353 ret = ad_sd_calibrate(&st->sd, AD7173_MODE_CAL_SYS_ZERO, in ad7173_write_syscalib()
354 chan->address); in ad7173_write_syscalib()
356 ret = ad_sd_calibrate(&st->sd, AD7173_MODE_CAL_SYS_FULL, in ad7173_write_syscalib()
357 chan->address); in ad7173_write_syscalib()
390 for (i = 0; i < st->num_channels; i++) { in ad7173_calibrate_all()
391 if (indio_dev->channels[i].type != IIO_VOLTAGE) in ad7173_calibrate_all()
394 ret = ad_sd_calibrate(&st->sd, AD7173_MODE_CAL_INT_ZERO, i); in ad7173_calibrate_all()
398 if (st->info->has_internal_fs_calibration) { in ad7173_calibrate_all()
399 ret = ad_sd_calibrate(&st->sd, AD7173_MODE_CAL_INT_FULL, i); in ad7173_calibrate_all()
436 struct ad7173_channel *adchan = &st->channels[chan->address]; in ad4111_openwire_event()
437 struct ad7173_channel_config *cfg = &adchan->cfg; in ad4111_openwire_event()
440 ret = regmap_set_bits(st->reg_gpiocon_regmap, AD7173_REG_GPIO, in ad4111_openwire_event()
445 adchan->cfg.openwire_comp_chan = in ad4111_openwire_event()
446 openwire_ain_to_channel_pair[chan->channel][chan->differential][0]; in ad4111_openwire_event()
450 dev_err(&indio_dev->dev, in ad4111_openwire_event()
455 adchan->cfg.openwire_comp_chan = in ad4111_openwire_event()
456 openwire_ain_to_channel_pair[chan->channel][chan->differential][1]; in ad4111_openwire_event()
460 dev_err(&indio_dev->dev, in ad4111_openwire_event()
465 if (abs(val1 - val2) > cfg->openwire_thrsh_raw) in ad4111_openwire_event()
467 IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, chan->address, in ad4111_openwire_event()
472 adchan->cfg.openwire_comp_chan = -1; in ad4111_openwire_event()
473 regmap_clear_bits(st->reg_gpiocon_regmap, AD7173_REG_GPIO, in ad4111_openwire_event()
502 regmap_update_bits(st->reg_gpiocon_regmap, AD7173_REG_GPIO, mask, ~mask); in ad7173_gpio_disable()
508 struct device *dev = &st->sd.spi->dev; in ad7173_gpio_init()
512 st->reg_gpiocon_regmap = devm_regmap_init_spi(st->sd.spi, &ad7173_regmap_config); in ad7173_gpio_init()
513 ret = PTR_ERR_OR_ZERO(st->reg_gpiocon_regmap); in ad7173_gpio_init()
518 regmap_update_bits(st->reg_gpiocon_regmap, AD7173_REG_GPIO, mask, mask); in ad7173_gpio_init()
525 gpio_regmap.regmap = st->reg_gpiocon_regmap; in ad7173_gpio_init()
526 gpio_regmap.ngpio = st->info->num_gpios; in ad7173_gpio_init()
528 if (st->info->higher_gpio_bits) in ad7173_gpio_init()
533 st->gpio_regmap = devm_gpio_regmap_register(dev, &gpio_regmap); in ad7173_gpio_init()
534 ret = PTR_ERR_OR_ZERO(st->gpio_regmap); in ad7173_gpio_init()
536 return dev_err_probe(dev, ret, "Unable to init gpio-regmap\n"); in ad7173_gpio_init()
555 ida_destroy(&st->cfg_slots_status); in ad7173_ida_destroy()
560 memset64(st->config_cnts, 0, st->info->num_configs); in ad7173_reset_usage_cnts()
561 st->config_usage_counter = 0; in ad7173_reset_usage_cnts()
582 for (i = 0; i < st->num_channels; i++) { in ad7173_find_live_config()
583 cfg_aux = &st->channels[i].cfg; in ad7173_find_live_config()
585 if (cfg_aux->live && in ad7173_find_live_config()
586 cfg->bipolar == cfg_aux->bipolar && in ad7173_find_live_config()
587 cfg->input_buf == cfg_aux->input_buf && in ad7173_find_live_config()
588 cfg->odr == cfg_aux->odr && in ad7173_find_live_config()
589 cfg->ref_sel == cfg_aux->ref_sel) in ad7173_find_live_config()
600 for (i = 1; i < st->info->num_configs; i++) in ad7173_free_config_slot_lru()
601 if (st->config_cnts[i] < st->config_cnts[lru_position]) in ad7173_free_config_slot_lru()
604 for (i = 0; i < st->num_channels; i++) in ad7173_free_config_slot_lru()
605 if (st->channels[i].cfg.cfg_slot == lru_position) in ad7173_free_config_slot_lru()
606 st->channels[i].cfg.live = false; in ad7173_free_config_slot_lru()
608 ida_free(&st->cfg_slots_status, lru_position); in ad7173_free_config_slot_lru()
609 return ida_alloc(&st->cfg_slots_status, GFP_KERNEL); in ad7173_free_config_slot_lru()
619 free_cfg_slot = ida_alloc_range(&st->cfg_slots_status, 0, in ad7173_load_config()
620 st->info->num_configs - 1, GFP_KERNEL); in ad7173_load_config()
624 cfg->cfg_slot = free_cfg_slot; in ad7173_load_config()
625 config = FIELD_PREP(AD7173_SETUP_REF_SEL_MASK, cfg->ref_sel); in ad7173_load_config()
627 if (cfg->bipolar) in ad7173_load_config()
630 if (cfg->input_buf) in ad7173_load_config()
633 ret = ad_sd_write_reg(&st->sd, AD7173_REG_SETUP(free_cfg_slot), 2, config); in ad7173_load_config()
637 return ad_sd_write_reg(&st->sd, AD7173_REG_FILTER(free_cfg_slot), 2, in ad7173_load_config()
638 AD7173_FILTER_ODR0_MASK & cfg->odr); in ad7173_load_config()
643 struct ad7173_channel_config *cfg = &st->channels[addr].cfg; in ad7173_config_channel()
647 if (!cfg->live) { in ad7173_config_channel()
650 cfg->cfg_slot = live_cfg->cfg_slot; in ad7173_config_channel()
655 cfg->live = true; in ad7173_config_channel()
659 if (st->config_usage_counter == U64_MAX) in ad7173_config_channel()
662 st->config_usage_counter++; in ad7173_config_channel()
663 st->config_cnts[cfg->cfg_slot] = st->config_usage_counter; in ad7173_config_channel()
679 FIELD_PREP(AD7173_CH_SETUP_SEL_MASK, st->channels[channel].cfg.cfg_slot) | in ad7173_set_channel()
680 st->channels[channel].ain; in ad7173_set_channel()
682 if (st->channels[channel].cfg.openwire_comp_chan >= 0) in ad7173_set_channel()
683 channel = st->channels[channel].cfg.openwire_comp_chan; in ad7173_set_channel()
685 return ad_sd_write_reg(&st->sd, AD7173_REG_CH(channel), 2, val); in ad7173_set_channel()
693 st->adc_mode &= ~AD7173_ADC_MODE_MODE_MASK; in ad7173_set_mode()
694 st->adc_mode |= FIELD_PREP(AD7173_ADC_MODE_MODE_MASK, mode); in ad7173_set_mode()
696 return ad_sd_write_reg(&st->sd, AD7173_REG_ADC_MODE, 2, st->adc_mode); in ad7173_set_mode()
702 unsigned int interface_mode = st->interface_mode; in ad7173_append_status()
707 ret = ad_sd_write_reg(&st->sd, AD7173_REG_INTERFACE_MODE, 2, interface_mode); in ad7173_append_status()
711 st->interface_mode = interface_mode; in ad7173_append_status()
722 for (i = 0; i < st->num_channels; i++) { in ad7173_disable_all()
735 if (st->channels[chan].cfg.openwire_comp_chan >= 0) in ad7173_disable_one()
736 chan = st->channels[chan].cfg.openwire_comp_chan; in ad7173_disable_one()
909 .name = "ad7172-2",
926 .name = "ad7172-4",
942 .name = "ad7173-8",
959 .name = "ad7175-2",
976 .name = "ad7175-8",
994 .name = "ad7176-2",
1008 .name = "ad7177-2",
1028 struct device *dev = &st->sd.spi->dev; in ad7173_setup()
1035 ret = spi_write_then_read(st->sd.spi, buf, sizeof(buf), NULL, 0); in ad7173_setup()
1042 ret = ad_sd_read_reg(&st->sd, AD7173_REG_ID, 2, &id); in ad7173_setup()
1047 if (id != st->info->id) in ad7173_setup()
1049 id, st->info->id); in ad7173_setup()
1051 st->adc_mode |= AD7173_ADC_MODE_SING_CYC; in ad7173_setup()
1052 st->interface_mode = 0x0; in ad7173_setup()
1054 st->config_usage_counter = 0; in ad7173_setup()
1055 st->config_cnts = devm_kcalloc(dev, st->info->num_configs, in ad7173_setup()
1056 sizeof(*st->config_cnts), GFP_KERNEL); in ad7173_setup()
1057 if (!st->config_cnts) in ad7173_setup()
1058 return -ENOMEM; in ad7173_setup()
1065 return ad7173_disable_all(&st->sd); in ad7173_setup()
1075 vref = regulator_get_voltage(st->regulators[0].consumer); in ad7173_get_ref_voltage_milli()
1079 vref = regulator_get_voltage(st->regulators[1].consumer); in ad7173_get_ref_voltage_milli()
1087 vref = regulator_get_voltage(st->regulators[2].consumer); in ad7173_get_ref_voltage_milli()
1091 return -EINVAL; in ad7173_get_ref_voltage_milli()
1105 struct ad7173_channel *ch = &st->channels[chan->address]; in ad7173_read_raw()
1116 if (ch->openwire_det_en) { in ad7173_read_raw()
1125 switch (chan->type) { in ad7173_read_raw()
1130 *val2 = chan->scan_type.realbits; in ad7173_read_raw()
1133 *val = ad7173_get_ref_voltage_milli(st, ch->cfg.ref_sel); in ad7173_read_raw()
1134 *val2 = chan->scan_type.realbits - !!(ch->cfg.bipolar); in ad7173_read_raw()
1136 if (chan->channel < st->info->num_voltage_in_div) in ad7173_read_raw()
1140 *val = ad7173_get_ref_voltage_milli(st, ch->cfg.ref_sel); in ad7173_read_raw()
1142 *val2 = chan->scan_type.realbits - ch->cfg.bipolar; in ad7173_read_raw()
1145 return -EINVAL; in ad7173_read_raw()
1149 switch (chan->type) { in ad7173_read_raw()
1151 /* 0 Kelvin -> raw sample */ in ad7173_read_raw()
1152 temp = -ABSOLUTE_ZERO_MILLICELSIUS; in ad7173_read_raw()
1154 temp <<= chan->scan_type.realbits; in ad7173_read_raw()
1158 *val = -temp; in ad7173_read_raw()
1162 *val = -BIT(chan->scan_type.realbits - 1); in ad7173_read_raw()
1165 return -EINVAL; in ad7173_read_raw()
1168 reg = st->channels[chan->address].cfg.odr; in ad7173_read_raw()
1170 *val = st->info->sinc5_data_rates[reg] / MILLI; in ad7173_read_raw()
1171 *val2 = (st->info->sinc5_data_rates[reg] % MILLI) * (MICRO / MILLI); in ad7173_read_raw()
1175 return -EINVAL; in ad7173_read_raw()
1189 return -EBUSY; in ad7173_write_raw()
1209 for (i = st->info->odr_start_value; i < st->info->num_sinc5_data_rates - 1; i++) in ad7173_write_raw()
1210 if (freq >= st->info->sinc5_data_rates[i]) in ad7173_write_raw()
1213 cfg = &st->channels[chan->address].cfg; in ad7173_write_raw()
1214 cfg->odr = i; in ad7173_write_raw()
1215 cfg->live = false; in ad7173_write_raw()
1219 ret = -EINVAL; in ad7173_write_raw()
1233 for (i = 0; i < indio_dev->num_channels; i++) { in ad7173_update_scan_mode()
1235 ret = ad7173_set_channel(&st->sd, i); in ad7173_update_scan_mode()
1237 ret = ad_sd_write_reg(&st->sd, AD7173_REG_CH(i), 2, 0); in ad7173_update_scan_mode()
1260 return ad_sd_read_reg(&st->sd, reg, reg_size, readval); in ad7173_debug_reg_access()
1262 return ad_sd_write_reg(&st->sd, reg, reg_size, writeval); in ad7173_debug_reg_access()
1272 struct ad7173_channel *adchan = &st->channels[chan->address]; in ad7173_write_event_config()
1276 adchan->openwire_det_en = state; in ad7173_write_event_config()
1279 return -EINVAL; in ad7173_write_event_config()
1289 struct ad7173_channel *adchan = &st->channels[chan->address]; in ad7173_read_event_config()
1293 return adchan->openwire_det_en; in ad7173_read_event_config()
1295 return -EINVAL; in ad7173_read_event_config()
1358 regulator_bulk_disable(ARRAY_SIZE(st->regulators), st->regulators); in ad7173_disable_regulators()
1366 st->adc_mode &= ~AD7173_ADC_MODE_CLOCKSEL_MASK; in ad7173_sel_clk()
1367 st->adc_mode |= FIELD_PREP(AD7173_ADC_MODE_CLOCKSEL_MASK, clk_sel); in ad7173_sel_clk()
1368 ret = ad_sd_write_reg(&st->sd, AD7173_REG_ADC_MODE, 0x2, st->adc_mode); in ad7173_sel_clk()
1378 return st->info->clock / HZ_PER_KHZ; in ad7173_clk_recalc_rate()
1386 clk_sel = FIELD_GET(AD7173_ADC_MODE_CLOCKSEL_MASK, st->adc_mode); in ad7173_clk_output_is_enabled()
1414 struct device *dev = indio_dev->dev.parent; in ad7173_register_clk_provider()
1425 st->int_clk_hw.init = &init; in ad7173_register_clk_provider()
1426 ret = devm_clk_hw_register(dev, &st->int_clk_hw); in ad7173_register_clk_provider()
1431 &st->int_clk_hw); in ad7173_register_clk_provider()
1437 struct device *dev = &st->sd.spi->dev; in ad4111_validate_current_ain()
1439 if (!st->info->has_current_inputs) in ad4111_validate_current_ain()
1440 return dev_err_probe(dev, -EINVAL, in ad4111_validate_current_ain()
1442 st->info->name); in ad4111_validate_current_ain()
1445 return dev_err_probe(dev, -EINVAL, in ad4111_validate_current_ain()
1446 "For current channels single-channel must be <[0-3]>\n"); in ad4111_validate_current_ain()
1454 struct device *dev = &st->sd.spi->dev; in ad7173_validate_voltage_ain_inputs()
1457 /* (AVDD1-AVSS)/5 power supply monitoring */ in ad7173_validate_voltage_ain_inputs()
1459 st->info->has_pow_supply_monitoring) in ad7173_validate_voltage_ain_inputs()
1463 (ain0 == AD4111_VINCOM_INPUT && st->info->has_vincom_input); in ad7173_validate_voltage_ain_inputs()
1465 (ain1 == AD4111_VINCOM_INPUT && st->info->has_vincom_input); in ad7173_validate_voltage_ain_inputs()
1467 if ((ain0 >= st->info->num_voltage_in && !special_input0) || in ad7173_validate_voltage_ain_inputs()
1468 (ain1 >= st->info->num_voltage_in && !special_input1)) { in ad7173_validate_voltage_ain_inputs()
1470 return dev_err_probe(dev, -EINVAL, in ad7173_validate_voltage_ain_inputs()
1471 "VINCOM not supported for %s\n", st->info->name); in ad7173_validate_voltage_ain_inputs()
1473 return dev_err_probe(dev, -EINVAL, in ad7173_validate_voltage_ain_inputs()
1480 return dev_err_probe(dev, -EINVAL, in ad7173_validate_voltage_ain_inputs()
1484 ((ain0 >= st->info->num_voltage_in_div) != in ad7173_validate_voltage_ain_inputs()
1485 (ain1 >= st->info->num_voltage_in_div))) in ad7173_validate_voltage_ain_inputs()
1486 return dev_err_probe(dev, -EINVAL, in ad7173_validate_voltage_ain_inputs()
1495 struct device *dev = &st->sd.spi->dev; in ad7173_validate_reference()
1498 if (ref_sel == AD7173_SETUP_REF_SEL_INT_REF && !st->info->has_int_ref) in ad7173_validate_reference()
1499 return dev_err_probe(dev, -EINVAL, in ad7173_validate_reference()
1502 if (ref_sel == AD7173_SETUP_REF_SEL_EXT_REF2 && !st->info->has_ref2) in ad7173_validate_reference()
1503 return dev_err_probe(dev, -EINVAL, in ad7173_validate_reference()
1524 return (ain0 % 2) ? (ain0 - 1) == ain1 : (ain0 + 1) == ain1; in ad7173_validate_openwire_ain_inputs()
1536 BIT(chan->scan_type.realbits - !!(chan_st_priv->cfg.bipolar)) in ad7173_calc_openwire_thrsh_raw()
1538 / ad7173_get_ref_voltage_milli(st, chan_st_priv->cfg.ref_sel); in ad7173_calc_openwire_thrsh_raw()
1539 if (chan->channel < st->info->num_voltage_in_div) in ad7173_calc_openwire_thrsh_raw()
1549 struct device *dev = indio_dev->dev.parent; in ad7173_fw_parse_channel_config()
1556 if (st->info->has_temp) in ad7173_fw_parse_channel_config()
1560 return dev_err_probe(dev, -ENODATA, "No channels specified\n"); in ad7173_fw_parse_channel_config()
1562 if (num_channels > st->info->num_channels) in ad7173_fw_parse_channel_config()
1563 return dev_err_probe(dev, -EINVAL, in ad7173_fw_parse_channel_config()
1565 st->info->num_channels); in ad7173_fw_parse_channel_config()
1567 indio_dev->num_channels = num_channels; in ad7173_fw_parse_channel_config()
1568 st->num_channels = num_channels; in ad7173_fw_parse_channel_config()
1570 chan_arr = devm_kcalloc(dev, sizeof(*indio_dev->channels), in ad7173_fw_parse_channel_config()
1571 st->num_channels, GFP_KERNEL); in ad7173_fw_parse_channel_config()
1573 return -ENOMEM; in ad7173_fw_parse_channel_config()
1575 chans_st_arr = devm_kcalloc(dev, st->num_channels, sizeof(*st->channels), in ad7173_fw_parse_channel_config()
1578 return -ENOMEM; in ad7173_fw_parse_channel_config()
1580 indio_dev->channels = chan_arr; in ad7173_fw_parse_channel_config()
1581 st->channels = chans_st_arr; in ad7173_fw_parse_channel_config()
1583 if (st->info->has_temp) { in ad7173_fw_parse_channel_config()
1586 chan_st_priv->ain = in ad7173_fw_parse_channel_config()
1589 chan_st_priv->cfg.bipolar = false; in ad7173_fw_parse_channel_config()
1590 chan_st_priv->cfg.input_buf = st->info->has_input_buf; in ad7173_fw_parse_channel_config()
1591 chan_st_priv->cfg.ref_sel = AD7173_SETUP_REF_SEL_INT_REF; in ad7173_fw_parse_channel_config()
1592 chan_st_priv->cfg.odr = st->info->odr_start_value; in ad7173_fw_parse_channel_config()
1593 chan_st_priv->cfg.openwire_comp_chan = -1; in ad7173_fw_parse_channel_config()
1594 st->adc_mode |= AD7173_ADC_MODE_REF_EN; in ad7173_fw_parse_channel_config()
1595 if (st->info->data_reg_only_16bit) in ad7173_fw_parse_channel_config()
1607 ret = fwnode_property_read_u32_array(child, "diff-channels", in ad7173_fw_parse_channel_config()
1610 ret = fwnode_property_read_u32(child, "single-channel", in ad7173_fw_parse_channel_config()
1614 "Channel must define one of diff-channels or single-channel.\n"); in ad7173_fw_parse_channel_config()
1616 is_current_chan = fwnode_property_read_bool(child, "adi,current-channel"); in ad7173_fw_parse_channel_config()
1618 chan->differential = true; in ad7173_fw_parse_channel_config()
1626 if (!chan->differential) { in ad7173_fw_parse_channel_config()
1628 "common-mode-channel", ain + 1); in ad7173_fw_parse_channel_config()
1631 "common-mode-channel must be defined for single-ended channels.\n"); in ad7173_fw_parse_channel_config()
1639 "adi,reference-select", in ad7173_fw_parse_channel_config()
1652 st->adc_mode |= AD7173_ADC_MODE_REF_EN; in ad7173_fw_parse_channel_config()
1653 chan_st_priv->cfg.ref_sel = ref_sel; in ad7173_fw_parse_channel_config()
1655 chan->address = chan_index; in ad7173_fw_parse_channel_config()
1656 chan->scan_index = chan_index; in ad7173_fw_parse_channel_config()
1657 chan->channel = ain[0]; in ad7173_fw_parse_channel_config()
1658 chan_st_priv->cfg.input_buf = st->info->has_input_buf; in ad7173_fw_parse_channel_config()
1659 chan_st_priv->cfg.odr = st->info->odr_start_value; in ad7173_fw_parse_channel_config()
1660 chan_st_priv->cfg.openwire_comp_chan = -1; in ad7173_fw_parse_channel_config()
1662 chan_st_priv->cfg.bipolar = fwnode_property_read_bool(child, "bipolar"); in ad7173_fw_parse_channel_config()
1663 if (chan_st_priv->cfg.bipolar) in ad7173_fw_parse_channel_config()
1664 chan->info_mask_separate |= BIT(IIO_CHAN_INFO_OFFSET); in ad7173_fw_parse_channel_config()
1667 chan->type = IIO_CURRENT; in ad7173_fw_parse_channel_config()
1668 chan->differential = false; in ad7173_fw_parse_channel_config()
1669 chan->channel2 = 0; in ad7173_fw_parse_channel_config()
1670 chan_st_priv->ain = ad4111_current_channel_config[ain[0]]; in ad7173_fw_parse_channel_config()
1672 chan_st_priv->cfg.input_buf = st->info->has_input_buf; in ad7173_fw_parse_channel_config()
1673 chan->channel2 = ain[1]; in ad7173_fw_parse_channel_config()
1674 chan_st_priv->ain = AD7173_CH_ADDRESS(ain[0], ain[1]); in ad7173_fw_parse_channel_config()
1675 if (st->info->has_openwire_det && in ad7173_fw_parse_channel_config()
1676 ad7173_validate_openwire_ain_inputs(st, chan->differential, ain[0], ain[1])) { in ad7173_fw_parse_channel_config()
1677 chan->event_spec = ad4111_events; in ad7173_fw_parse_channel_config()
1678 chan->num_event_specs = ARRAY_SIZE(ad4111_events); in ad7173_fw_parse_channel_config()
1679 chan_st_priv->cfg.openwire_thrsh_raw = in ad7173_fw_parse_channel_config()
1685 if (st->info->data_reg_only_16bit) in ad7173_fw_parse_channel_config()
1696 struct device *dev = indio_dev->dev.parent; in ad7173_fw_parse_device_config()
1699 st->regulators[0].supply = ad7173_ref_sel_str[AD7173_SETUP_REF_SEL_EXT_REF]; in ad7173_fw_parse_device_config()
1700 st->regulators[1].supply = ad7173_ref_sel_str[AD7173_SETUP_REF_SEL_EXT_REF2]; in ad7173_fw_parse_device_config()
1701 st->regulators[2].supply = ad7173_ref_sel_str[AD7173_SETUP_REF_SEL_AVDD1_AVSS]; in ad7173_fw_parse_device_config()
1706 * setting attributes so if any channel uses a dummy supply the driver in ad7173_fw_parse_device_config()
1709 ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(st->regulators), in ad7173_fw_parse_device_config()
1710 st->regulators); in ad7173_fw_parse_device_config()
1714 ret = regulator_bulk_enable(ARRAY_SIZE(st->regulators), st->regulators); in ad7173_fw_parse_device_config()
1723 ret = device_property_match_property_string(dev, "clock-names", in ad7173_fw_parse_device_config()
1727 st->adc_mode |= FIELD_PREP(AD7173_ADC_MODE_CLOCKSEL_MASK, in ad7173_fw_parse_device_config()
1733 st->adc_mode |= FIELD_PREP(AD7173_ADC_MODE_CLOCKSEL_MASK, in ad7173_fw_parse_device_config()
1746 struct device *dev = &spi->dev; in ad7173_probe()
1753 return -ENOMEM; in ad7173_probe()
1756 st->info = spi_get_device_match_data(spi); in ad7173_probe()
1757 if (!st->info) in ad7173_probe()
1758 return -ENODEV; in ad7173_probe()
1760 ida_init(&st->cfg_slots_status); in ad7173_probe()
1765 indio_dev->name = st->info->name; in ad7173_probe()
1766 indio_dev->modes = INDIO_DIRECT_MODE; in ad7173_probe()
1767 indio_dev->info = &ad7173_info; in ad7173_probe()
1769 spi->mode = SPI_MODE_3; in ad7173_probe()
1774 ret = ad_sd_init(&st->sd, indio_dev, spi, st->info->sd_info); in ad7173_probe()
1804 { .compatible = "adi,ad7172-2", .data = &ad7172_2_device_info },
1805 { .compatible = "adi,ad7172-4", .data = &ad7172_4_device_info },
1806 { .compatible = "adi,ad7173-8", .data = &ad7173_8_device_info },
1807 { .compatible = "adi,ad7175-2", .data = &ad7175_2_device_info },
1808 { .compatible = "adi,ad7175-8", .data = &ad7175_8_device_info },
1809 { .compatible = "adi,ad7176-2", .data = &ad7176_2_device_info },
1810 { .compatible = "adi,ad7177-2", .data = &ad7177_2_device_info },
1822 { "ad7172-2", (kernel_ulong_t)&ad7172_2_device_info },
1823 { "ad7172-4", (kernel_ulong_t)&ad7172_4_device_info },
1824 { "ad7173-8", (kernel_ulong_t)&ad7173_8_device_info },
1825 { "ad7175-2", (kernel_ulong_t)&ad7175_2_device_info },
1826 { "ad7175-8", (kernel_ulong_t)&ad7175_8_device_info },
1827 { "ad7176-2", (kernel_ulong_t)&ad7176_2_device_info },
1828 { "ad7177-2", (kernel_ulong_t)&ad7177_2_device_info },
1844 MODULE_AUTHOR("Lars-Peter Clausen <lars@metafo.de>");