summaryrefslogtreecommitdiffstats
path: root/Input-synaptics-support-min-max-board-id-in-min_max_.patch
diff options
context:
space:
mode:
Diffstat (limited to 'Input-synaptics-support-min-max-board-id-in-min_max_.patch')
-rw-r--r--Input-synaptics-support-min-max-board-id-in-min_max_.patch108
1 files changed, 108 insertions, 0 deletions
diff --git a/Input-synaptics-support-min-max-board-id-in-min_max_.patch b/Input-synaptics-support-min-max-board-id-in-min_max_.patch
new file mode 100644
index 000000000..e2e266a40
--- /dev/null
+++ b/Input-synaptics-support-min-max-board-id-in-min_max_.patch
@@ -0,0 +1,108 @@
+From: Daniel Martin <daniel.martin@secunet.com>
+Date: Sun, 8 Mar 2015 22:29:15 -0700
+Subject: [PATCH] Input: synaptics - support min/max board id in
+ min_max_pnpid_table
+
+Add a min/max range for board ids to the min/max coordinates quirk. This
+makes it possible to restrict quirks to specific models based upon their
+board id. The define ANY_BOARD_ID (0) serves as a wild card.
+
+Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=91541
+
+Cc: stable@vger.kernel.org
+Signed-off-by: Daniel Martin <daniel.martin@secunet.com>
+Acked-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+---
+ drivers/input/mouse/synaptics.c | 42 +++++++++++++++++++++++++++++------------
+ 1 file changed, 30 insertions(+), 12 deletions(-)
+
+diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
+index 382678ae3363..aeccd562a2e3 100644
+--- a/drivers/input/mouse/synaptics.c
++++ b/drivers/input/mouse/synaptics.c
+@@ -123,32 +123,41 @@ void synaptics_reset(struct psmouse *psmouse)
+
+ static bool cr48_profile_sensor;
+
++#define ANY_BOARD_ID 0
+ struct min_max_quirk {
+ const char * const *pnp_ids;
++ struct {
++ unsigned long int min, max;
++ } board_id;
+ int x_min, x_max, y_min, y_max;
+ };
+
+ static const struct min_max_quirk min_max_pnpid_table[] = {
+ {
+ (const char * const []){"LEN0033", NULL},
++ {ANY_BOARD_ID, ANY_BOARD_ID},
+ 1024, 5052, 2258, 4832
+ },
+ {
+ (const char * const []){"LEN0042", NULL},
++ {ANY_BOARD_ID, ANY_BOARD_ID},
+ 1232, 5710, 1156, 4696
+ },
+ {
+ (const char * const []){"LEN0034", "LEN0036", "LEN0037",
+ "LEN0039", "LEN2002", "LEN2004",
+ NULL},
++ {ANY_BOARD_ID, ANY_BOARD_ID},
+ 1024, 5112, 2024, 4832
+ },
+ {
+ (const char * const []){"LEN2001", NULL},
++ {ANY_BOARD_ID, ANY_BOARD_ID},
+ 1024, 5022, 2508, 4832
+ },
+ {
+ (const char * const []){"LEN2006", NULL},
++ {ANY_BOARD_ID, ANY_BOARD_ID},
+ 1264, 5675, 1171, 4688
+ },
+ { }
+@@ -404,18 +413,27 @@ static void synaptics_apply_quirks(struct psmouse *psmouse)
+ int i;
+
+ for (i = 0; min_max_pnpid_table[i].pnp_ids; i++) {
+- if (psmouse_matches_pnp_id(psmouse,
+- min_max_pnpid_table[i].pnp_ids)) {
+- priv->x_min = min_max_pnpid_table[i].x_min;
+- priv->x_max = min_max_pnpid_table[i].x_max;
+- priv->y_min = min_max_pnpid_table[i].y_min;
+- priv->y_max = min_max_pnpid_table[i].y_max;
+- psmouse_info(psmouse,
+- "quirked min/max coordinates: x [%d..%d], y [%d..%d]\n",
+- priv->x_min, priv->x_max,
+- priv->y_min, priv->y_max);
+- break;
+- }
++ if (!psmouse_matches_pnp_id(psmouse,
++ min_max_pnpid_table[i].pnp_ids))
++ continue;
++
++ if (min_max_pnpid_table[i].board_id.min != ANY_BOARD_ID &&
++ priv->board_id < min_max_pnpid_table[i].board_id.min)
++ continue;
++
++ if (min_max_pnpid_table[i].board_id.max != ANY_BOARD_ID &&
++ priv->board_id > min_max_pnpid_table[i].board_id.max)
++ continue;
++
++ priv->x_min = min_max_pnpid_table[i].x_min;
++ priv->x_max = min_max_pnpid_table[i].x_max;
++ priv->y_min = min_max_pnpid_table[i].y_min;
++ priv->y_max = min_max_pnpid_table[i].y_max;
++ psmouse_info(psmouse,
++ "quirked min/max coordinates: x [%d..%d], y [%d..%d]\n",
++ priv->x_min, priv->x_max,
++ priv->y_min, priv->y_max);
++ break;
+ }
+ }
+
+--
+2.1.0
+