Russell King 0af5e4c36e MFD: ucb1x00-ts: fix resume failure
If the ucb1x00 touchscreen is resumed while the touchscreen is being
touched, the main thread stops responding.  This occurs because two
things happen:

1. When we suspended, we were woken up, and executed the loop.
   Finding that the touchscreen was not pressed, we prepare to
   schedule for a maximum timeout, before being stopped in
   try_to_freeze().

2. an irq occurs, we disable the irq, and mark it as disabled,
   and wake the thread.  This wake occurs while the thread is
   still within __refrigerator()

3. The thread is unfrozen, and __refrigerator() sets the threads
   state back to INTERRUPTIBLE.

We then drop into schedule_timeout() with an infinite timeout and the
IRQ disabled.  This prevents any further screen touches activating
the thread.

Fix this by using kthread_freezable_should_stop() which handles the
freezing issues for us outside of the hotspot where the task state
matters.  Include a flag to ignore the touchscreen until it is
released to avoid sending unintended data to the application.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2012-01-22 21:10:40 +00:00
..
2011-12-14 19:53:32 +08:00
2011-10-24 14:09:19 +02:00
2011-03-31 11:26:23 -03:00
2012-01-09 01:03:34 +01:00
2011-03-27 00:09:51 +01:00
2011-05-26 19:45:28 +02:00
2011-05-26 19:45:28 +02:00
2012-01-09 00:37:46 +01:00
2012-01-09 00:37:46 +01:00
2012-01-09 00:37:45 +01:00
2012-01-09 00:37:44 +01:00
2012-01-09 00:37:33 +01:00
2011-03-31 11:26:23 -03:00