All of lore.kernel.org
 help / color / mirror / Atom feed
From: Feng Tang <feng.tang@intel.com>
To: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: "linux-input@vger.kernel.org" <linux-input@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"kwlee@mtekvision.com" <kwlee@mtekvision.com>,
	"Clark, Joel" <joel.clark@intel.com>,
	Thomas Gleixner <tglx@linutronix.de>
Subject: Re: [PATCH 1/2] Input: tsc2007 - Disable irq when the irq thread is handling data
Date: Thu, 1 Dec 2011 17:00:21 +0800	[thread overview]
Message-ID: <20111201170021.3556aac3@feng-i7> (raw)
In-Reply-To: <20111201084818.GC31610@core.coreip.homeip.net>

Hi Dmitry

On Thu, 1 Dec 2011 16:48:18 +0800
Dmitry Torokhov <dmitry.torokhov@gmail.com> wrote:

> On Thu, Dec 01, 2011 at 02:30:12PM +0800, Feng Tang wrote:
> > Hi Dmitry,
> > 
> > On Thu, 1 Dec 2011 14:10:15 +0800
> > Dmitry Torokhov <dmitry.torokhov@gmail.com> wrote:
> > 
> > > On Wed, Nov 30, 2011 at 10:08:24AM +0800, Feng Tang wrote:
> > > > Hi Dmitry,
> > > > 
> > > > Thanks for the review.
> > > > 
> > > > On Tue, 29 Nov 2011 17:22:08 +0800
> > > > Dmitry Torokhov <dmitry.torokhov@gmail.com> wrote:
> > > > 
> > > > > Hi Feng,
> > > > > 
> > > > > On Tue, Nov 29, 2011 at 04:12:57PM +0800, Feng Tang wrote:
> > > > > > The TSC2007 data sheet say in some case the HW may fire some
> > > > > > false interrrupt, which I also met during integrating one
> > > > > > TSC2007 device. So add the disable_irq/enable_irq protection
> > > > > > around data handling.
> > > > > 
> > > > > IRQF_ONESHOT should prevent IRQ from firing again while
> > > > > thread is servicing it. Did you actually observe it not
> > > > > working?
> > > > 
> > > > You are right, the tsc's threaded IRQ function is not
> > > > re-entered, and the driver is working actually. My bad not
> > > > stating the problem clearly. The real problem I want solve is,
> > > > many platforms including ours use a GPIO line as the tsc2007's
> > > > IRQ line, and when these extra tsc2007 IRQ is triggered on the
> > > > gpio line, that GPIO controller will fire up extra noise IRQ
> > > > accordingly, causing its ISR to be called. And my patch is
> > > > trying to let the GPIO controller driver disable that specific
> > > > IRQ pin from tsc2007. As disable_irq will call GPIO irq_chip's
> > > > irq_disable() or mask() hook.
> > > 
> > > But ONESHOT interrupt handler will not unmask interrupt until
> > > thead finishes servicing it so we should not be seeing these
> > > extra IRQs. I'm adding Thomas in case I misunderstand how it
> > > threaded IRQ supposed to work.
> > 
> > I did see these extra IRQs. As the tsc2007 datasheet says, the
> > PENIRQ may be falsely triggered, and that signal is passed to the
> > GPIO controller, if the tsc2007 specific pin is not disabled in
> > GPIOC level, then the GPIOC HW will send out a IRQ anyway. 
> > 
> > While calling the disable_irq(), it will call the irq_chip's
> > (implemented by GPIO controller) irq_disable() or irq_mask() hook
> > to disable that specific line for tsc2007.
> > 
> > I did check the original tsc2007 driver, which used the
> > disable_irq/enable_irq too, which means this problem is a general
> > one and has been seen before.
> > 
> 
> No, the original had disable/enable IRQ because it was the only way to
> stop interrupt storm with combination of hard IRQ + workqueue or
> thread.

My understanding is, if the GPIO line used by tsc2007 is not disabled
in GPIO controller level, the GPIOC will always be triggered by tsc2007
to fire those extra interrupts.

Actually I did try the old version driver (no threaded irq version), which
will see the extra interrupts if the disable_irq/enable_irq is removed.

> 
> BTW, do you have it configured as level or edge interrupt?

I'm now using the falling edge trigger, but I tried the level trigger
which will have more interrupts storm.

Thanks,
Feng

> 
> > Or should we have a another flag in tsc2007 platform data, to let
> > each platform chose whether or not to use the disable/enable_irq
> > according to their platform need.
> > 
> > > 
> > > Also, there is clear_penirq() platform method that is called to
> > > clean penirq state, if needed.
> > 
> > Sadly we don't have a way to clear the irq from TSC2007 on our
> > platform :(
> >
> 
> Thanks.
> 

      reply	other threads:[~2011-12-01  9:00 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-29  8:12 [PATCH 1/2] Input: tsc2007 - Disable irq when the irq thread is handling data Feng Tang
2011-11-29  8:12 ` [PATCH 2/2] Input: tsc2007 - Add a z1_low_threshhold platform data parameter Feng Tang
2011-11-29  9:23   ` Dmitry Torokhov
2011-11-30  2:34     ` Feng Tang
2011-11-30  2:34       ` Feng Tang
2011-12-01  5:47       ` Dmitry Torokhov
2011-12-01  6:19         ` Feng Tang
2011-12-01  8:45           ` Dmitry Torokhov
2011-12-01  9:04             ` Feng Tang
2011-12-04  8:54               ` Dmitry Torokhov
2011-12-05  5:35                 ` Feng Tang
2011-12-26  3:16                   ` Feng Tang
2011-11-29  9:22 ` [PATCH 1/2] Input: tsc2007 - Disable irq when the irq thread is handling data Dmitry Torokhov
2011-11-30  2:08   ` Feng Tang
2011-12-01  6:10     ` Dmitry Torokhov
2011-12-01  6:30       ` Feng Tang
2011-12-01  8:48         ` Dmitry Torokhov
2011-12-01  9:00           ` Feng Tang [this message]

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=20111201170021.3556aac3@feng-i7 \
    --to=feng.tang@intel.com \
    --cc=dmitry.torokhov@gmail.com \
    --cc=joel.clark@intel.com \
    --cc=kwlee@mtekvision.com \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tglx@linutronix.de \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.