]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/gpio/gpio-adnp.c
Merge tag 'omap-for-v3.14/fixes-against-rc1' of git://git.kernel.org/pub/scm/linux...
[karo-tx-linux.git] / drivers / gpio / gpio-adnp.c
index b204033acaebb4e3fe8489c487a95a5406343f9b..6fc6206b38bd1f9ef8bc4e2a613740804a49ba78 100644 (file)
@@ -260,7 +260,7 @@ static int adnp_gpio_setup(struct adnp *adnp, unsigned int num_gpios)
        chip->direction_output = adnp_gpio_direction_output;
        chip->get = adnp_gpio_get;
        chip->set = adnp_gpio_set;
-       chip->can_sleep = 1;
+       chip->can_sleep = true;
 
        if (IS_ENABLED(CONFIG_DEBUG_FS))
                chip->dbg_show = adnp_gpio_dbg_show;
@@ -408,6 +408,27 @@ static void adnp_irq_bus_unlock(struct irq_data *data)
        mutex_unlock(&adnp->irq_lock);
 }
 
+static unsigned int adnp_irq_startup(struct irq_data *data)
+{
+       struct adnp *adnp = irq_data_get_irq_chip_data(data);
+
+       if (gpio_lock_as_irq(&adnp->gpio, data->hwirq))
+               dev_err(adnp->gpio.dev,
+                       "unable to lock HW IRQ %lu for IRQ\n",
+                       data->hwirq);
+       /* Satisfy the .enable semantics by unmasking the line */
+       adnp_irq_unmask(data);
+       return 0;
+}
+
+static void adnp_irq_shutdown(struct irq_data *data)
+{
+       struct adnp *adnp = irq_data_get_irq_chip_data(data);
+
+       adnp_irq_mask(data);
+       gpio_unlock_as_irq(&adnp->gpio, data->hwirq);
+}
+
 static struct irq_chip adnp_irq_chip = {
        .name = "gpio-adnp",
        .irq_mask = adnp_irq_mask,
@@ -415,6 +436,8 @@ static struct irq_chip adnp_irq_chip = {
        .irq_set_type = adnp_irq_set_type,
        .irq_bus_lock = adnp_irq_bus_lock,
        .irq_bus_sync_unlock = adnp_irq_bus_unlock,
+       .irq_startup = adnp_irq_startup,
+       .irq_shutdown = adnp_irq_shutdown,
 };
 
 static int adnp_irq_map(struct irq_domain *domain, unsigned int irq,