Merge 3.8-rc5 into staging-next
[pandora-kernel.git] / drivers / iio / adc / max1363.c
index aac5722..eba1034 100644 (file)
@@ -1403,7 +1403,7 @@ static int max1363_initial_setup(struct max1363_state *st)
        return max1363_set_scan_mode(st);
 }
 
-static int __devinit max1363_alloc_scan_masks(struct iio_dev *indio_dev)
+static int max1363_alloc_scan_masks(struct iio_dev *indio_dev)
 {
        struct max1363_state *st = iio_priv(indio_dev);
        unsigned long *masks;
@@ -1483,8 +1483,50 @@ static const struct iio_buffer_setup_ops max1363_buffered_setup_ops = {
        .predisable = &iio_triggered_buffer_predisable,
 };
 
-static int __devinit max1363_probe(struct i2c_client *client,
-                                  const struct i2c_device_id *id)
+static int max1363_register_buffered_funcs_and_init(struct iio_dev *indio_dev)
+{
+       struct max1363_state *st = iio_priv(indio_dev);
+       int ret = 0;
+
+       indio_dev->buffer = iio_kfifo_allocate(indio_dev);
+       if (!indio_dev->buffer) {
+               ret = -ENOMEM;
+               goto error_ret;
+       }
+       indio_dev->pollfunc = iio_alloc_pollfunc(NULL,
+                                                &max1363_trigger_handler,
+                                                IRQF_ONESHOT,
+                                                indio_dev,
+                                                "%s_consumer%d",
+                                                st->client->name,
+                                                indio_dev->id);
+       if (indio_dev->pollfunc == NULL) {
+               ret = -ENOMEM;
+               goto error_deallocate_sw_rb;
+       }
+       /* Buffer functions - here trigger setup related */
+       indio_dev->setup_ops = &max1363_buffered_setup_ops;
+
+       /* Flag that polled buffering is possible */
+       indio_dev->modes |= INDIO_BUFFER_TRIGGERED;
+
+       return 0;
+
+error_deallocate_sw_rb:
+       iio_kfifo_free(indio_dev->buffer);
+error_ret:
+       return ret;
+}
+
+static void max1363_buffer_cleanup(struct iio_dev *indio_dev)
+{
+       /* ensure that the trigger has been detached */
+       iio_dealloc_pollfunc(indio_dev->pollfunc);
+       iio_kfifo_free(indio_dev->buffer);
+}
+
+static int max1363_probe(struct i2c_client *client,
+                        const struct i2c_device_id *id)
 {
        int ret;
        struct max1363_state *st;
@@ -1576,7 +1618,7 @@ error_out:
        return ret;
 }
 
-static int __devexit max1363_remove(struct i2c_client *client)
+static int max1363_remove(struct i2c_client *client)
 {
        struct iio_dev *indio_dev = i2c_get_clientdata(client);
        struct max1363_state *st = iio_priv(indio_dev);
@@ -1639,7 +1681,7 @@ static struct i2c_driver max1363_driver = {
                .name = "max1363",
        },
        .probe = max1363_probe,
-       .remove = __devexit_p(max1363_remove),
+       .remove = max1363_remove,
        .id_table = max1363_id,
 };
 module_i2c_driver(max1363_driver);