Message ID | 1445621247-18806-1-git-send-email-simon@mungewell.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Fri, 23 Oct 2015, Simon Wood wrote: > When plugged in the Logitech G920 wheel starts with USBID 046d:c261 > and behaviors as a vendor specific class. If a 'magic' byte sequence > is sent the wheel will detach and reconnect as a HID device with the > USBID 046d:c262. [ Benjamin added to CC ] Benjamin, before I proceed with this series, I'd like you to have review the HID++ bits at least, if possible. Thanks,
Hi, ----- Original Message ----- > From: "Jiri Kosina" <jikos@kernel.org> > To: "Simon Wood" <simon@mungewell.org> > Cc: linux-input@vger.kernel.org, linux-kernel@vger.kernel.org, "Edwin" <Edwin@Velds.nl>, "Michal MalĂ˝" > <madcatxster@devoid-pointer.net>, "elias vanderstuyft" <elias.vds@gmail.com>, "Benjamin Tissoires" > <benjamin.tissoires@redhat.com> > Sent: Friday, October 30, 2015 2:51:47 PM > Subject: Re: [RFC 1/5] INPUT: xpad: Add minimal support for Logitech G920 Wheel > > On Fri, 23 Oct 2015, Simon Wood wrote: > > > When plugged in the Logitech G920 wheel starts with USBID 046d:c261 > > and behaviors as a vendor specific class. If a 'magic' byte sequence > > is sent the wheel will detach and reconnect as a HID device with the > > USBID 046d:c262. > > [ Benjamin added to CC ] > > Benjamin, before I proceed with this series, I'd like you to have review > the HID++ bits at least, if possible. Thanks, > Sorry for the lag everybody. I have been busy the past week with my move across the Atlantic. I'll review it in a few minutes. Just so you know Jiri, I have seen preliminary patches of this series while it was still embargoed by Logitech, and IIRC Simon already included changes I requested at the time. Cheers, Benjamin -- 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 --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c index f8850f9..af83f7e 100644 --- a/drivers/input/joystick/xpad.c +++ b/drivers/input/joystick/xpad.c @@ -93,6 +93,7 @@ #define MAP_STICKS_TO_NULL (1 << 2) #define DANCEPAD_MAP_CONFIG (MAP_DPAD_TO_BUTTONS | \ MAP_TRIGGERS_TO_BUTTONS | MAP_STICKS_TO_NULL) +#define SWITCH_G920_TO_HID_MODE (1 << 3) #define XTYPE_XBOX 0 #define XTYPE_XBOX360 1 @@ -133,6 +134,7 @@ static const struct xpad_device { { 0x046d, 0xc21e, "Logitech Gamepad F510", 0, XTYPE_XBOX360 }, { 0x046d, 0xc21f, "Logitech Gamepad F710", 0, XTYPE_XBOX360 }, { 0x046d, 0xc242, "Logitech Chillstream Controller", 0, XTYPE_XBOX360 }, + { 0x046d, 0xc261, "Logitech G920 Driving Force Racing Wheel", SWITCH_G920_TO_HID_MODE, XTYPE_XBOXONE }, { 0x046d, 0xca84, "Logitech Xbox Cordless Controller", 0, XTYPE_XBOX }, { 0x046d, 0xca88, "Logitech Compact Controller for Xbox", 0, XTYPE_XBOX }, { 0x05fd, 0x1007, "Mad Catz Controller (unverified)", 0, XTYPE_XBOX }, @@ -299,6 +301,7 @@ static struct usb_device_id xpad_table[] = { XPAD_XBOX360_VENDOR(0x045e), /* Microsoft X-Box 360 controllers */ XPAD_XBOXONE_VENDOR(0x045e), /* Microsoft X-Box One controllers */ XPAD_XBOX360_VENDOR(0x046d), /* Logitech X-Box 360 style controllers */ + XPAD_XBOXONE_VENDOR(0x046d), /* Logitech X-Box One style controllers */ XPAD_XBOX360_VENDOR(0x0738), /* Mad Catz X-Box 360 controllers */ { USB_DEVICE(0x0738, 0x4540) }, /* Mad Catz Beat Pad */ XPAD_XBOX360_VENDOR(0x0e6f), /* 0x0e6f X-Box 360 controllers */ @@ -1021,6 +1024,19 @@ static int xpad_open(struct input_dev *dev) if (usb_submit_urb(xpad->irq_in, GFP_KERNEL)) return -EIO; + /* Logitect G920 wheel starts in XBOX mode, but is reconfigured to be HID */ + /* device with USBID of 046D:C262. Wheel will detach when 'magic' is sent. */ + if (xpad->mapping & SWITCH_G920_TO_HID_MODE) { + xpad->odata[0] = 0x0F; + xpad->odata[1] = 0x00; + xpad->odata[2] = 0x01; + xpad->odata[3] = 0x01; + xpad->odata[4] = 0x42; + xpad->irq_out->transfer_buffer_length = 5; + + return usb_submit_urb(xpad->irq_out, GFP_KERNEL); + } + if (xpad->xtype == XTYPE_XBOXONE) { /* Xbox one controller needs to be initialized. */ xpad->odata[0] = 0x05;