This shows you the differences between two versions of the page.
Previous revisionNext 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> | ||
+ | |||
+ | ===== Evaluation Boards ===== | ||
+ | |||
+ | * [[adi> | ||
+ | ===== Description ===== | ||
+ | |||
+ | This is a Linux industrial I/O ([[software: | ||
+ | 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: | ||
+ | |||
+ | ====== Source Code ====== | ||
+ | |||
+ | ===== Status ===== | ||
+ | |||
+ | ^ Source | ||
+ | | [[staging.kernel.org> | ||
+ | ===== Files ===== | ||
+ | |||
+ | ^ Function ^ File ^ | ||
+ | | driver | ||
+ | |||
+ | ====== 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. | ||
+ | </ | ||
+ | |||
+ | 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(" | ||
+ | }; | ||
+ | |||
+ | static struct regulator_init_data board_avdd_reg_init_data = { | ||
+ | .constraints = { | ||
+ | .name = " | ||
+ | .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 = " | ||
+ | .microvolts = 3300000, | ||
+ | .gpio = -EINVAL, | ||
+ | .enabled_at_boot = 0, | ||
+ | .init_data = & | ||
+ | }; | ||
+ | static struct platform_device brd_voltage_regulator = { | ||
+ | .name = " | ||
+ | .id = -1, | ||
+ | .num_resources = 0, | ||
+ | .dev = { | ||
+ | .platform_data = & | ||
+ | }, | ||
+ | }; | ||
+ | #endif | ||
+ | </ | ||
+ | |||
+ | <code c> | ||
+ | static struct platform_device *board_devices[] __initdata = { | ||
+ | #if defined(CONFIG_REGULATOR_FIXED_VOLTAGE) || defined(CONFIG_REGULATOR_FIXED_VOLTAGE_MODULE) | ||
+ | & | ||
+ | #endif | ||
+ | }; | ||
+ | </ | ||
+ | |||
+ | |||
+ | <code c> | ||
+ | static int __init board_init(void) | ||
+ | { | ||
+ | [--snip--] | ||
+ | |||
+ | platform_add_devices(board_devices, | ||
+ | |||
+ | [--snip--] | ||
+ | |||
+ | return 0; | ||
+ | } | ||
+ | arch_initcall(board_init); | ||
+ | </ | ||
+ | |||
+ | |||
+ | {{page> | ||
+ | |||
+ | Depending on the converter IC used, you may need to set the I2C_BOARD_INFO name accordingly, | ||
+ | |||
+ | <code c> | ||
+ | static struct i2c_board_info __initdata board_i2c_board_info[] = { | ||
+ | #if defined(CONFIG_AD7291) || defined(CONFIG_AD7291_MODULE) | ||
+ | { | ||
+ | I2C_BOARD_INFO(" | ||
+ | .irq = IRQ_PG14, | ||
+ | }, | ||
+ | #endif | ||
+ | }; | ||
+ | </ | ||
+ | |||
+ | <code c> | ||
+ | static int __init board_init(void) | ||
+ | { | ||
+ | [--snip--] | ||
+ | |||
+ | i2c_register_board_info(0, | ||
+ | ARRAY_SIZE(board_i2c_board_info)); | ||
+ | [--snip--] | ||
+ | |||
+ | return 0; | ||
+ | } | ||
+ | arch_initcall(board_init); | ||
+ | </ | ||
+ | |||
+ | ====== Adding Linux driver support ====== | ||
+ | |||
+ | Configure kernel with "make menuconfig" | ||
+ | "make qconfig" | ||
+ | |||
+ | < | ||
+ | The driver depends on **CONFIG_I2C** | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | Linux Kernel Configuration | ||
+ | Device Drivers | ||
+ | [*] Staging drivers | ||
+ | < | ||
+ | --- Industrial I/O support | ||
+ | -*- | ||
+ | -*- | ||
+ | -*- | ||
+ | |||
+ | *** Analog to digital converters *** | ||
+ | [--snip--] | ||
+ | |||
+ | < | ||
+ | |||
+ | [--snip--] | ||
+ | |||
+ | </ | ||
+ | |||
+ | ====== Hardware configuration ====== | ||
+ | |||
+ | {{: | ||
+ | ====== Driver testing ====== | ||
+ | |||
+ | {{page> | ||
+ | |||
+ | <box 100% green|shell prompt running on the target> | ||
+ | < | ||
+ | root:/> **cd / | ||
+ | root:/ | ||
+ | iio:device0 | ||
+ | |||
+ | root:/ | ||
+ | |||
+ | root:/ | ||
+ | -r--r--r-- | ||
+ | drwxr-xr-x | ||
+ | -rw-r--r-- | ||
+ | -r--r--r-- | ||
+ | -rw-r--r-- | ||
+ | -r--r--r-- | ||
+ | -r--r--r-- | ||
+ | -r--r--r-- | ||
+ | -r--r--r-- | ||
+ | -r--r--r-- | ||
+ | -r--r--r-- | ||
+ | -r--r--r-- | ||
+ | -r--r--r-- | ||
+ | -rw-r--r-- | ||
+ | -r--r--r-- | ||
+ | drwxr-xr-x | ||
+ | --w------- | ||
+ | lrwxrwxrwx | ||
+ | -rw-r--r-- | ||
+ | </ | ||
+ | |||
+ | === Show device name === | ||
+ | |||
+ | <box 100% green|shell prompt running on the target> | ||
+ | < | ||
+ | root:/ | ||
+ | ad7291 | ||
+ | </ | ||
+ | |||
+ | === 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> | ||
+ | < | ||
+ | root:/ | ||
+ | 0.610000 | ||
+ | </ | ||
+ | |||
+ | === 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> | ||
+ | < | ||
+ | root:/ | ||
+ | 1641 | ||
+ | </ | ||
+ | |||
+ | **U** = // | ||
+ | |||
+ | |||
+ | === Show internal temperature === | ||
+ | |||
+ | **__Description: | ||
+ | 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> | ||
+ | < | ||
+ | root:/ | ||
+ | 107 | ||
+ | root:/ | ||
+ | 250 | ||
+ | </ | ||
+ | |||
+ | **T** = in_temp0_raw * in_temp0_scale = 107 * 250 = 26750 = **26.75 //°C//** | ||
+ | |||
+ | ====== Hardware Events ====== | ||
+ | |||
+ | {{page> | ||
+ | |||
+ | {{page> | ||
+ | |||
+ | |||
+ | ===== 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> |