diff --git a/drivers/staging/iio/trigger/Kconfig b/drivers/staging/iio/trigger/Kconfig index ae9fcd3382ea..4ecb213b861f 100644 --- a/drivers/staging/iio/trigger/Kconfig +++ b/drivers/staging/iio/trigger/Kconfig @@ -12,11 +12,11 @@ config IIO_PERIODIC_RTC_TRIGGER Provides support for using periodic capable real time clocks as IIO triggers. -config IIO_GPIO_TRIGGER - tristate "GPIO trigger" - depends on GPIOLIB +config IIO_INTERRUPT_TRIGGER + tristate "Generic interrupt trigger" help - Provides support for using GPIO pins as IIO triggers. + Provides support for using interrupts of various types as IIO + triggers. These may be provided by a gpio driver for example. config IIO_BFIN_TMR_TRIGGER tristate "Blackfin TIMER trigger" diff --git a/drivers/staging/iio/trigger/Makefile b/drivers/staging/iio/trigger/Makefile index 8a5304153b5b..48f2236147bb 100644 --- a/drivers/staging/iio/trigger/Makefile +++ b/drivers/staging/iio/trigger/Makefile @@ -3,5 +3,5 @@ # obj-$(CONFIG_IIO_PERIODIC_RTC_TRIGGER) += iio-trig-periodic-rtc.o -obj-$(CONFIG_IIO_GPIO_TRIGGER) += iio-trig-gpio.o +obj-$(CONFIG_IIO_INTERRUPT_TRIGGER) += iio-trig-interrupt.o obj-$(CONFIG_IIO_BFIN_TMR_TRIGGER) += iio-trig-bfin-timer.o diff --git a/drivers/staging/iio/trigger/iio-trig-gpio.c b/drivers/staging/iio/trigger/iio-trig-interrupt.c similarity index 60% rename from drivers/staging/iio/trigger/iio-trig-gpio.c rename to drivers/staging/iio/trigger/iio-trig-interrupt.c index 69dabca0f4e8..9afba960e419 100644 --- a/drivers/staging/iio/trigger/iio-trig-gpio.c +++ b/drivers/staging/iio/trigger/iio-trig-interrupt.c @@ -1,18 +1,11 @@ /* - * Industrial I/O - gpio based trigger support + * Industrial I/O - generic interrupt based trigger support * - * Copyright (c) 2008 Jonathan Cameron + * Copyright (c) 2008-2013 Jonathan Cameron * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 as published by * the Free Software Foundation. - * - * Currently this is more of a functioning proof of concept than a full - * fledged trigger driver. - * - * TODO: - * - * Add board config elements to allow specification of startup settings. */ #include @@ -24,35 +17,28 @@ #include #include -static LIST_HEAD(iio_gpio_trigger_list); -static DEFINE_MUTEX(iio_gpio_trigger_list_lock); +static LIST_HEAD(iio_interrupt_trigger_list); +static DEFINE_MUTEX(iio_interrupt_trigger_list_lock); -struct iio_gpio_trigger_info { +struct iio_interrupt_trigger_info { struct mutex in_use; unsigned int irq; }; -/* - * Need to reference count these triggers and only enable gpio interrupts - * as appropriate. - */ -/* So what functionality do we want in here?... */ -/* set high / low as interrupt type? */ - -static irqreturn_t iio_gpio_trigger_poll(int irq, void *private) +static irqreturn_t iio_interrupt_trigger_poll(int irq, void *private) { /* Timestamp not currently provided */ iio_trigger_poll(private, 0); return IRQ_HANDLED; } -static const struct iio_trigger_ops iio_gpio_trigger_ops = { +static const struct iio_trigger_ops iio_interrupt_trigger_ops = { .owner = THIS_MODULE, }; -static int iio_gpio_trigger_probe(struct platform_device *pdev) +static int iio_interrupt_trigger_probe(struct platform_device *pdev) { - struct iio_gpio_trigger_info *trig_info; + struct iio_interrupt_trigger_info *trig_info; struct iio_trigger *trig, *trig2; unsigned long irqflags; struct resource *irq_res; @@ -64,7 +50,7 @@ static int iio_gpio_trigger_probe(struct platform_device *pdev) if (irq_res == NULL) { if (irq_res_cnt == 0) - dev_err(&pdev->dev, "No GPIO IRQs specified"); + dev_err(&pdev->dev, "No IRQs specified"); break; } irqflags = (irq_res->flags & IRQF_TRIGGER_MASK) | IRQF_SHARED; @@ -84,8 +70,8 @@ static int iio_gpio_trigger_probe(struct platform_device *pdev) } iio_trigger_set_drvdata(trig, trig_info); trig_info->irq = irq; - trig->ops = &iio_gpio_trigger_ops; - ret = request_irq(irq, iio_gpio_trigger_poll, + trig->ops = &iio_interrupt_trigger_ops; + ret = request_irq(irq, iio_interrupt_trigger_poll, irqflags, trig->name, trig); if (ret) { dev_err(&pdev->dev, @@ -98,7 +84,7 @@ static int iio_gpio_trigger_probe(struct platform_device *pdev) goto error_release_irq; list_add_tail(&trig->alloc_list, - &iio_gpio_trigger_list); + &iio_interrupt_trigger_list); } irq_res_cnt++; @@ -115,10 +101,10 @@ error_free_trig_info: error_put_trigger: iio_trigger_put(trig); error_free_completed_registrations: - /* The rest should have been added to the iio_gpio_trigger_list */ + /* The rest should have been added to the iio_interrupt_trigger_list */ list_for_each_entry_safe(trig, trig2, - &iio_gpio_trigger_list, + &iio_interrupt_trigger_list, alloc_list) { trig_info = iio_trigger_get_drvdata(trig); free_irq(trig_info->irq, trig); @@ -129,15 +115,15 @@ error_free_completed_registrations: return ret; } -static int iio_gpio_trigger_remove(struct platform_device *pdev) +static int iio_interrupt_trigger_remove(struct platform_device *pdev) { struct iio_trigger *trig, *trig2; - struct iio_gpio_trigger_info *trig_info; + struct iio_interrupt_trigger_info *trig_info; - mutex_lock(&iio_gpio_trigger_list_lock); + mutex_lock(&iio_interrupt_trigger_list_lock); list_for_each_entry_safe(trig, trig2, - &iio_gpio_trigger_list, + &iio_interrupt_trigger_list, alloc_list) { trig_info = iio_trigger_get_drvdata(trig); iio_trigger_unregister(trig); @@ -145,22 +131,22 @@ static int iio_gpio_trigger_remove(struct platform_device *pdev) kfree(trig_info); iio_trigger_put(trig); } - mutex_unlock(&iio_gpio_trigger_list_lock); + mutex_unlock(&iio_interrupt_trigger_list_lock); return 0; } -static struct platform_driver iio_gpio_trigger_driver = { - .probe = iio_gpio_trigger_probe, - .remove = iio_gpio_trigger_remove, +static struct platform_driver iio_interrupt_trigger_driver = { + .probe = iio_interrupt_trigger_probe, + .remove = iio_interrupt_trigger_remove, .driver = { - .name = "iio_gpio_trigger", + .name = "iio_interrupt_trigger", .owner = THIS_MODULE, }, }; -module_platform_driver(iio_gpio_trigger_driver); +module_platform_driver(iio_interrupt_trigger_driver); MODULE_AUTHOR("Jonathan Cameron "); -MODULE_DESCRIPTION("Example gpio trigger for the iio subsystem"); +MODULE_DESCRIPTION("Interrupt trigger for the iio subsystem"); MODULE_LICENSE("GPL v2");