diff options
author | Stig M. Baugstø <1129097-stigma@users.noreply.gitlab.freedesktop.org> | 2024-10-23 17:10:31 +0200 |
---|---|---|
committer | Stig M. Baugstø <1129097-stigma@users.noreply.gitlab.freedesktop.org> | 2024-10-24 15:21:02 +0200 |
commit | 78508b7dcea158c3e54386f8bfdaf0fd855ea169 (patch) | |
tree | 4d20b2e889f2e8a16a180a63c10651aefb6ce210 /src | |
parent | ea9438ab98a24498eafe771e8311bcb39d8fec0d (diff) |
bearer-qmi: add udev device tag ID_MM_QMI_PCO_DISABLED to disable PCO
Some modems like the Qualcomm-based Cellient MPL200 and SimTech
SIM7100E will crash some time after requesting operator reserved PCO.
The new udev tag ID_MM_QMI_PCO_DISABLED disables the PCO settings
request when set, indirectly disabling PCO.
Signed-off-by: Stig M. Baugstø <1129097-stigma@users.noreply.gitlab.freedesktop.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-bearer-qmi.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/mm-bearer-qmi.c b/src/mm-bearer-qmi.c index 4e64e220..0918c05f 100644 --- a/src/mm-bearer-qmi.c +++ b/src/mm-bearer-qmi.c @@ -1103,10 +1103,12 @@ get_current_settings_ready (QmiClientWds *client, static void get_current_settings (GTask *task, QmiClientWds *client) { - ConnectContext *ctx; - QmiMessageWdsGetCurrentSettingsInput *input; - QmiWdsRequestedSettings requested; + MMBearerQmi *self; + ConnectContext *ctx; + QmiMessageWdsGetCurrentSettingsInput *input; + QmiWdsRequestedSettings requested; + self = g_task_get_source_object (task); ctx = g_task_get_task_data (task); g_assert (ctx->running_ipv4 || ctx->running_ipv6); @@ -1116,8 +1118,15 @@ get_current_settings (GTask *task, QmiClientWds *client) QMI_WDS_REQUESTED_SETTINGS_GATEWAY_INFO | QMI_WDS_REQUESTED_SETTINGS_MTU | QMI_WDS_REQUESTED_SETTINGS_DOMAIN_NAME_LIST | - QMI_WDS_REQUESTED_SETTINGS_IP_FAMILY | - QMI_WDS_REQUESTED_SETTINGS_OPERATOR_RESERVED_PCO; + QMI_WDS_REQUESTED_SETTINGS_IP_FAMILY; + + /* Modems like Qualcomm MPL200 and SimTech SIM7100E eventually crash when enabling PCO. + * Avoid crashing by skip registering for PCO */ + if (!mm_kernel_device_get_global_property_as_boolean (mm_port_peek_kernel_device (MM_PORT (ctx->qmi)), + "ID_MM_QMI_PCO_DISABLED")) { + mm_obj_dbg (self, "Requesting QMI WDS Operator Reserved PCO"); + requested |= QMI_WDS_REQUESTED_SETTINGS_OPERATOR_RESERVED_PCO; + } input = qmi_message_wds_get_current_settings_input_new (); qmi_message_wds_get_current_settings_input_set_requested_settings (input, requested, NULL); |