Input: xpad - factor out URB submission in xpad_play_effect
authorPavel Rojtberg <rojtberg@gmail.com>
Sat, 10 Oct 2015 16:32:55 +0000 (09:32 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Sat, 10 Oct 2015 18:27:29 +0000 (11:27 -0700)
Move submission logic to a single point at the end of the function.
This makes it easy to add locking/ queuing code later on.

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

index 946bf3c74834798b19ce7e381b1894573e9578dd..67ab85a4fd0e9f73c8207e6b3cd698e89f51dc06 100644 (file)
@@ -762,80 +762,78 @@ static void xpad_deinit_output(struct usb_xpad *xpad)
 static int xpad_play_effect(struct input_dev *dev, void *data, struct ff_effect *effect)
 {
        struct usb_xpad *xpad = input_get_drvdata(dev);
+       __u16 strong;
+       __u16 weak;
 
-       if (effect->type == FF_RUMBLE) {
-               __u16 strong = effect->u.rumble.strong_magnitude;
-               __u16 weak = effect->u.rumble.weak_magnitude;
-
-               switch (xpad->xtype) {
-
-               case XTYPE_XBOX:
-                       xpad->odata[0] = 0x00;
-                       xpad->odata[1] = 0x06;
-                       xpad->odata[2] = 0x00;
-                       xpad->odata[3] = strong / 256;  /* left actuator */
-                       xpad->odata[4] = 0x00;
-                       xpad->odata[5] = weak / 256;    /* right actuator */
-                       xpad->irq_out->transfer_buffer_length = 6;
-
-                       return usb_submit_urb(xpad->irq_out, GFP_ATOMIC);
-
-               case XTYPE_XBOX360:
-                       xpad->odata[0] = 0x00;
-                       xpad->odata[1] = 0x08;
-                       xpad->odata[2] = 0x00;
-                       xpad->odata[3] = strong / 256;  /* left actuator? */
-                       xpad->odata[4] = weak / 256;    /* right actuator? */
-                       xpad->odata[5] = 0x00;
-                       xpad->odata[6] = 0x00;
-                       xpad->odata[7] = 0x00;
-                       xpad->irq_out->transfer_buffer_length = 8;
-
-                       return usb_submit_urb(xpad->irq_out, GFP_ATOMIC);
-
-               case XTYPE_XBOX360W:
-                       xpad->odata[0] = 0x00;
-                       xpad->odata[1] = 0x01;
-                       xpad->odata[2] = 0x0F;
-                       xpad->odata[3] = 0xC0;
-                       xpad->odata[4] = 0x00;
-                       xpad->odata[5] = strong / 256;
-                       xpad->odata[6] = weak / 256;
-                       xpad->odata[7] = 0x00;
-                       xpad->odata[8] = 0x00;
-                       xpad->odata[9] = 0x00;
-                       xpad->odata[10] = 0x00;
-                       xpad->odata[11] = 0x00;
-                       xpad->irq_out->transfer_buffer_length = 12;
-
-                       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",
-                               __func__, xpad->xtype);
-                       return -1;
-               }
+       if (effect->type != FF_RUMBLE)
+               return 0;
+
+       strong = effect->u.rumble.strong_magnitude;
+       weak = effect->u.rumble.weak_magnitude;
+
+       switch (xpad->xtype) {
+       case XTYPE_XBOX:
+               xpad->odata[0] = 0x00;
+               xpad->odata[1] = 0x06;
+               xpad->odata[2] = 0x00;
+               xpad->odata[3] = strong / 256;  /* left actuator */
+               xpad->odata[4] = 0x00;
+               xpad->odata[5] = weak / 256;    /* right actuator */
+               xpad->irq_out->transfer_buffer_length = 6;
+               break;
+
+       case XTYPE_XBOX360:
+               xpad->odata[0] = 0x00;
+               xpad->odata[1] = 0x08;
+               xpad->odata[2] = 0x00;
+               xpad->odata[3] = strong / 256;  /* left actuator? */
+               xpad->odata[4] = weak / 256;    /* right actuator? */
+               xpad->odata[5] = 0x00;
+               xpad->odata[6] = 0x00;
+               xpad->odata[7] = 0x00;
+               xpad->irq_out->transfer_buffer_length = 8;
+               break;
+
+       case XTYPE_XBOX360W:
+               xpad->odata[0] = 0x00;
+               xpad->odata[1] = 0x01;
+               xpad->odata[2] = 0x0F;
+               xpad->odata[3] = 0xC0;
+               xpad->odata[4] = 0x00;
+               xpad->odata[5] = strong / 256;
+               xpad->odata[6] = weak / 256;
+               xpad->odata[7] = 0x00;
+               xpad->odata[8] = 0x00;
+               xpad->odata[9] = 0x00;
+               xpad->odata[10] = 0x00;
+               xpad->odata[11] = 0x00;
+               xpad->irq_out->transfer_buffer_length = 12;
+               break;
+
+       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;
+               break;
+
+       default:
+               dev_dbg(&xpad->dev->dev,
+                       "%s - rumble command sent to unsupported xpad type: %d\n",
+                       __func__, xpad->xtype);
+               return -EINVAL;
        }
 
-       return 0;
+       return usb_submit_urb(xpad->irq_out, GFP_ATOMIC);
 }
 
 static int xpad_init_ff(struct usb_xpad *xpad)