Synaptics, CAP_FORCEPAD, bad behavior
Subsystems (2)
Hi!
Just installed the just released 3.17 kernel and found a bad behavior of the new Synaptics driver on my Thinkpad Yoga which has the new Synaptics clickpad enabled touchpad:
psmouse serio1: synaptics: Touchpad model: 1, fw: 8.1, id: 0x1e2b1,
caps: 0xd002a3/0x940300/0x12f800, board id: 2911, fw id: 2560
The issue is that now a button release is only issued after the finger has completely left the touchpad and not when releasing the physical button. Is this physical button now called FORCEPAD? Anyway, this is pretty annoying. Double clicking become a real pain.
I did comment out the new
if (SYN_CAP_FORCEPAD(priv->ext_cap_0c)) {
...and everything is back to normal again, i.e. when I do release the pad physical button but keep the finger on the pad, the button release event is issued properly.
Cheers
nicole
Signature · 4 lines
kernel concepts GmbH Tel: +49-271-771091-12 Sieghuetter Hauptweg 48 D-57072 Siegen http://www.kernelconcepts.de
Dmitry Torokhov
maintainerQuoted 14 lines · Nicole Faerber
Hi!
Just installed the just released 3.17 kernel and found a bad behavior of the new Synaptics driver on my Thinkpad Yoga which has the new Synaptics clickpad enabled touchpad:psmouse serio1: synaptics: Touchpad model: 1, fw: 8.1, id:
0x1e2b1,
caps: 0xd002a3/0x940300/0x12f800, board id: 2911, fw id: 2560The issue is that now a button release is only issued after the finger has completely left the touchpad and not when releasing the physical button. Is this physical button now called FORCEPAD? Anyway, this is pretty annoying. Double clicking become a real pain.
I did comment out the new
Quoted 6 lines
if (SYN_CAP_FORCEPAD(priv->ext_cap_0c)) { ...and everything is back to normal again, i.e. when I do release the pad physical button but keep the finger on the pad, the button release event is issued properly.
Hmm, the forcepad code should only activate if the devoice do4es not have physical buttons at all. Let me see what's the diffference in capabilities between your and mine touchpads...
Thanks.
Signature · 1 line
Dmitry
Dmitry Torokhov
maintainerQuoted 18 lines · Dmitry Torokhov
Quoted 17 lines · Nicole Faerber
Hi!
Just installed the just released 3.17 kernel and found a bad behavior of the new Synaptics driver on my Thinkpad Yoga which has the new Synaptics clickpad enabled touchpad:psmouse serio1: synaptics: Touchpad model: 1, fw: 8.1, id:
0x1e2b1,
caps: 0xd002a3/0x940300/0x12f800, board id: 2911, fw id: 2560The issue is that now a button release is only issued after the finger has completely left the touchpad and not when releasing the physical button. Is this physical button now called FORCEPAD? Anyway, this is pretty annoying. Double clicking become a real pain.
I did comment out the newif (SYN_CAP_FORCEPAD(priv->ext_cap_0c)) { ...
Quoted 7 lines
Quoted 3 lines
and everything is back to normal again, i.e. when I do release the pad physical button but keep the finger on the pad, the button release event is issued properly.
Hmm, the forcepad code should only activate if the devoice do4es not have physical buttons at all. Let me see what's the diffference in capabilities between your and mine touchpads...
OK, so your extended caps are 0x12f800 while on my forcepad they are 0x12e800. The forcepad bit is supposed to be bit 15, so it is set for both our devices, but bit 12 (counting from 0) is different.
Andrew, Chris, could you please tell us what bit 12 indicates? In fact, if you could share the updated description for all currently defined capability bits that would be awesome.
Thanks!
Signature · 1 line
Dmitry
Quoted 29 lines · Dmitry Torokhov
Quoted 18 lines · Dmitry Torokhov
Quoted 17 lines · Nicole Faerber
Hi!
Just installed the just released 3.17 kernel and found a bad behavior of the new Synaptics driver on my Thinkpad Yoga which has the new Synaptics clickpad enabled touchpad:psmouse serio1: synaptics: Touchpad model: 1, fw: 8.1, id:
0x1e2b1,
caps: 0xd002a3/0x940300/0x12f800, board id: 2911, fw id: 2560The issue is that now a button release is only issued after the finger has completely left the touchpad and not when releasing the physical button. Is this physical button now called FORCEPAD? Anyway, this is pretty annoying. Double clicking become a real pain.
I did comment out the newif (SYN_CAP_FORCEPAD(priv->ext_cap_0c)) { ...Quoted 6 lines
Quoted 3 lines
and everything is back to normal again, i.e. when I do release the pad physical button but keep the finger on the pad, the button release event is issued properly.
Hmm, the forcepad code should only activate if the devoice do4es not have physical buttons at all. Let me see what's the diffference in capabilities between your and mine touchpads...
OK, so your extended caps are
0x12f800while on my forcepad they are0x12e800. The forcepad bit is supposed to be bit 15, so it is set for both our devices, but bit 12 (counting from 0) is different.
Quoted 6 lines
Andrew, Chris, could you please tell us what bit 12 indicates? In fact, if you could share the updated description for all currently defined capability bits that would be awesome.
Thanks!
Hmm, looks like I got incorrect information about the ForcePad capabilities bit and unfortunately there does not seem to be a capabilities bit for ForcePad on PS/2. Too bad that wasn't caught before 3.17 was released. Bit 12 is for "uniform clickpad" which means that the whole clickpad moves when you press it as opposed to it being hinged at the top. That makes sense that a ForcePad would not have that capability.
Also, it's weird that the firmware ID printed above is not correct. I would expect a 7 digit number starting with 1.
Andrew
Dmitry Torokhov
maintainerQuoted 36 lines · Andrew Duggan
Quoted 29 lines · Dmitry Torokhov
Quoted 18 lines · Dmitry Torokhov
Quoted 17 lines · Nicole Faerber
Hi!
Just installed the just released 3.17 kernel and found a bad behavior of the new Synaptics driver on my Thinkpad Yoga which has the new Synaptics clickpad enabled touchpad:psmouse serio1: synaptics: Touchpad model: 1, fw: 8.1, id:
0x1e2b1,
caps: 0xd002a3/0x940300/0x12f800, board id: 2911, fw id: 2560The issue is that now a button release is only issued after the finger has completely left the touchpad and not when releasing the physical button. Is this physical button now called FORCEPAD? Anyway, this is pretty annoying. Double clicking become a real pain.
I did comment out the newif (SYN_CAP_FORCEPAD(priv->ext_cap_0c)) { ...Quoted 6 lines
Quoted 3 lines
and everything is back to normal again, i.e. when I do release the pad physical button but keep the finger on the pad, the button release event is issued properly.
Hmm, the forcepad code should only activate if the devoice do4es not have physical buttons at all. Let me see what's the diffference in capabilities between your and mine touchpads...
OK, so your extended caps are
0x12f800while on my forcepad they are0x12e800. The forcepad bit is supposed to be bit 15, so it is set for both our devices, but bit 12 (counting from 0) is different.Quoted 6 lines
Andrew, Chris, could you please tell us what bit 12 indicates? In fact, if you could share the updated description for all currently defined capability bits that would be awesome.
Thanks!
Quoted 7 lines
Hmm, looks like I got incorrect information about the ForcePad capabilities bit and unfortunately there does not seem to be a capabilities bit for ForcePad on PS/2. Too bad that wasn't caught before 3.17 was released. Bit 12 is for "uniform clickpad" which means that the whole clickpad moves when you press it as opposed to it being hinged at the top. That makes sense that a ForcePad would not have that capability.
Argh, that is unfortunate. Well, I guess we are back to DMI checks.
Thanks.
Signature · 16 lines
Dmitry Input: synaptics - gate forcepad support by DMI check From: Dmitry Torokhov <[email protected]> Unfortunately, ForcePad capability is not actually exported over PS/2, so we have to resort to DMI checks. Cc: [email protected] Reported-by: Nicole Faerber <[email protected]> Signed-off-by: Dmitry Torokhov <[email protected]> --- drivers/input/mouse/synaptics.c | 22 +++++++++++++++++++++- drivers/input/mouse/synaptics.h | 8 ++------ 2 files changed, 23 insertions(+), 7 deletions(-)
drivers/input/mouse/synaptics.c +21 -1
@@ -607,6 +607,8 @@ static void synaptics_parse_agm(const unsigned char buf[], priv->agm_pending = true; } +static bool is_forcepad; +static int synaptics_parse_hw_state (const unsigned char buf[],struct synaptics_data *priv,struct synaptics_hw_state *hw)
@@ -636,7 +638,7 @@ static int synaptics_parse_hw_state(const unsigned char buf[], hw->left = (buf[0 ] &0x01 ) ?1 :0 ; hw->right = (buf[0 ] &0x02 ) ?1 :0 ; -if (SYN_CAP_FORCEPAD (priv->ext_cap_0c)) { +if (is_forcepad) {/* * ForcePads, like Clickpads, use middle button * bits to report primary button clicks.
@@ -1667,11 +1669,29 @@ static const struct dmi_system_id __initconst cr48_dmi_table[] = { { } }; +static const struct dmi_system_id forcepad_dmi_table[]__initconst = { +#if defined(CONFIG_DMI) && defined(CONFIG_X86) + { + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"Hewlett-Packard" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"HP EliteBook Folio 1040 G1" ), + }, + }, +#endif + { } +}; +void __init synaptics_module_init (void ) { impaired_toshiba_kbc =dmi_check_system (toshiba_dmi_table); broken_olpc_ec =dmi_check_system (olpc_dmi_table); cr48_profile_sensor =dmi_check_system (cr48_dmi_table); + +/* +* Unfortunately ForcePad capability is not exported over PS/2, +* so we have to resort to checking DMI. +*/ + is_forcepad =dmi_check_system (forcepad_dmi_table); }static int __synaptics_init (struct psmouse *psmouse,bool absolute_mode)
drivers/input/mouse/synaptics.h +2 -6
@@ -77,12 +77,9 @@* for noise. * 2 0x08 image sensor image sensor tracks 5 fingers, but only * reports 2. +* 2 0x01 uniform clickpad whole clickpad moves instead of being +* hinged at the top. * 2 0x20 report min query 0x0f gives min coord reported -* 2 0x80 forcepad forcepad is a variant of clickpad that -* does not have physical buttons but rather -* uses pressure above certain threshold to -* report primary clicks. Forcepads also have -* clickpad bit set. */ #define SYN_CAP_CLICKPAD (ex0c) ((ex0c) & 0x100000)/* 1-button ClickPad */ #define SYN_CAP_CLICKPAD2BTN (ex0c) ((ex0c) & 0x000100)/* 2-button ClickPad */
@@ -91,7 +88,6 @@#define SYN_CAP_ADV_GESTURE (ex0c) ((ex0c) & 0x080000)#define SYN_CAP_REDUCED_FILTERING (ex0c) ((ex0c) & 0x000400)#define SYN_CAP_IMAGE_SENSOR (ex0c) ((ex0c) & 0x000800) -#define SYN_CAP_FORCEPAD (ex0c) ((ex0c) & 0x008000)/* synaptics modes query bits */ #define SYN_MODE_ABSOLUTE (m) ((m) & (1 << 7))
Quoted 7 lines · Nicole Faerber <nicole.faerber <at> kernelconcepts.de> writes:
psmouse serio1: synaptics: Touchpad model: 1, fw: 8.1, id:
0x1e2b1,
caps: 0xd002a3/0x940300/0x12f800, board id: 2911, fw id: 2560The issue is that now a button release is only issued after the finger has completely left the touchpad and not when releasing the physical button. Is this physical button now called FORCEPAD? Anyway, this is pretty annoying. Double clicking become a real pain.
I'm also experiencing this, but wanted to add that it happens on only one of two T440s laptops I've used recently.
Affected:
psmouse serio1: synaptics: Touchpad model: 1, fw: 8.1, id: 0x1e2b1, caps:
0xd001a3/0x940300/0x12e800, board id: 2962, fw id: 2560
Unaffected:
psmouse serio1: synaptics: Touchpad model: 1, fw: 8.1, id: 0x1e2b1, caps:
0xd002a3/0x940300/0x127c00, board id: 2668, fw id: 1545510
Ross