summaryrefslogtreecommitdiff
path: root/drivers/input/touchscreen
diff options
context:
space:
mode:
authorRobert Collins <rcollins@nvidia.com>2011-11-30 11:48:18 -0800
committerVarun Wadekar <vwadekar@nvidia.com>2011-12-21 12:06:24 +0530
commitcf2916ef5ffe9653e330a9e37fb7cd90fb8eff1c (patch)
tree3c9df16eb8810227c5f820b86e5b2b68d2378fc9 /drivers/input/touchscreen
parent90ba2ccd432f69d3b5ad0cea819ab6fc988df643 (diff)
input: touch: atmel_mxt_ts: Prevent accidental TS disable.
Fixes two error cases with slowscan: 1. Disable slowscan without first enabling it. Leaves TS controller disabled. 2. Enable slowscan twice consecutively. Leaves TS controller programmed with incorrect values. Bug 909304 Change-Id: I06db55aaf5935a838953d4f2fcf8f5dc2bb7123b Signed-off-by: Robert Collins <rcollins@nvidia.com> Reviewed-on: http://git-master/r/67501 (cherry picked from commit bb17439a70c585d35822d38ce5b53ca8368ab3a4) Reviewed-on: http://git-master/r/70222 Reviewed-by: Simone Willett <swillett@nvidia.com> Tested-by: Simone Willett <swillett@nvidia.com>
Diffstat (limited to 'drivers/input/touchscreen')
-rw-r--r--drivers/input/touchscreen/atmel_mxt_ts.c30
1 files changed, 17 insertions, 13 deletions
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c
index ad9be1a9198e..ca8605b70a30 100644
--- a/drivers/input/touchscreen/atmel_mxt_ts.c
+++ b/drivers/input/touchscreen/atmel_mxt_ts.c
@@ -1400,22 +1400,26 @@ static ssize_t mxt_slowscan_store(struct device *dev,
if ((ret == 1) || (ret == 2)) {
switch (fn) {
case SLOSCAN_DISABLE:
- data->actv_cycle_time = data->slowscan_shad_actv_cycle_time;
- data->idle_cycle_time = data->slowscan_shad_idle_cycle_time;
- data->actv2idle_timeout = data->slowscan_shad_actv2idle_timeout;
- data->slowscan_enabled = 0;
- mxt_set_power_cfg(data, 0);
+ if (data->slowscan_enabled) {
+ data->actv_cycle_time = data->slowscan_shad_actv_cycle_time;
+ data->idle_cycle_time = data->slowscan_shad_idle_cycle_time;
+ data->actv2idle_timeout = data->slowscan_shad_actv2idle_timeout;
+ data->slowscan_enabled = 0;
+ mxt_set_power_cfg(data, 0);
+ }
break;
case SLOSCAN_ENABLE:
- data->slowscan_shad_actv_cycle_time = data->actv_cycle_time;
- data->slowscan_shad_idle_cycle_time = data->idle_cycle_time;
- data->slowscan_shad_actv2idle_timeout = data->actv2idle_timeout;
- data->actv_cycle_time = data->slowscan_actv_cycle_time;
- data->idle_cycle_time = data->slowscan_idle_cycle_time;
- data->actv2idle_timeout = data->slowscan_actv2idle_timeout;
- data->slowscan_enabled = 1;
- mxt_set_power_cfg(data, 0);
+ if (!data->slowscan_enabled) {
+ data->slowscan_shad_actv_cycle_time = data->actv_cycle_time;
+ data->slowscan_shad_idle_cycle_time = data->idle_cycle_time;
+ data->slowscan_shad_actv2idle_timeout = data->actv2idle_timeout;
+ data->actv_cycle_time = data->slowscan_actv_cycle_time;
+ data->idle_cycle_time = data->slowscan_idle_cycle_time;
+ data->actv2idle_timeout = data->slowscan_actv2idle_timeout;
+ data->slowscan_enabled = 1;
+ mxt_set_power_cfg(data, 0);
+ }
break;
case SLOSCAN_SET_ACTVACQINT: