uqmi: add explicit check for message type when expecting a response
authorTautvydas Belgeras <tautvydas.b@8devices.com>
Thu, 20 Jun 2019 10:45:19 +0000 (13:45 +0300)
committerKoen Vandeputte <koen.vandeputte@ncentric.com>
Thu, 27 Jun 2019 10:06:56 +0000 (12:06 +0200)
When the utility sends a request it expects a response type message,
but does not explicitly check for it. When a device stays idle for
some time, it switches into a sleep mode, and notifies the utility with an
identification type message. In some configurations the device only sends
this identification message when triggered by the utility, in this case by
the request message. What the utility gets is two messages at the same time -
an identification and a response. When it tries to decode former it obviously
fails, because it is not what it expected.

Signed-off-by: Tautvydas Belgeras <tautvydas.b@8devices.com>
dev.c

diff --git a/dev.c b/dev.c
index 4bca4299602a107efaa4ab9a6b51514369c89cb0..bd1020790f844fd364fd753135acd8f53f34d996 100644 (file)
--- a/dev.c
+++ b/dev.c
@@ -96,6 +96,9 @@ static void qmi_process_msg(struct qmi_dev *qmi, struct qmi_msg *msg)
        struct qmi_request *req;
        uint16_t tid;
 
+       if (msg->flags != QMI_CTL_FLAG_RESPONSE && msg->flags != QMI_SERVICE_FLAG_RESPONSE)
+               return;
+
        if (msg->qmux.service == QMI_SERVICE_CTL)
                tid = msg->ctl.transaction;
        else