aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorStig M. Baugstø <1129097-stigma@users.noreply.gitlab.freedesktop.org>2024-10-23 17:10:31 +0200
committerStig M. Baugstø <1129097-stigma@users.noreply.gitlab.freedesktop.org>2024-10-24 15:21:02 +0200
commit78508b7dcea158c3e54386f8bfdaf0fd855ea169 (patch)
tree4d20b2e889f2e8a16a180a63c10651aefb6ce210 /src
parentea9438ab98a24498eafe771e8311bcb39d8fec0d (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.c19
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);