diff options
author | Akash Aggarwal <quic_akasagga@quicinc.com> | 2022-08-17 19:49:51 +0530 |
---|---|---|
committer | Akash Aggarwal <quic_akasagga@quicinc.com> | 2022-08-20 01:46:58 +0530 |
commit | 20c558546c1606cc7afc6ee87992efc528ccb06a (patch) | |
tree | c8a0d0176f1a9225a5a8d9d52ad779bc66622022 /src | |
parent | 451eb040cda0cb594973cf64f5d00069f562f219 (diff) |
mm-shared-qmi: Fix current modes
Modem reports 2G+3G+4G+5G current modes, while 2G is not supported.
Consider device capabilities in deciding current modes.
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-shared-qmi.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/mm-shared-qmi.c b/src/mm-shared-qmi.c index 397d9172..30913123 100644 --- a/src/mm-shared-qmi.c +++ b/src/mm-shared-qmi.c @@ -1470,17 +1470,38 @@ mm_shared_qmi_load_current_modes_finish (MMIfaceModem *self, return TRUE; } +static MMModemMode +filter_modes_by_supported_radio_interfaces (MMSharedQmi *self, + GArray *supported_radio_interfaces, + MMModemMode allowed_modes) +{ + MMModemMode modem_modes; + guint i; + + modem_modes = MM_MODEM_MODE_NONE; + + for (i = 0; i < supported_radio_interfaces->len; i++) + modem_modes |= mm_modem_mode_from_qmi_radio_interface (g_array_index (supported_radio_interfaces, QmiDmsRadioInterface, i), self); + + return allowed_modes & modem_modes; +} + static void get_technology_preference_ready (QmiClientNas *client, GAsyncResult *res, GTask *task) { + MMSharedQmi *self; + Private *priv; LoadCurrentModesResult *result = NULL; QmiMessageNasGetTechnologyPreferenceOutput *output = NULL; GError *error = NULL; MMModemMode allowed; QmiNasRadioTechnologyPreference preference_mask; + self = g_task_get_source_object (task); + priv = get_private (self); + output = qmi_client_nas_get_technology_preference_finish (client, res, &error); if (!output || !qmi_message_nas_get_technology_preference_output_get_result (output, &error)) { g_task_return_error (task, error); @@ -1503,6 +1524,9 @@ get_technology_preference_ready (QmiClientNas *client, goto out; } + g_assert (priv->supported_radio_interfaces); + allowed = filter_modes_by_supported_radio_interfaces (self, priv->supported_radio_interfaces, allowed); + /* We got a valid value from here */ result = g_new (LoadCurrentModesResult, 1); result->allowed = allowed; @@ -1573,6 +1597,9 @@ load_current_modes_system_selection_preference_ready (QmiClientNas *client, goto out; } + g_assert (priv->supported_radio_interfaces); + allowed = filter_modes_by_supported_radio_interfaces (self, priv->supported_radio_interfaces, allowed); + /* We got a valid value from here */ result = g_new (LoadCurrentModesResult, 1); result->allowed = allowed; |