Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/drivers/iio/adc/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 3 kB image not shown  

Quelle  ad7091r5.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0
/*
 * AD7091R5 Analog to Digital converter driver
 *
 * Copyright 2014-2019 Analog Devices Inc.
 */


#include <linux/i2c.h>
#include <linux/iio/iio.h>
#include <linux/module.h>
#include <linux/regmap.h>

#include "ad7091r-base.h"

static const struct iio_chan_spec ad7091r5_channels_irq[] = {
 AD7091R_CHANNEL(0, 12, ad7091r_events, ARRAY_SIZE(ad7091r_events)),
 AD7091R_CHANNEL(1, 12, ad7091r_events, ARRAY_SIZE(ad7091r_events)),
 AD7091R_CHANNEL(2, 12, ad7091r_events, ARRAY_SIZE(ad7091r_events)),
 AD7091R_CHANNEL(3, 12, ad7091r_events, ARRAY_SIZE(ad7091r_events)),
};

static const struct iio_chan_spec ad7091r5_channels_noirq[] = {
 AD7091R_CHANNEL(0, 12, NULL, 0),
 AD7091R_CHANNEL(1, 12, NULL, 0),
 AD7091R_CHANNEL(2, 12, NULL, 0),
 AD7091R_CHANNEL(3, 12, NULL, 0),
};

static int ad7091r5_set_mode(struct ad7091r_state *st, enum ad7091r_mode mode)
{
 int ret, conf;

 switch (mode) {
 case AD7091R_MODE_SAMPLE:
  conf = 0;
  break;
 case AD7091R_MODE_COMMAND:
  conf = AD7091R_REG_CONF_CMD;
  break;
 case AD7091R_MODE_AUTOCYCLE:
  conf = AD7091R_REG_CONF_AUTO;
  break;
 default:
  return -EINVAL;
 }

 ret = regmap_update_bits(st->map, AD7091R_REG_CONF,
     AD7091R_REG_CONF_MODE_MASK, conf);
 if (ret)
  return ret;

 st->mode = mode;

 return 0;
}

static unsigned int ad7091r5_reg_result_chan_id(unsigned int val)
{
 return AD7091R5_REG_RESULT_CH_ID(val);
}

static const struct ad7091r_chip_info ad7091r5_chip_info_irq = {
 .name = "ad7091r-5",
 .channels = ad7091r5_channels_irq,
 .num_channels = ARRAY_SIZE(ad7091r5_channels_irq),
 .vref_mV = 2500,
 .reg_result_chan_id = &ad7091r5_reg_result_chan_id,
 .set_mode = &ad7091r5_set_mode,
};

static const struct ad7091r_chip_info ad7091r5_chip_info_noirq = {
 .name = "ad7091r-5",
 .channels = ad7091r5_channels_noirq,
 .num_channels = ARRAY_SIZE(ad7091r5_channels_noirq),
 .vref_mV = 2500,
 .reg_result_chan_id = &ad7091r5_reg_result_chan_id,
 .set_mode = &ad7091r5_set_mode,
};

static const struct regmap_config ad7091r_regmap_config = {
 .reg_bits = 8,
 .val_bits = 16,
 .writeable_reg = ad7091r_writeable_reg,
 .volatile_reg = ad7091r_volatile_reg,
};

static void ad7091r5_regmap_init(struct ad7091r_state *st,
     const struct regmap_config *regmap_conf)
{
 struct i2c_client *i2c = container_of(st->dev, struct i2c_client, dev);

 st->map = devm_regmap_init_i2c(i2c, regmap_conf);
}

static const struct ad7091r_init_info ad7091r5_init_info = {
 .info_irq = &ad7091r5_chip_info_irq,
 .info_no_irq = &ad7091r5_chip_info_noirq,
 .regmap_config = &ad7091r_regmap_config,
 .init_adc_regmap = &ad7091r5_regmap_init
};

static int ad7091r5_i2c_probe(struct i2c_client *i2c)
{
 const struct ad7091r_init_info *init_info;

 init_info = i2c_get_match_data(i2c);
 if (!init_info)
  return -EINVAL;

 return ad7091r_probe(&i2c->dev, init_info, i2c->irq);
}

static const struct of_device_id ad7091r5_dt_ids[] = {
 { .compatible = "adi,ad7091r5", .data = &ad7091r5_init_info },
 { }
};
MODULE_DEVICE_TABLE(of, ad7091r5_dt_ids);

static const struct i2c_device_id ad7091r5_i2c_ids[] = {
 { "ad7091r5", (kernel_ulong_t)&ad7091r5_init_info },
 { }
};
MODULE_DEVICE_TABLE(i2c, ad7091r5_i2c_ids);

static struct i2c_driver ad7091r5_driver = {
 .driver = {
  .name = "ad7091r5",
  .of_match_table = ad7091r5_dt_ids,
 },
 .probe = ad7091r5_i2c_probe,
 .id_table = ad7091r5_i2c_ids,
};
module_i2c_driver(ad7091r5_driver);

MODULE_AUTHOR("Beniamin Bia ");
MODULE_DESCRIPTION("Analog Devices AD7091R5 multi-channel ADC driver");
MODULE_LICENSE("GPL v2");
MODULE_IMPORT_NS("IIO_AD7091R");

Messung V0.5
C=91 H=93 G=91

¤ Dauer der Verarbeitung: 0.0 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

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.