diff options
author | Maulik Shah <mkshah@codeaurora.org> | 2020-08-03 13:58:11 +0530 |
---|---|---|
committer | Mohit Sharma <smohit@codeaurora.org> | 2020-08-10 09:28:08 +0530 |
commit | 06855494ea20af9ca41aae4d3c5d9c6501340486 (patch) | |
tree | 5f5fb2b4917b2b809115f64d8c4289a8a9526217 | |
parent | 21387108f166b8371bb53677d8ebca2542232b54 (diff) |
pinctrl: qcom: Add back irq_disable callback from msmmgpio irqchipLA.UM.8.13.r1-09600-SAIPAN.0
Commit 80654a5590cd26 ("pinctrl: qcom: Remove irq_disable callback
from msmmgpio irqchip") removed irq_disable callback and started
using irq_mask instead.
msmgpio's parent PDC irq_chip will still use irq_disable and irq_mask
callbacks separately. Add irq_disable callback back to allow it to reach
its parent PDC irqchip.
Change-Id: I256792c50ac7d4eea2d1ba0e76e13081bda65a7c
Signed-off-by: Maulik Shah <mkshah@codeaurora.org>
-rw-r--r-- | drivers/pinctrl/qcom/pinctrl-msm.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/drivers/pinctrl/qcom/pinctrl-msm.c b/drivers/pinctrl/qcom/pinctrl-msm.c index 4d88da68ede7..f8ce0eac1ae8 100644 --- a/drivers/pinctrl/qcom/pinctrl-msm.c +++ b/drivers/pinctrl/qcom/pinctrl-msm.c @@ -778,6 +778,33 @@ static void msm_gpio_irq_unmask(struct irq_data *d) _msm_gpio_irq_unmask(d, false); } +static void msm_gpio_irq_disable(struct irq_data *d) +{ + struct gpio_chip *gc = irq_data_get_irq_chip_data(d); + struct msm_pinctrl *pctrl = gpiochip_get_data(gc); + struct irq_data *dir_conn_data; + irq_hw_number_t dir_conn_irq = 0; + + if (d->parent_data) { + if (is_gpio_dual_edge(d, &dir_conn_irq)) { + dir_conn_data = irq_get_irq_data(dir_conn_irq); + if (!dir_conn_data) + return; + + if (dir_conn_data->chip->irq_disable) + dir_conn_data->chip->irq_disable(dir_conn_data); + else + dir_conn_data->chip->irq_mask(dir_conn_data); + } + irq_chip_disable_parent(d); + } + + if (test_bit(d->hwirq, pctrl->wakeup_masked_irqs)) + return; + + _msm_gpio_irq_mask(d); +} + static void msm_gpio_irq_enable(struct irq_data *d) { struct gpio_chip *gc = irq_data_get_irq_chip_data(d); @@ -1315,6 +1342,7 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl) pctrl->irq_chip.name = "msmgpio"; pctrl->irq_chip.irq_eoi = irq_chip_eoi_parent; pctrl->irq_chip.irq_enable = msm_gpio_irq_enable; + pctrl->irq_chip.irq_disable = msm_gpio_irq_disable; pctrl->irq_chip.irq_mask = msm_gpio_irq_mask; pctrl->irq_chip.irq_unmask = msm_gpio_irq_unmask; pctrl->irq_chip.irq_ack = msm_gpio_irq_ack; |