diff options
author | Daniel Martin <consume.noise@gmail.com> | 2015-03-09 01:27:37 -0400 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2015-03-09 02:32:18 -0400 |
commit | 8b04baba10b007f8b6c245a50be73cf09cc3a414 (patch) | |
tree | 8605e95c40d241698be4fd346a148f45880d4be7 /drivers/input | |
parent | bfa76d49576599a4b9f9b7a71f23d73d6dcff735 (diff) |
Input: synaptics - split synaptics_resolution(), query first
Split the function synaptics_resolution() into synaptics_resolution() and
synaptics_quirks(). synaptics_resolution() will be called before
synaptics_quirks() to query dimensions and resolutions before overwriting
them with quirks.
Cc: stable@vger.kernel.org
Signed-off-by: Daniel Martin <consume.noise@gmail.com>
Acked-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Diffstat (limited to 'drivers/input')
-rw-r--r-- | drivers/input/mouse/synaptics.c | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c index 23e26e0768b5..b501dda75dcb 100644 --- a/drivers/input/mouse/synaptics.c +++ b/drivers/input/mouse/synaptics.c | |||
@@ -343,7 +343,6 @@ static int synaptics_resolution(struct psmouse *psmouse) | |||
343 | { | 343 | { |
344 | struct synaptics_data *priv = psmouse->private; | 344 | struct synaptics_data *priv = psmouse->private; |
345 | unsigned char resp[3]; | 345 | unsigned char resp[3]; |
346 | int i; | ||
347 | 346 | ||
348 | if (SYN_ID_MAJOR(priv->identity) < 4) | 347 | if (SYN_ID_MAJOR(priv->identity) < 4) |
349 | return 0; | 348 | return 0; |
@@ -355,17 +354,6 @@ static int synaptics_resolution(struct psmouse *psmouse) | |||
355 | } | 354 | } |
356 | } | 355 | } |
357 | 356 | ||
358 | for (i = 0; min_max_pnpid_table[i].pnp_ids; i++) { | ||
359 | if (psmouse_matches_pnp_id(psmouse, | ||
360 | min_max_pnpid_table[i].pnp_ids)) { | ||
361 | priv->x_min = min_max_pnpid_table[i].x_min; | ||
362 | priv->x_max = min_max_pnpid_table[i].x_max; | ||
363 | priv->y_min = min_max_pnpid_table[i].y_min; | ||
364 | priv->y_max = min_max_pnpid_table[i].y_max; | ||
365 | return 0; | ||
366 | } | ||
367 | } | ||
368 | |||
369 | if (SYN_EXT_CAP_REQUESTS(priv->capabilities) >= 5 && | 357 | if (SYN_EXT_CAP_REQUESTS(priv->capabilities) >= 5 && |
370 | SYN_CAP_MAX_DIMENSIONS(priv->ext_cap_0c)) { | 358 | SYN_CAP_MAX_DIMENSIONS(priv->ext_cap_0c)) { |
371 | if (synaptics_send_cmd(psmouse, SYN_QUE_EXT_MAX_COORDS, resp)) { | 359 | if (synaptics_send_cmd(psmouse, SYN_QUE_EXT_MAX_COORDS, resp)) { |
@@ -391,6 +379,27 @@ static int synaptics_resolution(struct psmouse *psmouse) | |||
391 | return 0; | 379 | return 0; |
392 | } | 380 | } |
393 | 381 | ||
382 | /* | ||
383 | * Apply quirk(s) if the hardware matches | ||
384 | */ | ||
385 | |||
386 | static void synaptics_apply_quirks(struct psmouse *psmouse) | ||
387 | { | ||
388 | struct synaptics_data *priv = psmouse->private; | ||
389 | int i; | ||
390 | |||
391 | for (i = 0; min_max_pnpid_table[i].pnp_ids; i++) { | ||
392 | if (psmouse_matches_pnp_id(psmouse, | ||
393 | min_max_pnpid_table[i].pnp_ids)) { | ||
394 | priv->x_min = min_max_pnpid_table[i].x_min; | ||
395 | priv->x_max = min_max_pnpid_table[i].x_max; | ||
396 | priv->y_min = min_max_pnpid_table[i].y_min; | ||
397 | priv->y_max = min_max_pnpid_table[i].y_max; | ||
398 | break; | ||
399 | } | ||
400 | } | ||
401 | } | ||
402 | |||
394 | static int synaptics_query_hardware(struct psmouse *psmouse) | 403 | static int synaptics_query_hardware(struct psmouse *psmouse) |
395 | { | 404 | { |
396 | if (synaptics_identify(psmouse)) | 405 | if (synaptics_identify(psmouse)) |
@@ -406,6 +415,8 @@ static int synaptics_query_hardware(struct psmouse *psmouse) | |||
406 | if (synaptics_resolution(psmouse)) | 415 | if (synaptics_resolution(psmouse)) |
407 | return -1; | 416 | return -1; |
408 | 417 | ||
418 | synaptics_apply_quirks(psmouse); | ||
419 | |||
409 | return 0; | 420 | return 0; |
410 | } | 421 | } |
411 | 422 | ||