iio: proximity: IRQ driven SAR
authorErik Lilliebjerg <elilliebjerg@nvidia.com>
Mon, 20 Apr 2015 18:06:07 +0000 (11:06 -0700)
committerRobert Collins <rcollins@nvidia.com>
Wed, 20 May 2015 01:37:36 +0000 (18:37 -0700)
commitdee87b8689af6d518526182fa478291fb6dd25e6
tree9e910181675f1357b940e49396650673562942c9
parent149b0a780f14e7fae6ef28daae6e9e4cae1f7ebe
iio: proximity: IRQ driven SAR

- Add interrupt driven support.
- Fix I2C timeout.
- Add reseed.
- Add watchdog timer.
- Add streaming throttling.

By putting the IQS263 device in event mode and reseeding when necessary,
the device can be interrupt driven on proximity events without any polling.
When a proximity event occurs, the device is put in streaming mode.  Only
a single I2C read transaction is done (writes are still stacked) on each
streamed interrupt thereby reducing forced I2C transactions that cause I2C
timeouts.  Once all the reads are done, the device is put back in event
mode.  A watchdog thread forces an interrupt at a device tree programmable
rate.
Just streaming mode is supported as well.  Intead of normally going into
event mode, the interrupt is disabled for a device tree programmable
period, which upon expiration, reenables the interrupt.  This allows
throttling of the streaming interrupt.

Bug 1633231

Change-Id: If4262d7687eb06a603f6fad2980c3133aad1818f
Signed-off-by: Erik Lilliebjerg <elilliebjerg@nvidia.com>
Reviewed-on: http://git-master/r/739131
(cherry picked from commit 3c05f99061eb76d8461480009513e9d21a3c3296)
Reviewed-on: http://git-master/r/743877
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Robert Collins <rcollins@nvidia.com>
Tested-by: Robert Collins <rcollins@nvidia.com>
drivers/iio/proximity/nvs_iqs2x3.c