From c2c3492f3b611b037c3063159985b7453f1885bc Mon Sep 17 00:00:00 2001 From: Alexander Couzens Date: Tue, 12 Sep 2017 15:56:07 +0200 Subject: [PATCH] qmimodem: ensure the modem is registered by check cs and ps state The modem tells to early it's registered even it hasn't yet received a location update complete. --- drivers/qmimodem/network-registration.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/drivers/qmimodem/network-registration.c b/drivers/qmimodem/network-registration.c index 04f20c66..9846aba1 100644 --- a/drivers/qmimodem/network-registration.c +++ b/drivers/qmimodem/network-registration.c @@ -102,7 +102,23 @@ static bool extract_ss_info(struct qmi_result *result, int *status, if (!ss) return false; - *status = ss->status; + /* When connecting to a cell, the modem tells to early it's registered, + * event it hasn't yet received a location update complete */ + switch (ss->status) { + case NETWORK_REGISTRATION_STATUS_REGISTERED: + case NETWORK_REGISTRATION_STATUS_ROAMING: + if (ss->cs_state == 0 && ss->ps_state == 0) + *status = NETWORK_REGISTRATION_STATUS_SEARCHING; + else + *status = ss->status; + break; + case NETWORK_REGISTRATION_STATUS_DENIED: + case NETWORK_REGISTRATION_STATUS_NOT_REGISTERED: + case NETWORK_REGISTRATION_STATUS_SEARCHING: + case NETWORK_REGISTRATION_STATUS_UNKNOWN: + *status = ss->status; + break; + } DBG("serving system status %d", ss->status);