diff options
-rw-r--r-- | src/mm-broadband-modem-qmi.c | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c index df95bd65..b7ad4225 100644 --- a/src/mm-broadband-modem-qmi.c +++ b/src/mm-broadband-modem-qmi.c @@ -1442,21 +1442,31 @@ dms_uim_get_pin_status_ready (QmiClientDms *client, g_prefix_error (&error, "QMI operation failed: "); g_simple_async_result_take_error (simple, error); } else if (!qmi_message_dms_uim_get_pin_status_output_get_result (output, &error)) { - /* When no SIM inserted, an internal error when checking PIN status - * needs to be fatal so that we mark the modem unusable. */ + /* Fatal, so that we mark the modem unusable.*/ if (g_error_matches (error, QMI_PROTOCOL_ERROR, - QMI_PROTOCOL_ERROR_INTERNAL) || - g_error_matches (error, - QMI_PROTOCOL_ERROR, QMI_PROTOCOL_ERROR_UIM_UNINITIALIZED)) { + /* This error won't force a pin check retry */ g_simple_async_result_set_error (simple, MM_MOBILE_EQUIPMENT_ERROR, MM_MOBILE_EQUIPMENT_ERROR_SIM_FAILURE, - "Couldn't get PIN status: %s", + "SIM failure: %s", error->message); g_error_free (error); - } else { + } + /* Internal errors are retry-able before being fatal */ + else if (g_error_matches (error, + QMI_PROTOCOL_ERROR, + QMI_PROTOCOL_ERROR_INTERNAL)) { + g_simple_async_result_set_error (simple, + MM_CORE_ERROR, + MM_CORE_ERROR_RETRY, + "Couldn't get PIN status (retry): %s", + error->message); + g_error_free (error); + } + /* Other errors, just propagate them */ + else { g_prefix_error (&error, "Couldn't get PIN status: "); g_simple_async_result_take_error (simple, error); } |