Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5b3089dd authored by Daniel Martin's avatar Daniel Martin Committed by Dmitry Torokhov
Browse files

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: 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>
parent b05f4d1c
Loading
Loading
Loading
Loading
+30 −12
Original line number Original line Diff line number Diff line
@@ -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,8 +410,18 @@ 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))
			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_min = min_max_pnpid_table[i].x_min;
		priv->x_max = min_max_pnpid_table[i].x_max;
		priv->x_max = min_max_pnpid_table[i].x_max;
		priv->y_min = min_max_pnpid_table[i].y_min;
		priv->y_min = min_max_pnpid_table[i].y_min;
@@ -414,7 +433,6 @@ static void synaptics_apply_quirks(struct psmouse *psmouse)
		break;
		break;
	}
	}
}
}
}


static int synaptics_query_hardware(struct psmouse *psmouse)
static int synaptics_query_hardware(struct psmouse *psmouse)
{
{