aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorBenjamin Tissoires <benjamin.tissoires@redhat.com>2014-06-08 01:37:47 -0400
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2014-06-08 02:20:46 -0400
commitd49cb7aeebb974713f9f7ab2991352d3050b095b (patch)
treef9f8b73c046bd5ac83d57a6f3f23ba42dc519f41 /drivers
parent0f68f39c393bc06ac5ccc8794f0e2ed841e41c3e (diff)
Input: synaptics - fix resolution for manually provided min/max
commit 421e08c41fda fixed the reported min/max for the X and Y axis, but unfortunately, it broke the resolution of those same axis. On the t540p, the resolution is the same regarding X and Y. It is not a problem for xf86-input-synaptics because this driver is only interested in the ratio between X and Y. Unfortunately, xf86-input-cmt uses directly the resolution, and having a null resolution leads to some divide by 0 errors, which are translated by -infinity in the resulting coordinates. Reported-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com> Cc: stable@vger.kernel.org Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/input/mouse/synaptics.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
index c5ec703c727e..ec772d962f06 100644
--- a/drivers/input/mouse/synaptics.c
+++ b/drivers/input/mouse/synaptics.c
@@ -347,15 +347,6 @@ static int synaptics_resolution(struct psmouse *psmouse)
347 unsigned char resp[3]; 347 unsigned char resp[3];
348 int i; 348 int i;
349 349
350 for (i = 0; min_max_pnpid_table[i].pnp_ids; i++)
351 if (matches_pnp_id(psmouse, min_max_pnpid_table[i].pnp_ids)) {
352 priv->x_min = min_max_pnpid_table[i].x_min;
353 priv->x_max = min_max_pnpid_table[i].x_max;
354 priv->y_min = min_max_pnpid_table[i].y_min;
355 priv->y_max = min_max_pnpid_table[i].y_max;
356 return 0;
357 }
358
359 if (SYN_ID_MAJOR(priv->identity) < 4) 350 if (SYN_ID_MAJOR(priv->identity) < 4)
360 return 0; 351 return 0;
361 352
@@ -366,6 +357,16 @@ static int synaptics_resolution(struct psmouse *psmouse)
366 } 357 }
367 } 358 }
368 359
360 for (i = 0; min_max_pnpid_table[i].pnp_ids; i++) {
361 if (matches_pnp_id(psmouse, min_max_pnpid_table[i].pnp_ids)) {
362 priv->x_min = min_max_pnpid_table[i].x_min;
363 priv->x_max = min_max_pnpid_table[i].x_max;
364 priv->y_min = min_max_pnpid_table[i].y_min;
365 priv->y_max = min_max_pnpid_table[i].y_max;
366 return 0;
367 }
368 }
369
369 if (SYN_EXT_CAP_REQUESTS(priv->capabilities) >= 5 && 370 if (SYN_EXT_CAP_REQUESTS(priv->capabilities) >= 5 &&
370 SYN_CAP_MAX_DIMENSIONS(priv->ext_cap_0c)) { 371 SYN_CAP_MAX_DIMENSIONS(priv->ext_cap_0c)) {
371 if (synaptics_send_cmd(psmouse, SYN_QUE_EXT_MAX_COORDS, resp)) { 372 if (synaptics_send_cmd(psmouse, SYN_QUE_EXT_MAX_COORDS, resp)) {