aboutsummaryrefslogtreecommitdiff
path: root/src/mm-iface-modem-firmware.c
diff options
context:
space:
mode:
authorAleksander Morgado <aleksandermj@chromium.org>2025-02-17 22:28:59 +0100
committerDan Williams <dan@bigw.org>2025-02-21 14:08:50 +0000
commit781428ddcd7ea4b243bf0fa6defb8ecc377c90ea (patch)
tree816c28dfce4373470b8150054abbac2d36ae58bb /src/mm-iface-modem-firmware.c
parent93da5e0b93877f5fb80056cf5d38c6df2b154ac2 (diff)
iface-modem-firmware: common logic to check for sahara/firehose tags
The logic will exclusively look for the udev tags reporting sahara/firehose support in the primary control port of each modem type.
Diffstat (limited to 'src/mm-iface-modem-firmware.c')
-rw-r--r--src/mm-iface-modem-firmware.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/mm-iface-modem-firmware.c b/src/mm-iface-modem-firmware.c
index 9872db23..ee52ae80 100644
--- a/src/mm-iface-modem-firmware.c
+++ b/src/mm-iface-modem-firmware.c
@@ -40,6 +40,58 @@ mm_iface_modem_firmware_bind_simple_status (MMIfaceModemFirmware *self,
}
/*****************************************************************************/
+/* Load update settings in port (Firmware interface) */
+
+MMFirmwareUpdateSettings *
+mm_iface_modem_firmware_load_update_settings_in_port_finish (MMIfaceModemFirmware *self,
+ GAsyncResult *res,
+ GError **error)
+{
+ return g_task_propagate_pointer (G_TASK (res), error);
+}
+
+static gboolean
+modem_is_sahara_supported (MMKernelDevice *kernel_device)
+{
+ return mm_kernel_device_get_global_property_as_boolean (kernel_device, "ID_MM_QUALCOMM_SAHARA");
+}
+
+static gboolean
+modem_is_firehose_supported (MMKernelDevice *kernel_device)
+{
+ return mm_kernel_device_get_global_property_as_boolean (kernel_device, "ID_MM_QUALCOMM_FIREHOSE");
+}
+
+void
+mm_iface_modem_firmware_load_update_settings_in_port (MMIfaceModemFirmware *self,
+ MMPort *port,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GTask *task;
+ MMModemFirmwareUpdateMethod update_methods;
+ g_autoptr(MMFirmwareUpdateSettings) update_settings = NULL;
+
+ task = g_task_new (self, NULL, callback, user_data);
+
+ update_methods = MM_MODEM_FIRMWARE_UPDATE_METHOD_NONE;
+ if (MM_IS_PORT (port)) {
+ MMKernelDevice *kernel_device;
+
+ kernel_device = mm_port_peek_kernel_device (MM_PORT (port));
+
+ if (modem_is_firehose_supported (kernel_device))
+ update_methods |= MM_MODEM_FIRMWARE_UPDATE_METHOD_FIREHOSE;
+ if (modem_is_sahara_supported (kernel_device))
+ update_methods |= MM_MODEM_FIRMWARE_UPDATE_METHOD_SAHARA;
+ }
+
+ update_settings = mm_firmware_update_settings_new (update_methods);
+ g_task_return_pointer (task, g_object_ref (update_settings), (GDestroyNotify)g_object_unref);
+ g_object_unref (task);
+}
+
+/*****************************************************************************/
/* Handle the 'List' method from DBus */
typedef struct {