Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

iio: amplifiers: ad8366: add support for HMC1119 Attenuator

This change adds support for the HMC1119 Silicon Digial Attenuator. The
HMC1119 is a broadband, highly accurate, 7-bit digital attenuator,
operating from 0.1 GHz to 6.0 GHz with 31.5 dB attenuation control range
in 0.25 dB steps.

Link: https://www.analog.com/media/en/technical-documentation/data-sheets/hmc1119.pdf

Signed-off-by: Sergiu Cuciurean <sergiu.cuciurean@analog.com>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

authored by

Sergiu Cuciurean and committed by
Jonathan Cameron
cc74a38d 328b50e9

+17
+17
drivers/iio/amplifiers/ad8366.c
··· 5 5 * AD8366 Dual-Digital Variable Gain Amplifier (VGA) 6 6 * ADA4961 BiCMOS RF Digital Gain Amplifier (DGA) 7 7 * ADL5240 Digitally controlled variable gain amplifier (VGA) 8 + * HMC1119 0.25 dB LSB, 7-Bit, Silicon Digital Attenuator 8 9 * 9 10 * Copyright 2012-2019 Analog Devices Inc. 10 11 */ ··· 28 27 ID_AD8366, 29 28 ID_ADA4961, 30 29 ID_ADL5240, 30 + ID_HMC1119, 31 31 }; 32 32 33 33 struct ad8366_info { ··· 64 62 .gain_min = -11500, 65 63 .gain_max = 20000, 66 64 }, 65 + [ID_HMC1119] = { 66 + .gain_min = -31750, 67 + .gain_max = 0, 68 + }, 67 69 }; 68 70 69 71 static int ad8366_write(struct iio_dev *indio_dev, ··· 89 83 break; 90 84 case ID_ADL5240: 91 85 st->data[0] = (ch_a & 0x3F); 86 + break; 87 + case ID_HMC1119: 88 + st->data[0] = ch_a; 92 89 break; 93 90 } 94 91 ··· 126 117 break; 127 118 case ID_ADL5240: 128 119 gain = 20000 - 31500 + code * 500; 120 + break; 121 + case ID_HMC1119: 122 + gain = -1 * code * 250; 129 123 break; 130 124 } 131 125 ··· 175 163 break; 176 164 case ID_ADL5240: 177 165 code = ((gain - 500 - 20000) / 500) & 0x3F; 166 + break; 167 + case ID_HMC1119: 168 + code = (abs(gain) / 250) & 0x7F; 178 169 break; 179 170 } 180 171 ··· 261 246 break; 262 247 case ID_ADA4961: 263 248 case ID_ADL5240: 249 + case ID_HMC1119: 264 250 st->reset_gpio = devm_gpiod_get(&spi->dev, "reset", 265 251 GPIOD_OUT_HIGH); 266 252 indio_dev->channels = ada4961_channels; ··· 314 298 {"ad8366", ID_AD8366}, 315 299 {"ada4961", ID_ADA4961}, 316 300 {"adl5240", ID_ADL5240}, 301 + {"hmc1119", ID_HMC1119}, 317 302 {} 318 303 }; 319 304 MODULE_DEVICE_TABLE(spi, ad8366_id);