summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gprs.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/src/gprs.c b/src/gprs.c
index 9cb69d14..f7a2b739 100644
--- a/src/gprs.c
+++ b/src/gprs.c
@@ -1660,6 +1660,15 @@ static void gprs_netreg_removed(struct ofono_gprs *gprs)
gprs_attached_update(gprs);
}
+static gboolean on_lte(struct ofono_gprs *gprs)
+{
+ if (ofono_netreg_get_technology(gprs->netreg) ==
+ ACCESS_TECHNOLOGY_EUTRAN && have_read_settings(gprs))
+ return TRUE;
+
+ return FALSE;
+}
+
static void gprs_netreg_update(struct ofono_gprs *gprs)
{
ofono_bool_t attach;
@@ -1682,8 +1691,7 @@ static void gprs_netreg_update(struct ofono_gprs *gprs)
DBG("attach: %u, driver_attached: %u", attach, gprs->driver_attached);
- if (ofono_netreg_get_technology(gprs->netreg) ==
- ACCESS_TECHNOLOGY_EUTRAN && have_read_settings(gprs))
+ if (on_lte(gprs))
/*
* For LTE we set attached status only on successful
* context activation.
@@ -2560,7 +2568,16 @@ void ofono_gprs_status_notify(struct ofono_gprs *gprs, int status)
if (status != NETWORK_REGISTRATION_STATUS_REGISTERED &&
status != NETWORK_REGISTRATION_STATUS_ROAMING) {
- gprs_attached_update(gprs);
+ /*
+ * For LTE we attached status reflects successful context
+ * activation.
+ * Since we in gprs_netreg_update not even try to attach
+ * to GPRS if we are running on LTE, we can on some modems
+ * expect the gprs status to be unknown. That must not
+ * result in detaching...
+ */
+ if (!on_lte(gprs))
+ gprs_attached_update(gprs);
return;
}