Commit 0fcacc64 authored by Hans de Goede's avatar Hans de Goede Committed by Kamal Mostafa

Input: synaptics - report INPUT_PROP_TOPBUTTONPAD property

commit 43e19888 upstream.

Check PNP ID of the PS/2 AUX port and report INPUT_PROP_TOPBUTTONPAD
property for for touchpads with top button areas.
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: Timo Aaltonen <timo.aaltonen@canonical.com>
Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
parent 3e4d5f77
...@@ -117,6 +117,44 @@ void synaptics_reset(struct psmouse *psmouse) ...@@ -117,6 +117,44 @@ void synaptics_reset(struct psmouse *psmouse)
} }
#ifdef CONFIG_MOUSE_PS2_SYNAPTICS #ifdef CONFIG_MOUSE_PS2_SYNAPTICS
/* This list has been kindly provided by Synaptics. */
static const char * const topbuttonpad_pnp_ids[] = {
"LEN0017",
"LEN0018",
"LEN0019",
"LEN0023",
"LEN002A",
"LEN002B",
"LEN002C",
"LEN002D",
"LEN002E",
"LEN0033", /* Helix */
"LEN0034", /* T431s, T540, X1 Carbon 2nd */
"LEN0035", /* X240 */
"LEN0036", /* T440 */
"LEN0037",
"LEN0038",
"LEN0041",
"LEN0042", /* Yoga */
"LEN0045",
"LEN0046",
"LEN0047",
"LEN0048",
"LEN0049",
"LEN2000",
"LEN2001",
"LEN2002",
"LEN2003",
"LEN2004", /* L440 */
"LEN2005",
"LEN2006",
"LEN2007",
"LEN2008",
"LEN2009",
"LEN200A",
"LEN200B",
NULL
};
/***************************************************************************** /*****************************************************************************
* Synaptics communications functions * Synaptics communications functions
...@@ -1318,8 +1356,10 @@ static void set_abs_position_params(struct input_dev *dev, ...@@ -1318,8 +1356,10 @@ static void set_abs_position_params(struct input_dev *dev,
input_abs_set_res(dev, y_code, priv->y_res); input_abs_set_res(dev, y_code, priv->y_res);
} }
static void set_input_params(struct input_dev *dev, struct synaptics_data *priv) static void set_input_params(struct psmouse *psmouse,
struct synaptics_data *priv)
{ {
struct input_dev *dev = psmouse->dev;
int i; int i;
/* Things that apply to both modes */ /* Things that apply to both modes */
...@@ -1388,6 +1428,17 @@ static void set_input_params(struct input_dev *dev, struct synaptics_data *priv) ...@@ -1388,6 +1428,17 @@ static void set_input_params(struct input_dev *dev, struct synaptics_data *priv)
if (SYN_CAP_CLICKPAD(priv->ext_cap_0c)) { if (SYN_CAP_CLICKPAD(priv->ext_cap_0c)) {
__set_bit(INPUT_PROP_BUTTONPAD, dev->propbit); __set_bit(INPUT_PROP_BUTTONPAD, dev->propbit);
/* See if this buttonpad has a top button area */
if (!strncmp(psmouse->ps2dev.serio->firmware_id, "PNP:", 4)) {
for (i = 0; topbuttonpad_pnp_ids[i]; i++) {
if (strstr(psmouse->ps2dev.serio->firmware_id,
topbuttonpad_pnp_ids[i])) {
__set_bit(INPUT_PROP_TOPBUTTONPAD,
dev->propbit);
break;
}
}
}
/* Clickpads report only left button */ /* Clickpads report only left button */
__clear_bit(BTN_RIGHT, dev->keybit); __clear_bit(BTN_RIGHT, dev->keybit);
__clear_bit(BTN_MIDDLE, dev->keybit); __clear_bit(BTN_MIDDLE, dev->keybit);
...@@ -1732,7 +1783,7 @@ static int __synaptics_init(struct psmouse *psmouse, bool absolute_mode) ...@@ -1732,7 +1783,7 @@ static int __synaptics_init(struct psmouse *psmouse, bool absolute_mode)
priv->capabilities, priv->ext_cap, priv->ext_cap_0c, priv->capabilities, priv->ext_cap, priv->ext_cap_0c,
priv->board_id, priv->firmware_id); priv->board_id, priv->firmware_id);
set_input_params(psmouse->dev, priv); set_input_params(psmouse, priv);
/* /*
* Encode touchpad model so that it can be used to set * Encode touchpad model so that it can be used to set
......
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