Wiki

Differences

This shows you the differences between two versions of the page.


Previous revision
Next revision
resources:tools-software:linux-drivers:iio-adc:ad7291 [09 Nov 2011 10:16] – [Supported Devices] Michael Hennerich
Line 1: Line 1:
 +====== AD7291 IIO ADC Linux Driver ======
  
 +===== Supported Devices =====
 +
 +  * [[adi>AD7291]]
 +
 +===== Evaluation Boards =====
 +
 +  * [[adi>EVAL-AD7291SDZ]]
 +===== Description =====
 +
 +This is a Linux industrial I/O ([[software:linux:docs:iio:iio|IIO]]) subsystem driver, targeting multi channel serial interface ADCs.
 +The industrial I/O subsystem provides a unified framework for drivers for many different types of converters and sensors using a number of different physical interfaces (i2c, spi, etc).
 +See [[software:linux:docs:iio:iio|IIO]] for more information.
 +
 +====== Source Code ======
 +
 +===== Status =====
 +
 +^  Source  ^  Mainlined?  ^
 +| [[staging.kernel.org>drivers/staging/iio/adc/ad7291.c|git]] |  [[git.linux.org>drivers/staging/iio/adc/ad7291.c|Yes]]  |
 +===== Files =====
 +
 +^ Function ^ File ^
 +| driver  | [[staging.kernel.org>drivers/staging/iio/adc/ad7291.c]] |
 +
 +====== Example platform device initialization ======
 +
 +===== Specifying reference voltage via the regulator framework =====
 +
 +<note tip>
 +In case the AD7291 on-chip 2.5V reference is not used, 
 +this driver requires specifying the reference voltage, by using the Linux regulator framework.
 +</note>
 +
 +Below example specifies a 3.3 Volt reference for the I2C device 0-002a on I2C-Bus 0. (**0-002a**)
 +
 +<code c>
 +#if defined(CONFIG_REGULATOR_FIXED_VOLTAGE) || defined(CONFIG_REGULATOR_FIXED_VOLTAGE_MODULE)
 +static struct regulator_consumer_supply ad7291_consumer_supplies[] = {
 + REGULATOR_SUPPLY("vcc", "0-002a"),
 +};
 +
 +static struct regulator_init_data board_avdd_reg_init_data = {
 + .constraints = {
 + .name = "3V3",
 + .valid_ops_mask = REGULATOR_CHANGE_STATUS,
 + },
 + .consumer_supplies = ad7291_consumer_supplies,
 + .num_consumer_supplies = ARRAY_SIZE(ad7291_consumer_supplies),
 +};
 +
 +static struct fixed_voltage_config board_vdd_pdata = {
 + .supply_name = "board-3V3",
 + .microvolts = 3300000,
 + .gpio = -EINVAL,
 + .enabled_at_boot = 0,
 + .init_data = &board_avdd_reg_init_data,
 +};
 +static struct platform_device brd_voltage_regulator = {
 + .name = "reg-fixed-voltage",
 + .id = -1,
 + .num_resources = 0,
 + .dev = {
 + .platform_data = &board_vdd_pdata,
 + },
 +};
 +#endif
 +</code>
 +
 +<code c>
 +static struct platform_device *board_devices[] __initdata = {
 +#if defined(CONFIG_REGULATOR_FIXED_VOLTAGE) || defined(CONFIG_REGULATOR_FIXED_VOLTAGE_MODULE)
 + &brd_voltage_regulator
 +#endif
 +};
 +</code>
 +
 +
 +<code c>
 +static int __init board_init(void)
 +{
 + [--snip--]
 +
 + platform_add_devices(board_devices, ARRAY_SIZE(board_devices));
 +
 + [--snip--]
 +
 + return 0;
 +}
 +arch_initcall(board_init);
 +</code>
 +
 +
 +{{page>software/linux/docs/platform_and_bus_model#Declaring I2C devices&firstseconly&noeditbtn}}
 +
 +Depending on the converter IC used, you may need to set the I2C_BOARD_INFO name accordingly, matching your part name.
 +
 +<code c>
 +static struct i2c_board_info __initdata board_i2c_board_info[] = {
 +#if defined(CONFIG_AD7291) || defined(CONFIG_AD7291_MODULE)
 + {
 + I2C_BOARD_INFO("ad7291", 0x2A),
 + .irq = IRQ_PG14,
 + },
 +#endif
 +};
 +</code>
 +
 +<code c>
 +static int __init board_init(void)
 +{
 + [--snip--]
 +
 + i2c_register_board_info(0, board_i2c_board_info,
 + ARRAY_SIZE(board_i2c_board_info));
 + [--snip--]
 +
 + return 0;
 +}
 +arch_initcall(board_init);
 +</code>
 +
 +====== Adding Linux driver support ======
 +
 +Configure kernel with "make menuconfig" (alternatively use "make xconfig" or
 +"make qconfig")
 +
 +<note>
 +The driver depends on **CONFIG_I2C**
 +</note>
 +
 +<code>
 +Linux Kernel Configuration
 + Device Drivers  --->
 + [*] Staging drivers  --->
 + <*>     Industrial I/O support --->
 +     --- Industrial I/O support
 +     -*-   Enable ring buffer support within IIO
 +     -*-     Industrial I/O lock free software ring
 +     -*-   Enable triggered sampling support
 +
 +           *** Analog to digital converters ***
 +     [--snip--]
 +
 +     <*>   Analog Devices AD7291 ADC driver
 +
 +     [--snip--]
 +
 +</code>
 +
 +====== Hardware configuration ======
 +
 +{{:resources:tools-software:linux-drivers:iio-adc:ad7291_eval_lr.jpg?600|}}
 +====== Driver testing ======
 +
 +{{page>software:linux:docs:iio:iio_snippets#iio device files&noheader&firstseconly&noeditbtn}}
 +
 +<box 100% green|shell prompt running on the target>
 +<xterm>
 +root:/> **cd /sys/bus/iio/devices/**
 +root:/sys/bus/iio/devices> **ls**
 +iio:device0
 +
 +root:/sys/bus/iio/devices> **cd iio:device0**
 +
 +root:/sys/devices/platform/i2c-bfin-twi.0/i2c-0/0-002a/iio:device0> **ls -l**
 +-r--r--r--    1 root     root          4096 Jan  1 00:38 dev
 +drwxr-xr-x    2 root     root             0 Jan  1 00:38 events
 +-rw-r--r--    1 root     root          4096 Jan  1 00:38 in_temp0_mean_raw
 +-r--r--r--    1 root     root          4096 Jan  1 00:38 in_temp0_raw
 +-rw-r--r--    1 root     root          4096 Jan  1 00:38 in_temp0_scale
 +-r--r--r--    1 root     root          4096 Jan  1 00:38 in_voltage0_raw
 +-r--r--r--    1 root     root          4096 Jan  1 00:38 in_voltage1_raw
 +-r--r--r--    1 root     root          4096 Jan  1 00:38 in_voltage2_raw
 +-r--r--r--    1 root     root          4096 Jan  1 00:38 in_voltage3_raw
 +-r--r--r--    1 root     root          4096 Jan  1 00:38 in_voltage4_raw
 +-r--r--r--    1 root     root          4096 Jan  1 00:38 in_voltage5_raw
 +-r--r--r--    1 root     root          4096 Jan  1 00:38 in_voltage6_raw
 +-r--r--r--    1 root     root          4096 Jan  1 00:38 in_voltage7_raw
 +-rw-r--r--    1 root     root          4096 Jan  1 00:38 in_voltage_scale
 +-r--r--r--    1 root     root          4096 Jan  1 00:38 name
 +drwxr-xr-x    2 root     root             0 Jan  1 00:38 power
 +--w-------    1 root     root          4096 Jan  1 00:38 reset
 +lrwxrwxrwx    1 root     root             0 Jan  1 00:38 subsystem -> ../../../../../../bus/iio
 +-rw-r--r--    1 root     root          4096 Jan  1 00:38 uevent
 +</xterm></box>
 +
 +=== Show device name ===
 +
 +<box 100% green|shell prompt running on the target>
 +<xterm>
 +root:/sys/devices/platform/i2c-bfin-twi.0/i2c-0/0-002a/iio:device0> **cat name**
 +ad7291
 +</xterm></box>
 +
 +=== Show scale ===
 +
 +**__Description:__**\\
 +scale to be applied to in_voltageX_raw in order to obtain the measured voltage in millivolts.
 +
 +<box 100% green|shell prompt running on the target>
 +<xterm>
 +root:/sys/devices/platform/i2c-bfin-twi.0/i2c-0/0-002a/iio:device0> **cat in_voltage_scale**
 +0.610000
 +</xterm></box>
 +
 +=== Show channel 0 measurement ===
 +
 +**__Description:__**\\
 +Raw unscaled voltage measurement on channel 0
 +
 +^ ADC Input ^ Channel name ^
 +| VIN0 | in_voltage0_raw |
 +| VIN1 | in_voltage1_raw |
 +| VIN2 | in_voltage2_raw |
 +| VIN3 | in_voltage3_raw |
 +| VIN4 | in_voltage4_raw |
 +| VIN5 | in_voltage5_raw |
 +| VIN6 | in_voltage6_raw |
 +| VIN7 | in_voltage7_raw |
 +
 +<box 100% green|shell prompt running on the target>
 +<xterm>
 +root:/sys/devices/platform/i2c-bfin-twi.0/i2c-0/0-002a/iio:device0> **cat in_voltage0_raw**
 +1641
 +</xterm></box>
 +
 +**U** = //in_voltage0_raw * in_voltage_scale// = 1641 * 0.610000 = **1001,01 //mV//**
 +
 +
 +=== Show internal temperature ===
 +
 +**__Description:__** /sys/bus/iio/devices/iio:deviceX/in_temp0_raw \\
 +Shows raw unscaled temperature.
 +
 +^ Channel name ^ Description ^
 +| in_temp0_raw | Current temperature | 
 +| in_temp0_mean_raw | Averaged temperature |
 +
 +<box 100% green|shell prompt running on the target>
 +<xterm>
 +root:/sys/devices/platform/i2c-bfin-twi.0/i2c-0/0-002a/iio:device0> **cat in_temp0_raw**
 +107
 +root:/sys/devices/platform/i2c-bfin-twi.0/i2c-0/0-002a/iio:device0> **cat in_temp0_scale**
 +250
 +</xterm></box>
 +
 +**T** = in_temp0_raw * in_temp0_scale = 107 * 250 = 26750 = **26.75 //°C//**
 +
 +====== Hardware Events ======
 +
 +{{page>software:linux:docs:iio:iio_snippets#Event Management&firstseconly&noeditbtn}}
 +
 +{{page>software:linux:docs:iio:iio_snippets#Typical event attributes&firstseconly&noeditbtn}}
 +
 +
 +===== Supported Events =====
 +
 +^ Event Attributes ^
 +^ Channel Temp ^
 +| in_temp0_thresh_both_hyst_raw |
 +| in_temp0_thresh_falling_en |
 +| in_temp0_thresh_falling_value |
 +| in_temp0_thresh_rising_en |
 +| in_temp0_thresh_rising_value |
 +^ Channel VIN0 ^
 +| in_voltage0_thresh_both_hyst_raw |
 +| in_voltage0_thresh_falling_en |
 +| in_voltage0_thresh_falling_value |
 +| in_voltage0_thresh_rising_en |
 +| in_voltage0_thresh_rising_value |
 +^ Channel VIN1 ^
 +| in_voltage1_thresh_both_hyst_raw |
 +| in_voltage1_thresh_falling_en |
 +| in_voltage1_thresh_falling_value |
 +| in_voltage1_thresh_rising_en |
 +| in_voltage1_thresh_rising_value |
 +^ Channel VIN2 ^
 +| in_voltage2_thresh_both_hyst_raw |
 +| in_voltage2_thresh_falling_en |
 +| in_voltage2_thresh_falling_value |
 +| in_voltage2_thresh_rising_en |
 +| in_voltage2_thresh_rising_value |
 +^ Channel VIN3 ^
 +| in_voltage3_thresh_both_hyst_raw |
 +| in_voltage3_thresh_falling_en |
 +| in_voltage3_thresh_falling_value |
 +| in_voltage3_thresh_rising_en |
 +| in_voltage3_thresh_rising_value |
 +^ Channel VIN4 ^
 +| in_voltage4_thresh_both_hyst_raw |
 +| in_voltage4_thresh_falling_en |
 +| in_voltage4_thresh_falling_value |
 +| in_voltage4_thresh_rising_en |
 +| in_voltage4_thresh_rising_value |
 +^ Channel VIN5 ^
 +| in_voltage5_thresh_both_hyst_raw |
 +| in_voltage5_thresh_falling_en |
 +| in_voltage5_thresh_falling_value |
 +| in_voltage5_thresh_rising_en |
 +| in_voltage5_thresh_rising_value |
 +^ Channel VIN6 ^
 +| in_voltage6_thresh_both_hyst_raw |
 +| in_voltage6_thresh_falling_en |
 +| in_voltage6_thresh_falling_value |
 +| in_voltage6_thresh_rising_en |
 +| in_voltage6_thresh_rising_value |
 +^ Channel VIN7 ^
 +| in_voltage7_thresh_both_hyst_raw |
 +| in_voltage7_thresh_falling_en |
 +| in_voltage7_thresh_falling_value |
 +| in_voltage7_thresh_rising_en |
 +| in_voltage7_thresh_rising_value |
 +
 +====== More Information ======
 +
 +{{page>software:linux:docs:iio:iio_snippets#iio pointers&noheader&firstseconly&noeditbtn}}
resources/tools-software/linux-drivers/iio-adc/ad7291.txt · Last modified: 20 Dec 2016 10:24 by Lars-Peter Clausen