linux-input.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: [PATCH] Input: mt: only perform pointer emulation on drivers desiring this functionality
@ 2016-10-30 15:04 Frank Praznik
  2016-10-30 18:45 ` Colenbrander, Roelof
  0 siblings, 1 reply; 11+ messages in thread
From: Frank Praznik @ 2016-10-30 15:04 UTC (permalink / raw)
  To: linux-input
  Cc: Dmitry Torokhov, Henrik Rydberg, Benjamin Tissoires, Tim Bird,
	Roderick Colenbrander

> On Thu, Oct 27, 2016 at 4:19 PM, Dmitry Torokhov
> <dmitry.torokhov@xxxxxxxxx> wrote:
> > On Thu, Oct 27, 2016 at 02:31:13PM -0700, Roderick Colenbrander wrote:
> >> From: Roderick Colenbrander <roderick.colenbrander@xxxxxxxx>
> >>
> >> The input-mt driver pointer emulation from 'input_mt_sync_frame' regardless
> >> of the flags passed in to 'input_mt_init_slots' by device drivers.
> >
> > Right, because needing single-touch (pointer) emulation is not property
> > of device or driver but rather consumer. If we get to the point where
> > everything is ready to accept multi-touch (are we there yet) then we can
> > stop doing pointer emulation altogether.
> >
> >>
> >> Pointer emulation is undesired on drivers, which didn't request this
> >> capability like the hid-sony driver for the Dualshock 4. This gamepad already
> >> reports ABS_X / ABS_Y for gamepad stick purposes. Pointer emulation would
> >> inject touchpad values into these sticks, which is undesired.
> >
> > The driver should not be re-purposing events like that.
> > ABS_MT_POSITION_X and ABS_X should match.
> >
> > Why doesn't driver follow Documentation/input/gamepad.txt?
> >
> 
> The original hid-sony code and the multitouch handling code for the Dualshock 4
> were written by the community. We are stepping in to make the hid-sony driver
> properly handle the Dualshock 4.
> The driver doesn't fully follow the gamepad spec yet, which we will
> try to improve. At
> least the left analog stick is reported as ABS_X and ABS_Y already,
> but the buttons
> are inconsistent and right stick is wrong as well.
> While it would be great to conform to the spec, the conflict with
> multitouch would still
> exist as the Dualshock 4 has both analog sticks and a multitouch touchpad.

The button and axis mappings are what the controller’s default HID descriptor provides.  The descriptors in the driver just extend the ones sent by the controller to allow additional functionality(i.e. gyro/accel and full Bluetooth mode), but the button and axis mappings were unchanged from the defaults so as not to introduce mapping discrepencies with older kernels which used the generic HID driver.  Note that changing them at this point *will* break a lot of software (SDL has had these mappings hardcoded into it’s controller database header for years now).

> 
> Disabling the pointer emulation feature avoids the conflict. This
> issue was only exposed
> recently by adding of the input_mt_sync_frame call as recommended by Benjamin as
> part of some improvements we did for touchpad handling in hid-sony.
> 

Is input_mt_sync_frame even necessary?  The original implementation followed the protocol for a “Type B” device as defined in Documentation/input/multi-touch-protocol.txt which doesn’t require SYN_MT_REPORT messages.

^ permalink raw reply	[flat|nested] 11+ messages in thread
* [PATCH] Input: mt: only perform pointer emulation on drivers desiring this functionality
@ 2016-10-27 21:31 Roderick Colenbrander
  2016-10-27 21:36 ` Bird, Timothy
                   ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: Roderick Colenbrander @ 2016-10-27 21:31 UTC (permalink / raw)
  To: linux-input
  Cc: Dmitry Torokhov, Henrik Rydberg, Benjamin Tissoires, Tim Bird,
	Roderick Colenbrander

From: Roderick Colenbrander <roderick.colenbrander@sony.com>

The input-mt driver pointer emulation from 'input_mt_sync_frame' regardless
of the flags passed in to 'input_mt_init_slots' by device drivers.

Pointer emulation is undesired on drivers, which didn't request this
capability like the hid-sony driver for the Dualshock 4. This gamepad already
reports ABS_X / ABS_Y for gamepad stick purposes. Pointer emulation would
inject touchpad values into these sticks, which is undesired.

This patch checks the flags INPUT_MT_POINTER / INPUT_MT_DIRECT from within
input_mt_sync_frame to only allow pointer emulation when the feature was
requested by the driver as the flags were set in input_mt_init_slots.
---
 drivers/input/input-mt.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/input/input-mt.c b/drivers/input/input-mt.c
index a1bbec9..30c8128 100644
--- a/drivers/input/input-mt.c
+++ b/drivers/input/input-mt.c
@@ -305,7 +305,8 @@ void input_mt_sync_frame(struct input_dev *dev)
 	if ((mt->flags & INPUT_MT_POINTER) && !(mt->flags & INPUT_MT_SEMI_MT))
 		use_count = true;
 
-	input_mt_report_pointer_emulation(dev, use_count);
+	if (mt->flags & (INPUT_MT_POINTER | INPUT_MT_DIRECT))
+		input_mt_report_pointer_emulation(dev, use_count);
 
 	mt->frame++;
 }
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2016-11-03 10:43 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-10-30 15:04 [PATCH] Input: mt: only perform pointer emulation on drivers desiring this functionality Frank Praznik
2016-10-30 18:45 ` Colenbrander, Roelof
2016-11-03 10:43   ` Benjamin Tissoires
  -- strict thread matches above, loose matches on Subject: below --
2016-10-27 21:31 Roderick Colenbrander
2016-10-27 21:36 ` Bird, Timothy
2016-10-27 22:46 ` Henrik Rydberg
2016-10-27 23:27   ` Roderick Colenbrander
2016-10-27 23:19 ` Dmitry Torokhov
2016-10-27 23:46   ` Roderick Colenbrander
2016-10-27 23:54     ` Dmitry Torokhov
2016-10-28  0:10       ` Roderick Colenbrander

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).