Lines Matching +full:analog +full:- +full:amplifier
1 // SPDX-License-Identifier: GPL-2.0
5 * AD8366 Dual-Digital Variable Gain Amplifier (VGA)
6 * ADA4961 BiCMOS RF Digital Gain Amplifier (DGA)
7 * ADL5240 Digitally controlled variable gain amplifier (VGA)
8 * HMC792A 0.25 dB LSB GaAs MMIC 6-Bit Digital Attenuator
9 * HMC1119 0.25 dB LSB, 7-Bit, Silicon Digital Attenuator
11 * Copyright 2012-2019 Analog Devices Inc.
62 .gain_min = -6000,
66 .gain_min = -11500,
70 .gain_min = -15750,
74 .gain_min = -31750,
85 switch (st->type) { in ad8366_write()
90 st->data[0] = ch_b >> 4; in ad8366_write()
91 st->data[1] = (ch_b << 4) | (ch_a >> 2); in ad8366_write()
94 st->data[0] = ch_a & 0x1F; in ad8366_write()
97 st->data[0] = (ch_a & 0x3F); in ad8366_write()
101 st->data[0] = ch_a; in ad8366_write()
105 ret = spi_write(st->spi, st->data, indio_dev->num_channels); in ad8366_write()
107 dev_err(&indio_dev->dev, "write failed (%d)", ret); in ad8366_write()
122 mutex_lock(&st->lock); in ad8366_read_raw()
125 code = st->ch[chan->channel]; in ad8366_read_raw()
127 switch (st->type) { in ad8366_read_raw()
132 gain = 15000 - code * 1000; in ad8366_read_raw()
135 gain = 20000 - 31500 + code * 500; in ad8366_read_raw()
138 gain = -1 * code * 500; in ad8366_read_raw()
141 gain = -1 * code * 250; in ad8366_read_raw()
152 ret = -EINVAL; in ad8366_read_raw()
154 mutex_unlock(&st->lock); in ad8366_read_raw()
166 const struct ad8366_info *inf = st->info; in ad8366_write_raw()
172 gain = (val * 1000) - (val2 / 1000); in ad8366_write_raw()
176 if (gain > inf->gain_max || gain < inf->gain_min) in ad8366_write_raw()
177 return -EINVAL; in ad8366_write_raw()
179 switch (st->type) { in ad8366_write_raw()
181 code = (gain - 4500) / 253; in ad8366_write_raw()
184 code = (15000 - gain) / 1000; in ad8366_write_raw()
187 code = ((gain - 500 - 20000) / 500) & 0x3F; in ad8366_write_raw()
197 mutex_lock(&st->lock); in ad8366_write_raw()
200 st->ch[chan->channel] = code; in ad8366_write_raw()
201 ret = ad8366_write(indio_dev, st->ch[0], st->ch[1]); in ad8366_write_raw()
204 ret = -EINVAL; in ad8366_write_raw()
206 mutex_unlock(&st->lock); in ad8366_write_raw()
219 return -EINVAL; in ad8366_write_raw_get_fmt()
252 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st)); in ad8366_probe()
254 return -ENOMEM; in ad8366_probe()
258 st->reg = devm_regulator_get(&spi->dev, "vcc"); in ad8366_probe()
259 if (!IS_ERR(st->reg)) { in ad8366_probe()
260 ret = regulator_enable(st->reg); in ad8366_probe()
266 mutex_init(&st->lock); in ad8366_probe()
267 st->spi = spi; in ad8366_probe()
268 st->type = spi_get_device_id(spi)->driver_data; in ad8366_probe()
270 switch (st->type) { in ad8366_probe()
272 indio_dev->channels = ad8366_channels; in ad8366_probe()
273 indio_dev->num_channels = ARRAY_SIZE(ad8366_channels); in ad8366_probe()
279 st->reset_gpio = devm_gpiod_get_optional(&spi->dev, "reset", GPIOD_OUT_HIGH); in ad8366_probe()
280 if (IS_ERR(st->reset_gpio)) { in ad8366_probe()
281 ret = PTR_ERR(st->reset_gpio); in ad8366_probe()
284 indio_dev->channels = ada4961_channels; in ad8366_probe()
285 indio_dev->num_channels = ARRAY_SIZE(ada4961_channels); in ad8366_probe()
288 dev_err(&spi->dev, "Invalid device ID\n"); in ad8366_probe()
289 ret = -EINVAL; in ad8366_probe()
293 st->info = &ad8366_infos[st->type]; in ad8366_probe()
294 indio_dev->name = spi_get_device_id(spi)->name; in ad8366_probe()
295 indio_dev->info = &ad8366_info; in ad8366_probe()
296 indio_dev->modes = INDIO_DIRECT_MODE; in ad8366_probe()
309 if (!IS_ERR(st->reg)) in ad8366_probe()
310 regulator_disable(st->reg); in ad8366_probe()
319 struct regulator *reg = st->reg; in ad8366_remove()
348 MODULE_AUTHOR("Michael Hennerich <michael.hennerich@analog.com>");
349 MODULE_DESCRIPTION("Analog Devices AD8366 and similar Gain Amplifiers");