Wiki

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
resources:tools-software:linux-drivers:iio-adc:ad7998 [02 Aug 2011 10:38] – [Example platform device initialization] fix typo Michael Hennerichresources:tools-software:linux-drivers:iio-adc:ad7998 [05 Jan 2021 16:01] (current) – Removed old references Ioana Chelaru
Line 1: Line 1:
-====== AD7998 driver ======+====== AD7998 IIO ADC Linux Driver ======
  
 ===== Supported Devices ===== ===== Supported Devices =====
  
-This driver supports the +  * [[adi>AD7991]] 
-[[adi>ad7991]] +  [[adi>AD7992]] 
-[[adi>ad7992]] +  * [[adi>AD7993]] 
-[[adi>ad7993]] +  * [[adi>AD7994]] 
-[[adi>ad7994]] +  * [[adi>AD7995]] 
-[[adi>ad7995]] +  * [[adi>AD7997]] 
-[[adi>ad7997]] +  * [[adi>AD7998]] 
-[[adi>ad7998]] +  * [[adi>AD7999]] 
-[[adi>ad7999]]+ 
 + 
 +===== Reference Circuits ===== 
 + 
 +  * [[adi>CN0288]] 
 +  * [[adi>CN0301]] 
 + 
 +===== Evaluation Boards ===== 
 + 
 +  * [[adi>EVAL-AD7991EBZ]] 
 +  [[adi>EVAL-AD7992EBZ]] 
 +  [[adi>EVAL-AD7993EBZ]] 
 +  [[adi>EVAL-AD7994EBZ]] 
 +  [[adi>EVAL-AD7995EBZ]] 
 +  [[adi>EVAL-AD7997EBZ]] 
 +  [[adi>EVAL-AD7998EBZ]]
  
 ===== Description ===== ===== Description =====
Line 23: Line 38:
 ===== Status ===== ===== Status =====
  
- Source   Mainlined?  +^ Source ^ Mainlined? ^ 
-| [[bfgit>linux-kernel?drivers/staging/iio/adc/ad799x_core.c|git]] |  [[git.linux.org>drivers/staging/iio/adc/ad799x_core.c|Yes]]  |+| [[git.linux.org>drivers/iio/adc/ad799x.c|git]] | [[git.linux.org>drivers/iio/adc/ad799x.c|Yes]] |
 ===== Files ===== ===== Files =====
  
 ^ Function ^ File ^ ^ Function ^ File ^
-| driver  | [[git.linux.org>drivers/staging/iio/adc/ad799x_core.c]] | +| driver  | [[git.linux.org>drivers/iio/adc/ad799x.c]] | 
-| driver  | [[git.linux.org>drivers/staging/iio/adc/ad799x_ring.c]] | +
-| include | [[git.linux.org>drivers/staging/iio/adc/ad799x.h]] |+
  
 ====== Example platform device initialization ====== ====== Example platform device initialization ======
Line 36: Line 50:
 {{page>software/linux/docs/platform_and_bus_model#Platform Data&noheader&firstseconly&noeditbtn}} {{page>software/linux/docs/platform_and_bus_model#Platform Data&noheader&firstseconly&noeditbtn}}
  
-The reference voltage may vary between boards and models. The platform_data for the device's "struct device" holds this information. 
  
-<source trunk/drivers/staging/iio/adc/ad799x.h:ad799x_platform_data{} c linux-kernel>+===== Specifying reference voltage via the regulator framework ===== 
 + 
 +<WRAP tip> 
 +In case the AD799x on-chip reference is not used,  
 +this driver requires specifying the reference voltage, by using the Linux regulator framework. 
 +</WRAP> 
 + 
 +Below example specifies a 2.5 Volt reference for the I2C device 0-0024 on I2C-Bus 0. (**0-0024**)
  
 <code c> <code c>
-static struct ad799x_platform_data ad7998_pdata = { +#if defined(CONFIG_REGULATOR_FIXED_VOLTAGE) || defined(CONFIG_REGULATOR_FIXED_VOLTAGE_MODULE) 
- .vref_mv = 2500,+static struct regulator_consumer_supply ad7998_consumer_supplies[] = { 
 + REGULATOR_SUPPLY("vref", "0-0024"),
 }; };
 +
 +static struct regulator_init_data board_avdd_reg_init_data = {
 + .constraints = {
 + .name = "2V5",
 + .valid_ops_mask = REGULATOR_CHANGE_STATUS,
 + },
 + .consumer_supplies = ad7998_consumer_supplies,
 + .num_consumer_supplies = ARRAY_SIZE(ad7998_consumer_supplies),
 +};
 +
 +static struct fixed_voltage_config board_vref_pdata = {
 + .supply_name = "board-2V5",
 + .microvolts = 2500000,
 + .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_vref_pdata,
 + },
 +};
 +#endif
 </code> </code>
  
-<note tip+<code c
-In case platform_data is not present or set to NULLthe driver will use the AD7998 internal reference. +static struct platform_device *board_devices[] __initdata = { 
-</note>+#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_devicesARRAY_SIZE(board_devices)); 
 + 
 + [--snip--] 
 + 
 + return 0; 
 +
 +arch_initcall(board_init); 
 +</code>
  
 {{page>software/linux/docs/platform_and_bus_model#Declaring I2C devices&firstseconly&noeditbtn}} {{page>software/linux/docs/platform_and_bus_model#Declaring I2C devices&firstseconly&noeditbtn}}
Line 59: Line 124:
  {  {
  I2C_BOARD_INFO("ad7998", 0x24),  I2C_BOARD_INFO("ad7998", 0x24),
- .platform_data = (void *)&ad799x_pdata,+ .platform_data = &ad799x_pdata,
  .irq = IRQ_PG0,  .irq = IRQ_PG0,
  },  },
Line 80: Line 145:
 </code> </code>
  
-====== Adding Linux drive +===== Devicetree ===== 
-support ======+ 
 +Required devicetree properties: 
 +  * compatible: Needs to be "adi," followed by the name of the device. E.g. "adi,ad7798" 
 +  * reg: The slave address used for the device 
 +  * vcc-supply: Phandle to the supply regulator 
 + 
 +<code> 
 +       adc_supply: fixedregulator { 
 +               compatible = "regulator-fixed"; 
 +               regulator-name = "fixed-supply"; 
 +               regulator-min-microvolt = <3300000>; 
 +               regulator-max-microvolt = <3300000>; 
 +       }; 
 + 
 +       adc_vref: fixedregulator { 
 +               compatible = "regulator-fixed"; 
 +               regulator-name = "fixed-supply"; 
 +               regulator-min-microvolt = <2500000>; 
 +               regulator-max-microvolt = <2500000>; 
 +       }; 
 +        
 +       i2c: i2c@e0007000 { 
 +               #address-cells = <1>; 
 +               #size-cells = <0>; 
 +               compatible = "xlnx,xps-iic-2.00.a"; 
 +               ... 
 + 
 +               ad7798@24 { 
 +                       compatible = "adi,ad7798"; 
 +                       reg = <0x24>; 
 +                       vcc-supply = <&adc_supply>; 
 +                       vref-supply = <&adc_vref>; 
 +               }; 
 +        }; 
 +</code> 
 + 
 +====== Adding Linux driver support ======
  
 Configure kernel with "make menuconfig" (alternatively use "make xconfig" or Configure kernel with "make menuconfig" (alternatively use "make xconfig" or
 "make qconfig") "make qconfig")
  
-<note>+<WRAP round help>
 The AD7998 Driver depends on **CONFIG_I2C** The AD7998 Driver depends on **CONFIG_I2C**
-</note>+</WRAP>
  
 <code> <code>
Line 117: Line 218:
 {{page>software:linux:docs:iio:iio_snippets#iio device files&noheader&firstseconly&noeditbtn}} {{page>software:linux:docs:iio:iio_snippets#iio device files&noheader&firstseconly&noeditbtn}}
  
-<box 100% green|shell prompt running on the target>+<WRAP box bggreen><wrap info>This specifies any shell prompt running on the target</wrap>
 <xterm> <xterm>
 root:/> **cd /sys/bus/iio/devices/** root:/> **cd /sys/bus/iio/devices/**
 root:/sys/bus/iio/devices> ls root:/sys/bus/iio/devices> ls
-device0                  device0:buffer0:access0  trigger0 +iio:device0                  trigger0 
-device0:buffer0          device0:buffer0:event0+
  
 root:/sys/bus/iio/devices> **cd device0** root:/sys/bus/iio/devices> **cd device0**
  
-root:/sys/devices/platform/i2c-bfin-twi.0/i2c-0/0-0024/device0> **ls -l** +root:/sys/devices/platform/i2c-bfin-twi.0/i2c-0/0-0024/iio:device0> **ls -l** 
-drwxr-xr-x    5 root     root             0 Jan  1 00:00 device0:buffer0 +drwxr-xr-x    5 root     root             0 Jan  1 00:00 buffer 
-drwxr-xr-x    2 root     root             0 Jan  1 00:00 device0:event0 +drwxr-xr-x    2 root     root             0 Jan  1 00:00 events 
--r--r--r--    1 root     root          4096 Jan  1 00:00 in0_raw +-r--r--r--    1 root     root          4096 Jan  1 00:00 in_voltage0_raw 
--r--r--r--    1 root     root          4096 Jan  1 00:00 in1_raw +-r--r--r--    1 root     root          4096 Jan  1 00:00 in_voltage1_raw 
--r--r--r--    1 root     root          4096 Jan  1 00:00 in2_raw +-r--r--r--    1 root     root          4096 Jan  1 00:00 in_voltage2_raw 
--r--r--r--    1 root     root          4096 Jan  1 00:00 in3_raw +-r--r--r--    1 root     root          4096 Jan  1 00:00 in_voltage3_raw 
--r--r--r--    1 root     root          4096 Jan  1 00:00 in4_raw +-r--r--r--    1 root     root          4096 Jan  1 00:00 in_voltage4_raw 
--r--r--r--    1 root     root          4096 Jan  1 00:00 in5_raw +-r--r--r--    1 root     root          4096 Jan  1 00:00 in_voltage5_raw 
--r--r--r--    1 root     root          4096 Jan  1 00:00 in6_raw +-r--r--r--    1 root     root          4096 Jan  1 00:00 in_voltage6_raw 
--r--r--r--    1 root     root          4096 Jan  1 00:00 in7_raw +-r--r--r--    1 root     root          4096 Jan  1 00:00 in_voltage7_raw 
--r--r--r--    1 root     root          4096 Jan  1 00:00 in_scale+-r--r--r--    1 root     root          4096 Jan  1 00:00 in_voltage_scale
 -r--r--r--    1 root     root          4096 Jan  1 00:00 name -r--r--r--    1 root     root          4096 Jan  1 00:00 name
 lrwxrwxrwx    1 root     root             0 Jan  1 00:00 subsystem -> ../../../../../../bus/iio lrwxrwxrwx    1 root     root             0 Jan  1 00:00 subsystem -> ../../../../../../bus/iio
 drwxr-xr-x    2 root     root             0 Jan  1 00:00 trigger drwxr-xr-x    2 root     root             0 Jan  1 00:00 trigger
 -rw-r--r--    1 root     root          4096 Jan  1 00:00 uevent -rw-r--r--    1 root     root          4096 Jan  1 00:00 uevent
-</xterm></box>+</xterm></WRAP>
  
 === Show device name === === Show device name ===
  
-<box 100% green|shell prompt running on the target>+<WRAP box bggreen><wrap info>This specifies any shell prompt running on the target</wrap>
 <xterm> <xterm>
-root:/sys/devices/platform/i2c-bfin-twi.0/i2c-0/0-0024/device0> **cat name**+root:/sys/devices/platform/i2c-bfin-twi.0/i2c-0/0-0024/iio:device0> **cat name**
 ad7998 ad7998
-</xterm></box>+</xterm></WRAP>
  
 === Show scale === === Show scale ===
  
 **Description:**\\ **Description:**\\
-scale to be applied to in0_raw in order to obtain the measured voltage in millivolts.+scale to be applied to in_voltage0_raw in order to obtain the measured voltage in millivolts.
  
-<box 100% green|shell prompt running on the target>+<WRAP box bggreen><wrap info>This specifies any shell prompt running on the target</wrap>
 <xterm> <xterm>
-root:/sys/devices/platform/i2c-bfin-twi.0/i2c-0/0-0024/device0> **cat in_scale**+root:/sys/devices/platform/i2c-bfin-twi.0/i2c-0/0-0024/iio:device0> **cat in_voltage_scale**
 1.000 1.000
-</xterm></box>+</xterm></WRAP>
  
 === Show channel 0 measurement === === Show channel 0 measurement ===
Line 168: Line 269:
 Raw unscaled voltage measurement on channel 0 Raw unscaled voltage measurement on channel 0
  
-<box 100% green|shell prompt running on the target>+<WRAP box bggreen><wrap info>This specifies any shell prompt running on the target</wrap>
 <xterm> <xterm>
-root:/sys/devices/platform/i2c-bfin-twi.0/i2c-0/0-0024/device0> **cat in0_raw**+root:/sys/devices/platform/i2c-bfin-twi.0/i2c-0/0-0024/iio:device0> **cat in_voltage0_raw**
 1491 1491
-</xterm></box>+</xterm></WRAP>
  
-**U** = //in0_raw in_scale// = 1491 * 1.000 = **1491,00 //mV//**+**U** = //in_voltage0_raw in_voltage_scale// = 1491 * 1.000 = **1491,00 //mV//**
  
 ===== Trigger management ===== ===== Trigger management =====
Line 186: Line 287:
 ===== Buffer management ===== ===== Buffer management =====
  
-<box 100% green|shell prompt running on the target>+<WRAP box bggreen><wrap info>This specifies any shell prompt running on the target</wrap>
 <xterm> <xterm>
-root:/sys/devices/platform/i2c-bfin-twi.0/i2c-0/0-0024/device0/device0:buffer0> **ls** +root:/sys/devices/platform/i2c-bfin-twi.0/i2c-0/0-0024/iio:device0/buffer> **ls** 
-**bytes_per_datum**          **enable**                   subsystem +**enable**  **length** 
-device0:buffer0:access0  **length**                   uevent +root:/sys/devices/platform/i2c-bfin-twi.0/i2c-0/0-0024/iio:device0/buffer
-device0:buffer0:event0   **scan_elements** +</xterm></WRAP>
-root:/sys/devices/platform/i2c-bfin-twi.0/i2c-0/0-0024/device0/device0:buffer0+
-</xterm></box>+
  
 {{page>software:linux:docs:iio:iio_snippets#Buffer management&noheader&firstseconly&noeditbtn}} {{page>software:linux:docs:iio:iio_snippets#Buffer management&noheader&firstseconly&noeditbtn}}
  
-<box 100% green|shell prompt running on the target>+<WRAP box bggreen><wrap info>This specifies any shell prompt running on the target</wrap>
 <xterm> <xterm>
-root:/sys/devices/platform/i2c-bfin-twi.0/i2c-0/0-0024/device0/device0:buffer0/scan_elements> **ls** +root:/sys/devices/platform/i2c-bfin-twi.0/i2c-0/0-0024/iio:device0/scan_elements> **ls** 
-in0_en           in2_index        in5_en           in7_index +in_voltage0_en           in_voltage2_index        in_voltage5_en           in_voltage7_index 
-in0_index        in3_en           in5_index        in_type +in_voltage0_index        in_voltage3_en           in_voltage5_index        in_voltage_type 
-in1_en           in3_index        in6_en           timestamp_en +in_voltage1_en           in_voltage3_index        in_voltage6_en           timestamp_en 
-in1_index        in4_en           in6_index        timestamp_index +in_voltage1_index        in_voltage4_en           in_voltage6_index        timestamp_index 
-in2_en           in4_index        in7_en           timestamp_type +in_voltage2_en           in_voltage4_index        in_voltage7_en           timestamp_type 
-root:/sys/devices/platform/i2c-bfin-twi.0/i2c-0/0-0024/device0/device0:buffer0/scan_elements> +root:/sys/devices/platform/i2c-bfin-twi.0/i2c-0/0-0024/iio:device0/scan_elements> 
-</xterm></box>+</xterm></WRAP>
  
  
resources/tools-software/linux-drivers/iio-adc/ad7998.txt · Last modified: 05 Jan 2021 16:01 by Ioana Chelaru