diff options
-rw-r--r-- | src/mm-broadband-modem-qmi.c | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c index b5f29b8b..2c817fc7 100644 --- a/src/mm-broadband-modem-qmi.c +++ b/src/mm-broadband-modem-qmi.c @@ -4173,6 +4173,7 @@ typedef struct { QmiClientNas *client; gboolean enable; /* TRUE for enabling, FALSE for disabling */ gboolean system_info_checked; + gboolean serving_system_disabled; } UnsolicitedRegistrationEventsContext; static void @@ -4225,13 +4226,14 @@ ri_serving_system_or_system_info_ready (QmiClientNas *client, UnsolicitedRegistrationEventsContext *ctx; g_autoptr(QmiMessageNasRegisterIndicationsOutput) output = NULL; g_autoptr(GError) error = NULL; + g_autoptr(QmiMessageNasRegisterIndicationsInput) input = NULL; self = g_task_get_source_object (task); ctx = g_task_get_task_data (task); output = qmi_client_nas_register_indications_finish (client, res, &error); if (!output || !qmi_message_nas_register_indications_output_get_result (output, &error)) { - if (!ctx->system_info_checked) { + if (!ctx->system_info_checked && !ctx->serving_system_disabled) { mm_obj_dbg (self, "couldn't register system info indication: '%s', falling-back to serving system", error->message); ctx->system_info_checked = TRUE; common_enable_disable_unsolicited_registration_events_serving_system (task); @@ -4245,7 +4247,25 @@ ri_serving_system_or_system_info_ready (QmiClientNas *client, } if (!ctx->system_info_checked) { + /* When enabling system info, serving system events are turned-off, since some + * modems have them active by default. + */ + if (ctx->enable && !ctx->serving_system_disabled) { + input = qmi_message_nas_register_indications_input_new (); + qmi_message_nas_register_indications_input_set_serving_system_events (input, FALSE, NULL); + qmi_client_nas_register_indications ( + ctx->client, + input, + 5, + NULL, + (GAsyncReadyCallback)ri_serving_system_or_system_info_ready, + task); + ctx->serving_system_disabled = TRUE; + return; + } + ctx->system_info_checked = TRUE; + /* registered system info indications. now try to register for system status indications */ if (self->priv->dsd_supported) { common_enable_disable_unsolicited_registration_events_system_status (task); @@ -4349,11 +4369,6 @@ common_enable_disable_unsolicited_registration_events_system_info (GTask *task) ctx = g_task_get_task_data (task); input = qmi_message_nas_register_indications_input_new (); qmi_message_nas_register_indications_input_set_system_info (input, ctx->enable, NULL); - /* When enabling, serving system events are turned-off, since some modems have them - * active by default. They will be turned-on again if setting system info events fails - */ - if (ctx->enable) - qmi_message_nas_register_indications_input_set_serving_system_events (input, FALSE, NULL); qmi_message_nas_register_indications_input_set_network_reject_information (input, ctx->enable, FALSE, NULL); qmi_client_nas_register_indications ( ctx->client, |