diff options
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_.patch | 108 |
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 + |