summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/atmodem/network-registration.c26
1 files changed, 23 insertions, 3 deletions
diff --git a/drivers/atmodem/network-registration.c b/drivers/atmodem/network-registration.c
index 94ca2514..addde7b6 100644
--- a/drivers/atmodem/network-registration.c
+++ b/drivers/atmodem/network-registration.c
@@ -104,6 +104,14 @@ static void at_registration_status(struct ofono_netreg *netreg,
cbd->user = nd;
+ /*
+ * Send *ERINFO to find out the current tech, it will be intercepted
+ * in mbm_erinfo_notify
+ */
+ if (nd->vendor == OFONO_VENDOR_MBM)
+ g_at_chat_send(nd->chat, "AT*ERINFO?", none_prefix,
+ NULL, NULL, NULL);
+
if (g_at_chat_send(nd->chat, "AT+CREG?", creg_prefix,
at_creg_cb, cbd, g_free) > 0)
return;
@@ -698,9 +706,21 @@ static void mbm_erinfo_notify(GAtResult *result, gpointer user_data)
if (g_at_result_iter_next(&iter, "*ERINFO:") == FALSE)
return;
- g_at_result_iter_next_number(&iter, &mode);
- g_at_result_iter_next_number(&iter, &gsm);
- g_at_result_iter_next_number(&iter, &umts);
+ if (g_at_result_iter_next_number(&iter, &mode) == FALSE)
+ return;
+
+ if (g_at_result_iter_next_number(&iter, &gsm) == FALSE)
+ return;
+
+ /*
+ * According to MBM the ERINFO unsolicited response does not contain
+ * the mode parameter, however at least the MD300 does report it. So
+ * we handle both 2 and 3 argument versions
+ */
+ if (g_at_result_iter_next_number(&iter, &umts) == FALSE) {
+ gsm = mode;
+ umts = gsm;
+ }
ofono_info("network capability: GSM %d UMTS %d", gsm, umts);
}