diff options
-rw-r--r-- | src/mm-broadband-modem.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c index d78a2ee5..8a376c63 100644 --- a/src/mm-broadband-modem.c +++ b/src/mm-broadband-modem.c @@ -4165,10 +4165,23 @@ modem_check_for_sim_swap (MMIfaceModem *self, MM_IFACE_MODEM_SIM, &ctx->sim, NULL); if (!ctx->sim) { - g_task_return_new_error (task, - MM_CORE_ERROR, - MM_CORE_ERROR_FAILED, - "could not acquire sim object"); + MMModemState modem_state; + + modem_state = MM_MODEM_STATE_UNKNOWN; + g_object_get (self, + MM_IFACE_MODEM_STATE, &modem_state, + NULL); + + if (modem_state == MM_MODEM_STATE_FAILED) { + mm_obj_info (self, "new SIM detected, handle as SIM hot-swap"); + mm_broadband_modem_sim_hot_swap_detected (MM_BROADBAND_MODEM (self)); + g_task_return_boolean (task, TRUE); + } else { + g_task_return_new_error (task, + MM_CORE_ERROR, + MM_CORE_ERROR_FAILED, + "could not acquire sim object"); + } g_object_unref (task); return; } |