These callbacks should not be buffer instance specific.
Hence move them out of the buffer.
Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
Acked-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
        /* Effectively select the ring buffer implementation */
        ring->scan_timestamp = true;
        ring->access = &ring_sw_access_funcs;
-       ring->setup_ops = &adis16201_ring_setup_ops;
+       indio_dev->setup_ops = &adis16201_ring_setup_ops;
        ring->owner = THIS_MODULE;
 
        indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
 
        /* Effectively select the ring buffer implementation */
        ring->scan_timestamp = true;
        ring->access = &ring_sw_access_funcs;
-       ring->setup_ops = &adis16203_ring_setup_ops;
+       indio_dev->setup_ops = &adis16203_ring_setup_ops;
        ring->owner = THIS_MODULE;
 
        indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
 
        /* Effectively select the ring buffer implementation */
        ring->access = &ring_sw_access_funcs;
        ring->scan_timestamp = true;
-       ring->setup_ops = &adis16204_ring_setup_ops;
+       indio_dev->setup_ops = &adis16204_ring_setup_ops;
        ring->owner = THIS_MODULE;
 
        indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
 
        /* Effectively select the ring buffer implementation */
        ring->access = &ring_sw_access_funcs;
        ring->scan_timestamp = true;
-       ring->setup_ops = &adis16209_ring_setup_ops;
+       indio_dev->setup_ops = &adis16209_ring_setup_ops;
        ring->owner = THIS_MODULE;
 
        indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
 
        /* Effectively select the ring buffer implementation */
        ring->access = &ring_sw_access_funcs;
        ring->scan_timestamp = true;
-       ring->setup_ops = &adis16240_ring_setup_ops;
+       indio_dev->setup_ops = &adis16240_ring_setup_ops;
        ring->owner = THIS_MODULE;
 
        indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
 
        indio_dev->buffer->access = &lis3l02dq_access_funcs;
 
        buffer->scan_timestamp = true;
-       buffer->setup_ops = &lis3l02dq_buffer_setup_ops;
+       indio_dev->setup_ops = &lis3l02dq_buffer_setup_ops;
        buffer->owner = THIS_MODULE;
 
        /* Functions are NULL as we set handler below */
 
 
 void sca3000_register_ring_funcs(struct iio_dev *indio_dev)
 {
-       indio_dev->buffer->setup_ops = &sca3000_ring_setup_ops;
+       indio_dev->setup_ops = &sca3000_ring_setup_ops;
 }
 
 /**
 
        }
 
        /* Ring buffer functions - here trigger setup related */
-       indio_dev->buffer->setup_ops = &ad7192_ring_setup_ops;
+       indio_dev->setup_ops = &ad7192_ring_setup_ops;
 
        /* Flag that polled ring buffering is possible */
        indio_dev->modes |= INDIO_BUFFER_TRIGGERED;
 
        }
 
        /* Ring buffer functions - here trigger setup related */
-       indio_dev->buffer->setup_ops = &ad7298_ring_setup_ops;
+       indio_dev->setup_ops = &ad7298_ring_setup_ops;
        indio_dev->buffer->scan_timestamp = true;
 
        /* Flag that polled ring buffering is possible */
 
        }
 
        /* Ring buffer functions - here trigger setup related */
-       indio_dev->buffer->setup_ops = &ad7476_ring_setup_ops;
+       indio_dev->setup_ops = &ad7476_ring_setup_ops;
        indio_dev->buffer->scan_timestamp = true;
 
        /* Flag that polled ring buffering is possible */
 
 
        /* Ring buffer functions - here trigger setup related */
 
-       indio_dev->buffer->setup_ops = &ad7606_ring_setup_ops;
+       indio_dev->setup_ops = &ad7606_ring_setup_ops;
        indio_dev->buffer->scan_timestamp = true ;
 
        INIT_WORK(&st->poll_work, &ad7606_poll_bh_to_ring);
 
        }
 
        /* Ring buffer functions - here trigger setup related */
-       indio_dev->buffer->setup_ops = &ad7793_ring_setup_ops;
+       indio_dev->setup_ops = &ad7793_ring_setup_ops;
 
        /* Flag that polled ring buffering is possible */
        indio_dev->modes |= INDIO_BUFFER_TRIGGERED;
 
                goto error_deallocate_sw_rb;
        }
        /* Ring buffer functions - here trigger setup related */
-       indio_dev->buffer->setup_ops = &ad7887_ring_setup_ops;
+       indio_dev->setup_ops = &ad7887_ring_setup_ops;
 
        /* Flag that polled ring buffering is possible */
        indio_dev->modes |= INDIO_BUFFER_TRIGGERED;
 
        }
 
        /* Ring buffer functions - here trigger setup related */
-       indio_dev->buffer->setup_ops = &ad799x_buf_setup_ops;
+       indio_dev->setup_ops = &ad799x_buf_setup_ops;
        indio_dev->buffer->scan_timestamp = true;
 
        /* Flag that polled ring buffering is possible */
 
        /* Effectively select the ring buffer implementation */
        indio_dev->buffer->access = &ring_sw_access_funcs;
        /* Ring buffer functions - here trigger setup related */
-       indio_dev->buffer->setup_ops = &max1363_ring_setup_ops;
+       indio_dev->setup_ops = &max1363_ring_setup_ops;
 
        /* Flag that polled ring buffering is possible */
        indio_dev->modes |= INDIO_BUFFER_TRIGGERED;
 
        int (*enable)(struct iio_buffer *buffer);
 };
 
-/**
- * struct iio_buffer_setup_ops - buffer setup related callbacks
- * @preenable:         [DRIVER] function to run prior to marking buffer enabled
- * @postenable:                [DRIVER] function to run after marking buffer enabled
- * @predisable:                [DRIVER] function to run prior to marking buffer
- *                     disabled
- * @postdisable:       [DRIVER] function to run after marking buffer disabled
- */
-struct iio_buffer_setup_ops {
-       int                             (*preenable)(struct iio_dev *);
-       int                             (*postenable)(struct iio_dev *);
-       int                             (*predisable)(struct iio_dev *);
-       int                             (*postdisable)(struct iio_dev *);
-};
-
 /**
  * struct iio_buffer - general buffer structure
  * @indio_dev:         industrial I/O device structure
        bool                                    scan_timestamp;
        unsigned                                scan_index_timestamp;
        const struct iio_buffer_access_funcs    *access;
-       const struct iio_buffer_setup_ops               *setup_ops;
        struct list_head                        scan_el_dev_attr_list;
        struct attribute_group                  scan_el_group;
        wait_queue_head_t                       pollq;
 
        /* Effectively select the ring buffer implementation */
        ring->access = &ring_sw_access_funcs;
        ring->scan_timestamp = true;
-       ring->setup_ops = &adis16260_ring_setup_ops;
+       indio_dev->setup_ops = &adis16260_ring_setup_ops;
        ring->owner = THIS_MODULE;
 
        indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
 
                                const unsigned long *scan_mask);
 };
 
+/**
+ * struct iio_buffer_setup_ops - buffer setup related callbacks
+ * @preenable:         [DRIVER] function to run prior to marking buffer enabled
+ * @postenable:                [DRIVER] function to run after marking buffer enabled
+ * @predisable:                [DRIVER] function to run prior to marking buffer
+ *                     disabled
+ * @postdisable:       [DRIVER] function to run after marking buffer disabled
+ */
+struct iio_buffer_setup_ops {
+       int                             (*preenable)(struct iio_dev *);
+       int                             (*postenable)(struct iio_dev *);
+       int                             (*predisable)(struct iio_dev *);
+       int                             (*postdisable)(struct iio_dev *);
+};
+
 /**
  * struct iio_dev - industrial I/O device
  * @id:                        [INTERN] used to identify device internally
        struct attribute_group          chan_attr_group;
        const char                      *name;
        const struct iio_info           *info;
+       const struct iio_buffer_setup_ops       *setup_ops;
        struct cdev                     chrdev;
 #define IIO_MAX_GROUPS 6
        const struct attribute_group    *groups[IIO_MAX_GROUPS + 1];
 
         * Tell the core what device type specific functions should
         * be run on either side of buffer capture enable / disable.
         */
-       buffer->setup_ops = &iio_simple_dummy_buffer_setup_ops;
+       indio_dev->setup_ops = &iio_simple_dummy_buffer_setup_ops;
        buffer->owner = THIS_MODULE;
 
        /*
 
        indio_dev->buffer->access = &ring_sw_access_funcs;
 
        /* Ring buffer functions - here trigger setup related */
-       indio_dev->buffer->setup_ops = &ad5933_ring_setup_ops;
+       indio_dev->setup_ops = &ad5933_ring_setup_ops;
 
        indio_dev->modes |= INDIO_BUFFER_HARDWARE;
 
 
        /* Effectively select the ring buffer implementation */
        ring->access = &ring_sw_access_funcs;
        ring->scan_timestamp = true;
-       ring->setup_ops = &adis16400_ring_setup_ops;
+       indio_dev->setup_ops = &adis16400_ring_setup_ops;
        ring->owner = THIS_MODULE;
 
        indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
 
                goto done;
        }
        if (requested_state) {
-               if (buffer->setup_ops->preenable) {
-                       ret = buffer->setup_ops->preenable(indio_dev);
+               if (indio_dev->setup_ops->preenable) {
+                       ret = indio_dev->setup_ops->preenable(indio_dev);
                        if (ret) {
                                printk(KERN_ERR
                                       "Buffer not started:"
                        goto error_ret;
                }
 
-               if (buffer->setup_ops->postenable) {
-                       ret = buffer->setup_ops->postenable(indio_dev);
+               if (indio_dev->setup_ops->postenable) {
+                       ret = indio_dev->setup_ops->postenable(indio_dev);
                        if (ret) {
                                printk(KERN_INFO
                                       "Buffer not started:"
                                if (buffer->access->unmark_in_use)
                                        buffer->access->unmark_in_use(buffer);
                                indio_dev->currentmode = previous_mode;
-                               if (buffer->setup_ops->postdisable)
-                                       buffer->setup_ops->
+                               if (indio_dev->setup_ops->postdisable)
+                                       indio_dev->setup_ops->
                                                postdisable(indio_dev);
                                goto error_ret;
                        }
                }
        } else {
-               if (buffer->setup_ops->predisable) {
-                       ret = buffer->setup_ops->predisable(indio_dev);
+               if (indio_dev->setup_ops->predisable) {
+                       ret = indio_dev->setup_ops->predisable(indio_dev);
                        if (ret)
                                goto error_ret;
                }
                if (buffer->access->unmark_in_use)
                        buffer->access->unmark_in_use(buffer);
                indio_dev->currentmode = INDIO_DIRECT_MODE;
-               if (buffer->setup_ops->postdisable) {
-                       ret = buffer->setup_ops->postdisable(indio_dev);
+               if (indio_dev->setup_ops->postdisable) {
+                       ret = indio_dev->setup_ops->postdisable(indio_dev);
                        if (ret)
                                goto error_ret;
                }
 
 
        /* Effectively select the ring buffer implementation */
        indio_dev->buffer->access = &ring_sw_access_funcs;
-       indio_dev->buffer->setup_ops = &ade7758_ring_setup_ops;
+       indio_dev->setup_ops = &ade7758_ring_setup_ops;
        indio_dev->buffer->owner = THIS_MODULE;
 
        indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,