diff options
Diffstat (limited to 'drivers/staging/iio/adc/ad7887_core.c')
-rw-r--r-- | drivers/staging/iio/adc/ad7887_core.c | 70 |
1 files changed, 40 insertions, 30 deletions
diff --git a/drivers/staging/iio/adc/ad7887_core.c b/drivers/staging/iio/adc/ad7887_core.c index 3d9121e5c37..609dcd5f2dd 100644 --- a/drivers/staging/iio/adc/ad7887_core.c +++ b/drivers/staging/iio/adc/ad7887_core.c @@ -13,11 +13,12 @@ #include <linux/spi/spi.h> #include <linux/regulator/consumer.h> #include <linux/err.h> +#include <linux/module.h> #include "../iio.h" #include "../sysfs.h" -#include "../ring_generic.h" -#include "adc.h" +#include "../buffer_generic.h" + #include "ad7887.h" @@ -30,24 +31,24 @@ static int ad7887_scan_direct(struct ad7887_state *st, unsigned ch) return (st->data[(ch * 2)] << 8) | st->data[(ch * 2) + 1]; } -static int ad7887_read_raw(struct iio_dev *dev_info, +static int ad7887_read_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int *val, int *val2, long m) { int ret; - struct ad7887_state *st = iio_priv(dev_info); + struct ad7887_state *st = iio_priv(indio_dev); unsigned int scale_uv; switch (m) { case 0: - mutex_lock(&dev_info->mlock); - if (iio_ring_enabled(dev_info)) + mutex_lock(&indio_dev->mlock); + if (iio_buffer_enabled(indio_dev)) ret = ad7887_scan_from_ring(st, 1 << chan->address); else ret = ad7887_scan_direct(st, chan->address); - mutex_unlock(&dev_info->mlock); + mutex_unlock(&indio_dev->mlock); if (ret < 0) return ret; @@ -70,14 +71,24 @@ static const struct ad7887_chip_info ad7887_chip_info_tbl[] = { * More devices added in future */ [ID_AD7887] = { - .channel[0] = IIO_CHAN(IIO_IN, 0, 1, 0, NULL, 1, 0, - (1 << IIO_CHAN_INFO_SCALE_SHARED), - 1, 1, IIO_ST('u', 12, 16, 0), 0), - - .channel[1] = IIO_CHAN(IIO_IN, 0, 1, 0, NULL, 0, 0, - (1 << IIO_CHAN_INFO_SCALE_SHARED), - 0, 0, IIO_ST('u', 12, 16, 0), 0), - + .channel[0] = { + .type = IIO_VOLTAGE, + .indexed = 1, + .channel = 1, + .info_mask = (1 << IIO_CHAN_INFO_SCALE_SHARED), + .address = 1, + .scan_index = 1, + .scan_type = IIO_ST('u', 12, 16, 0), + }, + .channel[1] = { + .type = IIO_VOLTAGE, + .indexed = 1, + .channel = 0, + .info_mask = (1 << IIO_CHAN_INFO_SCALE_SHARED), + .address = 0, + .scan_index = 0, + .scan_type = IIO_ST('u', 12, 16, 0), + }, .channel[2] = IIO_CHAN_SOFT_TIMESTAMP(2), .int_vref_mv = 2500, }, @@ -92,7 +103,7 @@ static int __devinit ad7887_probe(struct spi_device *spi) { struct ad7887_platform_data *pdata = spi->dev.platform_data; struct ad7887_state *st; - int ret, voltage_uv = 0, regdone = 0; + int ret, voltage_uv = 0; struct iio_dev *indio_dev = iio_allocate_device(sizeof(*st)); if (indio_dev == NULL) @@ -188,18 +199,19 @@ static int __devinit ad7887_probe(struct spi_device *spi) if (ret) goto error_disable_reg; - ret = iio_device_register(indio_dev); + ret = iio_buffer_register(indio_dev, + indio_dev->channels, + indio_dev->num_channels); if (ret) - goto error_disable_reg; - regdone = 1; + goto error_cleanup_ring; - ret = iio_ring_buffer_register_ex(indio_dev->ring, 0, - indio_dev->channels, - indio_dev->num_channels); + ret = iio_device_register(indio_dev); if (ret) - goto error_cleanup_ring; - return 0; + goto error_unregister_ring; + return 0; +error_unregister_ring: + iio_buffer_unregister(indio_dev); error_cleanup_ring: ad7887_ring_cleanup(indio_dev); error_disable_reg: @@ -208,10 +220,7 @@ error_disable_reg: error_put_reg: if (!IS_ERR(st->reg)) regulator_put(st->reg); - if (regdone) - iio_device_unregister(indio_dev); - else - iio_free_device(indio_dev); + iio_free_device(indio_dev); return ret; } @@ -221,13 +230,14 @@ static int ad7887_remove(struct spi_device *spi) struct iio_dev *indio_dev = spi_get_drvdata(spi); struct ad7887_state *st = iio_priv(indio_dev); - iio_ring_buffer_unregister(indio_dev->ring); + iio_device_unregister(indio_dev); + iio_buffer_unregister(indio_dev); ad7887_ring_cleanup(indio_dev); if (!IS_ERR(st->reg)) { regulator_disable(st->reg); regulator_put(st->reg); } - iio_device_unregister(indio_dev); + iio_free_device(indio_dev); return 0; } |