lkml.org 
[lkml]   [2015]   [Jun]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.12 018/111] Input: xpad - add rumble support for Xbox One controller
    Date
    From: Ming-ting Yao Wei <mwei@lxde.org>

    3.12-stable review patch. If anyone has any objections, please let me know.

    ===============

    commit 0604949ce3b9a59cff419daf706272620a9a0df0 upstream.

    This adds rumble support for Xbox One controller by sending continuous
    rumble command. Trigger button rumbling is not yet implemented.

    Signed-off-by: Ming-ting Yao Wei <mwei@lxde.org>
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Jiri Slaby <jslaby@suse.cz>
    ---
    drivers/input/joystick/xpad.c | 21 ++++++++++++++++++++-
    1 file changed, 20 insertions(+), 1 deletion(-)

    diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
    index b0575bc518c1..94d8cb9b4981 100644
    --- a/drivers/input/joystick/xpad.c
    +++ b/drivers/input/joystick/xpad.c
    @@ -31,12 +31,14 @@
    * - the iForce driver drivers/char/joystick/iforce.c
    * - the skeleton-driver drivers/usb/usb-skeleton.c
    * - Xbox 360 information http://www.free60.org/wiki/Gamepad
    + * - Xbox One information https://github.com/quantus/xbox-one-controller-protocol
    *
    * Thanks to:
    * - ITO Takayuki for providing essential xpad information on his website
    * - Vojtech Pavlik - iforce driver / input subsystem
    * - Greg Kroah-Hartman - usb-skeleton driver
    * - XBOX Linux project - extra USB id's
    + * - Pekka Pöyry (quantus) - Xbox One controller reverse engineering
    *
    * TODO:
    * - fine tune axes (especially trigger axes)
    @@ -829,6 +831,23 @@ static int xpad_play_effect(struct input_dev *dev, void *data, struct ff_effect

    return usb_submit_urb(xpad->irq_out, GFP_ATOMIC);

    + case XTYPE_XBOXONE:
    + xpad->odata[0] = 0x09; /* activate rumble */
    + xpad->odata[1] = 0x08;
    + xpad->odata[2] = 0x00;
    + xpad->odata[3] = 0x08; /* continuous effect */
    + xpad->odata[4] = 0x00; /* simple rumble mode */
    + xpad->odata[5] = 0x03; /* L and R actuator only */
    + xpad->odata[6] = 0x00; /* TODO: LT actuator */
    + xpad->odata[7] = 0x00; /* TODO: RT actuator */
    + xpad->odata[8] = strong / 256; /* left actuator */
    + xpad->odata[9] = weak / 256; /* right actuator */
    + xpad->odata[10] = 0x80; /* length of pulse */
    + xpad->odata[11] = 0x00; /* stop period of pulse */
    + xpad->irq_out->transfer_buffer_length = 12;
    +
    + return usb_submit_urb(xpad->irq_out, GFP_ATOMIC);
    +
    default:
    dev_dbg(&xpad->dev->dev,
    "%s - rumble command sent to unsupported xpad type: %d\n",
    @@ -842,7 +861,7 @@ static int xpad_play_effect(struct input_dev *dev, void *data, struct ff_effect

    static int xpad_init_ff(struct usb_xpad *xpad)
    {
    - if (xpad->xtype == XTYPE_UNKNOWN || xpad->xtype == XTYPE_XBOXONE)
    + if (xpad->xtype == XTYPE_UNKNOWN)
    return 0;

    input_set_capability(xpad->dev, EV_FF, FF_RUMBLE);
    --
    2.4.2


    \
     
     \ /
      Last update: 2015-06-10 18:21    [W:4.094 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site