diff options
author | Robert Collins <rcollins@nvidia.com> | 2011-11-30 11:48:18 -0800 |
---|---|---|
committer | Varun Wadekar <vwadekar@nvidia.com> | 2011-12-21 12:06:24 +0530 |
commit | cf2916ef5ffe9653e330a9e37fb7cd90fb8eff1c (patch) | |
tree | 3c9df16eb8810227c5f820b86e5b2b68d2378fc9 /drivers/input | |
parent | 90ba2ccd432f69d3b5ad0cea819ab6fc988df643 (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')
-rw-r--r-- | drivers/input/touchscreen/atmel_mxt_ts.c | 30 |
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: |