linux-input.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Mayflash / Dragonrise GameCube controller adapter recognized as tablet, not joystick
@ 2015-02-05  0:34 Andrew Rodland
  2015-02-05  0:48 ` Dmitry Torokhov
  0 siblings, 1 reply; 4+ messages in thread
From: Andrew Rodland @ 2015-02-05  0:34 UTC (permalink / raw)
  To: linux-input

Hi all,

I recently bought a "Mayflash GameCube Controller Adapter for Wii U &
PC USB". It has 4 GameCube controller ports, and a switch to tell it
whether you're plugging it into a Wii or a PC. The docs say that in PC
mode it works out of the box on Windows & Mac, with their driver being
required for force-feedback, so it's a semi-standard HID device.

With the switch set to "WII U", it's recognized as a hid-generic
device, but the descriptors are nonsense and it doesn't generate any
events. Fair enough.

With the switch set to "PC" it's recognized, the descriptors make a
lot more sense, and it sends events -- in fact it moves the cursor on
my X display! For some reason it's getting recognized as a
mouse/tablet instead of a joystick, so joydev refuses to take
ownership of it, and X's evdev driver does. I suspect it's due to some
mistake in the report descriptors, but I'm not quite expert enough to
say.

I'd like to get this working so I've attached as much useful
information as I can muster. Let me know if there's anything I can do
to help further; I'm not allergic to compiling a kernel.

Thanks

Andrew

=== dmesg notification ===

[108762.808904] hid-generic 0003:0079:1843.000D: input,hidraw6: USB
HID v1.10 Joystick [mayflash limited MAYFLASH GameCube Controller
Adapter] on usb-0000:00:13.0-4/input0

=== udevadm info --attribute-walk ===

  looking at device
'/devices/pci0000:00/0000:00:13.0/usb5/5-4/5-4:1.0/input/input16/mouse3':
    KERNEL=="mouse3"
    SUBSYSTEM=="input"
    DRIVER==""

  looking at parent device
'/devices/pci0000:00/0000:00:13.0/usb5/5-4/5-4:1.0/input/input16':
    KERNELS=="input16"
    SUBSYSTEMS=="input"
    DRIVERS==""
    ATTRS{name}=="mayflash limited MAYFLASH GameCube Controller Adapter"
    ATTRS{phys}=="usb-0000:00:13.0-4/input0"
    ATTRS{uniq}==""
    ATTRS{properties}=="0"

  looking at parent device '/devices/pci0000:00/0000:00:13.0/usb5/5-4/5-4:1.0':
    KERNELS=="5-4:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="usbhid"
    ATTRS{bInterfaceClass}=="03"
    ATTRS{bInterfaceSubClass}=="00"
    ATTRS{bInterfaceProtocol}=="00"
    ATTRS{bNumEndpoints}=="02"
    ATTRS{supports_autosuspend}=="1"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bInterfaceNumber}=="00"

  looking at parent device '/devices/pci0000:00/0000:00:13.0/usb5/5-4':
    KERNELS=="5-4"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{devpath}=="4"
    ATTRS{idVendor}=="0079"
    ATTRS{speed}=="12"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{busnum}=="5"
    ATTRS{devnum}=="9"
    ATTRS{configuration}==""
    ATTRS{bMaxPower}=="500mA"
    ATTRS{authorized}=="1"
    ATTRS{bmAttributes}=="c0"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{maxchild}=="0"
    ATTRS{bcdDevice}=="0100"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{version}==" 2.00"
    ATTRS{urbnum}=="129809"
    ATTRS{ltm_capable}=="no"
    ATTRS{manufacturer}=="mayflash limited"
    ATTRS{removable}=="unknown"
    ATTRS{idProduct}=="1843"
    ATTRS{bDeviceClass}=="00"
    ATTRS{product}=="MAYFLASH GameCube Controller Adapter"

(snipped the bus and pci parts)

=== cat /debug/hid/0003:0079:1843.000D/rdesc ===

05 01 09 04 a1 01 85 01 09 01 a1 00 05 09 19 01 29 10 15 00 25 01 75
01 95 10 81 02 05 01 09 30 09 31 09 32 09 35 15 00 26 ff 00 75 08 95
04 81 02 05 01 09 33 09 34 95 02 81 02 05 01 09 39 15 00 25 07 35 00
46 3b 01 65 14 75 04 95 01 81 02 75 04 95 01 81 01 06 00 ff 09 01 75
08 95 02 91 02 c0 c0 05 01 09 04 a1 01 85 02 09 01 a1 00 05 09 19 01
29 10 15 00 25 01 75 01 95 10 81 02 05 01 09 30 09 31 09 32 09 35 15
00 26 ff 00 75 08 95 04 81 02 05 01 09 33 09 34 95 02 81 02 05 01 09
39 15 00 25 07 35 00 46 3b 01 65 14 75 04 95 01 81 02 75 04 95 01 81
01 06 00 ff 09 01 75 08 95 02 91 02 c0 c0 05 01 09 04 a1 01 85 03 09
01 a1 00 05 09 19 01 29 10 15 00 25 01 75 01 95 10 81 02 05 01 09 30
09 31 09 32 09 35 15 00 26 ff 00 75 08 95 04 81 02 05 01 09 33 09 34
95 02 81 02 05 01 09 39 15 00 25 07 35 00 46 3b 01 65 14 75 04 95 01
81 02 75 04 95 01 81 01 06 00 ff 09 01 75 08 95 02 91 02 c0 c0 05 01
09 04 a1 01 85 04 09 01 a1 00 05 09 19 01 29 10 15 00 25 01 75 01 95
10 81 02 05 01 09 30 09 31 09 32 09 35 15 00 26 ff 00 75 08 95 04 81
02 05 01 09 33 09 34 95 02 81 02 05 01 09 39 15 00 25 07 35 00 46 3b
01 65 14 75 04 95 01 81 02 75 04 95 01 81 01 06 00 ff 09 01 75 08 95
02 91 02 c0 c0

  INPUT(1)[INPUT]
    Field(0)
      Physical(GenericDesktop.Pointer)
      Application(GenericDesktop.Joystick)
      Usage(16)
        Button.0001
        Button.0002
        Button.0003
        Button.0004
        Button.0005
        Button.0006
        Button.0007
        Button.0008
        Button.0009
        Button.000a
        Button.000b
        Button.000c
        Button.000d
        Button.000e
        Button.000f
        Button.0010
      Logical Minimum(0)
      Logical Maximum(1)
      Report Size(1)
      Report Count(16)
      Report Offset(0)
      Flags( Variable Absolute )
    Field(1)
      Physical(GenericDesktop.Pointer)
      Application(GenericDesktop.Joystick)
      Usage(4)
        GenericDesktop.X
        GenericDesktop.Y
        GenericDesktop.Z
        GenericDesktop.Rz
      Logical Minimum(0)
      Logical Maximum(255)
      Report Size(8)
      Report Count(4)
      Report Offset(16)
      Flags( Variable Absolute )
    Field(2)
      Physical(GenericDesktop.Pointer)
      Application(GenericDesktop.Joystick)
      Usage(2)
        GenericDesktop.Rx
        GenericDesktop.Ry
      Logical Minimum(0)
      Logical Maximum(255)
      Report Size(8)
      Report Count(2)
      Report Offset(48)
      Flags( Variable Absolute )
    Field(3)
      Physical(GenericDesktop.Pointer)
      Application(GenericDesktop.Joystick)
      Usage(1)
        GenericDesktop.HatSwitch
      Logical Minimum(0)
      Logical Maximum(7)
      Physical Minimum(0)
      Physical Maximum(315)
      Unit(English Rotation : Degrees)
      Report Size(4)
      Report Count(1)
      Report Offset(64)
      Flags( Variable Absolute )
  INPUT(2)[INPUT]
    Field(0)
      Physical(GenericDesktop.Pointer)
      Application(GenericDesktop.Joystick)
      Usage(16)
        Button.0001
        Button.0002
        Button.0003
        Button.0004
        Button.0005
        Button.0006
        Button.0007
        Button.0008
        Button.0009
        Button.000a
        Button.000b
        Button.000c
        Button.000d
        Button.000e
        Button.000f
        Button.0010
      Logical Minimum(0)
      Logical Maximum(1)
      Physical Minimum(0)
      Physical Maximum(315)
      Unit(English Rotation : Degrees)
      Report Size(1)
      Report Count(16)
      Report Offset(0)
      Flags( Variable Absolute )
    Field(1)
      Physical(GenericDesktop.Pointer)
      Application(GenericDesktop.Joystick)
      Usage(4)
        GenericDesktop.X
        GenericDesktop.Y
        GenericDesktop.Z
        GenericDesktop.Rz
      Logical Minimum(0)
      Logical Maximum(255)
      Physical Minimum(0)
      Physical Maximum(315)
      Unit(English Rotation : Degrees)
      Report Size(8)
      Report Count(4)
      Report Offset(16)
      Flags( Variable Absolute )
    Field(2)
      Physical(GenericDesktop.Pointer)
      Application(GenericDesktop.Joystick)
      Usage(2)
        GenericDesktop.Rx
        GenericDesktop.Ry
      Logical Minimum(0)
      Logical Maximum(255)
      Physical Minimum(0)
      Physical Maximum(315)
      Unit(English Rotation : Degrees)
      Report Size(8)
      Report Count(2)
      Report Offset(48)
      Flags( Variable Absolute )
    Field(3)
      Physical(GenericDesktop.Pointer)
      Application(GenericDesktop.Joystick)
      Usage(1)
        GenericDesktop.HatSwitch
      Logical Minimum(0)
      Logical Maximum(7)
      Physical Minimum(0)
      Physical Maximum(315)
      Unit(English Rotation : Degrees)
      Report Size(4)
      Report Count(1)
      Report Offset(64)
      Flags( Variable Absolute )
  INPUT(3)[INPUT]
    Field(0)
      Physical(GenericDesktop.Pointer)
      Application(GenericDesktop.Joystick)
      Usage(16)
        Button.0001
        Button.0002
        Button.0003
        Button.0004
        Button.0005
        Button.0006
        Button.0007
        Button.0008
        Button.0009
        Button.000a
        Button.000b
        Button.000c
        Button.000d
        Button.000e
        Button.000f
        Button.0010
      Logical Minimum(0)
      Logical Maximum(1)
      Physical Minimum(0)
      Physical Maximum(315)
      Unit(English Rotation : Degrees)
      Report Size(1)
      Report Count(16)
      Report Offset(0)
      Flags( Variable Absolute )
    Field(1)
      Physical(GenericDesktop.Pointer)
      Application(GenericDesktop.Joystick)
      Usage(4)
        GenericDesktop.X
        GenericDesktop.Y
        GenericDesktop.Z
        GenericDesktop.Rz
      Logical Minimum(0)
      Logical Maximum(255)
      Physical Minimum(0)
      Physical Maximum(315)
      Unit(English Rotation : Degrees)
      Report Size(8)
      Report Count(4)
      Report Offset(16)
      Flags( Variable Absolute )
    Field(2)
      Physical(GenericDesktop.Pointer)
      Application(GenericDesktop.Joystick)
      Usage(2)
        GenericDesktop.Rx
        GenericDesktop.Ry
      Logical Minimum(0)
      Logical Maximum(255)
      Physical Minimum(0)
      Physical Maximum(315)
      Unit(English Rotation : Degrees)
      Report Size(8)
      Report Count(2)
      Report Offset(48)
      Flags( Variable Absolute )
    Field(3)
      Physical(GenericDesktop.Pointer)
      Application(GenericDesktop.Joystick)
      Usage(1)
        GenericDesktop.HatSwitch
      Logical Minimum(0)
      Logical Maximum(7)
      Physical Minimum(0)
      Physical Maximum(315)
      Unit(English Rotation : Degrees)
      Report Size(4)
      Report Count(1)
      Report Offset(64)
      Flags( Variable Absolute )
  INPUT(4)[INPUT]
    Field(0)
      Physical(GenericDesktop.Pointer)
      Application(GenericDesktop.Joystick)
      Usage(16)
        Button.0001
        Button.0002
        Button.0003
        Button.0004
        Button.0005
        Button.0006
        Button.0007
        Button.0008
        Button.0009
        Button.000a
        Button.000b
        Button.000c
        Button.000d
        Button.000e
        Button.000f
        Button.0010
      Logical Minimum(0)
      Logical Maximum(1)
      Physical Minimum(0)
      Physical Maximum(315)
      Unit(English Rotation : Degrees)
      Report Size(1)
      Report Count(16)
      Report Offset(0)
      Flags( Variable Absolute )
    Field(1)
      Physical(GenericDesktop.Pointer)
      Application(GenericDesktop.Joystick)
      Usage(4)
        GenericDesktop.X
        GenericDesktop.Y
        GenericDesktop.Z
        GenericDesktop.Rz
      Logical Minimum(0)
      Logical Maximum(255)
      Physical Minimum(0)
      Physical Maximum(315)
      Unit(English Rotation : Degrees)
      Report Size(8)
      Report Count(4)
      Report Offset(16)
      Flags( Variable Absolute )
    Field(2)
      Physical(GenericDesktop.Pointer)
      Application(GenericDesktop.Joystick)
      Usage(2)
        GenericDesktop.Rx
        GenericDesktop.Ry
      Logical Minimum(0)
      Logical Maximum(255)
      Physical Minimum(0)
      Physical Maximum(315)
      Unit(English Rotation : Degrees)
      Report Size(8)
      Report Count(2)
      Report Offset(48)
      Flags( Variable Absolute )
    Field(3)
      Physical(GenericDesktop.Pointer)
      Application(GenericDesktop.Joystick)
      Usage(1)
        GenericDesktop.HatSwitch
      Logical Minimum(0)
      Logical Maximum(7)
      Physical Minimum(0)
      Physical Maximum(315)
      Unit(English Rotation : Degrees)
      Report Size(4)
      Report Count(1)
      Report Offset(64)
      Flags( Variable Absolute )
  OUTPUT(1)[OUTPUT]
    Field(0)
      Physical(GenericDesktop.Pointer)
      Application(GenericDesktop.Joystick)
      Usage(2)
        ff00.0001
        ff00.0001
      Logical Minimum(0)
      Logical Maximum(7)
      Physical Minimum(0)
      Physical Maximum(315)
      Unit(English Rotation : Degrees)
      Report Size(8)
      Report Count(2)
      Report Offset(0)
      Flags( Variable Absolute )
  OUTPUT(2)[OUTPUT]
    Field(0)
      Physical(GenericDesktop.Pointer)
      Application(GenericDesktop.Joystick)
      Usage(2)
        ff00.0001
        ff00.0001
      Logical Minimum(0)
      Logical Maximum(7)
      Physical Minimum(0)
      Physical Maximum(315)
      Unit(English Rotation : Degrees)
      Report Size(8)
      Report Count(2)
      Report Offset(0)
      Flags( Variable Absolute )
  OUTPUT(3)[OUTPUT]
    Field(0)
      Physical(GenericDesktop.Pointer)
      Application(GenericDesktop.Joystick)
      Usage(2)
        ff00.0001
        ff00.0001
      Logical Minimum(0)
      Logical Maximum(7)
      Physical Minimum(0)
      Physical Maximum(315)
      Unit(English Rotation : Degrees)
      Report Size(8)
      Report Count(2)
      Report Offset(0)
      Flags( Variable Absolute )
  OUTPUT(4)[OUTPUT]
    Field(0)
      Physical(GenericDesktop.Pointer)
      Application(GenericDesktop.Joystick)
      Usage(2)
        ff00.0001
        ff00.0001
      Logical Minimum(0)
      Logical Maximum(7)
      Physical Minimum(0)
      Physical Maximum(315)
      Unit(English Rotation : Degrees)
      Report Size(8)
      Report Count(2)
      Report Offset(0)
      Flags( Variable Absolute )

Button.0001 ---> Key.Trigger
Button.0002 ---> Key.ThumbBtn
Button.0003 ---> Key.ThumbBtn2
Button.0004 ---> Key.TopBtn
Button.0005 ---> Key.TopBtn2
Button.0006 ---> Key.PinkieBtn
Button.0007 ---> Key.BaseBtn
Button.0008 ---> Key.BaseBtn2
Button.0009 ---> Key.BaseBtn3
Button.000a ---> Key.BaseBtn4
Button.000b ---> Key.BaseBtn5
Button.000c ---> Key.BaseBtn6
Button.000d ---> Key.?
Button.000e ---> Key.?
Button.000f ---> Key.?
Button.0010 ---> Key.BtnDead
GenericDesktop.X ---> Absolute.X
GenericDesktop.Y ---> Absolute.Y
GenericDesktop.Z ---> Absolute.Z
GenericDesktop.Rz ---> Absolute.Rz
GenericDesktop.Rx ---> Absolute.Rx
GenericDesktop.Ry ---> Absolute.Ry
GenericDesktop.HatSwitch ---> Absolute.Hat0X
Button.0001 ---> Key.BtnA
Button.0002 ---> Key.BtnB
Button.0003 ---> Key.BtnC
Button.0004 ---> Key.BtnX
Button.0005 ---> Key.BtnY
Button.0006 ---> Key.BtnZ
Button.0007 ---> Key.BtnTL
Button.0008 ---> Key.BtnTR
Button.0009 ---> Key.BtnTL2
Button.000a ---> Key.BtnTR2
Button.000b ---> Key.BtnSelect
Button.000c ---> Key.BtnStart
Button.000d ---> Key.BtnMode
Button.000e ---> Key.BtnThumbL
Button.000f ---> Key.BtnThumbR
Button.0010 ---> Key.?
GenericDesktop.X ---> Absolute.Throttle
GenericDesktop.Y ---> Absolute.Rudder
GenericDesktop.Z ---> Absolute.Wheel
GenericDesktop.Rz ---> Absolute.Gas
GenericDesktop.Rx ---> Absolute.Brake
GenericDesktop.Ry ---> Absolute.?
GenericDesktop.HatSwitch ---> Absolute.Hat1X
Button.0001 ---> Key.ToolPen
Button.0002 ---> Key.ToolRubber
Button.0003 ---> Key.ToolBrush
Button.0004 ---> Key.ToolPencil
Button.0005 ---> Key.ToolAirbrush
Button.0006 ---> Key.ToolFinger
Button.0007 ---> Key.ToolMouse
Button.0008 ---> Key.ToolLens
Button.0009 ---> Key.?
Button.000a ---> Key.?
Button.000b ---> Key.Touch
Button.000c ---> Key.Stylus
Button.000d ---> Key.Stylus2
Button.000e ---> Key.ToolDoubleTap
Button.000f ---> Key.ToolTripleTap
Button.0010 ---> Key.?
GenericDesktop.X ---> Absolute.?
GenericDesktop.Y ---> Absolute.?
GenericDesktop.Z ---> Absolute.?
GenericDesktop.Rz ---> Absolute.?
GenericDesktop.Rx ---> Absolute.Hat2X
GenericDesktop.Ry ---> Absolute.Hat2Y
GenericDesktop.HatSwitch ---> Absolute.Hat3X
Button.0001 ---> Key.WheelBtn
Button.0002 ---> Key.Gear up
Button.0003 ---> Key.?
Button.0004 ---> Key.?
Button.0005 ---> Key.?
Button.0006 ---> Key.?
Button.0007 ---> Key.?
Button.0008 ---> Key.?
Button.0009 ---> Key.?
Button.000a ---> Key.?
Button.000b ---> Key.?
Button.000c ---> Key.?
Button.000d ---> Key.?
Button.000e ---> Key.?
Button.000f ---> Key.?
Button.0010 ---> Key.?
GenericDesktop.X ---> Absolute.Pressure
GenericDesktop.Y ---> Absolute.Distance
GenericDesktop.Z ---> Absolute.XTilt
GenericDesktop.Rz ---> Absolute.YTilt
GenericDesktop.Rx ---> Absolute.ToolWidth
GenericDesktop.Ry ---> Absolute.?
GenericDesktop.HatSwitch ---> Absolute.?
ff00.0001 ---> Sync.Report
ff00.0001 ---> Sync.Report
ff00.0001 ---> Sync.Report
ff00.0001 ---> Sync.Report
ff00.0001 ---> Sync.Report
ff00.0001 ---> Sync.Report
ff00.0001 ---> Sync.Report
ff00.0001 ---> Sync.Report

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

* Re: Mayflash / Dragonrise GameCube controller adapter recognized as tablet, not joystick
  2015-02-05  0:34 Mayflash / Dragonrise GameCube controller adapter recognized as tablet, not joystick Andrew Rodland
@ 2015-02-05  0:48 ` Dmitry Torokhov
  2015-02-05  5:02   ` Andrew Rodland
  0 siblings, 1 reply; 4+ messages in thread
From: Dmitry Torokhov @ 2015-02-05  0:48 UTC (permalink / raw)
  To: Andrew Rodland; +Cc: linux-input@vger.kernel.org

Hi Andrew,

On Wed, Feb 4, 2015 at 4:34 PM, Andrew Rodland <andrew@cleverdomain.org> wrote:
> Hi all,
>
> I recently bought a "Mayflash GameCube Controller Adapter for Wii U &
> PC USB". It has 4 GameCube controller ports, and a switch to tell it
> whether you're plugging it into a Wii or a PC. The docs say that in PC
> mode it works out of the box on Windows & Mac, with their driver being
> required for force-feedback, so it's a semi-standard HID device.
>
> With the switch set to "WII U", it's recognized as a hid-generic
> device, but the descriptors are nonsense and it doesn't generate any
> events. Fair enough.
>
> With the switch set to "PC" it's recognized, the descriptors make a
> lot more sense, and it sends events -- in fact it moves the cursor on
> my X display! For some reason it's getting recognized as a
> mouse/tablet instead of a joystick, so joydev refuses to take
> ownership of it, and X's evdev driver does. I suspect it's due to some
> mistake in the report descriptors, but I'm not quite expert enough to
> say.

>From the list of events you posted below it seems the device needs
HID_QUIRK_MULTI_INPUT to split it into 4 individual input devices.

Thanks.

-- 
Dmitry

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

* Re: Mayflash / Dragonrise GameCube controller adapter recognized as tablet, not joystick
  2015-02-05  0:48 ` Dmitry Torokhov
@ 2015-02-05  5:02   ` Andrew Rodland
  2015-02-11 18:17     ` Dmitry Torokhov
  0 siblings, 1 reply; 4+ messages in thread
From: Andrew Rodland @ 2015-02-05  5:02 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input@vger.kernel.org

[-- Attachment #1: Type: text/plain, Size: 554 bytes --]

On Wed, Feb 4, 2015 at 7:48 PM, Dmitry Torokhov
<dmitry.torokhov@gmail.com> wrote:
> Hi Andrew,
>
>
> From the list of events you posted below it seems the device needs
> HID_QUIRK_MULTI_INPUT to split it into 4 individual input devices.
>
That did the trick neatly. Everything works, although no force
feedback (and sadly hacking it into hid-dr isn't as trivial as I
hoped).

Patch in case it's useful (attached because of gmail, sorry).

(which also doesn't reply to list by default, so here's a dupe. Some
day I'll switch back to a real mail client.)

[-- Attachment #2: 0001-Add-HID_QUIRK_MULTI_INPUT-for-Dragonrise-GameCube-ad.patch --]
[-- Type: text/x-patch, Size: 1655 bytes --]

From 61ca320a43f652edeb00d37fecfef1f2226afbab Mon Sep 17 00:00:00 2001
From: Andrew Rodland <andrew@cleverdomain.org>
Date: Wed, 4 Feb 2015 23:09:36 -0500
Subject: [PATCH] Add HID_QUIRK_MULTI_INPUT for Dragonrise GameCube adapter

---
 drivers/hid/hid-ids.h           | 3 ++-
 drivers/hid/usbhid/hid-quirks.c | 1 +
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index 9243359..041753e 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -272,7 +272,8 @@
 #define USB_VENDOR_ID_DMI		0x0c0b
 #define USB_DEVICE_ID_DMI_ENC		0x5fab
 
-#define USB_VENDOR_ID_DRAGONRISE	0x0079
+#define USB_VENDOR_ID_DRAGONRISE                0x0079
+#define USB_DEVICE_ID_DRAGONRISE_GAMECUBE       0x1843
 
 #define USB_VENDOR_ID_DWAV		0x0eef
 #define USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER	0x0001
diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
index b27b3d3..e47a445 100644
--- a/drivers/hid/usbhid/hid-quirks.c
+++ b/drivers/hid/usbhid/hid-quirks.c
@@ -70,6 +70,7 @@ static const struct hid_blacklist {
 	{ USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_3AXIS_5BUTTON_STICK, HID_QUIRK_NOGET },
 	{ USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_AXIS_295, HID_QUIRK_NOGET },
 	{ USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC, HID_QUIRK_NOGET },
+	{ USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_GAMECUBE, HID_QUIRK_MULTI_INPUT },
 	{ USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN, HID_QUIRK_ALWAYS_POLL },
 	{ USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_009B, HID_QUIRK_ALWAYS_POLL },
 	{ USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_0103, HID_QUIRK_ALWAYS_POLL },
-- 
1.9.1


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

* Re: Mayflash / Dragonrise GameCube controller adapter recognized as tablet, not joystick
  2015-02-05  5:02   ` Andrew Rodland
@ 2015-02-11 18:17     ` Dmitry Torokhov
  0 siblings, 0 replies; 4+ messages in thread
From: Dmitry Torokhov @ 2015-02-11 18:17 UTC (permalink / raw)
  To: Andrew Rodland; +Cc: linux-input@vger.kernel.org, Jiri Kosina

Hi Andrew,

On Thu, Feb 05, 2015 at 12:02:21AM -0500, Andrew Rodland wrote:
> On Wed, Feb 4, 2015 at 7:48 PM, Dmitry Torokhov
> <dmitry.torokhov@gmail.com> wrote:
> > Hi Andrew,
> >
> >
> > From the list of events you posted below it seems the device needs
> > HID_QUIRK_MULTI_INPUT to split it into 4 individual input devices.
> >
> That did the trick neatly. Everything works, although no force
> feedback (and sadly hacking it into hid-dr isn't as trivial as I
> hoped).
> 
> Patch in case it's useful (attached because of gmail, sorry).
> 
> (which also doesn't reply to list by default, so here's a dupe. Some
> day I'll switch back to a real mail client.)

Thank you for the patch. For it to be applied you need to add your
"Signed-off-by" to the commit message - see
Documentation/SubmittingPatches - and explain in the commit message why
the change was needed.

Please also CC Jiri Kosina <jkosina@suse.cz> on your next submission
since he's the maintainer of HID subsystem and the patch will need to go
through his tree.

Thanks!

> From 61ca320a43f652edeb00d37fecfef1f2226afbab Mon Sep 17 00:00:00 2001
> From: Andrew Rodland <andrew@cleverdomain.org>
> Date: Wed, 4 Feb 2015 23:09:36 -0500
> Subject: [PATCH] Add HID_QUIRK_MULTI_INPUT for Dragonrise GameCube adapter
> 
> ---
>  drivers/hid/hid-ids.h           | 3 ++-
>  drivers/hid/usbhid/hid-quirks.c | 1 +
>  2 files changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
> index 9243359..041753e 100644
> --- a/drivers/hid/hid-ids.h
> +++ b/drivers/hid/hid-ids.h
> @@ -272,7 +272,8 @@
>  #define USB_VENDOR_ID_DMI		0x0c0b
>  #define USB_DEVICE_ID_DMI_ENC		0x5fab
>  
> -#define USB_VENDOR_ID_DRAGONRISE	0x0079
> +#define USB_VENDOR_ID_DRAGONRISE                0x0079
> +#define USB_DEVICE_ID_DRAGONRISE_GAMECUBE       0x1843
>  
>  #define USB_VENDOR_ID_DWAV		0x0eef
>  #define USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER	0x0001
> diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
> index b27b3d3..e47a445 100644
> --- a/drivers/hid/usbhid/hid-quirks.c
> +++ b/drivers/hid/usbhid/hid-quirks.c
> @@ -70,6 +70,7 @@ static const struct hid_blacklist {
>  	{ USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_3AXIS_5BUTTON_STICK, HID_QUIRK_NOGET },
>  	{ USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_AXIS_295, HID_QUIRK_NOGET },
>  	{ USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC, HID_QUIRK_NOGET },
> +	{ USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_GAMECUBE, HID_QUIRK_MULTI_INPUT },
>  	{ USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN, HID_QUIRK_ALWAYS_POLL },
>  	{ USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_009B, HID_QUIRK_ALWAYS_POLL },
>  	{ USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_0103, HID_QUIRK_ALWAYS_POLL },
> -- 
> 1.9.1
> 

-- 
Dmitry

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

end of thread, other threads:[~2015-02-11 18:17 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-02-05  0:34 Mayflash / Dragonrise GameCube controller adapter recognized as tablet, not joystick Andrew Rodland
2015-02-05  0:48 ` Dmitry Torokhov
2015-02-05  5:02   ` Andrew Rodland
2015-02-11 18:17     ` Dmitry Torokhov

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