[PATCH] Input: elan_i2c - Recovery exception ic type

From: duson
Date: Sun Aug 30 2015 - 21:49:50 EST


When driver get exception ic type (0xFF), maybe occurred from wrong
I2C protocol communication, system crash or other unknown situation,
we need to reset ic type from iap_version.
---
drivers/input/mouse/elan_i2c_core.c | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/drivers/input/mouse/elan_i2c_core.c b/drivers/input/mouse/elan_i2c_core.c
index 5b5f403..39d9929 100644
--- a/drivers/input/mouse/elan_i2c_core.c
+++ b/drivers/input/mouse/elan_i2c_core.c
@@ -4,7 +4,7 @@
* Copyright (c) 2013 ELAN Microelectronics Corp.
*
* Author: 林政維 (Duson Lin) <dusonlin@xxxxxxxxxx>
- * Version: 1.5.9
+ * Version: 1.6.0
*
* Based on cyapa driver:
* copyright (c) 2011-2012 Cypress Semiconductor, Inc.
@@ -40,7 +40,7 @@
#include "elan_i2c.h"

#define DRIVER_NAME "elan_i2c"
-#define ELAN_DRIVER_VERSION "1.5.9"
+#define ELAN_DRIVER_VERSION "1.6.0"
#define ETP_MAX_PRESSURE 255
#define ETP_FWIDTH_REDUCE 90
#define ETP_FINGER_WIDTH 15
@@ -247,15 +247,19 @@ static int elan_query_device_info(struct elan_tp_data *data)
if (error)
return error;

- error = data->ops->get_sm_version(data->client, &data->ic_type,
- &data->sm_version);
+ error = data->ops->get_version(data->client, true, &data->iap_version);
if (error)
return error;

- error = data->ops->get_version(data->client, true, &data->iap_version);
+ error = data->ops->get_sm_version(data->client, &data->ic_type,
+ &data->sm_version);
if (error)
return error;

+ /* exception type, need reset from iap_version */
+ if (data->ic_type == 0xFF)
+ data->ic_type = data->iap_version;
+
error = data->ops->get_pressure_adjustment(data->client,
&data->pressure_adjustment);
if (error)


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/