staticbool ads7924_is_writeable_reg(struct device *dev, unsignedint reg)
{ switch (reg) { case ADS7924_MODECNTRL_REG: case ADS7924_INTCNTRL_REG: case ADS7924_ULR0_REG: case ADS7924_LLR0_REG: case ADS7924_ULR1_REG: case ADS7924_LLR1_REG: case ADS7924_ULR2_REG: case ADS7924_LLR2_REG: case ADS7924_ULR3_REG: case ADS7924_LLR3_REG: case ADS7924_INTCONFIG_REG: case ADS7924_SLPCONFIG_REG: case ADS7924_ACQCONFIG_REG: case ADS7924_PWRCONFIG_REG: case ADS7924_RESET_REG: returntrue; default: returnfalse;
}
}
ret = regmap_update_bits(data->regmap, ADS7924_MODECNTRL_REG,
ADS7924_MODECNTRL_MODE_MASK, mode_field); if (ret)
dev_err(dev, "failed to set mode %d (%pe)\n", mode,
ERR_PTR(ret));
indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data)); if (!indio_dev) return dev_err_probe(dev, -ENOMEM, "failed to allocate iio device\n");
data = iio_priv(indio_dev);
data->dev = dev;
/* Initialize the reset GPIO as output with an initial value of 0. */
data->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW); if (IS_ERR(data->reset_gpio)) return dev_err_probe(dev, PTR_ERR(data->reset_gpio), "failed to get request reset GPIO\n");
ret = ads7924_get_channels_config(dev); if (ret < 0) return dev_err_probe(dev, ret, "failed to get channels configuration\n");
data->regmap = devm_regmap_init_i2c(client, &ads7924_regmap_config); if (IS_ERR(data->regmap)) return dev_err_probe(dev, PTR_ERR(data->regmap), "failed to init regmap\n");
data->vref_reg = devm_regulator_get(dev, "vref"); if (IS_ERR(data->vref_reg)) return dev_err_probe(dev, PTR_ERR(data->vref_reg), "failed to get vref regulator\n");
ret = regulator_enable(data->vref_reg); if (ret) return dev_err_probe(dev, ret, "failed to enable regulator\n");
ret = devm_add_action_or_reset(dev, ads7924_reg_disable, data->vref_reg); if (ret) return dev_err_probe(dev, ret, "failed to add regulator disable action\n");
ret = ads7924_reset(indio_dev); if (ret < 0) return dev_err_probe(dev, ret, "failed to reset device\n");
ret = ads7924_set_conv_mode(data, ADS7924_MODECNTRL_AUTO_SCAN); if (ret) return dev_err_probe(dev, ret, "failed to set conversion mode\n");
ret = devm_add_action_or_reset(dev, ads7924_set_idle_mode, data); if (ret) return dev_err_probe(dev, ret, "failed to add idle mode action\n");
/* Use minimum signal acquire time. */
ret = regmap_update_bits(data->regmap, ADS7924_ACQCONFIG_REG,
ADS7924_ACQTIME_MASK,
FIELD_PREP(ADS7924_ACQTIME_MASK, 0)); if (ret < 0) return dev_err_probe(dev, ret, "failed to configure signal acquire time\n");
/* Disable power-up time. */
ret = regmap_update_bits(data->regmap, ADS7924_PWRCONFIG_REG,
ADS7924_PWRUPTIME_MASK,
FIELD_PREP(ADS7924_PWRUPTIME_MASK, 0)); if (ret < 0) return dev_err_probe(dev, ret, "failed to configure power-up time\n");
data->conv_invalid = true;
ret = devm_iio_device_register(dev, indio_dev); if (ret < 0) return dev_err_probe(dev, ret, "failed to register IIO device\n");
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.