staging: iio: push the main buffer chrdev down to the top level.
[deliverable/linux.git] / drivers / staging / iio / accel / adis16209_core.c
index 55f3a7bcaf0a67b8603de9ee0c7d6bbb5cfa7439..fa4c6c055db8eabd0bfb49385c820b38b95cd500 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 "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')
@@ -497,7 +499,7 @@ static int __devinit adis16209_probe(struct spi_device *spi)
                goto error_unreg_ring_funcs;
        regdone = 1;
 
-       ret = iio_ring_buffer_register_ex(indio_dev->ring, 0,
+       ret = iio_ring_buffer_register_ex(indio_dev, 0,
                                          adis16209_channels,
                                          ARRAY_SIZE(adis16209_channels));
        if (ret) {
@@ -520,7 +522,7 @@ static int __devinit adis16209_probe(struct spi_device *spi)
 error_remove_trigger:
        adis16209_remove_trigger(indio_dev);
 error_uninitialize_ring:
-       iio_ring_buffer_unregister(indio_dev->ring);
+       iio_ring_buffer_unregister(indio_dev);
 error_unreg_ring_funcs:
        adis16209_unconfigure_ring(indio_dev);
 error_free_dev:
@@ -539,7 +541,7 @@ static int adis16209_remove(struct spi_device *spi)
        flush_scheduled_work();
 
        adis16209_remove_trigger(indio_dev);
-       iio_ring_buffer_unregister(indio_dev->ring);
+       iio_ring_buffer_unregister(indio_dev);
        iio_device_unregister(indio_dev);
        adis16209_unconfigure_ring(indio_dev);
 
This page took 0.028979 seconds and 5 git commands to generate.