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
341410static 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