From: Richard Fitzgerald <rf@opensource.wolfsonmicro.com>
To: <lee.jones@linaro.org>
Cc: <patches@opensource.wolfsonmicro.com>, <linux-kernel@vger.kernel.org>
Subject: [PATCH] mfd: arizona: Check if AOD interrupts are pending before dispatching
Date: Thu, 14 Apr 2016 16:37:29 +0100 [thread overview]
Message-ID: <1460648249-4979-1-git-send-email-rf@opensource.wolfsonmicro.com> (raw)
Previously the arizona_irq_thread implementation would call
handle_nested_irqs() to handle AOD interrupts without checking if any
were actually pending. The kernel will see these as spurious IRQs and
will eventually disable the IRQ.
This patch ensures we only launch the nested handler if there are AOD
interrupts pending in the codec.
Signed-off-by: Simon Trimmer <simont@opensource.wolfsonmicro.com>
Signed-off-by: Richard Fitzgerald <rf@opensource.wolfsonmicro.com>
---
drivers/mfd/arizona-irq.c | 21 ++++++++++++++++++---
1 file changed, 18 insertions(+), 3 deletions(-)
diff --git a/drivers/mfd/arizona-irq.c b/drivers/mfd/arizona-irq.c
index edeb495..edaf592 100644
--- a/drivers/mfd/arizona-irq.c
+++ b/drivers/mfd/arizona-irq.c
@@ -97,7 +97,7 @@ static irqreturn_t arizona_irq_thread(int irq, void *data)
{
struct arizona *arizona = data;
bool poll;
- unsigned int val;
+ unsigned int val, nest_irq;
int ret;
ret = pm_runtime_get_sync(arizona->dev);
@@ -109,8 +109,23 @@ static irqreturn_t arizona_irq_thread(int irq, void *data)
do {
poll = false;
- if (arizona->aod_irq_chip)
- handle_nested_irq(irq_find_mapping(arizona->virq, 0));
+ if (arizona->aod_irq_chip) {
+ /*
+ * Check the AOD status register to determine whether
+ * the nested IRQ handler should be called.
+ */
+ ret = regmap_read(arizona->regmap,
+ ARIZONA_AOD_IRQ1,
+ &val);
+ if (ret == 0 && val != 0) {
+ nest_irq = irq_find_mapping(arizona->virq, 0);
+ handle_nested_irq(nest_irq);
+ } else if (ret != 0) {
+ dev_err(arizona->dev,
+ "Failed to read AOD IRQ1 %d\n",
+ ret);
+ }
+ }
/*
* Check if one of the main interrupts is asserted and only
--
1.9.1
next reply other threads:[~2016-04-14 15:37 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-14 15:37 Richard Fitzgerald [this message]
2016-04-25 10:50 ` [PATCH] mfd: arizona: Check if AOD interrupts are pending before dispatching Lee Jones
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1460648249-4979-1-git-send-email-rf@opensource.wolfsonmicro.com \
--to=rf@opensource.wolfsonmicro.com \
--cc=lee.jones@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=patches@opensource.wolfsonmicro.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox