staging:iio:dac:ad5504 move from old to new event handling.
authorJonathan Cameron <jic23@cam.ac.uk>
Wed, 18 May 2011 13:41:04 +0000 (14:41 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 19 May 2011 23:06:13 +0000 (16:06 -0700)
Untested, but fairly trivial change here.

Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/iio/dac/ad5504.c
drivers/staging/iio/dac/ad5504.h

index 28ace3011db5ee6e79753b278c356bd4583c2387..5534c414317bd588daf1bed3e991bcd5ab20b5f1 100644 (file)
@@ -261,35 +261,18 @@ static struct attribute_group ad5504_ev_attribute_group = {
        .attrs = ad5504_ev_attributes,
 };
 
-static void ad5504_interrupt_bh(struct work_struct *work_s)
+static irqreturn_t ad5504_event_handler(int irq, void *private)
 {
-       struct ad5504_state *st = container_of(work_s,
-               struct ad5504_state, work_alarm);
-
-       iio_push_event(st->indio_dev, 0,
-                       IIO_UNMOD_EVENT_CODE(IIO_EV_CLASS_TEMP,
-                       0,
-                       IIO_EV_TYPE_THRESH,
-                       IIO_EV_DIR_RISING),
-                       st->last_timestamp);
-
-       enable_irq(st->spi->irq);
-}
-
-static int ad5504_interrupt(struct iio_dev *dev_info,
-               int index,
-               s64 timestamp,
-               int no_test)
-{
-       struct ad5504_state *st = dev_info->dev_data;
-
-       st->last_timestamp = timestamp;
-       schedule_work(&st->work_alarm);
-       return 0;
+       iio_push_event(private, 0,
+                      IIO_UNMOD_EVENT_CODE(IIO_EV_CLASS_TEMP,
+                                           0,
+                                           IIO_EV_TYPE_THRESH,
+                                           IIO_EV_DIR_RISING),
+                      iio_get_time_ns());
+
+       return IRQ_HANDLED;
 }
 
-IIO_EVENT_SH(ad5504, &ad5504_interrupt);
-
 static int __devinit ad5504_probe(struct spi_device *spi)
 {
        struct ad5504_platform_data *pdata = spi->dev.platform_data;
@@ -342,18 +325,14 @@ static int __devinit ad5504_probe(struct spi_device *spi)
                goto error_free_dev;
 
        if (spi->irq) {
-               INIT_WORK(&st->work_alarm, ad5504_interrupt_bh);
-
-               ret = iio_register_interrupt_line(spi->irq,
-                               st->indio_dev,
-                               0,
-                               IRQF_TRIGGER_FALLING,
-                               spi_get_device_id(st->spi)->name);
+               ret = request_threaded_irq(spi->irq,
+                                          NULL,
+                                          &ad5504_event_handler,
+                                          IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
+                                          spi_get_device_id(st->spi)->name,
+                                          st->indio_dev);
                if (ret)
                        goto error_unreg_iio_device;
-
-               iio_add_event_to_list(&iio_event_ad5504,
-                               &st->indio_dev->interrupts[0]->ev_list);
        }
 
        return 0;
@@ -379,7 +358,7 @@ static int __devexit ad5504_remove(struct spi_device *spi)
        struct ad5504_state *st = spi_get_drvdata(spi);
 
        if (spi->irq)
-               iio_unregister_interrupt_line(st->indio_dev, 0);
+               free_irq(spi->irq, st->indio_dev);
 
        iio_device_unregister(st->indio_dev);
 
index d2fac631a43a7d1fd9f2a9bc8c2481c179e4a5b9..13ef35399137d745ac13c9c3fc0d798f5233c2f2 100644 (file)
@@ -45,8 +45,6 @@ struct ad5504_platform_data {
  * @us:                        spi_device
  * @reg:               supply regulator
  * @vref_mv:           actual reference voltage used
- * @work_alarm:                bh work structure for event handling
- * @last_timestamp:    timestamp of last event interrupt
  * @pwr_down_mask      power down mask
  * @pwr_down_mode      current power down mode
  */
@@ -56,8 +54,6 @@ struct ad5504_state {
        struct spi_device               *spi;
        struct regulator                *reg;
        unsigned short                  vref_mv;
-       struct work_struct              work_alarm;
-       s64                             last_timestamp;
        unsigned                        pwr_down_mask;
        unsigned                        pwr_down_mode;
 };