]> Pileus Git - ~andy/linux/blobdiff - drivers/staging/iio/accel/adis16209_core.c
staging:iio: unwind the IIO_IN -> IIO_VOLTAGE define
[~andy/linux] / drivers / staging / iio / accel / adis16209_core.c
index 55f3a7bcaf0a67b8603de9ee0c7d6bbb5cfa7439..d03ac01c8d5212c7922f4c281fe3396d2036618d 100644 (file)
 #include <linux/slab.h>
 #include <linux/sysfs.h>
 #include <linux/list.h>
+#include <linux/module.h>
 
 #include "../iio.h"
 #include "../sysfs.h"
-#include "../ring_generic.h"
-#include "accel.h"
-#include "inclinometer.h"
-#include "../adc/adc.h"
+#include "../buffer_generic.h"
 
 #include "adis16209.h"
 
@@ -337,13 +335,17 @@ static int adis16209_read_raw(struct iio_dev *indio_dev,
                mutex_lock(&indio_dev->mlock);
                addr = adis16209_addresses[chan->address][0];
                ret = adis16209_spi_read_reg_16(indio_dev, addr, &val16);
-               if (ret)
+               if (ret) {
+                       mutex_unlock(&indio_dev->mlock);
                        return ret;
+               }
 
                if (val16 & ADIS16209_ERROR_ACTIVE) {
                        ret = adis16209_check_status(indio_dev);
-                       if (ret)
+                       if (ret) {
+                               mutex_unlock(&indio_dev->mlock);
                                return ret;
+                       }
                }
                val16 = val16 & ((1 << chan->scan_type.realbits) - 1);
                if (chan->scan_type.sign == 's')
@@ -356,7 +358,7 @@ static int adis16209_read_raw(struct iio_dev *indio_dev,
        case (1 << IIO_CHAN_INFO_SCALE_SEPARATE):
        case (1 << IIO_CHAN_INFO_SCALE_SHARED):
                switch (chan->type) {
-               case IIO_IN:
+               case IIO_VOLTAGE:
                        *val = 0;
                        if (chan->channel == 0)
                                *val2 = 305180;
@@ -407,7 +409,7 @@ static int adis16209_read_raw(struct iio_dev *indio_dev,
 }
 
 static struct iio_chan_spec adis16209_channels[] = {
-       IIO_CHAN(IIO_IN, 0, 1, 0, NULL, 0, 0,
+       IIO_CHAN(IIO_VOLTAGE, 0, 1, 0, NULL, 0, 0,
                 (1 << IIO_CHAN_INFO_SCALE_SEPARATE),
                 in_supply, ADIS16209_SCAN_SUPPLY,
                 IIO_ST('u', 14, 16, 0), 0),
@@ -426,15 +428,15 @@ static struct iio_chan_spec adis16209_channels[] = {
                 (1 << IIO_CHAN_INFO_CALIBBIAS_SEPARATE),
                 accel_y, ADIS16209_SCAN_ACC_Y,
                 IIO_ST('s', 14, 16, 0), 0),
-       IIO_CHAN(IIO_IN, 0, 1, 0, NULL, 1, 0,
+       IIO_CHAN(IIO_VOLTAGE, 0, 1, 0, NULL, 1, 0,
                 (1 << IIO_CHAN_INFO_SCALE_SEPARATE),
                 in_aux, ADIS16209_SCAN_AUX_ADC,
                 IIO_ST('u', 12, 16, 0), 0),
-       IIO_CHAN(IIO_INCLI, 0, 1, 0, NULL, 0, IIO_MOD_X,
+       IIO_CHAN(IIO_INCLI, 1, 0, 0, NULL, 0, IIO_MOD_X,
                 (1 << IIO_CHAN_INFO_SCALE_SHARED),
                 incli_x, ADIS16209_SCAN_INCLI_X,
                 IIO_ST('s', 14, 16, 0), 0),
-       IIO_CHAN(IIO_INCLI, 0, 1, 0, NULL, 0, IIO_MOD_Y,
+       IIO_CHAN(IIO_INCLI, 1, 0, 0, NULL, 0, IIO_MOD_Y,
                 (1 << IIO_CHAN_INFO_SCALE_SHARED),
                 incli_y, ADIS16209_SCAN_INCLI_Y,
                 IIO_ST('s', 14, 16, 0), 0),
@@ -465,7 +467,7 @@ static const struct iio_info adis16209_info = {
 
 static int __devinit adis16209_probe(struct spi_device *spi)
 {
-       int ret, regdone = 0;
+       int ret;
        struct adis16209_state *st;
        struct iio_dev *indio_dev;
 
@@ -492,14 +494,9 @@ static int __devinit adis16209_probe(struct spi_device *spi)
        if (ret)
                goto error_free_dev;
 
-       ret = iio_device_register(indio_dev);
-       if (ret)
-               goto error_unreg_ring_funcs;
-       regdone = 1;
-
-       ret = iio_ring_buffer_register_ex(indio_dev->ring, 0,
-                                         adis16209_channels,
-                                         ARRAY_SIZE(adis16209_channels));
+       ret = iio_buffer_register(indio_dev,
+                                 adis16209_channels,
+                                 ARRAY_SIZE(adis16209_channels));
        if (ret) {
                printk(KERN_ERR "failed to initialize the ring\n");
                goto error_unreg_ring_funcs;
@@ -515,19 +512,20 @@ static int __devinit adis16209_probe(struct spi_device *spi)
        ret = adis16209_initial_setup(indio_dev);
        if (ret)
                goto error_remove_trigger;
+       ret = iio_device_register(indio_dev);
+       if (ret)
+               goto error_remove_trigger;
+
        return 0;
 
 error_remove_trigger:
        adis16209_remove_trigger(indio_dev);
 error_uninitialize_ring:
-       iio_ring_buffer_unregister(indio_dev->ring);
+       iio_buffer_unregister(indio_dev);
 error_unreg_ring_funcs:
        adis16209_unconfigure_ring(indio_dev);
 error_free_dev:
-       if (regdone)
-               iio_device_unregister(indio_dev);
-       else
-               iio_free_device(indio_dev);
+       iio_free_device(indio_dev);
 error_ret:
        return ret;
 }
@@ -539,9 +537,9 @@ static int adis16209_remove(struct spi_device *spi)
        flush_scheduled_work();
 
        adis16209_remove_trigger(indio_dev);
-       iio_ring_buffer_unregister(indio_dev->ring);
-       iio_device_unregister(indio_dev);
+       iio_buffer_unregister(indio_dev);
        adis16209_unconfigure_ring(indio_dev);
+       iio_device_unregister(indio_dev);
 
        return 0;
 }