aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/iio/dac/ad5504.c
diff options
context:
space:
mode:
authorJonathan Cameron <jic23@cam.ac.uk>2011-05-18 14:41:04 +0100
committerGreg Kroah-Hartman <gregkh@suse.de>2011-05-19 16:06:13 -0700
commitce298d403167169ddf965ceb9645fd831065f65b (patch)
tree78abc142ed06f804b5342ebc5a5e8609dc87e591 /drivers/staging/iio/dac/ad5504.c
parentbdab1001738f4ebf8df21bab8c9da79bd5dd3362 (diff)
downloadkernel_samsung_smdk4412-ce298d403167169ddf965ceb9645fd831065f65b.zip
kernel_samsung_smdk4412-ce298d403167169ddf965ceb9645fd831065f65b.tar.gz
kernel_samsung_smdk4412-ce298d403167169ddf965ceb9645fd831065f65b.tar.bz2
staging:iio:dac:ad5504 move from old to new event handling.
Untested, but fairly trivial change here. Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/iio/dac/ad5504.c')
-rw-r--r--drivers/staging/iio/dac/ad5504.c53
1 files changed, 16 insertions, 37 deletions
diff --git a/drivers/staging/iio/dac/ad5504.c b/drivers/staging/iio/dac/ad5504.c
index 28ace30..5534c41 100644
--- a/drivers/staging/iio/dac/ad5504.c
+++ b/drivers/staging/iio/dac/ad5504.c
@@ -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);