[3/3] input: alps: Reset mouse and ALPS driver immediately after first invalid packet
diff mbox

Message ID 1412329392-5580-4-git-send-email-pali.rohar@gmail.com
State New, archived
Headers show

Commit Message

Pali Rohár Oct. 3, 2014, 9:43 a.m. UTC
For unknown reasons linux psmouse alps driver sometimes receive totally invalid
packet sequences on Dell Latitude laptops. According to ALPS HW engineers these
invalid packets do not come from ALPS devices. So it looks like bug in BIOS and
EC incorrectly split keyboard and touchpad PS/2 data when laptops are under
heavy loads (big I/O together with powersave governor, running on battery).

There are sequences of invalid packets (which are dropeed) and some sequences
which look like valid. But these valid packets cause random trackstick button
pressing, random cursor moving/jumping and in these condition it is not possible
to use ALPS device (trackstick+touchpad).

To prevent random button press and random cursor jumps immediately reset ALPS
device after first invalid packet. This will cause that touchpad and trackstick
will not respond for one or two seconds and it better then random cursor jumps.

Signed-off-by: Pali Rohár <pali.rohar@gmail.com>
Tested-by: Pali Rohár <pali.rohar@gmail.com>
---
 drivers/input/mouse/alps.c |    4 ++++
 1 file changed, 4 insertions(+)

Comments

Hans de Goede Oct. 3, 2014, 9:55 a.m. UTC | #1
Hi,

On 10/03/2014 11:43 AM, Pali Rohár wrote:
> For unknown reasons linux psmouse alps driver sometimes receive totally invalid
> packet sequences on Dell Latitude laptops. According to ALPS HW engineers these
> invalid packets do not come from ALPS devices. So it looks like bug in BIOS and
> EC incorrectly split keyboard and touchpad PS/2 data when laptops are under
> heavy loads (big I/O together with powersave governor, running on battery).
> 
> There are sequences of invalid packets (which are dropeed) and some sequences
> which look like valid. But these valid packets cause random trackstick button
> pressing, random cursor moving/jumping and in these condition it is not possible
> to use ALPS device (trackstick+touchpad).
> 
> To prevent random button press and random cursor jumps immediately reset ALPS
> device after first invalid packet. This will cause that touchpad and trackstick
> will not respond for one or two seconds and it better then random cursor jumps.
> 

This one probably should have:

Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1145954

And you may want to add Bug: tags to the relevant patches for the
launchpad issues too.

While on the topic of tags, once we've agreed upon the return value to use for the
2nd patch, can you please resend with a "Cc: stable@vger.kernel.org" added to all
3 patches?

> Signed-off-by: Pali Rohár <pali.rohar@gmail.com>
> Tested-by: Pali Rohár <pali.rohar@gmail.com>

Looks good and seems sensible:

Acked-by: Hans de Goede <hdegoede@redhat.com>

Thanks & Regards,

Hans
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Pali Rohár Oct. 3, 2014, 10:05 a.m. UTC | #2
On Friday 03 October 2014 11:55:52 Hans de Goede wrote:
> Hi,
> 
> On 10/03/2014 11:43 AM, Pali Rohár wrote:
> > For unknown reasons linux psmouse alps driver sometimes
> > receive totally invalid packet sequences on Dell Latitude
> > laptops. According to ALPS HW engineers these invalid
> > packets do not come from ALPS devices. So it looks like bug
> > in BIOS and EC incorrectly split keyboard and touchpad PS/2
> > data when laptops are under heavy loads (big I/O together
> > with powersave governor, running on battery).
> > 
> > There are sequences of invalid packets (which are dropeed)
> > and some sequences which look like valid. But these valid
> > packets cause random trackstick button pressing, random
> > cursor moving/jumping and in these condition it is not
> > possible to use ALPS device (trackstick+touchpad).
> > 
> > To prevent random button press and random cursor jumps
> > immediately reset ALPS device after first invalid packet.
> > This will cause that touchpad and trackstick will not
> > respond for one or two seconds and it better then random
> > cursor jumps.
> 
> This one probably should have:
> 
> Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1145954
> 

Yes, in that bug is described same problem as on my E6440.

> And you may want to add Bug: tags to the relevant patches for
> the launchpad issues too.
> 

I just added links to famous ALPS bugs which looks like that one 
which I have on my E6440. But I'm not sure if my patches will 
resolve these problems on other machines too.

> While on the topic of tags, once we've agreed upon the return
> value to use for the 2nd patch, can you please resend with a
> "Cc: stable@vger.kernel.org" added to all 3 patches?
> 

I would like if somebody else can test patches on other machines 
with ALPS devices. Specially this third if it does not break 
something else.

Note that this third patch does not fixing problem correctly with 
jumping & clicking. It just immediately reset ps/2 device if it 
receive invalid packages. So it only try to prevent jumping & 
clicking. On my E6440 machine it somehow working. When driver 
doing ps/2 reset keyboard, touchpad and trackstick not 
responding. I think it is better then having random clicks but 
somebody else really should try and test patches how it will work 
on other machines.

Proper fix would be to understand why invalid packets are 
received and try to force buggy component to not send these 
invalid packets.

> > Signed-off-by: Pali Rohár <pali.rohar@gmail.com>
> > Tested-by: Pali Rohár <pali.rohar@gmail.com>
> 
> Looks good and seems sensible:
> 
> Acked-by: Hans de Goede <hdegoede@redhat.com>
> 
> Thanks & Regards,
> 
> Hans
Hans de Goede Oct. 3, 2014, 10:18 a.m. UTC | #3
Hi,

On 10/03/2014 12:05 PM, Pali Rohár wrote:
> On Friday 03 October 2014 11:55:52 Hans de Goede wrote:
>> Hi,
>>
>> On 10/03/2014 11:43 AM, Pali Rohár wrote:
>>> For unknown reasons linux psmouse alps driver sometimes
>>> receive totally invalid packet sequences on Dell Latitude
>>> laptops. According to ALPS HW engineers these invalid
>>> packets do not come from ALPS devices. So it looks like bug
>>> in BIOS and EC incorrectly split keyboard and touchpad PS/2
>>> data when laptops are under heavy loads (big I/O together
>>> with powersave governor, running on battery).
>>>
>>> There are sequences of invalid packets (which are dropeed)
>>> and some sequences which look like valid. But these valid
>>> packets cause random trackstick button pressing, random
>>> cursor moving/jumping and in these condition it is not
>>> possible to use ALPS device (trackstick+touchpad).
>>>
>>> To prevent random button press and random cursor jumps
>>> immediately reset ALPS device after first invalid packet.
>>> This will cause that touchpad and trackstick will not
>>> respond for one or two seconds and it better then random
>>> cursor jumps.
>>
>> This one probably should have:
>>
>> Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1145954
>>
> 
> Yes, in that bug is described same problem as on my E6440.
> 
>> And you may want to add Bug: tags to the relevant patches for
>> the launchpad issues too.
>>

OK, so lets just reference the RH bug then, and leave the others
out.

> 
> I just added links to famous ALPS bugs which looks like that one 
> which I have on my E6440. But I'm not sure if my patches will 
> resolve these problems on other machines too.
> 
>> While on the topic of tags, once we've agreed upon the return
>> value to use for the 2nd patch, can you please resend with a
>> "Cc: stable@vger.kernel.org" added to all 3 patches?
>>
> 
> I would like if somebody else can test patches on other machines 
> with ALPS devices. Specially this third if it does not break 
> something else.

In my experience with ALPS devices, they normally never cause
PSMOUSE_BAD_DATA errors, so I would not worry about regressing
because of that.

> Note that this third patch does not fixing problem correctly with 
> jumping & clicking. It just immediately reset ps/2 device if it 
> receive invalid packages. So it only try to prevent jumping & 
> clicking.

I understand, but that seems to be the best we can do for now.

> On my E6440 machine it somehow working. When driver 
> doing ps/2 reset keyboard, touchpad and trackstick not 
> responding.

Right, but I would expect that to be for only a short period of
time, or does the whole reset take a significant amount of time ?

> I think it is better then having random clicks but 
> somebody else really should try and test patches how it will work 
> on other machines.
> 
> Proper fix would be to understand why invalid packets are 
> received and try to force buggy component to not send these 
> invalid packets.

Regards,

Hans
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Pali Rohár Oct. 3, 2014, 10:23 a.m. UTC | #4
On Friday 03 October 2014 12:18:51 Hans de Goede wrote:
> > On my E6440 machine it somehow working. When driver
> > doing ps/2 reset keyboard, touchpad and trackstick not
> > responding.
> 
> Right, but I would expect that to be for only a short period
> of time, or does the whole reset take a significant amount of
> time ?
> 

It is one or two seconds which is OK for me.
Hans de Goede Oct. 3, 2014, 11:03 a.m. UTC | #5
Hi,

On 10/03/2014 12:23 PM, Pali Rohár wrote:
> On Friday 03 October 2014 12:18:51 Hans de Goede wrote:
>>> On my E6440 machine it somehow working. When driver
>>> doing ps/2 reset keyboard, touchpad and trackstick not
>>> responding.
>>
>> Right, but I would expect that to be for only a short period
>> of time, or does the whole reset take a significant amount of
>> time ?
>>
> 
> It is one or two seconds which is OK for me.

Hmm, 1-2 seconds is quite long, not good. Lets see if the solution
we've been discussing by private mail yields better results.

Regards,

Hans
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Hans de Goede Oct. 3, 2014, 12:04 p.m. UTC | #6
Hi,

On 10/03/2014 01:03 PM, Hans de Goede wrote:
> Hi,
> 
> On 10/03/2014 12:23 PM, Pali Rohár wrote:
>> On Friday 03 October 2014 12:18:51 Hans de Goede wrote:
>>>> On my E6440 machine it somehow working. When driver
>>>> doing ps/2 reset keyboard, touchpad and trackstick not
>>>> responding.
>>>
>>> Right, but I would expect that to be for only a short period
>>> of time, or does the whole reset take a significant amount of
>>> time ?
>>>
>>
>> It is one or two seconds which is OK for me.
> 
> Hmm, 1-2 seconds is quite long, not good. Lets see if the solution
> we've been discussing by private mail yields better results.

So further debugging has shown that once this problems happens on
these touchpads, they go into a mode where the spew random giberish,
and as such it seems that resetting them really seems best, so lets
do a v2 of this patchset and go with that.

Regards,

Hans
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch
diff mbox

diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c
index b1f44d4..d2b144f 100644
--- a/drivers/input/mouse/alps.c
+++ b/drivers/input/mouse/alps.c
@@ -2399,6 +2399,10 @@  int alps_init(struct psmouse *psmouse)
 	/* We are having trouble resyncing ALPS touchpads so disable it for now */
 	psmouse->resync_time = 0;
 
+	/* Reset immediately after bad packet. When bad packet arrives then
+	   cursor pointer jumps and trackstick buttons are randomly pressed. */
+	psmouse->resetafter = 1;
+
 	return 0;
 
 init_fail: