| From 6ac734d2242949f41eb1346ca0fd4ed010c937aa Mon Sep 17 00:00:00 2001 |
| From: Vignesh R <vigneshr@ti.com> |
| Date: Mon, 1 Sep 2014 12:01:06 +0530 |
| Subject: mfd: ti_am335x_tscadc: Fix TSC operation after ADC continouous mode |
| |
| From: Vignesh R <vigneshr@ti.com> |
| |
| commit 6ac734d2242949f41eb1346ca0fd4ed010c937aa upstream. |
| |
| After enabling and disabling ADC continuous mode via sysfs, ts_print_raw |
| fails to return any data. This is because when ADC is configured for |
| continuous mode, it disables touch screen steps.These steps are not |
| re-enabled when ADC continuous mode is disabled. Therefore existing values |
| of REG_SE needs to be cached before enabling continuous mode and |
| disabling touch screen steps and enabling ADC steps. The cached value |
| are to be restored to REG_SE once ADC is disabled. |
| |
| Fixes: 7ca6740cd1cd ("mfd: input: iio: ti_amm335x: Rework TSC/ADC synchronization") |
| |
| Signed-off-by: Vignesh R <vigneshr@ti.com> |
| Signed-off-by: Lee Jones <lee.jones@linaro.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/mfd/ti_am335x_tscadc.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/mfd/ti_am335x_tscadc.c |
| +++ b/drivers/mfd/ti_am335x_tscadc.c |
| @@ -53,7 +53,7 @@ void am335x_tsc_se_set_cache(struct ti_t |
| unsigned long flags; |
| |
| spin_lock_irqsave(&tsadc->reg_lock, flags); |
| - tsadc->reg_se_cache = val; |
| + tsadc->reg_se_cache |= val; |
| if (tsadc->adc_waiting) |
| wake_up(&tsadc->reg_se_wait); |
| else if (!tsadc->adc_in_use) |
| @@ -96,6 +96,7 @@ static void am335x_tscadc_need_adc(struc |
| void am335x_tsc_se_set_once(struct ti_tscadc_dev *tsadc, u32 val) |
| { |
| spin_lock_irq(&tsadc->reg_lock); |
| + tsadc->reg_se_cache |= val; |
| am335x_tscadc_need_adc(tsadc); |
| |
| tscadc_writel(tsadc, REG_SE, val); |