staging: iio: Add stubs for iio_ring_buffer_[un]register and equivalent driver stubs
[pandora-kernel.git] / drivers / staging / iio / imu / adis16350_ring.c
index 2a0a465..319aa34 100644 (file)
 #include "../trigger.h"
 #include "adis16350.h"
 
-/**
- * combine_8_to_16() utility function to munge to u8s into u16
- **/
-static inline u16 combine_8_to_16(u8 lower, u8 upper)
-{
-       u16 _lower = lower;
-       u16 _upper = upper;
-       return _lower | (_upper << 8);
-}
-
 static IIO_SCAN_EL_C(supply, ADIS16350_SCAN_SUPPLY, IIO_UNSIGNED(12),
                ADIS16350_SUPPLY_OUT, NULL);
 
@@ -81,10 +71,10 @@ static struct attribute_group adis16350_scan_el_group = {
  * adis16350_poll_func_th() top half interrupt handler called by trigger
  * @private_data:      iio_dev
  **/
-static void adis16350_poll_func_th(struct iio_dev *indio_dev)
+static void adis16350_poll_func_th(struct iio_dev *indio_dev, s64 time)
 {
        struct adis16350_state *st = iio_dev_get_devdata(indio_dev);
-       st->last_timestamp = indio_dev->trig->timestamp;
+       st->last_timestamp = time;
        schedule_work(&st->work_trigger_to_ring);
 }
 
@@ -158,10 +148,9 @@ static void adis16350_trigger_bh_to_ring(struct work_struct *work_s)
 
        if (st->indio_dev->scan_count)
                if (adis16350_spi_read_burst(&st->indio_dev->dev, st->rx) >= 0)
-                       for (; i < st->indio_dev->scan_count; i++) {
-                               data[i] = combine_8_to_16(st->rx[i*2+1],
-                                                         st->rx[i*2]);
-                       }
+                       for (; i < st->indio_dev->scan_count; i++)
+                               data[i] = be16_to_cpup(
+                                       (__be16 *)&(st->rx[i*2]));
 
        /* Guaranteed to be aligned with 8 byte boundary */
        if (st->indio_dev->scan_timestamp)
@@ -203,22 +192,6 @@ static int adis16350_data_rdy_ring_preenable(struct iio_dev *indio_dev)
        return 0;
 }
 
-static int adis16350_data_rdy_ring_postenable(struct iio_dev *indio_dev)
-{
-       return indio_dev->trig
-               ? iio_trigger_attach_poll_func(indio_dev->trig,
-                                              indio_dev->pollfunc)
-               : 0;
-}
-
-static int adis16350_data_rdy_ring_predisable(struct iio_dev *indio_dev)
-{
-       return indio_dev->trig
-               ? iio_trigger_dettach_poll_func(indio_dev->trig,
-                                               indio_dev->pollfunc)
-               : 0;
-}
-
 void adis16350_unconfigure_ring(struct iio_dev *indio_dev)
 {
        kfree(indio_dev->pollfunc);
@@ -257,17 +230,14 @@ int adis16350_configure_ring(struct iio_dev *indio_dev)
        /* Effectively select the ring buffer implementation */
        iio_ring_sw_register_funcs(&ring->access);
        ring->preenable = &adis16350_data_rdy_ring_preenable;
-       ring->postenable = &adis16350_data_rdy_ring_postenable;
-       ring->predisable = &adis16350_data_rdy_ring_predisable;
+       ring->postenable = &iio_triggered_ring_postenable;
+       ring->predisable = &iio_triggered_ring_predisable;
        ring->owner = THIS_MODULE;
 
-       indio_dev->pollfunc = kzalloc(sizeof(*indio_dev->pollfunc), GFP_KERNEL);
-       if (indio_dev->pollfunc == NULL) {
-               ret = -ENOMEM;
-               goto error_iio_sw_rb_free;;
-       }
-       indio_dev->pollfunc->poll_func_main = &adis16350_poll_func_th;
-       indio_dev->pollfunc->private_data = indio_dev;
+       ret = iio_alloc_pollfunc(indio_dev, NULL, &adis16350_poll_func_th);
+       if (ret)
+               goto error_iio_sw_rb_free;
+
        indio_dev->modes |= INDIO_RING_TRIGGERED;
        return 0;
 
@@ -276,12 +246,3 @@ error_iio_sw_rb_free:
        return ret;
 }
 
-int adis16350_initialize_ring(struct iio_ring_buffer *ring)
-{
-       return iio_ring_buffer_register(ring, 0);
-}
-
-void adis16350_uninitialize_ring(struct iio_ring_buffer *ring)
-{
-       iio_ring_buffer_unregister(ring);
-}