Input: xpad - move reporting xbox one home button to common function
authorDaniel Tobias <dan.g.tob@gmail.com>
Fri, 27 May 2016 23:25:32 +0000 (16:25 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 1 Dec 2018 08:44:22 +0000 (09:44 +0100)
[ Upstream commit 4f88476c75429ba9ab71c428b4cd2f67575bc9c1 ]

xbox one was the only device that has a *_process_buttons routine.

Signed-off-by: Pavel Rojtberg <rojtberg@gmail.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/input/joystick/xpad.c

index 8b7fc47f7ffb1d46ce90004a188db1fcd95dc75d..b06f4b0785f7029d5c4775a7ee4dc092c68403e4 100644 (file)
@@ -610,14 +610,28 @@ static void xpad360w_process_packet(struct usb_xpad *xpad, u16 cmd, unsigned cha
 }
 
 /*
- *     xpadone_process_buttons
+ *     xpadone_process_packet
  *
- *     Process a button update packet from an Xbox one controller.
+ *     Completes a request by converting the data into events for the
+ *     input subsystem. This version is for the Xbox One controller.
+ *
+ *     The report format was gleaned from
+ *     https://github.com/kylelemons/xbox/blob/master/xbox.go
  */
-static void xpadone_process_buttons(struct usb_xpad *xpad,
-                               struct input_dev *dev,
-                               unsigned char *data)
+static void xpadone_process_packet(struct usb_xpad *xpad, u16 cmd, unsigned char *data)
 {
+       struct input_dev *dev = xpad->dev;
+
+       /* the xbox button has its own special report */
+       if (data[0] == 0X07) {
+               input_report_key(dev, BTN_MODE, data[4] & 0x01);
+               input_sync(dev);
+               return;
+       }
+       /* check invalid packet */
+       else if (data[0] != 0X20)
+               return;
+
        /* menu/view buttons */
        input_report_key(dev, BTN_START,  data[4] & 0x04);
        input_report_key(dev, BTN_SELECT, data[4] & 0x08);
@@ -680,34 +694,6 @@ static void xpadone_process_buttons(struct usb_xpad *xpad,
        input_sync(dev);
 }
 
-/*
- *     xpadone_process_packet
- *
- *     Completes a request by converting the data into events for the
- *     input subsystem. This version is for the Xbox One controller.
- *
- *     The report format was gleaned from
- *     https://github.com/kylelemons/xbox/blob/master/xbox.go
- */
-
-static void xpadone_process_packet(struct usb_xpad *xpad,
-                               u16 cmd, unsigned char *data)
-{
-       struct input_dev *dev = xpad->dev;
-
-       switch (data[0]) {
-       case 0x20:
-               xpadone_process_buttons(xpad, dev, data);
-               break;
-
-       case 0x07:
-               /* the xbox button has its own special report */
-               input_report_key(dev, BTN_MODE, data[4] & 0x01);
-               input_sync(dev);
-               break;
-       }
-}
-
 static void xpad_irq_in(struct urb *urb)
 {
        struct usb_xpad *xpad = urb->context;