lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:   Tue, 22 Sep 2020 14:02:36 +0300
From:   Alexandru Ardelean <ardeleanalex@...il.com>
To:     Alexandru Ardelean <alexandru.ardelean@...log.com>
Cc:     linux-iio <linux-iio@...r.kernel.org>, devicetree@...r.kernel.org,
        LKML <linux-kernel@...r.kernel.org>,
        Rob Herring <robh+dt@...nel.org>,
        Michael Hennerich <michael.hennerich@...log.com>
Subject: Re: [PATCH 1/2] iio: adc ad9467: add support for AD9434 high-speed ADC

On Mon, Sep 21, 2020 at 1:29 PM Alexandru Ardelean
<alexandru.ardelean@...log.com> wrote:
>
> From: Michael Hennerich <michael.hennerich@...log.com>
>
> The AD9434 is a 12-bit monolithic sampling analog-to-digital converter
> (ADC) optimized for high performance, low power, and ease of use. The part
> operates at up to a 500 MSPS conversion rate and is optimized for
> outstanding dynamic performance in wideband carrier and broadband systems.
>
> All necessary functions, including a sample-and-hold and voltage reference,
> are included on the chip to provide a complete signal conversion solution.
> The VREF pin can be used to monitor the internal reference or provide an
> external voltage reference (external reference mode must be enabled through
> the SPI port).
>
> The ADC requires a 1.8 V analog voltage supply and a differential clock
> for full performance operation. The digital outputs are LVDS (ANSI-644)
> compatible and support twos complement, offset binary format, or Gray code.
> A data clock output is available for proper output data timing.
>
> Link: https://www.analog.com/media/en/technical-documentation/data-sheets/AD9434.pdf
>
> The driver supports the same register set as the AD9467, so the support for
> this chip is added to the 'ad9467' driver.

I'll probably do a V2 here.
I'd like to change a few things.

>
> Signed-off-by: Michael Hennerich <michael.hennerich@...log.com>
> Signed-off-by: Alexandru Ardelean <alexandru.ardelean@...log.com>
> ---
>  drivers/iio/adc/ad9467.c | 37 +++++++++++++++++++++++++++++++++++--
>  1 file changed, 35 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/iio/adc/ad9467.c b/drivers/iio/adc/ad9467.c
> index f068256cfca9..aee3007ea3f2 100644
> --- a/drivers/iio/adc/ad9467.c
> +++ b/drivers/iio/adc/ad9467.c
> @@ -76,6 +76,14 @@
>  /* AN877_ADC_REG_OUTPUT_DELAY */
>  #define AN877_ADC_DCO_DELAY_ENABLE             0x80
>
> +/*
> + * Analog Devices AD9434 12-Bit, 370/500 MSPS ADC
> + */
> +
> +#define CHIPID_AD9434                  0x6A
> +#define AD9434_DEF_OUTPUT_MODE         0x00
> +#define AD9434_REG_VREF_MASK           0xC0
> +
>  /*
>   * Analog Devices AD9467 16-Bit, 200/250 MSPS ADC
>   */
> @@ -85,6 +93,7 @@
>  #define AD9467_REG_VREF_MASK           0x0F
>
>  enum {
> +       ID_AD9434,
>         ID_AD9467,
>  };
>
> @@ -154,6 +163,13 @@ static const unsigned int ad9467_scale_table[][2] = {
>         {2300, 8}, {2400, 9}, {2500, 10},
>  };
>
> +static const unsigned int ad9434_scale_table[][2] = {
> +       {1600, 0x1C}, {1580, 0x1D}, {1550, 0x1E}, {1520, 0x1F}, {1500, 0x00},
> +       {1470, 0x01}, {1440, 0x02}, {1420, 0x03}, {1390, 0x04}, {1360, 0x05},
> +       {1340, 0x06}, {1310, 0x07}, {1280, 0x08}, {1260, 0x09}, {1230, 0x0A},
> +       {1200, 0x0B}, {1180, 0x0C},
> +};
> +
>  static void __ad9467_get_scale(struct adi_axi_adc_conv *conv, int index,
>                                unsigned int *val, unsigned int *val2)
>  {
> @@ -182,11 +198,23 @@ static void __ad9467_get_scale(struct adi_axi_adc_conv *conv, int index,
>         },                                                              \
>  }
>
> +static const struct iio_chan_spec ad9434_channels[] = {
> +       AD9467_CHAN(0, 0, 12, 'S'),
> +};
> +
>  static const struct iio_chan_spec ad9467_channels[] = {
>         AD9467_CHAN(0, 0, 16, 'S'),
>  };
>
>  static const struct adi_axi_adc_chip_info ad9467_chip_tbl[] = {
> +       [ID_AD9434] = {
> +               .id = CHIPID_AD9434,
> +               .max_rate = 500000000UL,
> +               .scale_table = ad9434_scale_table,
> +               .num_scales = ARRAY_SIZE(ad9434_scale_table),
> +               .channels = ad9434_channels,
> +               .num_channels = ARRAY_SIZE(ad9434_channels),
> +       },
>         [ID_AD9467] = {
>                 .id = CHIPID_AD9467,
>                 .max_rate = 250000000UL,
> @@ -318,10 +346,14 @@ static int ad9467_preenable_setup(struct adi_axi_adc_conv *conv)
>
>  static int ad9467_setup(struct ad9467_state *st, unsigned int chip_id)
>  {
> +       st->output_mode = AN877_ADC_OUTPUT_MODE_TWOS_COMPLEMENT;
> +
>         switch (chip_id) {
> +       case CHIPID_AD9434:
> +               st->output_mode |= AD9434_DEF_OUTPUT_MODE;
> +               return 0;
>         case CHIPID_AD9467:
> -               st->output_mode = AD9467_DEF_OUTPUT_MODE |
> -                                 AN877_ADC_OUTPUT_MODE_TWOS_COMPLEMENT;
> +               st->output_mode |= AD9467_DEF_OUTPUT_MODE;
>                 return 0;
>         default:
>                 return -ENODEV;
> @@ -404,6 +436,7 @@ static int ad9467_probe(struct spi_device *spi)
>  }
>
>  static const struct of_device_id ad9467_of_match[] = {
> +       { .compatible = "adi,ad9434", .data = &ad9467_chip_tbl[ID_AD9434], },
>         { .compatible = "adi,ad9467", .data = &ad9467_chip_tbl[ID_AD9467], },
>         {}
>  };
> --
> 2.25.1
>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ