linux/drivers/iio
Michael Engl e83bb3e6f3 iio: adc: ti_am335x_adc: fix fifo overrun recovery
The tiadc_irq_h(int irq, void *private) function is handling FIFO
overruns by clearing flags, disabling and enabling the ADC to
recover.

If the ADC is running in continuous mode a FIFO overrun happens
regularly. If the disabling of the ADC happens concurrently with
a new conversion. It might happen that the enabling of the ADC
is ignored by the hardware. This stops the ADC permanently. No
more interrupts are triggered.

According to the AM335x Reference Manual (SPRUH73H October 2011 -
Revised April 2013 - Chapter 12.4 and 12.5) it is necessary to
check the ADC FSM bits in REG_ADCFSM before enabling the ADC
again. Because the disabling of the ADC is done right after the
current conversion has been finished.

To trigger this bug it is necessary to run the ADC in continuous
mode. The ADC values of all channels need to be read in an endless
loop. The bug appears within the first 6 hours (~5.4 million
handled FIFO overruns). The user space application will hang on
reading new values from the character device.

Fixes: ca9a563805 ("iio: ti_am335x_adc: Add continuous sampling
support")
Signed-off-by: Michael Engl <michael.engl@wjw-solutions.com>
Cc: <Stable@vger.kernel.org>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
2017-03-15 19:47:23 +00:00
..
accel iio: common: ssp_sensors: accel: use devm_iio_device_register() 2017-01-28 12:15:22 +00:00
adc iio: adc: ti_am335x_adc: fix fifo overrun recovery 2017-03-15 19:47:23 +00:00
amplifiers spi: Updates for v4.4 2015-11-05 13:15:12 -08:00
buffer iio:buffer.h - split into buffer.h and buffer_impl.h 2017-01-10 19:54:55 +00:00
chemical iio:chemical:atlas-ph-sensor: Fix use of 32 bit int to hold 16 bit big endian value 2016-10-23 22:18:27 +01:00
common iio: hid-sensor-trigger: Change get poll value function order to avoid sensor properties losing after resume from S3 2017-03-05 10:26:47 +00:00
counter iio: 104-quad-8: Fix off-by-one error when addressing flag register 2017-02-11 09:36:38 +00:00
dac iio: dac: ad5593r: Add ACPI support 2016-12-30 17:20:14 +00:00
dummy iio:dummy: Stop enabling timestamp by default. 2017-01-10 19:54:55 +00:00
frequency iio: frequency: ad9523: use unsigned int rather then bare unsigned 2016-04-17 10:31:03 +01:00
gyro iio: common: ssp_sensors: gyro: use devm_iio_device_register() 2017-01-28 12:16:17 +00:00
health Merge 4.10-rc7 into staging-next 2017-02-06 09:36:10 +01:00
humidity Merge 4.10-rc7 into staging-next 2017-02-06 09:36:10 +01:00
imu iio: imu: st_lsm6dsx: add possibility to select drdy pin 2017-01-28 12:41:53 +00:00
light Second round of IIO new device support, cleanups and features for the 4.11 cycle 2017-01-23 09:23:23 +01:00
magnetometer iio: magnetometer: ak8974: remove incorrect __exit markups 2017-03-05 13:52:01 +00:00
orientation iio: orientation: hid-sensor-rotation: Add PM function (fix non working driver) 2016-11-05 17:47:47 +00:00
potentiometer iio: max5481: Add support for Maxim digital potentiometers 2017-01-28 12:13:31 +00:00
potentiostat iio: potentiostat: add LMP91000 support 2016-09-27 20:33:03 +01:00
pressure First set of IIO fixes for the 4.11 cycle. Regression fixes from 4.10. 2017-02-11 16:46:03 +01:00
proximity iio: distance: srf08: add IIO driver for us ranger 2017-01-28 16:38:24 +00:00
temperature iio: tmp007: Fix name attribute ABI 2017-01-30 20:38:13 +00:00
trigger Immutable branch between MFD, IIO and PWM due for the v4.11 merge window 2017-01-28 18:21:49 +00:00
iio_core_trigger.h
iio_core.h iio:core: timestamping clock selection support 2016-06-30 19:41:38 +01:00
industrialio-buffer.c sched/headers: Prepare to move signal wakeup & sigpending methods from <linux/sched.h> into <linux/sched/signal.h> 2017-03-02 08:42:32 +01:00
industrialio-configfs.c iio:configfs: Introduce iio/configfs.h to provide a location for the configfs_subsystem 2015-12-05 16:25:30 +00:00
industrialio-core.c iio:buffer.h - split into buffer.h and buffer_impl.h 2017-01-10 19:54:55 +00:00
industrialio-event.c iio: iio_push_event(): Don't crash if the event interface is not registered 2016-09-10 16:40:44 +01:00
industrialio-sw-device.c iio: Add support for creating IIO devices via configfs 2016-05-04 11:43:54 +01:00
industrialio-sw-trigger.c iio: core: fix ptr_ret.cocci warnings 2016-01-20 17:09:18 -08:00
industrialio-trigger.c iio: trigger: clean up viio_trigger_alloc() 2017-01-22 13:37:34 +00:00
industrialio-triggered-event.c
inkern.c iio: inkern: pass through raw values if no scaling 2017-01-14 12:20:18 +00:00
Kconfig iio: 104-quad-8: Add IIO support for the ACCES 104-QUAD-8 2016-10-01 17:06:21 +01:00
Makefile iio: 104-quad-8: Add IIO support for the ACCES 104-QUAD-8 2016-10-01 17:06:21 +01:00