Patch "pinctrl: st: add irq_request/release_resources callbacks" has been added to the 4.9-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
pinctrl: st: add irq_request/release_resources callbacks
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
pinctrl-st-add-irq_request-release_resources-callbacks.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Thu Dec 21 09:02:40 CET 2017
From: Patrice Chotard <[email protected]>
Date: Thu, 16 Mar 2017 18:26:02 +0100
Subject: pinctrl: st: add irq_request/release_resources callbacks
From: Patrice Chotard <[email protected]>
[ Upstream commit e855fa9a65c40788b5069abb0d094537daa22e05 ]
When using GPIO as IRQ source, the GPIO must be configured in INPUT. Callbacks dedicated for this was missing in pinctrl-st driver.
This fix the following kernel error when trying to lock a gpio as IRQ:
[ 7.521095] gpio gpiochip7: (PIO11): gpiochip_lock_as_irq: tried to flag a GPIO set as output for IRQ [ 7.526018] gpio gpiochip7: (PIO11): unable to lock HW IRQ 6 for IRQ [ 7.529405] genirq: Failed to request resources for 0-0053 (irq 81) on irqchip GPIO
--- drivers/pinctrl/pinctrl-st.c | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-)
drivers/pinctrl/pinctrl-st.c +24 -6
@@ -1285,6 +1285,22 @@ static void st_gpio_irq_unmask(struct irwritel (BIT (d->hwirq), bank->base +REG_PIO_SET_PMASK ); } +static int st_gpio_irq_request_resources (struct irq_data *d) +{ +struct gpio_chip *gc =irq_data_get_irq_chip_data (d); + +st_gpio_direction_input (gc, d->hwirq); + +return gpiochip_lock_as_irq (gc, d->hwirq); +} + +static void st_gpio_irq_release_resources (struct irq_data *d) +{ +struct gpio_chip *gc =irq_data_get_irq_chip_data (d); + +gpiochip_unlock_as_irq (gc, d->hwirq); +} +static int st_gpio_irq_set_type (struct irq_data *d,unsigned type) {struct gpio_chip *gc =irq_data_get_irq_chip_data (d);
@@ -1438,12 +1454,14 @@ static struct gpio_chip st_gpio_template };static struct irq_chip st_gpio_irqchip = { - .name ="GPIO" , - .irq_disable = st_gpio_irq_mask, - .irq_mask = st_gpio_irq_mask, - .irq_unmask = st_gpio_irq_unmask, - .irq_set_type = st_gpio_irq_set_type, - .flags =IRQCHIP_SKIP_SET_WAKE , + .name ="GPIO" , + .irq_request_resources = st_gpio_irq_request_resources, + .irq_release_resources = st_gpio_irq_release_resources, + .irq_disable = st_gpio_irq_mask, + .irq_mask = st_gpio_irq_mask, + .irq_unmask = st_gpio_irq_unmask, + .irq_set_type = st_gpio_irq_set_type, + .flags =IRQCHIP_SKIP_SET_WAKE , }; static int st_gpiolib_register_bank(struct st_pinctrl *info,
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/pinctrl-st-add-irq_request-release_resources-callbacks.patch