Re: [alps] Timing patch, revised again :-)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Friday 04 December 2009 01:47:20 pm Sebastian Kapfer wrote:
> Hi Dmitry,
> 
> thank you.  I've tested it and it basically works.  I still have two
> more nits to pick though :-)
> 
> > Yeah, but due to protocol limitations we can't really do anything about
> > it. It should not desync though.
> 
> It does still occasionally desync (but see below).
> 
> > > I've changed two little things:
> > >
> > > 1. The reporting of buttons went to dev2 sometimes, as bare_ps2_packet
> > > signalled the click on 'dev', not psmouse->dev.  This lead to sticking
> > > buttons.
> > >
> > > 2. We needlessly break the distinction of PS/2 and touchpad on older
> > > models, where it may have been cleanly possible.  (If you don't want to
> > > keep that feature and rather simplify the code, that's fine with me,
> > > too.  But as I said, bare_ps2_packet needs to be fixed up then.)
> >
> > I tend to agree with Dave's preference of routing button data from 3-byte
> > packets to stick only and 6- and 9-byte packets to the pad and sending
> > release to both devices. I think it makes most sense.
> 
> It does, in a way.  All I'm saying is that we're making a promise to
> userspace clients that we can't completely fulfil (i.e. some buttons
> will be reported incorrectly).  Anyway, I really don't want to argue
> about this particular point anymore given Dave's previous attitude.
> 
> 
> What is more worrysome to me is that we're now reporting the same
> physical click on two input layer devices again.  We should not do this,
> because this can lead to spurious double-click events.  Imagine for
> example moving the touchpad while pressing the trackpoint button:
> 
> 6byte -- no buttons set
> 3byte -- left set  (in response to user click)        dev2 down
> 6byte -- left set  (hw copies over from trackpoint)   dev down
> 3byte -- no buttons set (in response to user release) dev2, dev release
> 
> Given unlucky timing and the way X11 reads event data, this is an X11
> double-click.

Hmm, I see... Right, we should not leave it like this.

> 
> Reading the comments in the patch, I'm not sure if you're aware how the
> hardware reports buttons.  When I press the trackpoint button, the
> corresponding bit is set in _all_ packets (3s, 6s, 9s) sent
> subsequently, until I release it.  This is not about pressing two
> buttons at the same time, just one.  Sorry if I'm reading too much into
> that comment and you already know this.
> 
> Given this behaviour of the hw, I'd favour not reporting button presses
> on a device while the corresponding button on the other device is down.
> (Dave called this behaviour 'masking'.)  Code implementing this was in
> the patch I sent to linux-input dated Nov. 11 (see the parts involving
> the btn_state variable).  I have not put it back in the patch below
> because I'd like to await your opinion on this first.

OK, Let me take a look at that patch again.
 
> 
> There is still one failure mode left that causes de-sync.  It happens
> when the else branch in  alps_handle_interleaved_ps2 gets called more
> than once, i.e. we're accidentially reconstructing a 12-, 15- etc byte
> packet.  This was easier to deal with in my first patch, I just
> collected the whole 9 bytes in a buffer and implicitly knew when the
> packet was over.  Example of this happening:
> 
> Dec  4 21:03:22 sardelle kernel: [410740.786121] alps.c: handle: cf
> Dec  4 21:03:22 sardelle kernel: [410740.787499] alps.c: handle: 79
> Dec  4 21:03:22 sardelle kernel: [410740.788688] alps.c: handle: 12
> Dec  4 21:03:22 sardelle kernel: [410740.789979] alps.c: handle: 1f
> Dec  4 21:03:22 sardelle kernel: [410740.791146] alps.c: handle: ff
> Dec  4 21:03:22 sardelle kernel: [410740.792299] alps.c: handle: 1
> <suspect 9byte (really is)>
> Dec  4 21:03:22 sardelle kernel: [410740.796899] alps.c: handle: 4f
> <yup, it is, fold back>

Ah, ok, so when we report all 3 buttons pressed we mistaken it as interleaved 
packet again... Insteado f waiting till 9th byte can't we just forcefully
exit inetrleaved mode (once we processed the bare packet) by doing:

     psmouse->packet[3] &= 0xf7;

?

-- 
Dmitry
--
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

[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux