summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaulik Shah <maulik.shah@oss.qualcomm.com>2026-05-29 11:09:11 +0300
committerLinus Walleij <linusw@kernel.org>2026-05-29 23:35:14 +0300
commit446fa334d186316e76cbdc4e94e42af7d040a79c (patch)
tree54402b942d333bd7ffd9e7c87886586a24861c3c
parente1147e8a002af4997bd90b8210e02bab9b50d4c0 (diff)
downloadlinux-446fa334d186316e76cbdc4e94e42af7d040a79c.tar.xz
pinctrl: qcom: Replace open coded eoi call with irq_chip_eoi_parent()
Before commit 14dbe186b9d4 ("pinctrl: msmgpio: Make the irqchip immutable") msm gpio irqchip conditionally initialized pctrl->irq_chip.irq_eoi to irq_chip_eoi_parent() only for the GPIO irqs having a wakeup capable irq. In order to make gpio irqchip immutable pctrl->irq_chip.irq_eoi is initialized to msm_gpio_irq_eoi() which now gets invoked for both wake up and non-wakeup capable GPIO IRQs. Replace open coded eoi call to parent irqchip with irq_chip_eoi_parent(). Since the irq_chip_*_parent() APIs internally do not check the valid parent data is present to ensure irq_chip_eoi_parent() is only invoked for wakeup capable GPIOs validate d->parent_data within msm_gpio_irq_eoi(). For non wakeup capable GPIOs d->parent_data will be NULL since parent irqchip diconnects hierarchy using irq_domain_disconnect_hierarchy() and later irq framework trims hierarchy using irq_domain_trim_hierarchy() which makes d->parent_data as NULL. No functional impact. Reviewed-by: Bjorn Andersson <andersson@kernel.org> Signed-off-by: Maulik Shah <maulik.shah@oss.qualcomm.com> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> Signed-off-by: Linus Walleij <linusw@kernel.org>
-rw-r--r--drivers/pinctrl/qcom/pinctrl-msm.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/drivers/pinctrl/qcom/pinctrl-msm.c b/drivers/pinctrl/qcom/pinctrl-msm.c
index 45b3a2763eb8..6771f5eb29e4 100644
--- a/drivers/pinctrl/qcom/pinctrl-msm.c
+++ b/drivers/pinctrl/qcom/pinctrl-msm.c
@@ -1012,10 +1012,8 @@ static void msm_gpio_irq_ack(struct irq_data *d)
static void msm_gpio_irq_eoi(struct irq_data *d)
{
- d = d->parent_data;
-
- if (d)
- d->chip->irq_eoi(d);
+ if (d->parent_data)
+ irq_chip_eoi_parent(d);
}
static bool msm_gpio_needs_dual_edge_parent_workaround(struct irq_data *d,