Skip to content

Commit 5e5e92f

Browse files
committed
adi: ad9508 support
Add pyadi-iio support for ad9508 device. Signed-off-by: Antoniu Miclaus <antoniu.miclaus@analog.com>
1 parent 127b8b3 commit 5e5e92f

File tree

7 files changed

+116
-0
lines changed

7 files changed

+116
-0
lines changed

adi/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
from adi.ad9265 import ad9265
5353
from adi.ad9434 import ad9434
5454
from adi.ad9467 import ad9467
55+
from adi.ad9508 import ad9508
5556
from adi.ad9625 import ad9625
5657
from adi.ad9680 import ad9680
5758
from adi.ada4961 import ada4961

adi/ad9508.py

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
# Copyright (C) 2025 Analog Devices, Inc.
2+
#
3+
# SPDX short identifier: ADIBSD
4+
5+
from adi.attribute import attribute
6+
from adi.context_manager import context_manager
7+
8+
9+
class ad9508(attribute, context_manager):
10+
11+
""" AD9508 ADC """
12+
13+
_device_name = ""
14+
15+
def __init__(self, uri="", device_name="ad9508"):
16+
context_manager.__init__(self, uri, self._device_name)
17+
18+
compatible_part = "ad9508"
19+
self._ctrl = None
20+
21+
if not device_name:
22+
device_name = compatible_part
23+
else:
24+
if device_name != compatible_part:
25+
raise Exception(f"Not a compatible device: {device_name}")
26+
27+
# Select the device matching device_name as working device
28+
for device in self._ctx.devices:
29+
if device.name == device_name:
30+
self._ctrl = device
31+
self._rxadc = device
32+
break
33+
34+
# Raise an exception if the device isn't found
35+
if not self._ctrl:
36+
raise Exception("ad9508 device not found")
37+
38+
self.channel = []
39+
for ch in self._ctrl.channels:
40+
name = ch.id
41+
self.channel.append(self._channel(self._ctrl, name))
42+
43+
class _channel(attribute):
44+
"""AD9508 channel"""
45+
46+
def __init__(self, ctrl, channel_name):
47+
self.name = channel_name
48+
self._ctrl = ctrl
49+
50+
@property
51+
def frequency(self):
52+
""""""
53+
return self._get_iio_attr(self.name, "frequency", True)
54+
55+
@frequency.setter
56+
def frequency(self, frequency):
57+
""""""
58+
self._set_iio_attr(self.name, "frequency", False, frequency, self._ctrl)
59+
60+
@property
61+
def phase(self):
62+
""""""
63+
return self._get_iio_attr(self.name, "phase", False)
64+
65+
@phase.setter
66+
def phase(self, phase):
67+
""""""
68+
self._set_iio_attr(self.name, "phase", False, phase, self._ctrl)
69+
70+
@property
71+
def raw(self):
72+
""""""
73+
return self._get_iio_attr(self.name, "raw", False)
74+
75+
@raw.setter
76+
def raw(self, raw):
77+
""""""
78+
self._set_iio_attr(self.name, "raw", False, raw, self._ctrl)
79+
80+
@property
81+
def sync_dividers(self):
82+
""""""
83+
raise AttributeError("Cannot access 'sync_dividers' directly")
84+
85+
@sync_dividers.setter
86+
def sync_dividers(self, value):
87+
self._set_iio_dev_attr("sync_dividers", value)
88+
89+
def reg_read(self, reg):
90+
"""Direct Register Access via debugfs"""
91+
self._set_iio_debug_attr_str("direct_reg_access", reg, self._ctrl)
92+
return self._get_iio_debug_attr_str("direct_reg_access", self._ctrl)
93+
94+
def reg_write(self, reg, value):
95+
"""Direct Register Access via debugfs"""
96+
self._set_iio_debug_attr_str("direct_reg_access", f"{reg} {value}", self._ctrl)

doc/source/devices/adi.ad9508.rst

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
ad9508
2+
=================
3+
4+
.. automodule:: adi.ad9508
5+
:members:
6+
:undoc-members:
7+
:show-inheritance:

doc/source/devices/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ Supported Devices
5858
adi.ad937x
5959
adi.ad9434
6060
adi.ad9467
61+
adi.ad9508
6162
adi.ad9625
6263
adi.ad9680
6364
adi.ad4858

supported_parts.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@
116116
- AD9375
117117
- AD9434
118118
- AD9467
119+
- AD9508
119120
- AD9625
120121
- AD9680
121122
- AD4858

test/emu/devices/ad9508.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE context [<!ELEMENT context (device | context-attribute)*><!ELEMENT context-attribute EMPTY><!ELEMENT device (channel | attribute | debug-attribute | buffer-attribute)*><!ELEMENT channel (scan-element?, attribute*)><!ELEMENT attribute EMPTY><!ELEMENT scan-element EMPTY><!ELEMENT debug-attribute EMPTY><!ELEMENT buffer-attribute EMPTY><!ATTLIST context name CDATA #REQUIRED description CDATA #IMPLIED><!ATTLIST context-attribute name CDATA #REQUIRED value CDATA #REQUIRED><!ATTLIST device id CDATA #REQUIRED name CDATA #IMPLIED><!ATTLIST channel id CDATA #REQUIRED type (input|output) #REQUIRED name CDATA #IMPLIED><!ATTLIST scan-element index CDATA #REQUIRED format CDATA #REQUIRED scale CDATA #IMPLIED><!ATTLIST attribute name CDATA #REQUIRED filename CDATA #IMPLIED value CDATA #IMPLIED><!ATTLIST debug-attribute name CDATA #REQUIRED value CDATA #IMPLIED><!ATTLIST buffer-attribute name CDATA #REQUIRED value CDATA #IMPLIED>]><context name="network" description="10.48.65.248 Linux analog 6.1.0-271838-g69fc41f0840e-dirty #11 SMP PREEMPT Wed Jan 15 17:36:35 EET 2025 armv7l" ><context-attribute name="hdl_system_id" value="[ad488x_fmc_evb] on [zed] git branch [dev_ad4880] git [d3d3fc1afff25028fa728ee5f50e95d664c7ee31] dirty [2025-01-15 13:50:03] UTC" /><context-attribute name="hw_model" value="EVAL-AD4880-FMCZU1 on Xilinx Zynq ZED" /><context-attribute name="hw_carrier" value="Xilinx Zynq ZED" /><context-attribute name="hw_mezzanine" value="EVAL-AD4880-FMCZU1" /><context-attribute name="hw_name" value="EVAL-AD4880-FMCZ-U1" /><context-attribute name="hw_vendor" value="Analog Devices" /><context-attribute name="hw_serial" value="Empty Field" /><context-attribute name="local,kernel" value="6.1.0-271838-g69fc41f0840e-dirty" /><context-attribute name="uri" value="ip:10.48.65.248" /><context-attribute name="ip,ip-addr" value="10.48.65.248" /><device id="hwmon0" name="e000b000ethernetffffffff00" ><channel id="temp1" type="input" ><attribute name="crit" filename="temp1_crit" value="100000" /><attribute name="input" filename="temp1_input" value="41000" /><attribute name="max_alarm" filename="temp1_max_alarm" value="0" /></channel></device><device id="iio:device0" name="xadc" ><channel id="voltage5" name="vccoddr" type="input" ><attribute name="label" filename="in_voltage5_vccoddr_label" value="vccoddr" /><attribute name="raw" filename="in_voltage5_vccoddr_raw" value="2038" /><attribute name="scale" filename="in_voltage5_vccoddr_scale" value="0.732421875" /></channel><channel id="voltage0" name="vccint" type="input" ><attribute name="label" filename="in_voltage0_vccint_label" value="vccint" /><attribute name="raw" filename="in_voltage0_vccint_raw" value="1387" /><attribute name="scale" filename="in_voltage0_vccint_scale" value="0.732421875" /></channel><channel id="voltage4" name="vccpaux" type="input" ><attribute name="label" filename="in_voltage4_vccpaux_label" value="vccpaux" /><attribute name="raw" filename="in_voltage4_vccpaux_raw" value="2451" /><attribute name="scale" filename="in_voltage4_vccpaux_scale" value="0.732421875" /></channel><channel id="temp0" type="input" ><attribute name="offset" filename="in_temp0_offset" value="-2219" /><attribute name="raw" filename="in_temp0_raw" value="2626" /><attribute name="scale" filename="in_temp0_scale" value="123.040771484" /></channel><channel id="voltage7" name="vrefn" type="input" ><attribute name="label" filename="in_voltage7_vrefn_label" value="vrefn" /><attribute name="raw" filename="in_voltage7_vrefn_raw" value="5" /><attribute name="scale" filename="in_voltage7_vrefn_scale" value="0.732421875" /></channel><channel id="voltage1" name="vccaux" type="input" ><attribute name="label" filename="in_voltage1_vccaux_label" value="vccaux" /><attribute name="raw" filename="in_voltage1_vccaux_raw" value="2451" /><attribute name="scale" filename="in_voltage1_vccaux_scale" value="0.732421875" /></channel><channel id="voltage2" name="vccbram" type="input" ><attribute name="label" filename="in_voltage2_vccbram_label" value="vccbram" /><attribute name="raw" filename="in_voltage2_vccbram_raw" value="1391" /><attribute name="scale" filename="in_voltage2_vccbram_scale" value="0.732421875" /></channel><channel id="voltage3" name="vccpint" type="input" ><attribute name="label" filename="in_voltage3_vccpint_label" value="vccpint" /><attribute name="raw" filename="in_voltage3_vccpint_raw" value="1387" /><attribute name="scale" filename="in_voltage3_vccpint_scale" value="0.732421875" /></channel><channel id="voltage6" name="vrefp" type="input" ><attribute name="label" filename="in_voltage6_vrefp_label" value="vrefp" /><attribute name="raw" filename="in_voltage6_vrefp_raw" value="1713" /><attribute name="scale" filename="in_voltage6_vrefp_scale" value="0.732421875" /></channel><attribute name="sampling_frequency" value="961538" /><attribute name="waiting_for_supplier" value="0" /></device><device id="iio:device1" name="one-bit-adc-dac" ><channel id="voltage0" type="output" ><attribute name="label" filename="out_voltage0_label" value="SYNC_N" /><attribute name="raw" filename="out_voltage0_raw" value="0" /></channel><attribute name="waiting_for_supplier" value="0" /></device><device id="iio:device2" name="/axi/spi@e0007000/adf4350@1" ><channel id="altvoltage0" type="output" ><attribute name="frequency" filename="out_altvoltage0_frequency" value="400000000" /><attribute name="frequency_resolution" filename="out_altvoltage0_frequency_resolution" value="100000" /><attribute name="powerdown" filename="out_altvoltage0_powerdown" value="0" /><attribute name="refin_frequency" filename="out_altvoltage0_refin_frequency" value="25000000" /></channel><attribute name="waiting_for_supplier" value="0" /><debug-attribute name="direct_reg_access" value="0x400000" /></device><device id="iio:device3" name="ad9508" ><channel id="altvoltage3" name="CLK_A" type="output" ><attribute name="frequency" filename="out_altvoltage3_CLK_A_frequency" value="400000000" /><attribute name="label" filename="out_altvoltage3_CLK_A_label" value="CLK_A" /><attribute name="phase" filename="out_altvoltage3_CLK_A_phase" value="0.000000" /><attribute name="raw" filename="out_altvoltage3_CLK_A_raw" value="1" /></channel><channel id="altvoltage0" name="CNV_B" type="output" ><attribute name="frequency" filename="out_altvoltage0_CNV_B_frequency" value="40000000" /><attribute name="label" filename="out_altvoltage0_CNV_B_label" value="CNV_B" /><attribute name="phase" filename="out_altvoltage0_CNV_B_phase" value="0.000000" /><attribute name="raw" filename="out_altvoltage0_CNV_B_raw" value="1" /></channel><channel id="altvoltage1" name="CLK_B" type="output" ><attribute name="frequency" filename="out_altvoltage1_CLK_B_frequency" value="400000000" /><attribute name="label" filename="out_altvoltage1_CLK_B_label" value="CLK_B" /><attribute name="phase" filename="out_altvoltage1_CLK_B_phase" value="0.000000" /><attribute name="raw" filename="out_altvoltage1_CLK_B_raw" value="1" /></channel><channel id="altvoltage2" name="CNV_A" type="output" ><attribute name="frequency" filename="out_altvoltage2_CNV_A_frequency" value="40000000" /><attribute name="label" filename="out_altvoltage2_CNV_A_label" value="CNV_A" /><attribute name="phase" filename="out_altvoltage2_CNV_A_phase" value="0.000000" /><attribute name="raw" filename="out_altvoltage2_CNV_A_raw" value="1" /></channel><attribute name="sync_dividers" value="ERROR" /><attribute name="waiting_for_supplier" value="0" /><debug-attribute name="direct_reg_access" value="0x81" /></device><device id="iio:device6" name="ad4880" ><channel id="voltage0" type="input" ><scan-element index="0" format="le:S20/32&gt;&gt;0" scale="0.000006" /><attribute name="lvds_cnv" filename="in_voltage0_lvds_cnv" value="1" /><attribute name="lvds_sync" filename="in_voltage0_lvds_sync" value="enable" /><attribute name="scale" filename="in_voltage0_scale" value="0.000005722" /></channel><channel id="voltage1" type="input" ><scan-element index="1" format="le:S20/32&gt;&gt;0" scale="0.000006" /><attribute name="lvds_cnv" filename="in_voltage1_lvds_cnv" value="1" /><attribute name="lvds_sync" filename="in_voltage1_lvds_sync" value="enable" /><attribute name="scale" filename="in_voltage1_scale" value="0.000005722" /></channel><attribute name="filter_sel" value="disabled" /><attribute name="filter_sel_available" value="disabled sinc1 sinc5 sinc5_plus_compensation" /><attribute name="sampling_frequency" value="40000000" /><attribute name="sinc_dec_rate" value="2" /><attribute name="sinc_dec_rate_available" value="2 4 8 16 32 64 128 256 512 1024" /><attribute name="sync_start_enable" value="disarm" /><attribute name="sync_start_enable_available" value="arm" /><attribute name="waiting_for_supplier" value="0" /><buffer-attribute name="data_available" value="0" /><buffer-attribute name="direction" value="in" /><buffer-attribute name="length_align_bytes" value="8" /><debug-attribute name="pseudorandom_err_check" value="CH0 : PN9 : In Sync : OK" /><debug-attribute name="direct_reg_access" value="0x10" /></device><device id="iio:device7" name="ad4880_chb" ><channel id="voltage0" type="input" ><attribute name="lvds_cnv" filename="in_voltage0_lvds_cnv" value="1" /><attribute name="lvds_sync" filename="in_voltage0_lvds_sync" value="enable" /><attribute name="scale" filename="in_voltage0_scale" value="0.000005722" /></channel><channel id="voltage1" type="input" ><attribute name="lvds_cnv" filename="in_voltage1_lvds_cnv" value="1" /><attribute name="lvds_sync" filename="in_voltage1_lvds_sync" value="enable" /><attribute name="scale" filename="in_voltage1_scale" value="0.000005722" /></channel><attribute name="filter_sel" value="disabled" /><attribute name="filter_sel_available" value="disabled sinc1 sinc5 sinc5_plus_compensation" /><attribute name="sampling_frequency" value="40000000" /><attribute name="sinc_dec_rate" value="2" /><attribute name="sinc_dec_rate_available" value="2 4 8 16 32 64 128 256 512 1024" /><attribute name="sync_start_enable" value="disarm" /><attribute name="sync_start_enable_available" value="arm" /><attribute name="waiting_for_supplier" value="0" /><debug-attribute name="pseudorandom_err_check" value="CH0 : PN9 : In Sync : OK
2+
CH1 : UNDEF : In Sync : PN Error" /><debug-attribute name="direct_reg_access" value="0x10" /></device><device id="iio_sysfs_trigger" ><attribute name="add_trigger" value="ERROR" /><attribute name="remove_trigger" value="ERROR" /></device></context>

test/emu/hardware_map.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -720,3 +720,11 @@ ad738x:
720720
- data_devices:
721721
- iio:device0
722722

723+
ad9508:
724+
- ad9508
725+
- pyadi_iio_class_support:
726+
- ad9508
727+
- emulate:
728+
- filename: ad9508.xml
729+
- data_devices:
730+
- iio:device3

0 commit comments

Comments
 (0)