• Home
  • Raw
  • Download

Lines Matching +full:vref +full:- +full:p

1 // SPDX-License-Identifier: GPL-2.0-only
4 * Copyright (C) 2010-2011 Michael Hennerich, Analog Devices Inc.
7 * Copyright (C) 2008-2010 Jonathan Cameron
10 * Copyright (C) 2002-2004 Stefan Eletzhofer
100 * struct ad799x_chip_config - chip specific information
112 * struct ad799x_chip_info - chip specific information
127 struct regulator *vref; member
137 switch (st->id) { in ad799x_write_config()
140 return i2c_smbus_write_word_swapped(st->client, AD7998_CONF_REG, in ad799x_write_config()
145 return i2c_smbus_write_byte_data(st->client, AD7998_CONF_REG, in ad799x_write_config()
149 st->config = val; in ad799x_write_config()
156 switch (st->id) { in ad799x_read_config()
159 return i2c_smbus_read_word_swapped(st->client, AD7998_CONF_REG); in ad799x_read_config()
163 return i2c_smbus_read_byte_data(st->client, AD7998_CONF_REG); in ad799x_read_config()
166 return st->config; in ad799x_read_config()
180 st->config = ret; in ad799x_update_config()
191 static irqreturn_t ad799x_trigger_handler(int irq, void *p) in ad799x_trigger_handler() argument
193 struct iio_poll_func *pf = p; in ad799x_trigger_handler()
194 struct iio_dev *indio_dev = pf->indio_dev; in ad799x_trigger_handler()
199 switch (st->id) { in ad799x_trigger_handler()
203 cmd = st->config | in ad799x_trigger_handler()
204 (*indio_dev->active_scan_mask << AD799X_CHANNEL_SHIFT); in ad799x_trigger_handler()
209 cmd = (*indio_dev->active_scan_mask << AD799X_CHANNEL_SHIFT) | in ad799x_trigger_handler()
220 b_sent = i2c_smbus_read_i2c_block_data(st->client, in ad799x_trigger_handler()
221 cmd, st->transfer_size, st->rx_buf); in ad799x_trigger_handler()
225 iio_push_to_buffers_with_timestamp(indio_dev, st->rx_buf, in ad799x_trigger_handler()
228 iio_trigger_notify_done(indio_dev->trig); in ad799x_trigger_handler()
238 kfree(st->rx_buf); in ad799x_update_scan_mode()
239 st->rx_buf = kmalloc(indio_dev->scan_bytes, GFP_KERNEL); in ad799x_update_scan_mode()
240 if (!st->rx_buf) in ad799x_update_scan_mode()
241 return -ENOMEM; in ad799x_update_scan_mode()
243 st->transfer_size = bitmap_weight(scan_mask, indio_dev->masklength) * 2; in ad799x_update_scan_mode()
245 switch (st->id) { in ad799x_update_scan_mode()
251 st->config &= ~(GENMASK(7, 0) << AD799X_CHANNEL_SHIFT); in ad799x_update_scan_mode()
252 st->config |= (*scan_mask << AD799X_CHANNEL_SHIFT); in ad799x_update_scan_mode()
253 return ad799x_write_config(st, st->config); in ad799x_update_scan_mode()
263 switch (st->id) { in ad799x_scan_direct()
267 cmd = st->config | (BIT(ch) << AD799X_CHANNEL_SHIFT); in ad799x_scan_direct()
279 return -EINVAL; in ad799x_scan_direct()
282 return i2c_smbus_read_word_swapped(st->client, cmd); in ad799x_scan_direct()
299 ret = ad799x_scan_direct(st, chan->scan_index); in ad799x_read_raw()
304 *val = (ret >> chan->scan_type.shift) & in ad799x_read_raw()
305 GENMASK(chan->scan_type.realbits - 1, 0); in ad799x_read_raw()
308 ret = regulator_get_voltage(st->vref); in ad799x_read_raw()
312 *val2 = chan->scan_type.realbits; in ad799x_read_raw()
315 return -EINVAL; in ad799x_read_raw()
334 int ret = i2c_smbus_read_byte_data(st->client, AD7998_CYCLE_TMR_REG); in ad799x_read_frequency()
356 mutex_lock(&indio_dev->mlock); in ad799x_write_frequency()
357 ret = i2c_smbus_read_byte_data(st->client, AD7998_CYCLE_TMR_REG); in ad799x_write_frequency()
367 ret = -EINVAL; in ad799x_write_frequency()
371 ret = i2c_smbus_write_byte_data(st->client, AD7998_CYCLE_TMR_REG, in ad799x_write_frequency()
378 mutex_unlock(&indio_dev->mlock); in ad799x_write_frequency()
390 if (!(st->config & AD7998_ALERT_EN)) in ad799x_read_event_config()
393 if ((st->config >> AD799X_CHANNEL_SHIFT) & BIT(chan->scan_index)) in ad799x_read_event_config()
413 st->config |= BIT(chan->scan_index) << AD799X_CHANNEL_SHIFT; in ad799x_write_event_config()
415 st->config &= ~(BIT(chan->scan_index) << AD799X_CHANNEL_SHIFT); in ad799x_write_event_config()
417 if (st->config >> AD799X_CHANNEL_SHIFT) in ad799x_write_event_config()
418 st->config |= AD7998_ALERT_EN; in ad799x_write_event_config()
420 st->config &= ~AD7998_ALERT_EN; in ad799x_write_event_config()
422 ret = ad799x_write_config(st, st->config); in ad799x_write_event_config()
434 return AD7998_DATALOW_REG(chan->channel); in ad799x_threshold_reg()
436 return AD7998_DATAHIGH_REG(chan->channel); in ad799x_threshold_reg()
438 return AD7998_HYST_REG(chan->channel); in ad799x_threshold_reg()
440 return -EINVAL; in ad799x_threshold_reg()
456 if (val < 0 || val > GENMASK(chan->scan_type.realbits - 1, 0)) in ad799x_write_event_value()
457 return -EINVAL; in ad799x_write_event_value()
459 mutex_lock(&indio_dev->mlock); in ad799x_write_event_value()
460 ret = i2c_smbus_write_word_swapped(st->client, in ad799x_write_event_value()
462 val << chan->scan_type.shift); in ad799x_write_event_value()
463 mutex_unlock(&indio_dev->mlock); in ad799x_write_event_value()
478 mutex_lock(&indio_dev->mlock); in ad799x_read_event_value()
479 ret = i2c_smbus_read_word_swapped(st->client, in ad799x_read_event_value()
481 mutex_unlock(&indio_dev->mlock); in ad799x_read_event_value()
484 *val = (ret >> chan->scan_type.shift) & in ad799x_read_event_value()
485 GENMASK(chan->scan_type.realbits - 1, 0); in ad799x_read_event_value()
496 ret = i2c_smbus_read_byte_data(st->client, AD7998_ALERT_STAT_REG); in ad799x_event_handler()
500 if (i2c_smbus_write_byte_data(st->client, AD7998_ALERT_STAT_REG, in ad799x_event_handler()
587 .shift = 12 - (_realbits), \
782 &ad799x_chip_info_tbl[id->driver_data]; in ad799x_probe()
784 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*st)); in ad799x_probe()
786 return -ENOMEM; in ad799x_probe()
792 st->id = id->driver_data; in ad799x_probe()
793 if (client->irq > 0 && chip_info->irq_config.info) in ad799x_probe()
794 st->chip_config = &chip_info->irq_config; in ad799x_probe()
796 st->chip_config = &chip_info->noirq_config; in ad799x_probe()
800 st->reg = devm_regulator_get(&client->dev, "vcc"); in ad799x_probe()
801 if (IS_ERR(st->reg)) in ad799x_probe()
802 return PTR_ERR(st->reg); in ad799x_probe()
803 ret = regulator_enable(st->reg); in ad799x_probe()
806 st->vref = devm_regulator_get(&client->dev, "vref"); in ad799x_probe()
807 if (IS_ERR(st->vref)) { in ad799x_probe()
808 ret = PTR_ERR(st->vref); in ad799x_probe()
811 ret = regulator_enable(st->vref); in ad799x_probe()
815 st->client = client; in ad799x_probe()
817 indio_dev->name = id->name; in ad799x_probe()
818 indio_dev->info = st->chip_config->info; in ad799x_probe()
820 indio_dev->modes = INDIO_DIRECT_MODE; in ad799x_probe()
821 indio_dev->channels = st->chip_config->channel; in ad799x_probe()
822 indio_dev->num_channels = chip_info->num_channels; in ad799x_probe()
824 ret = ad799x_update_config(st, st->chip_config->default_config); in ad799x_probe()
833 if (client->irq > 0) { in ad799x_probe()
834 ret = devm_request_threaded_irq(&client->dev, in ad799x_probe()
835 client->irq, in ad799x_probe()
840 client->name, in ad799x_probe()
854 regulator_disable(st->vref); in ad799x_probe()
856 regulator_disable(st->reg); in ad799x_probe()
869 regulator_disable(st->vref); in ad799x_remove()
870 regulator_disable(st->reg); in ad799x_remove()
871 kfree(st->rx_buf); in ad799x_remove()
881 regulator_disable(st->vref); in ad799x_suspend()
882 regulator_disable(st->reg); in ad799x_suspend()
893 ret = regulator_enable(st->reg); in ad799x_resume()
898 ret = regulator_enable(st->vref); in ad799x_resume()
900 regulator_disable(st->reg); in ad799x_resume()
901 dev_err(dev, "Unable to enable vref regulator\n"); in ad799x_resume()
906 ret = ad799x_update_config(st, st->config); in ad799x_resume()
908 regulator_disable(st->vref); in ad799x_resume()
909 regulator_disable(st->reg); in ad799x_resume()