Input: elan_i2c - do not constantly re-query pattern ID
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Mon, 20 Jul 2020 21:56:54 +0000 (14:56 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Tue, 21 Jul 2020 00:35:31 +0000 (17:35 -0700)
We do not need to constantly re-query pattern ID, we can instead query it
once and then pass to methods that need it.

Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/mouse/elan_i2c.h
drivers/input/mouse/elan_i2c_core.c
drivers/input/mouse/elan_i2c_i2c.c
drivers/input/mouse/elan_i2c_smbus.c

index de10a78..6e6f13a 100644 (file)
@@ -57,8 +57,9 @@ struct elan_transport_ops {
        int (*get_baseline_data)(struct i2c_client *client,
                                 bool max_baseliune, u8 *value);
 
-       int (*get_version)(struct i2c_client *client, bool iap, u8 *version);
-       int (*get_sm_version)(struct i2c_client *client,
+       int (*get_version)(struct i2c_client *client, u8 pattern, bool iap,
+                          u8 *version);
+       int (*get_sm_version)(struct i2c_client *client, u8 pattern,
                              u16 *ic_type, u8 *version, u8 *clickpad);
        int (*get_checksum)(struct i2c_client *client, bool iap, u16 *csum);
        int (*get_product_id)(struct i2c_client *client, u16 *id);
index 5c933e1..3230aaf 100644 (file)
@@ -236,8 +236,13 @@ static int elan_query_product(struct elan_tp_data *data)
        if (error)
                return error;
 
-       error = data->ops->get_sm_version(data->client, &data->ic_type,
-                                         &data->sm_version, &data->clickpad);
+       error = data->ops->get_pattern(data->client, &data->pattern);
+       if (error)
+               return error;
+
+       error = data->ops->get_sm_version(data->client, data->pattern,
+                                         &data->ic_type, &data->sm_version,
+                                         &data->clickpad);
        if (error)
                return error;
 
@@ -334,7 +339,8 @@ static int elan_query_device_info(struct elan_tp_data *data)
 {
        int error;
 
-       error = data->ops->get_version(data->client, false, &data->fw_version);
+       error = data->ops->get_version(data->client, data->pattern, false,
+                                      &data->fw_version);
        if (error)
                return error;
 
@@ -343,7 +349,8 @@ static int elan_query_device_info(struct elan_tp_data *data)
        if (error)
                return error;
 
-       error = data->ops->get_version(data->client, true, &data->iap_version);
+       error = data->ops->get_version(data->client, data->pattern,
+                                      true, &data->iap_version);
        if (error)
                return error;
 
@@ -352,10 +359,6 @@ static int elan_query_device_info(struct elan_tp_data *data)
        if (error)
                return error;
 
-       error = data->ops->get_pattern(data->client, &data->pattern);
-       if (error)
-               return error;
-
        error = elan_get_fwinfo(data->ic_type, data->iap_version,
                                &data->fw_validpage_count,
                                &data->fw_signature_address,
index 4dfac2e..b84e3bb 100644 (file)
@@ -266,22 +266,15 @@ static int elan_i2c_get_pattern(struct i2c_client *client, u8 *pattern)
 }
 
 static int elan_i2c_get_version(struct i2c_client *client,
-                               bool iap, u8 *version)
+                               u8 pattern, bool iap, u8 *version)
 {
        int error;
-       u8 pattern_ver;
        u16 cmd;
        u8 val[3];
 
-       error = elan_i2c_get_pattern(client, &pattern_ver);
-       if (error) {
-               dev_err(&client->dev, "failed to get pattern version\n");
-               return error;
-       }
-
        if (!iap)
                cmd = ETP_I2C_FW_VERSION_CMD;
-       else if (pattern_ver == 0)
+       else if (pattern == 0)
                cmd = ETP_I2C_IAP_VERSION_P0_CMD;
        else
                cmd = ETP_I2C_IAP_VERSION_CMD;
@@ -293,28 +286,20 @@ static int elan_i2c_get_version(struct i2c_client *client,
                return error;
        }
 
-       if (pattern_ver >= 0x01)
+       if (pattern >= 0x01)
                *version = iap ? val[1] : val[0];
        else
                *version = val[0];
        return 0;
 }
 
-static int elan_i2c_get_sm_version(struct i2c_client *client,
-                                  u16 *ic_type, u8 *version,
-                                  u8 *clickpad)
+static int elan_i2c_get_sm_version(struct i2c_client *client, u8 pattern,
+                                  u16 *ic_type, u8 *version, u8 *clickpad)
 {
        int error;
-       u8 pattern_ver;
        u8 val[3];
 
-       error = elan_i2c_get_pattern(client, &pattern_ver);
-       if (error) {
-               dev_err(&client->dev, "failed to get pattern version\n");
-               return error;
-       }
-
-       if (pattern_ver >= 0x01) {
+       if (pattern >= 0x01) {
                error = elan_i2c_read_cmd(client, ETP_I2C_IC_TYPE_CMD, val);
                if (error) {
                        dev_err(&client->dev, "failed to get ic type: %d\n",
index 97c2c46..f7af8b7 100644 (file)
@@ -147,7 +147,7 @@ static int elan_smbus_get_baseline_data(struct i2c_client *client,
 }
 
 static int elan_smbus_get_version(struct i2c_client *client,
-                                 bool iap, u8 *version)
+                                 u8 pattern, bool iap, u8 *version)
 {
        int error;
        u8 val[I2C_SMBUS_BLOCK_MAX] = {0};
@@ -166,9 +166,8 @@ static int elan_smbus_get_version(struct i2c_client *client,
        return 0;
 }
 
-static int elan_smbus_get_sm_version(struct i2c_client *client,
-                                    u16 *ic_type, u8 *version,
-                                    u8 *clickpad)
+static int elan_smbus_get_sm_version(struct i2c_client *client, u8 pattern,
+                                    u16 *ic_type, u8 *version, u8 *clickpad)
 {
        int error;
        u8 val[I2C_SMBUS_BLOCK_MAX] = {0};