Skip to content

Commit f4a69c8

Browse files
mhennerichrodrigo455
authored andcommitted
iio: amplifiers: ad8366: Update device support
This patch adds support for following digital step attenuators: * 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 Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
1 parent a6515b2 commit f4a69c8

File tree

1 file changed

+81
-7
lines changed

1 file changed

+81
-7
lines changed

drivers/iio/amplifiers/ad8366.c

Lines changed: 81 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,16 @@
55
* AD8366 Dual-Digital Variable Gain Amplifier (VGA)
66
* ADA4961 BiCMOS RF Digital Gain Amplifier (DGA)
77
* ADL5240 Digitally controlled variable gain amplifier (VGA)
8+
* ADRF5720: 0.5 dB LSB, 6-Bit, Silicon Digital Attenuator, 9 kHz to 40 GHz
9+
* ADRF5730: 0.5 dB LSB, 6-Bit, Silicon Digital Attenuator, 100 MHz to 40 GHz
10+
* ADRF5731: 2 dB LSB, 4-Bit, Silicon Digital Attenuator, 100 MHz to 40 GHz
11+
* HMC271A: 1dB LSB 5-Bit Digital Attenuator SMT, 0.7 - 3.7 GHz
812
* HMC792A 0.25 dB LSB GaAs MMIC 6-Bit Digital Attenuator
9-
* HMC271 1 dB LSB GaAs MMIC 5-BIT Control Digital Attenuator
13+
* HMC1018A: 1.0 dB LSB GaAs MMIC 5-BIT DIGITAL ATTENUATOR, 0.1 - 30 GHz
14+
* HMC1019A: 0.5 dB LSB GaAs MMIC 5-BIT DIGITAL ATTENUATOR, 0.1 - 30 GHz
1015
* HMC1119 0.25 dB LSB, 7-Bit, Silicon Digital Attenuator
1116
*
12-
* Copyright 2012-2019 Analog Devices Inc.
17+
* Copyright 2012-2021 Analog Devices Inc.
1318
*/
1419

1520
#include <linux/device.h>
@@ -30,8 +35,13 @@ enum ad8366_type {
3035
ID_AD8366,
3136
ID_ADA4961,
3237
ID_ADL5240,
33-
ID_HMC792,
38+
ID_ADRF5720,
39+
ID_ADRF5730,
40+
ID_ADRF5731,
3441
ID_HMC271,
42+
ID_HMC792,
43+
ID_HMC1018,
44+
ID_HMC1019,
3545
ID_HMC1119,
3646
};
3747

@@ -45,6 +55,7 @@ struct ad8366_state {
4555
struct regulator *reg;
4656
struct mutex lock; /* protect sensor state */
4757
struct gpio_desc *reset_gpio;
58+
struct gpio_desc *enable_gpio;
4859
unsigned char ch[2];
4960
enum ad8366_type type;
5061
const struct ad8366_info *info;
@@ -68,14 +79,34 @@ static const struct ad8366_info ad8366_infos[] = {
6879
.gain_min = -11500,
6980
.gain_max = 20000,
7081
},
82+
[ID_ADRF5720] = {
83+
.gain_min = -31500,
84+
.gain_max = 0,
85+
},
86+
[ID_ADRF5730] = {
87+
.gain_min = -31500,
88+
.gain_max = 0,
89+
},
90+
[ID_ADRF5731] = {
91+
.gain_min = -30000,
92+
.gain_max = 0,
93+
},
94+
[ID_HMC271] = {
95+
.gain_min = -31000,
96+
.gain_max = 0,
97+
},
7198
[ID_HMC792] = {
7299
.gain_min = -15750,
73100
.gain_max = 0,
74101
},
75-
[ID_HMC271] = {
102+
[ID_HMC1018] = {
76103
.gain_min = -31000,
77104
.gain_max = 0,
78105
},
106+
[ID_HMC1019] = {
107+
.gain_min = -15500,
108+
.gain_max = 0,
109+
},
79110
[ID_HMC1119] = {
80111
.gain_min = -31750,
81112
.gain_max = 0,
@@ -100,12 +131,17 @@ static int ad8366_write(struct iio_dev *indio_dev,
100131
st->data[0] = ch_a & 0x1F;
101132
break;
102133
case ID_ADL5240:
134+
case ID_ADRF5720:
135+
case ID_ADRF5730:
136+
case ID_ADRF5731:
103137
st->data[0] = (ch_a & 0x3F);
104138
break;
105139
case ID_HMC271:
106140
st->data[0] = bitrev8(ch_a & 0x1F) >> 3;
107141
break;
108142
case ID_HMC792:
143+
case ID_HMC1018:
144+
case ID_HMC1019:
109145
case ID_HMC1119:
110146
st->data[0] = ch_a;
111147
break;
@@ -143,11 +179,23 @@ static int ad8366_read_raw(struct iio_dev *indio_dev,
143179
case ID_ADL5240:
144180
gain = 20000 - 31500 + code * 500;
145181
break;
182+
case ID_ADRF5720:
183+
case ID_ADRF5730:
184+
gain = -31500 + code * 500;
185+
break;
186+
case ID_ADRF5731:
187+
gain = -30000 + code * 500;
188+
break;
146189
case ID_HMC792:
147190
gain = -1 * code * 500;
191+
break;
148192
case ID_HMC271:
193+
case ID_HMC1018:
149194
gain = -31000 + code * 1000;
150195
break;
196+
case ID_HMC1019:
197+
gain = -15500 + code * 500;
198+
break;
151199
case ID_HMC1119:
152200
gain = -1 * code * 250;
153201
break;
@@ -197,11 +245,23 @@ static int ad8366_write_raw(struct iio_dev *indio_dev,
197245
case ID_ADL5240:
198246
code = ((gain - 500 - 20000) / 500) & 0x3F;
199247
break;
248+
case ID_ADRF5720:
249+
case ID_ADRF5730:
250+
code = (abs(gain) / 500) & 0x3F;
251+
break;
252+
case ID_ADRF5731:
253+
code = (abs(gain) / 500) & 0x3C;
254+
break;
200255
case ID_HMC792:
201256
code = (abs(gain) / 500) & 0x3F;
257+
break;
202258
case ID_HMC271:
259+
case ID_HMC1018:
203260
code = ((gain - 1000) / 1000) & 0x1F;
204261
break;
262+
case ID_HMC1019:
263+
code = ((gain - 500) / 500) & 0x1F;
264+
break;
205265
case ID_HMC1119:
206266
code = (abs(gain) / 250) & 0x7F;
207267
break;
@@ -287,14 +347,23 @@ static int ad8366_probe(struct spi_device *spi)
287347
break;
288348
case ID_ADA4961:
289349
case ID_ADL5240:
290-
case ID_HMC792:
291350
case ID_HMC271:
351+
case ID_HMC792:
292352
case ID_HMC1119:
353+
case ID_ADRF5720:
354+
case ID_ADRF5730:
355+
case ID_ADRF5731:
356+
case ID_HMC1018:
357+
case ID_HMC1019:
293358
st->reset_gpio = devm_gpiod_get_optional(&spi->dev, "reset", GPIOD_OUT_HIGH);
294359
if (IS_ERR(st->reset_gpio)) {
295360
ret = PTR_ERR(st->reset_gpio);
296361
goto error_disable_reg;
297362
}
363+
364+
st->enable_gpio = devm_gpiod_get(&spi->dev, "enable",
365+
GPIOD_OUT_HIGH);
366+
298367
indio_dev->channels = ada4961_channels;
299368
indio_dev->num_channels = ARRAY_SIZE(ada4961_channels);
300369
break;
@@ -339,11 +408,16 @@ static void ad8366_remove(struct spi_device *spi)
339408
}
340409

341410
static const struct spi_device_id ad8366_id[] = {
342-
{"ad8366", ID_AD8366},
411+
{"ad8366", ID_AD8366},
343412
{"ada4961", ID_ADA4961},
413+
{"adrf5720", ID_ADRF5720},
414+
{"adrf5730", ID_ADRF5730},
415+
{"adrf5731", ID_ADRF5731},
344416
{"adl5240", ID_ADL5240},
417+
{"hmc271", ID_HMC271},
345418
{"hmc792a", ID_HMC792},
346-
{"hmc271", ID_HMC271},
419+
{"hmc1018a", ID_HMC1018},
420+
{"hmc1019a", ID_HMC1019},
347421
{"hmc1119", ID_HMC1119},
348422
{ }
349423
};

0 commit comments

Comments
 (0)