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] [thread-next>] [day] [month] [year] [list]
Message-ID: <20260123083318.53bce905@jic23-huawei>
Date: Fri, 23 Jan 2026 08:33:18 +0000
From: Jonathan Cameron <jic23@...nel.org>
To: Rodrigo Alencar via B4 Relay
 <devnull+rodrigo.alencar.analog.com@...nel.org>
Cc: rodrigo.alencar@...log.com, linux-kernel@...r.kernel.org,
 linux-iio@...r.kernel.org, devicetree@...r.kernel.org, Michael Hennerich
 <Michael.Hennerich@...log.com>, Lars-Peter Clausen <lars@...afoo.de>, David
 Lechner <dlechner@...libre.com>, Andy Shevchenko <andy@...nel.org>, Rob
 Herring <robh@...nel.org>, Krzysztof Kozlowski <krzk+dt@...nel.org>, Conor
 Dooley <conor+dt@...nel.org>, Alexandru Ardelean
 <alexandru.ardelean@...log.com>
Subject: Re: [PATCH 4/7] iio: amplifiers: ad8366: Update device support

On Mon, 19 Jan 2026 14:36:58 +0000
Rodrigo Alencar via B4 Relay <devnull+rodrigo.alencar.analog.com@...nel.org> wrote:

> From: Rodrigo Alencar <rodrigo.alencar@...log.com>
> 
> This patch adds support for following digital step attenuators:
> 
>  * HMC271A: 1dB LSB 5-Bit Digital Attenuator SMT, 0.7 - 3.7 GHz
>  * ADRF5720: 0.5 dB LSB, 6-Bit, Digital Attenuator, 9 kHz to 40 GHz
>  * ADRF5730: 0.5 dB LSB, 6-Bit, Digital Attenuator, 100 MHz to 40 GHz
>  * ADRF5731: 2 dB LSB, 4-Bit, Digital Attenuator, 100 MHz to 40 GHz
>  * HMC1018A: 1.0 dB LSB GaAs MMIC 5-BIT DIGITAL ATTENUATOR, 0.1 - 30 GHz
>  * HMC1019A: 0.5 dB LSB GaAs MMIC 5-BIT DIGITAL ATTENUATOR, 0.1 - 30 GHz
> 
> Additionally, copyright notice was updated with current year.
> 
> Co-developed-by: Alexandru Ardelean <alexandru.ardelean@...log.com>
> Signed-off-by: Alexandru Ardelean <alexandru.ardelean@...log.com>
> Co-developed-by: Michael Hennerich <michael.hennerich@...log.com>
> Signed-off-by: Michael Hennerich <michael.hennerich@...log.com>
> Signed-off-by: Rodrigo Alencar <rodrigo.alencar@...log.com>

I don't want to delay this series if possible (needs to be ready early next
week to meet the merge window cut off) so the stuff below can be in a follow
up series if you prefer.  It is fairly simple so if you want to do it before
these new parts are added, even better.

They will make further additions to this driver simpler and easier to review.
> ---
>  drivers/iio/amplifiers/Kconfig  |  6 +++
>  drivers/iio/amplifiers/ad8366.c | 86 ++++++++++++++++++++++++++++++++++++++++-
>  2 files changed, 91 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/iio/amplifiers/Kconfig b/drivers/iio/amplifiers/Kconfig
> index a8a604863eed..39d280d4d437 100644
> --- a/drivers/iio/amplifiers/Kconfig
> +++ b/drivers/iio/amplifiers/Kconfig
> @@ -18,7 +18,13 @@ config AD8366
>  	    AD8366 Dual-Digital Variable Gain Amplifier (VGA)
>  	    ADA4961 BiCMOS RF Digital Gain Amplifier (DGA)
>  	    ADL5240 Digitally controlled variable gain amplifier (VGA)
> +	    ADRF5720: 0.5 dB LSB, 6-Bit, Silicon Digital Attenuator
> +	    ADRF5730: 0.5 dB LSB, 6-Bit, Silicon Digital Attenuator
> +	    ADRF5731: 2 dB LSB, 4-Bit, Silicon Digital Attenuator
> +	    HMC271A: 1dB LSB 5-Bit Digital Attenuator SMT
>  	    HMC792A 0.25 dB LSB GaAs MMIC 6-Bit Digital Attenuator
> +	    HMC1018A: 1.0 dB LSB GaAs MMIC 5-BIT Digital Attenuator
> +	    HMC1019A: 0.5 dB LSB GaAs MMIC 5-BIT Digital Attenuator
>  	    HMC1119 0.25 dB LSB, 7-Bit, Silicon Digital Attenuator
>  
>  	  To compile this driver as a module, choose M here: the
> diff --git a/drivers/iio/amplifiers/ad8366.c b/drivers/iio/amplifiers/ad8366.c
> index 63bb9f0179eb..160a8ab0c2ee 100644
> --- a/drivers/iio/amplifiers/ad8366.c
> +++ b/drivers/iio/amplifiers/ad8366.c
> @@ -5,10 +5,16 @@
>   *   AD8366 Dual-Digital Variable Gain Amplifier (VGA)
>   *   ADA4961 BiCMOS RF Digital Gain Amplifier (DGA)
>   *   ADL5240 Digitally controlled variable gain amplifier (VGA)
> + *   ADRF5720: 0.5 dB LSB, 6-Bit, Silicon Digital Attenuator, 9 kHz to 40 GHz
> + *   ADRF5730: 0.5 dB LSB, 6-Bit, Silicon Digital Attenuator, 100 MHz to 40 GHz
> + *   ADRF5731: 2 dB LSB, 4-Bit, Silicon Digital Attenuator, 100 MHz to 40 GHz
> + *   HMC271A: 1dB LSB 5-Bit Digital Attenuator SMT, 0.7 - 3.7 GHz
>   *   HMC792A 0.25 dB LSB GaAs MMIC 6-Bit Digital Attenuator
> + *   HMC1018A: 1.0 dB LSB GaAs MMIC 5-BIT DIGITAL ATTENUATOR, 0.1 - 30 GHz
> + *   HMC1019A: 0.5 dB LSB GaAs MMIC 5-BIT DIGITAL ATTENUATOR, 0.1 - 30 GHz
>   *   HMC1119 0.25 dB LSB, 7-Bit, Silicon Digital Attenuator
>   *
> - * Copyright 2012-2019 Analog Devices Inc.
> + * Copyright 2012-2026 Analog Devices Inc.
>   */
>  
>  #include <linux/device.h>
> @@ -29,7 +35,13 @@ enum ad8366_type {
>  	ID_AD8366,
>  	ID_ADA4961,
>  	ID_ADL5240,
> +	ID_ADRF5720,
> +	ID_ADRF5730,
> +	ID_ADRF5731,
> +	ID_HMC271,
>  	ID_HMC792,
> +	ID_HMC1018,
> +	ID_HMC1019,
>  	ID_HMC1119,
>  };
>  
> @@ -67,10 +79,34 @@ static const struct ad8366_info ad8366_infos[] = {

Refactor step 2: Split this up into individual structures and drop
the enum.  The presence of that enum is encouraging us to use
code to cover diffferences in parts where simple data in here would
be cleaner.


>  		.gain_min = -11500,
>  		.gain_max = 20000,
>  	},
> +	[ID_ADRF5720] = {

Refactor step 1:  Add everything in the switch statements based
on ID as data in here.  Looks like the channel arrays, a flag
for gpio presence and a few more constants like the ones already here.


> +		.gain_min = -31500,
> +		.gain_max = 0,
> +	},
> +	[ID_ADRF5730] = {
> +		.gain_min = -31500,
> +		.gain_max = 0,
> +	},
> +	[ID_ADRF5731] = {
> +		.gain_min = -30000,
> +		.gain_max = 0,
> +	},
> +	[ID_HMC271] = {
> +		.gain_min = -31000,
> +		.gain_max = 0,
> +	},
>  	[ID_HMC792] = {
>  		.gain_min = -15750,
>  		.gain_max = 0,
>  	},
> +	[ID_HMC1018] = {
> +		.gain_min = -31000,
> +		.gain_max = 0,
> +	},
> +	[ID_HMC1019] = {
> +		.gain_min = -15500,
> +		.gain_max = 0,
> +	},
>  	[ID_HMC1119] = {
>  		.gain_min = -31750,
>  		.gain_max = 0,
> @@ -95,9 +131,17 @@ static int ad8366_write(struct iio_dev *indio_dev,
>  		st->data[0] = ch_a & 0x1F;
>  		break;
>  	case ID_ADL5240:
> +	case ID_ADRF5720:
> +	case ID_ADRF5730:
> +	case ID_ADRF5731:
>  		st->data[0] = (ch_a & 0x3F);
>  		break;
> +	case ID_HMC271:
> +		st->data[0] = bitrev8(ch_a & 0x1F) >> 3;
> +		break;
>  	case ID_HMC792:
> +	case ID_HMC1018:
> +	case ID_HMC1019:
>  	case ID_HMC1119:
>  		st->data[0] = ch_a;
>  		break;
> @@ -135,9 +179,23 @@ static int ad8366_read_raw(struct iio_dev *indio_dev,
>  		case ID_ADL5240:
>  			gain = 20000 - 31500 + code * 500;
>  			break;
> +		case ID_ADRF5720:
> +		case ID_ADRF5730:
> +			gain = -1 * code * 500;
> +			break;
> +		case ID_ADRF5731:
> +			gain = -1 * code * 500;
> +			break;
>  		case ID_HMC792:
>  			gain = -1 * code * 500;
>  			break;
> +		case ID_HMC271:
> +		case ID_HMC1018:
> +			gain = -31000 + code * 1000;
> +			break;
> +		case ID_HMC1019:
> +			gain = -15500 + code * 500;
> +			break;
>  		case ID_HMC1119:
>  			gain = -1 * code * 250;
>  			break;
> @@ -187,9 +245,23 @@ static int ad8366_write_raw(struct iio_dev *indio_dev,
>  	case ID_ADL5240:
>  		code = ((gain - 500 - 20000) / 500) & 0x3F;
>  		break;
> +	case ID_ADRF5720:
> +	case ID_ADRF5730:
> +		code = (abs(gain) / 500) & 0x3F;
> +		break;
> +	case ID_ADRF5731:
> +		code = (abs(gain) / 500) & 0x3C;
> +		break;
>  	case ID_HMC792:
>  		code = (abs(gain) / 500) & 0x3F;
>  		break;
> +	case ID_HMC271:
> +	case ID_HMC1018:
> +		code = ((gain - 1000) / 1000) & 0x1F;
> +		break;
> +	case ID_HMC1019:
> +		code = ((gain - 500) / 500) & 0x1F;
> +		break;
>  	case ID_HMC1119:
>  		code = (abs(gain) / 250) & 0x7F;
>  		break;
> @@ -275,8 +347,14 @@ static int ad8366_probe(struct spi_device *spi)
>  		break;
>  	case ID_ADA4961:
>  	case ID_ADL5240:
> +	case ID_HMC271:
>  	case ID_HMC792:
>  	case ID_HMC1119:
> +	case ID_ADRF5720:
> +	case ID_ADRF5730:
> +	case ID_ADRF5731:
> +	case ID_HMC1018:
> +	case ID_HMC1019:
>  		st->reset_gpio = devm_gpiod_get_optional(&spi->dev, "reset", GPIOD_OUT_HIGH);
>  		if (IS_ERR(st->reset_gpio)) {
>  			ret = PTR_ERR(st->reset_gpio);
> @@ -335,8 +413,14 @@ static void ad8366_remove(struct spi_device *spi)
>  static const struct spi_device_id ad8366_id[] = {
>  	{"ad8366",  ID_AD8366},
>  	{"ada4961", ID_ADA4961},
> +	{"adrf5720", ID_ADRF5720},
> +	{"adrf5730", ID_ADRF5730},
> +	{"adrf5731", ID_ADRF5731},
>  	{"adl5240", ID_ADL5240},
> +	{"hmc271a", ID_HMC271},
>  	{"hmc792a", ID_HMC792},
> +	{"hmc1018a", ID_HMC1018},
> +	{"hmc1019a", ID_HMC1019},
>  	{"hmc1119", ID_HMC1119},
>  	{ }
>  };
> 


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ