+static int twl4030_gpio_irq_set_type(unsigned int irq, unsigned trigger)
+{
+ struct irq_desc *desc = irq_desc + irq;
+ int gpio = irq - twl4030_gpio_irq_base;
+
+ trigger &= IRQ_TYPE_SENSE_MASK;
+ if (trigger & ~IRQ_TYPE_EDGE_BOTH)
+ return -EINVAL;
+ if ((desc->status & IRQ_TYPE_SENSE_MASK) == trigger)
+ return 0;
+
+ desc->status &= ~IRQ_TYPE_SENSE_MASK;
+ desc->status |= trigger;
+
+ /* REVISIT This makes the "unmask" thread do double duty,
+ * updating IRQ trigger modes too. Rename appropriately...
+ */
+ gpio_pending_trigger |= (1 << gpio);
+ if (gpio_unmask_thread && gpio_unmask_thread->state != TASK_RUNNING)
+ wake_up_process(gpio_unmask_thread);
+
+ return 0;
+}
+