From: Kevin Hilman <khilman@deeprootsystems.com>
To: Wang Sawsd-A24013 <cqwang@motorola.com>
Cc: linux-omap@vger.kernel.org, nm@ti.com, Mike Chan <mikechan@google.com>
Subject: Re: [PATCH] OMAP2/3 Avoid GPIO pending irq status been set after irq_disable
Date: Thu, 04 Jun 2009 14:38:03 -0700 [thread overview]
Message-ID: <87fxeffzno.fsf@deeprootsystems.com> (raw)
In-Reply-To: <B00E06E2766C2744B022DE9BAF3C59D5372B95@zmy16exm69.ds.mot.com> (Wang Sawsd-A's message of "Fri\, 5 Jun 2009 03\:42\:42 +0800")
"Wang Sawsd-A24013" <cqwang@motorola.com> writes:
>
>
>> -----Original Message-----
>> From: linux-omap-owner@vger.kernel.org
>> [mailto:linux-omap-owner@vger.kernel.org] On Behalf Of Wang
>> Sawsd-A24013
>> Sent: 2009年6月5日 1:43
>> To: Kevin Hilman
>> Cc: linux-omap@vger.kernel.org; nm@ti.com; Mike Chan
>> Subject: RE: [PATCH] OMAP2/3 Avoid GPIO pending irq status
>> been set after irq_disable
>>
>>
>>
>> > -----Original Message-----
>> > From: Kevin Hilman [mailto:khilman@deeprootsystems.com]
>> > Sent: 2009年6月5日 1:04
>> >
>> > Dumb question: Why use level? Why not use falling edge for this?
>> >
>> A good question, :-) We did use edge interrupt before, see
>> the reason below.
>>
>> > > The issue is, after the touch driver calls irq_disable,
>> since it is
>> > > empty unless
>> > > Set the IRQ_DISABLED flag, so next time only the generic handler
>> > > function
>> > > handle_level_irq is called, this handler just ack to OMAP
>> > GPIO IRQ that
>> > > is
>> > > To clear the IRQ status and mask the GPIO on OMAP side,
>> but since NO
>> > > Touch driver IRQ action is called, so the touch Controller
>> > can not gets
>> > > acknowledged, then the interrupt line will be always driven
>> > low by the
>> > > external controller,
>> >
>> > If the GPIO is set to be edge triggered, the fact that it
>> is still low
>> > won't matter, the genirq layer will have noticed a pending
>> interrupt.
>> >
>> If we use edge interrupt here, the potential issue is still
>> existing, and also
>> We are liky to lose the interrupt.
>> After irq_disable and before HW suspend, if the interrupt
>> line is driven low,
>> Then OMAP GPIO can catch this edge transition, so the IRQ is set,
>> Then the handle_edge_irq will clear the IRQ staus and mask the IRQ.
>> Since the controller is not ACKed, then the interrupt line is
>> always driven low,
>> Then from then on, no edge can happen, and no more Touch
>> interrupt can happen
>> Even when irq_enable is called, though we have the prepare
>> for idle hooks,
>> But that only work when the edge transition happens after
>> that prepare call,
>> Since it saves the GPIO data IN at that time, if the input
>> level already changes
>> Before that time, then the workaround does not work.
>>
>> We ever made another patch to not only compare the data in,
>> but also check
>> It is rising or falling edge, and check the CURRENT input
>> level to decide whether to
>> Use LEVEL detect to manually trigger the interrupt, it works
>> fine with our HW.
>> But later on, touch cotroller driver is updated to use level
>> detect, then we
>> Met this issue. I think the patch we made to workaround the
>> edge int lost is also needed
>> In current pm branch, currently we may still face the issue I
>> mentioned above.
>
> I rechecked the code, seems the issue will not be there since
> The handle_edge_irq can resend irq during resume time, then
Yes, I was actually replying to ask you to check why the retrigger
wasn't happening in your kernel.
> I checked our issue log and found, the reason that we lose
> The edge interrupt is because we were using omapzoom kernel
I was starting to think you were not actually using the linux-omap
kernel (looks like I was right.)
> And put PER to fully HW supervised mode and we didn't use
> The prepare idle hooks in our idle function call, then the issues
> Happens when PER is in RET/OFF state but the touch interrupt happens.
>
> With linux-omap kernel, seems using edge interrupt can just workaround
> The touch issue,
Good.
>but I think the issue is still there, we can not expect All the GPIO
>interrupts to be edge type, and we can not expect all the edge
>Interrupts to fire only once, with open platforms, every kind of
>peripherals We may use,
I completely agree. You have definitely found a robustness problem in
the GPIO core that will be relatively easy to run into in the future.
>the change to root fix this problem should be still clearing The
>level/edge detection when irq_disable is called. This will not cause
>Extra interrupt loss since we still have the prepare/resume hooks to
>check Gpio input and retrigger the interrupts.
What do you think about disabling the level/edge detection when
disable_irq_wake() is called instead? This seems more logical
and expected.
Kevin
P.S., are you wanting to use your touchscreen as a wakeup source?
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next parent reply other threads:[~2009-06-04 21:38 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <B00E06E2766C2744B022DE9BAF3C59D5372B95@zmy16exm69.ds.mot.com>
2009-06-04 21:38 ` Kevin Hilman [this message]
2009-06-04 21:58 ` [PATCH] OMAP2/3 Avoid GPIO pending irq status been set after irq_disable Wang Sawsd-A24013
2009-06-04 23:01 ` Kevin Hilman
2009-06-05 19:06 ` Wang Sawsd-A24013
2009-06-05 21:34 ` Kevin Hilman
2009-06-05 23:57 ` Wang Sawsd-A24013
2009-06-01 23:49 Wang Sawsd-A24013
2009-06-02 15:11 ` Kevin Hilman
2009-06-02 17:18 ` Wang Sawsd-A24013
2009-06-03 1:43 ` Kevin Hilman
2009-06-03 22:02 ` Wang Sawsd-A24013
2009-06-04 17:04 ` Kevin Hilman
2009-06-04 17:43 ` Wang Sawsd-A24013
-- strict thread matches above, loose matches on Subject: below --
2009-06-01 23:24 Wang Sawsd-A24013
2009-08-05 12:33 ` Tony Lindgren
2009-08-05 14:36 ` Kevin Hilman
2009-08-05 15:11 ` Tony Lindgren
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=87fxeffzno.fsf@deeprootsystems.com \
--to=khilman@deeprootsystems.com \
--cc=cqwang@motorola.com \
--cc=linux-omap@vger.kernel.org \
--cc=mikechan@google.com \
--cc=nm@ti.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