diff mbox

HID joystick - Axis 11 non operational.

Message ID 20110607123931.2267a703.ospite@studenti.unina.it (mailing list archive)
State New, archived
Delegated to: Jiri Kosina
Headers show

Commit Message

Antonio Ospite June 7, 2011, 10:39 a.m. UTC
On Sat, 4 Jun 2011 22:45:46 +0200
Antonio Ospite <ospite@studenti.unina.it> wrote:

> On Fri, 3 Jun 2011 16:15:11 +0200
> Antonio Ospite <ospite@studenti.unina.it> wrote:
> 
> > I confirm that the axis for Dpad-left (usage->code == 0x2f IINM) of the
> > Sixaxis looks like it is not working. I too can see the data on hidraw
> > device but not on the joystick or even the event device, so it may be
> > below the joystick layer.
> >
> 
> OK found something: 0x2f is ABS_MT_SLOT,
> http://lxr.linux.no/linux+*/include/linux/input.h#L773
> 
> And in input.c::input_handle_abs_event() this case is handled in a
> special way:
> http://lxr.linux.no/#linux+v2.6.39/drivers/input/input.c#L172
> 
> This little change improves things a little bit, but the pressure event is
> now reported twice, once with the actual value and once with 0, you can test
> with:
> 
>  $ evtest /dev/input/eventX | \
>    egrep -v 'code (0|1|2|5|48|49|50|51|52|53|54|55|56|57|58|58|59)|Report Sync'
> 

The second ABS_MT_SLOT event is fired up here:
http://lxr.linux.no/#linux+v2.6.39/drivers/input/input.c#L210

when I get code == 0x30 (ABS_MT_TOUCH_MAJOR, I am still not sure
where from), with the following hack I can make axis 11 work again but I
have no idea if I am broking MultiTouch devices, anyone?



Simon, if that works for you too, I can send an RFC patch out, but how should
we motivate it? The Sixaxis is sending out MT events even if it is not a MT
device...

Regards,
   Antonio

Comments

simon@mungewell.org June 7, 2011, 4:35 p.m. UTC | #1
I'll try to find some time to test this...

> when I get code == 0x30 (ABS_MT_TOUCH_MAJOR, I am still not sure
> where from), with the following hack I can make axis 11 work again but I
> have no idea if I am broking MultiTouch devices, anyone?
>

If the root of the problem is with the Sixaxis, can we not
re-allocate/re-map which HID events it produces so that the rest of the
system sees what it is expecting?

If this is likely to be a problem with other devices interfering with the
MultiTouch stuff then I guess we should fix it properly,
Simon.


--
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
diff mbox

Patch

Index: linux-2.6/drivers/input/input.c
===================================================================
--- linux-2.6.orig/drivers/input/input.c
+++ linux-2.6/drivers/input/input.c
@@ -169,7 +169,7 @@ 
        bool is_mt_event;
        int *pold;
 
-       if (code == ABS_MT_SLOT) {
+       if (code == ABS_MT_SLOT && dev->mtsize > 0) {
                /*
                 * "Stage" the event; we'll flush it later, when we
                 * get actual touch data.
@@ -205,7 +205,8 @@ 
        }
 
        /* Flush pending "slot" event */
-       if (is_mt_event && dev->slot != input_abs_get_val(dev, ABS_MT_SLOT)) {
+       if (is_mt_event && dev->slot != input_abs_get_val(dev, ABS_MT_SLOT) &&
+           dev->mtsize > 0 ) {
                input_abs_set_val(dev, ABS_MT_SLOT, dev->slot);
                input_pass_event(dev, EV_ABS, ABS_MT_SLOT, dev->slot);
        }