Commit e81d8fbe authored by Daniel Martin's avatar Daniel Martin Committed by Luis Henriques

Input: synaptics - support min/max board id in min_max_pnpid_table

commit 5b3089dd upstream.

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=91541Signed-off-by: default avatarDaniel Martin <daniel.martin@secunet.com>
Acked-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: default avatarLuis Henriques <luis.henriques@canonical.com>
parent a10b5da0
......@@ -117,32 +117,42 @@ void synaptics_reset(struct psmouse *psmouse)
}
#ifdef CONFIG_MOUSE_PS2_SYNAPTICS
#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
},
{ }
......@@ -398,8 +408,18 @@ 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)) {
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;
......@@ -410,7 +430,6 @@ static void synaptics_apply_quirks(struct psmouse *psmouse)
priv->y_min, priv->y_max);
break;
}
}
}
static int synaptics_query_hardware(struct psmouse *psmouse)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment