aboutsummaryrefslogtreecommitdiff
path: root/src/mm-broadband-modem-mbim.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mm-broadband-modem-mbim.c')
-rw-r--r--src/mm-broadband-modem-mbim.c29
1 files changed, 16 insertions, 13 deletions
diff --git a/src/mm-broadband-modem-mbim.c b/src/mm-broadband-modem-mbim.c
index 2b03c560..b46dce72 100644
--- a/src/mm-broadband-modem-mbim.c
+++ b/src/mm-broadband-modem-mbim.c
@@ -1633,14 +1633,13 @@ unlock_required_subscriber_ready_state_ready (MbimDevice *device,
mm_obj_dbg (self, "processed subscriber ready status response");
}
- if (g_error_matches (error, MBIM_STATUS_ERROR, MBIM_STATUS_ERROR_NOT_INITIALIZED)) {
- g_clear_error (&error);
- ready_state = MBIM_SUBSCRIBER_READY_STATE_NOT_INITIALIZED;
- }
-
if (!error) {
- /* Store last valid status loaded */
- self->priv->enabled_cache.last_ready_state = ready_state;
+ /* Store last valid ready state until it is NOT_INITIALIZED which is temporary */
+ if (ready_state != MBIM_SUBSCRIBER_READY_STATE_NOT_INITIALIZED) {
+ self->priv->enabled_cache.last_ready_state = ready_state;
+ } else {
+ self->priv->enabled_cache.last_ready_state = prev_ready_state;
+ }
switch (ready_state) {
case MBIM_SUBSCRIBER_READY_STATE_NOT_INITIALIZED:
@@ -1664,6 +1663,11 @@ unlock_required_subscriber_ready_state_ready (MbimDevice *device,
}
}
+ if (g_error_matches (error, MBIM_STATUS_ERROR, MBIM_STATUS_ERROR_NOT_INITIALIZED)) {
+ g_clear_error (&error);
+ ready_state = MBIM_SUBSCRIBER_READY_STATE_NOT_INITIALIZED;
+ }
+
/* Fatal errors are reported right away */
if (error) {
g_task_return_error (task, error);
@@ -5152,18 +5156,17 @@ basic_connect_notification_subscriber_ready_status (MMBroadbandModemMbim *self,
if ((self->priv->enabled_cache.last_ready_state != MBIM_SUBSCRIBER_READY_STATE_SIM_NOT_INSERTED &&
ready_state == MBIM_SUBSCRIBER_READY_STATE_SIM_NOT_INSERTED) ||
(self->priv->enabled_cache.last_ready_state == MBIM_SUBSCRIBER_READY_STATE_SIM_NOT_INSERTED &&
- ready_state != MBIM_SUBSCRIBER_READY_STATE_SIM_NOT_INSERTED) ||
- /*SIM state becomes "not initialized" when queried shortly after being inserted. Its state
- * transitions are: "not inserted" --> "not initialized" --> "initialized". To detect SIM
- * hotswap event from this sequence, we need the check condition below*/
- (self->priv->enabled_cache.last_ready_state == MBIM_SUBSCRIBER_READY_STATE_NOT_INITIALIZED &&
ready_state != MBIM_SUBSCRIBER_READY_STATE_SIM_NOT_INSERTED)) {
/* SIM has been removed or reinserted, re-probe to ensure correct interfaces are exposed */
mm_obj_dbg (self, "SIM hot swap detected");
active_sim_event = TRUE;
}
- self->priv->enabled_cache.last_ready_state = ready_state;
+ /* Ignore NOT_INITIALIZED state when setting the last_ready_state as it is
+ * reported regardless of whether SIM was inserted or unlocked */
+ if (ready_state != MBIM_SUBSCRIBER_READY_STATE_NOT_INITIALIZED) {
+ self->priv->enabled_cache.last_ready_state = ready_state;
+ }
if (active_sim_event) {
mm_iface_modem_process_sim_event (MM_IFACE_MODEM (self));