]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/pinctrl/pinctrl-stmfx.c
Merge tag 'pinctrl-v5.5-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw...
[linux.git] / drivers / pinctrl / pinctrl-stmfx.c
index ccdf0bb2141493bef84dbfbfe90a5dbbdd358c2f..16723797fa7caf7992b793273fa27b442229d71c 100644 (file)
@@ -505,6 +505,25 @@ static void stmfx_pinctrl_irq_bus_sync_unlock(struct irq_data *data)
        mutex_unlock(&pctl->lock);
 }
 
+static int stmfx_gpio_irq_request_resources(struct irq_data *data)
+{
+       struct gpio_chip *gpio_chip = irq_data_get_irq_chip_data(data);
+       int ret;
+
+       ret = stmfx_gpio_direction_input(gpio_chip, data->hwirq);
+       if (ret)
+               return ret;
+
+       return gpiochip_reqres_irq(gpio_chip, data->hwirq);
+}
+
+static void stmfx_gpio_irq_release_resources(struct irq_data *data)
+{
+       struct gpio_chip *gpio_chip = irq_data_get_irq_chip_data(data);
+
+       return gpiochip_relres_irq(gpio_chip, data->hwirq);
+}
+
 static void stmfx_pinctrl_irq_toggle_trigger(struct stmfx_pinctrl *pctl,
                                             unsigned int offset)
 {
@@ -664,6 +683,8 @@ static int stmfx_pinctrl_probe(struct platform_device *pdev)
        pctl->irq_chip.irq_set_type = stmfx_pinctrl_irq_set_type;
        pctl->irq_chip.irq_bus_lock = stmfx_pinctrl_irq_bus_lock;
        pctl->irq_chip.irq_bus_sync_unlock = stmfx_pinctrl_irq_bus_sync_unlock;
+       pctl->irq_chip.irq_request_resources = stmfx_gpio_irq_request_resources;
+       pctl->irq_chip.irq_release_resources = stmfx_gpio_irq_release_resources;
 
        ret = gpiochip_irqchip_add_nested(&pctl->gpio_chip, &pctl->irq_chip,
                                          0, handle_bad_irq, IRQ_TYPE_NONE);