Input: iforce - signal command completion from transport code
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Fri, 10 Aug 2018 17:21:13 +0000 (10:21 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Sun, 23 Jun 2019 06:55:22 +0000 (23:55 -0700)
Signalling command completion from iforce_process_packet() does
not make sense, as not all transport use the same data path for
both commands and motion data form the device, that is why USB
code already has to signal command completion iforce_usb_out().

Let's move signalling completion into individual transport
modules.

Tested-by: Tim Schumacher <timschumi@gmx.de>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/joystick/iforce/iforce-packets.c
drivers/input/joystick/iforce/iforce-serio.c

index 35b7a5206977401cab2e39615dd1d40ee774947d..c0a665961c2302cf64c49a1632d199a7c03a03bd 100644 (file)
@@ -172,8 +172,6 @@ void iforce_process_packet(struct iforce *iforce,
        struct input_dev *dev = iforce->dev;
        int i, j;
 
-       wake_up(&iforce->wait);
-
        if (!iforce->type)
                return;
 
index f8bf7d2aa59f2fc45372740cb0c319c64536353a..0dd95d145e85cef40b8ffdc33fbb8a14a215265a 100644 (file)
@@ -169,10 +169,13 @@ static irqreturn_t iforce_serio_irq(struct serio *serio,
                        iforce->ecmd = (iforce_serio->id << 8) |
                                        iforce_serio->idx;
                        memcpy(iforce->edata, iforce->data, IFORCE_MAX_LENGTH);
-               }
 
-               iforce_process_packet(iforce, iforce_serio->id,
-                                     iforce->data, iforce_serio->len);
+                       /* Signal that command is done */
+                       wake_up(&iforce->wait);
+               } else {
+                       iforce_process_packet(iforce, iforce_serio->id,
+                                             iforce->data, iforce_serio->len);
+               }
 
                iforce_serio->pkt = 0;
                iforce_serio->id  = 0;