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>
This commit is contained in:
Daniel Martin 2015-03-08 22:29:15 -07:00 committed by Dmitry Torokhov
parent b05f4d1c33
commit 5b3089ddb5

View File

@ -120,32 +120,41 @@ void synaptics_reset(struct psmouse *psmouse)
static bool cr48_profile_sensor; static bool cr48_profile_sensor;
#define ANY_BOARD_ID 0
struct min_max_quirk { struct min_max_quirk {
const char * const *pnp_ids; const char * const *pnp_ids;
struct {
unsigned long int min, max;
} board_id;
int x_min, x_max, y_min, y_max; int x_min, x_max, y_min, y_max;
}; };
static const struct min_max_quirk min_max_pnpid_table[] = { static const struct min_max_quirk min_max_pnpid_table[] = {
{ {
(const char * const []){"LEN0033", NULL}, (const char * const []){"LEN0033", NULL},
{ANY_BOARD_ID, ANY_BOARD_ID},
1024, 5052, 2258, 4832 1024, 5052, 2258, 4832
}, },
{ {
(const char * const []){"LEN0042", NULL}, (const char * const []){"LEN0042", NULL},
{ANY_BOARD_ID, ANY_BOARD_ID},
1232, 5710, 1156, 4696 1232, 5710, 1156, 4696
}, },
{ {
(const char * const []){"LEN0034", "LEN0036", "LEN0037", (const char * const []){"LEN0034", "LEN0036", "LEN0037",
"LEN0039", "LEN2002", "LEN2004", "LEN0039", "LEN2002", "LEN2004",
NULL}, NULL},
{ANY_BOARD_ID, ANY_BOARD_ID},
1024, 5112, 2024, 4832 1024, 5112, 2024, 4832
}, },
{ {
(const char * const []){"LEN2001", NULL}, (const char * const []){"LEN2001", NULL},
{ANY_BOARD_ID, ANY_BOARD_ID},
1024, 5022, 2508, 4832 1024, 5022, 2508, 4832
}, },
{ {
(const char * const []){"LEN2006", NULL}, (const char * const []){"LEN2006", NULL},
{ANY_BOARD_ID, ANY_BOARD_ID},
1264, 5675, 1171, 4688 1264, 5675, 1171, 4688
}, },
{ } { }
@ -401,18 +410,27 @@ static void synaptics_apply_quirks(struct psmouse *psmouse)
int i; int i;
for (i = 0; min_max_pnpid_table[i].pnp_ids; i++) { for (i = 0; min_max_pnpid_table[i].pnp_ids; i++) {
if (psmouse_matches_pnp_id(psmouse, if (!psmouse_matches_pnp_id(psmouse,
min_max_pnpid_table[i].pnp_ids)) { min_max_pnpid_table[i].pnp_ids))
priv->x_min = min_max_pnpid_table[i].x_min; continue;
priv->x_max = min_max_pnpid_table[i].x_max;
priv->y_min = min_max_pnpid_table[i].y_min; if (min_max_pnpid_table[i].board_id.min != ANY_BOARD_ID &&
priv->y_max = min_max_pnpid_table[i].y_max; priv->board_id < min_max_pnpid_table[i].board_id.min)
psmouse_info(psmouse, continue;
"quirked min/max coordinates: x [%d..%d], y [%d..%d]\n",
priv->x_min, priv->x_max, if (min_max_pnpid_table[i].board_id.max != ANY_BOARD_ID &&
priv->y_min, priv->y_max); priv->board_id > min_max_pnpid_table[i].board_id.max)
break; 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;
} }
} }