ad9649 Linux driver

We plan to use an ad9649 to capture a clocked analog signal at ~10MHz. The source has a symetric clock signal and a single-ended analog signal in the 0..1V range.

I noticed that this ADC family (there's a handful that uses the same register settings, like the ad9629 and ad9609 versions) isn't in the ADI Linux tree.

Are the plans to add it or some pre-release that I could use as a starting point? And if not, what existing driver could I best base the driver on (I think the ad9467.c driver looks similar)?

  • Hi,

    As far as I'm aware there is no driver work in progress for this part. But all the high-speed ADCs follow the same general register map layout, with small variations which features are implemented or supported by a particular device. The AD9467 driver is the driver that handles the devices from this family, so, yes, that's a good starting point.

    - Lars

  • I patched the driver to add support for the AD9649.

    Now I'm about to test if it really works using evaluation boards.

    With some soldering, I hooked up the EVM board to the PMODs of our zynq board.

    I connected some stuff in the FPGA (pass-through of the SPI signals, and connect the sample clock to some LEDs with a counter).

    The driver probes okay, and I can see the question/response data on the SPI lines. So I got that part right.

    I hooked up the 14 data lines to an AXI-DMAC block, connected the "data ready" and clock signals to that block as well, so in theory, this should be enough to fetch some data.

    I have the ad9649 and dmac in the devicetree, they probe okay, but I can't figure out how to tell the iio framework that they belong together, so I can actually fetch some data. Any pointers on how to configure that part?

  • Some more digging reveiled that there's an extra component (from "cf_axi_adc_core.c") supposed to go between the DMAC and the incoming data lines. As far as I can see, the ad9649 doesn't actually need that, it already provides just what the DMAC needs. Is that correct? And what ADC has a similar simple interface?

  • Attached the AD9649 support patch. A work in progress, just FYI, and not ready for inclusion in the repository.
  • Hi,

    It is not ideal, but the way things are currently structured the cf_axi_adc_core and the ad9467 ADC driver are tightly coupled. The cf_axi_adc_core represent the part in the FPGA that handles the physical interface. This is not only capturing the data into register but also doing things like interface calibration and verification using test-patterns. If you have a simple interface core that doesn't require any driver you could for now just patch the cf_axi_adc_core to not do any register access. Not beautiful, but it will at last allow you to test whether the physical interface is good.

    - Lars