From: Daniel Martin <consume.noise@xxxxxxxxx> Query the min dimensions even if the check SYN_EXT_CAP_REQUESTS(priv->capabilities) >= 7 fails, but we know that the firmware version is safe. Atm. this is version 8.1 only. With that we don't need quirks for post-2013 models anymore as they expose correct min and max dimensions. Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=91541 Signed-off-by: Daniel Martin <consume.noise@xxxxxxxxx> --- drivers/input/mouse/synaptics.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c index 7a78d75..37d4dff 100644 --- a/drivers/input/mouse/synaptics.c +++ b/drivers/input/mouse/synaptics.c @@ -333,6 +333,30 @@ static int synaptics_identify(struct psmouse *psmouse) return -1; } +struct fw_version { + unsigned char major; + unsigned char minor; +}; + +static const struct fw_version safe_fw_list[] = { + {8, 1}, /* safe for SYN_QUE_EXT_MIN_COORDS */ + { } +}; + +static bool synaptics_is_safe_fw(struct psmouse *psmouse) +{ + struct synaptics_data *priv = psmouse->private; + int i; + + for (i = 0; safe_fw_list[i].major; i++) { + if (safe_fw_list[i].major == SYN_ID_MAJOR(priv->identity) && + safe_fw_list[i].minor == SYN_ID_MINOR(priv->identity)) + return true; + } + + return false; +} + /* * Read touchpad resolution and maximum reported coordinates * Resolution is left zero if touchpad does not support the query @@ -368,7 +392,8 @@ static int synaptics_resolution(struct psmouse *psmouse) } } - if (SYN_EXT_CAP_REQUESTS(priv->capabilities) >= 7 && + if ((SYN_EXT_CAP_REQUESTS(priv->capabilities) >= 7 || + synaptics_is_safe_fw(psmouse)) && SYN_CAP_MIN_DIMENSIONS(priv->ext_cap_0c)) { if (synaptics_send_cmd(psmouse, SYN_QUE_EXT_MIN_COORDS, resp)) { psmouse_warn(psmouse, -- 2.2.2 -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html