linux-input.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Pali Rohár" <pali.rohar@gmail.com>
To: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: Tommy Will <tommywill2011@gmail.com>,
	Hans de Goede <hdegoede@redhat.com>,
	Yunkang Tang <yunkang.tang@cn.alps.com>,
	linux-input@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/3] input: alps: Reset mouse before identifying it
Date: Sun, 2 Nov 2014 00:29:59 +0100	[thread overview]
Message-ID: <201411020029.59838@pali> (raw)
In-Reply-To: <20141023154404.GA18714@dtor-ws>

[-- Attachment #1: Type: Text/Plain, Size: 6080 bytes --]

On Thursday 23 October 2014 17:44:04 Dmitry Torokhov wrote:
> On Sun, Oct 19, 2014 at 01:07:41PM +0200, Pali Rohár wrote:
> > On Wednesday 15 October 2014 20:22:56 Dmitry Torokhov wrote:
> > > On Wed, Oct 15, 2014 at 08:10:39PM +0200, Pali Rohár wrote:
> > > > On Wednesday 15 October 2014 20:00:11 Dmitry Torokhov 
wrote:
> > > > > On Wed, Oct 15, 2014 at 07:57:37PM +0200, Pali Rohár 
wrote:
> > > > > > On Wednesday 15 October 2014 19:43:15 Dmitry
> > > > > > Torokhov
> > 
> > wrote:
> > > > > > > On Wed, Oct 15, 2014 at 02:53:11PM +0200, Pali
> > > > > > > Rohár
> > 
> > wrote:
> > > > > > > > On Tuesday 14 October 2014 08:08:34 Dmitry
> > > > > > > > Torokhov
> > > > 
> > > > wrote:
> > > > > > > > > On Fri, Oct 03, 2014 at 11:47:59AM +0200, Hans
> > > > > > > > > de Goede
> > > > > > 
> > > > > > wrote:
> > > > > > > > > > Hi,
> > > > > > > > > > 
> > > > > > > > > > Thanks for working on this!
> > > > > > > > > > 
> > > > > > > > > > On 10/03/2014 11:43 AM, Pali Rohár wrote:
> > > > > > > > > > > On some systems after starting computer
> > > > > > > > > > > function alps_identify() does not detect
> > > > > > > > > > > dual ALPS touchpad+trackstick device
> > > > > > > > > > > correctly and detect only touchpad.
> > > > > > > > > > > 
> > > > > > > > > > > Resetting ALPS device before identifiying
> > > > > > > > > > > it fixing this problem and both parts
> > > > > > > > > > > touchpad and trackstick are detected.
> > > > > > > > > > > 
> > > > > > > > > > > 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>
> > > > > > > > > 
> > > > > > > > > *sigh* I am not really happy about this, as we
> > > > > > > > > making boot longer and longer for people
> > > > > > > > > without ALPS touchpads. It would be better if
> > > > > > > > > we only reset the mouse when we knew we are
> > > > > > > > > dealing with ALPS, and even better if we only
> > > > > > > > > reset it when we suspected that we missed
> > > > > > > > > trackstick. Any chance of doing this?
> > > > > > > > > 
> > > > > > > > > Thanks.
> > > > > > > > 
> > > > > > > > Dmitry, problem is that function check which
> > > > > > > > detecting trackstick does not working when I
> > > > > > > > start my laptop from power-off state and do not
> > > > > > > > reset PS/2 device. But detecting ALPS touchpad
> > > > > > > > looks like working. So if do not like this
> > > > > > > > idea, what about doing something like this in
> > > > > > > > alps_dectect function?
> > > > > > > > 
> > > > > > > > int alps_detect(...)
> > > > > > > > {
> > > > > > > > ...
> > > > > > > > /* detect if device is ALPS */
> > > > > > > > if (alps_identify(...) < 0)
> > > > > > > > return -1;
> > > > > > > > /* now we know that device is ALPS */
> > > > > > > > if (!(flags & ALPS_DUALPOINT)) {
> > > > > > > > /* reset it and identify again, maybe there is
> > > > > > > > trackstick */ psmouse_reset(...);
> > > > > > > > alps_identify(...);
> > > > > > > > }
> > > > > > > > ...
> > > > > > > > }
> > > > > > > > 
> > > > > > > > It will does not affect non ALPS devices
> > > > > > > > (because first identify call will fail), but
> > > > > > > > will affect ALPS devices without trackstick
> > > > > > > > (because identify will be called twice and
> > > > > > > > reset too).
> > > > > > > 
> > > > > > > I think this is a step in right direction. Do you
> > > > > > > know what exactly fails in alps_identify() on
> > > > > > > your box if you do not call psmouse_reset?
> > > > > > > 
> > > > > > > Thanks.
> > > > > > 
> > > > > > Yes, I know. It is failing in
> > > > > > alps_probe_trackstick_v3(). It calls
> > > > > > alps_command_mode_read_reg(...) and it returns 0
> > > > > > which means trackstick is not there.
> > > > > 
> > > > > OK, so can we try sticking psmouse_reset() there? This
> > > > > will limit the exposure of the new delay.
> > > > > 
> > > > > Thanks.
> > > > 
> > > > Sorry, but I think this is not safe. Function
> > > > psmouse_reset will reset device (set it to relative
> > > > mode, etc...) and before and after
> > > > alps_probe_trackstick_v3() are called other functions.
> > > > So it could break something else.
> > > 
> > > We might need to repeat bits of alps_identify() after
> > > resetting the mouse, you are right. It should still be
> > > doable though.
> > 
> > What about checking "E6 report" and if that pass reset
> > device and do full alps_identify? With check for "E6
> > report" we can filter probably all PS/2 devices which are
> > not ALPS.
> 
> Why don't you pull alps_probe_trackstick_v3() from
> alps_identify(), rename it into __alps_identify() and then
> have real alps_identify be:
> 
> static int alps_identfy(struct psmouse *psmouse, struct
> alps_data *priv) {
> 	int error;
> 
> 	error = __alps_identify(psmouse, priv);
> 	if (error)
> 		return error;
> 
> 	if (priv->proto_version == ALPS_PROTO_V3 &&
> 	    (priv->flags & ALPS_IS_RUSHMORE)) {
> 		/*
> 		 * Some Dell Lattitudes may not always recognize
> 		 * tracksticks without resetting the device.
> 		 */
> 		psmouse_reset(psmouse);
> 
> 		error =  __alps_identify(psmouse, priv);
> 		if (error)
> 			return error;
> 
> 		if (alps_probe_trackstick_v3(psmouse,
> 					     ALPS_REG_BASE_RUSHMORE))
> 			priv->flags &= ~ALPS_DUALPOINT;
> 	}
> 
> 	return 0;
> }
> 
> This way you minimize number of devices exposed to extra
> reset.
> 
> Thanks.

Hello Dmitry,

I sent new patch series v3 with another solution for fixing this 
problem. It just effectively move more parts of alps code and 
trackstick detection should work. It does not introduce new reset 
call (like in this version) so it is better.

-- 
Pali Rohár
pali.rohar@gmail.com

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

  reply	other threads:[~2014-11-01 23:29 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-03  9:43 [PATCH 0/3] input: alps: Fixes for ALPS driver Pali Rohár
2014-10-03  9:43 ` [PATCH 1/3] input: alps: Reset mouse before identifying it Pali Rohár
2014-10-03  9:47   ` Hans de Goede
2014-10-14  6:08     ` Dmitry Torokhov
2014-10-15 12:53       ` Pali Rohár
2014-10-15 17:43         ` Dmitry Torokhov
2014-10-15 17:57           ` Pali Rohár
2014-10-15 18:00             ` Dmitry Torokhov
2014-10-15 18:10               ` Pali Rohár
2014-10-15 18:22                 ` Dmitry Torokhov
2014-10-19 11:07                   ` Pali Rohár
2014-10-23 15:44                     ` Dmitry Torokhov
2014-11-01 23:29                       ` Pali Rohár [this message]
2014-10-03  9:43 ` [PATCH 2/3] input: alps: For protocol V3, do not process data when last packet's bit7 is set Pali Rohár
2014-10-03  9:51   ` Hans de Goede
2014-10-03  9:58     ` Pali Rohár
2014-10-03 10:01       ` Hans de Goede
2014-10-03  9:43 ` [PATCH 3/3] input: alps: Reset mouse and ALPS driver immediately after first invalid packet Pali Rohár
2014-10-03  9:55   ` Hans de Goede
2014-10-03 10:05     ` Pali Rohár
2014-10-03 10:18       ` Hans de Goede
2014-10-03 10:23         ` Pali Rohár
2014-10-03 11:03           ` Hans de Goede
2014-10-03 12:04             ` Hans de Goede
2014-11-01 23:25 ` [PATCH v3 0/4] Fixes for ALPS driver Pali Rohár
2014-11-01 23:25   ` [PATCH v3 1/4] input: alps: Do not try to parse data as 3 bytes packet when driver is out of sync Pali Rohár
2014-11-08 20:52     ` Dmitry Torokhov
2014-11-01 23:25   ` [PATCH v3 2/4] input: alps: Allow 2 invalid packets without resetting device Pali Rohár
2014-11-08 21:00     ` Dmitry Torokhov
2014-11-01 23:25   ` [PATCH v3 3/4] input: alps: For protocol V3, do not process data when last packet's bit7 is set Pali Rohár
2014-11-09  7:50     ` Dmitry Torokhov
2014-11-09 11:22       ` Pali Rohár
2014-11-09 20:34         ` Dmitry Torokhov
2014-11-10  9:18           ` Pali Rohár
2014-11-01 23:25   ` [PATCH v3 4/4] input: alps: Fix trackstick detection Pali Rohár
2014-11-09  8:05     ` Dmitry Torokhov
2014-11-09 11:30       ` Pali Rohár
2014-11-14 11:22         ` Pali Rohár
2014-11-14 19:41           ` Pali Rohár
2014-11-02 14:14   ` [PATCH v3 0/4] Fixes for ALPS driver Hans de Goede
2014-11-06 17:46     ` Pali Rohár

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=201411020029.59838@pali \
    --to=pali.rohar@gmail.com \
    --cc=dmitry.torokhov@gmail.com \
    --cc=hdegoede@redhat.com \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tommywill2011@gmail.com \
    --cc=yunkang.tang@cn.alps.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).