Skip to content

Commit 3d712af

Browse files
committed
Input: elan_i2c - do not constantly re-query pattern ID
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 <[email protected]>
1 parent 8d73ec7 commit 3d712af

File tree

4 files changed

+23
-35
lines changed

4 files changed

+23
-35
lines changed

drivers/input/mouse/elan_i2c.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,9 @@ struct elan_transport_ops {
5757
int (*get_baseline_data)(struct i2c_client *client,
5858
bool max_baseliune, u8 *value);
5959

60-
int (*get_version)(struct i2c_client *client, bool iap, u8 *version);
61-
int (*get_sm_version)(struct i2c_client *client,
60+
int (*get_version)(struct i2c_client *client, u8 pattern, bool iap,
61+
u8 *version);
62+
int (*get_sm_version)(struct i2c_client *client, u8 pattern,
6263
u16 *ic_type, u8 *version, u8 *clickpad);
6364
int (*get_checksum)(struct i2c_client *client, bool iap, u16 *csum);
6465
int (*get_product_id)(struct i2c_client *client, u16 *id);

drivers/input/mouse/elan_i2c_core.c

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -236,8 +236,13 @@ static int elan_query_product(struct elan_tp_data *data)
236236
if (error)
237237
return error;
238238

239-
error = data->ops->get_sm_version(data->client, &data->ic_type,
240-
&data->sm_version, &data->clickpad);
239+
error = data->ops->get_pattern(data->client, &data->pattern);
240+
if (error)
241+
return error;
242+
243+
error = data->ops->get_sm_version(data->client, data->pattern,
244+
&data->ic_type, &data->sm_version,
245+
&data->clickpad);
241246
if (error)
242247
return error;
243248

@@ -334,7 +339,8 @@ static int elan_query_device_info(struct elan_tp_data *data)
334339
{
335340
int error;
336341

337-
error = data->ops->get_version(data->client, false, &data->fw_version);
342+
error = data->ops->get_version(data->client, data->pattern, false,
343+
&data->fw_version);
338344
if (error)
339345
return error;
340346

@@ -343,7 +349,8 @@ static int elan_query_device_info(struct elan_tp_data *data)
343349
if (error)
344350
return error;
345351

346-
error = data->ops->get_version(data->client, true, &data->iap_version);
352+
error = data->ops->get_version(data->client, data->pattern,
353+
true, &data->iap_version);
347354
if (error)
348355
return error;
349356

@@ -352,10 +359,6 @@ static int elan_query_device_info(struct elan_tp_data *data)
352359
if (error)
353360
return error;
354361

355-
error = data->ops->get_pattern(data->client, &data->pattern);
356-
if (error)
357-
return error;
358-
359362
error = elan_get_fwinfo(data->ic_type, data->iap_version,
360363
&data->fw_validpage_count,
361364
&data->fw_signature_address,

drivers/input/mouse/elan_i2c_i2c.c

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -266,22 +266,15 @@ static int elan_i2c_get_pattern(struct i2c_client *client, u8 *pattern)
266266
}
267267

268268
static int elan_i2c_get_version(struct i2c_client *client,
269-
bool iap, u8 *version)
269+
u8 pattern, bool iap, u8 *version)
270270
{
271271
int error;
272-
u8 pattern_ver;
273272
u16 cmd;
274273
u8 val[3];
275274

276-
error = elan_i2c_get_pattern(client, &pattern_ver);
277-
if (error) {
278-
dev_err(&client->dev, "failed to get pattern version\n");
279-
return error;
280-
}
281-
282275
if (!iap)
283276
cmd = ETP_I2C_FW_VERSION_CMD;
284-
else if (pattern_ver == 0)
277+
else if (pattern == 0)
285278
cmd = ETP_I2C_IAP_VERSION_P0_CMD;
286279
else
287280
cmd = ETP_I2C_IAP_VERSION_CMD;
@@ -293,28 +286,20 @@ static int elan_i2c_get_version(struct i2c_client *client,
293286
return error;
294287
}
295288

296-
if (pattern_ver >= 0x01)
289+
if (pattern >= 0x01)
297290
*version = iap ? val[1] : val[0];
298291
else
299292
*version = val[0];
300293
return 0;
301294
}
302295

303-
static int elan_i2c_get_sm_version(struct i2c_client *client,
304-
u16 *ic_type, u8 *version,
305-
u8 *clickpad)
296+
static int elan_i2c_get_sm_version(struct i2c_client *client, u8 pattern,
297+
u16 *ic_type, u8 *version, u8 *clickpad)
306298
{
307299
int error;
308-
u8 pattern_ver;
309300
u8 val[3];
310301

311-
error = elan_i2c_get_pattern(client, &pattern_ver);
312-
if (error) {
313-
dev_err(&client->dev, "failed to get pattern version\n");
314-
return error;
315-
}
316-
317-
if (pattern_ver >= 0x01) {
302+
if (pattern >= 0x01) {
318303
error = elan_i2c_read_cmd(client, ETP_I2C_IC_TYPE_CMD, val);
319304
if (error) {
320305
dev_err(&client->dev, "failed to get ic type: %d\n",

drivers/input/mouse/elan_i2c_smbus.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ static int elan_smbus_get_baseline_data(struct i2c_client *client,
147147
}
148148

149149
static int elan_smbus_get_version(struct i2c_client *client,
150-
bool iap, u8 *version)
150+
u8 pattern, bool iap, u8 *version)
151151
{
152152
int error;
153153
u8 val[I2C_SMBUS_BLOCK_MAX] = {0};
@@ -166,9 +166,8 @@ static int elan_smbus_get_version(struct i2c_client *client,
166166
return 0;
167167
}
168168

169-
static int elan_smbus_get_sm_version(struct i2c_client *client,
170-
u16 *ic_type, u8 *version,
171-
u8 *clickpad)
169+
static int elan_smbus_get_sm_version(struct i2c_client *client, u8 pattern,
170+
u16 *ic_type, u8 *version, u8 *clickpad)
172171
{
173172
int error;
174173
u8 val[I2C_SMBUS_BLOCK_MAX] = {0};

0 commit comments

Comments
 (0)