summaryrefslogtreecommitdiff
path: root/drivers/input/joystick/iforce/iforce-serio.c
diff options
context:
space:
mode:
authorDmitry Torokhov <dmitry.torokhov@gmail.com>2018-07-27 03:49:34 +0300
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2019-06-23 09:54:38 +0300
commit2a1433ff08a1b23e3003483ee2883d327f78db9e (patch)
treef946093884aa6611814f4c44d76885a33770036d /drivers/input/joystick/iforce/iforce-serio.c
parent38d107690df7f0826adb5b53f4e87676859ff0a6 (diff)
downloadlinux-2a1433ff08a1b23e3003483ee2883d327f78db9e.tar.xz
Input: iforce - move get_id to the transport operations
To avoid #ifdef-ing out parts of the code and having conditionals in normal control flow, let's define "get_id" transport method and move implementation into respective transport modules. Tested-by: Tim Schumacher <timschumi@gmx.de> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Diffstat (limited to 'drivers/input/joystick/iforce/iforce-serio.c')
-rw-r--r--drivers/input/joystick/iforce/iforce-serio.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/input/joystick/iforce/iforce-serio.c b/drivers/input/joystick/iforce/iforce-serio.c
index c9469209f994..fa45ce425d47 100644
--- a/drivers/input/joystick/iforce/iforce-serio.c
+++ b/drivers/input/joystick/iforce/iforce-serio.c
@@ -67,8 +67,25 @@ again:
spin_unlock_irqrestore(&iforce->xmit_lock, flags);
}
+static int iforce_serio_get_id(struct iforce *iforce, u8 *packet)
+{
+ iforce->expect_packet = FF_CMD_QUERY;
+ iforce_send_packet(iforce, FF_CMD_QUERY, packet);
+
+ wait_event_interruptible_timeout(iforce->wait,
+ !iforce->expect_packet, HZ);
+
+ if (iforce->expect_packet) {
+ iforce->expect_packet = 0;
+ return -EIO;
+ }
+
+ return -(iforce->edata[0] != packet[0]);
+}
+
static const struct iforce_xport_ops iforce_serio_xport_ops = {
.xmit = iforce_serio_xmit,
+ .get_id = iforce_serio_get_id,
};
static void iforce_serio_write_wakeup(struct serio *serio)