diff options
author | Aleksander Morgado <aleksandermj@chromium.org> | 2025-02-17 22:28:59 +0100 |
---|---|---|
committer | Dan Williams <dan@bigw.org> | 2025-02-21 14:08:50 +0000 |
commit | 781428ddcd7ea4b243bf0fa6defb8ecc377c90ea (patch) | |
tree | 816c28dfce4373470b8150054abbac2d36ae58bb /src/mm-iface-modem-firmware.c | |
parent | 93da5e0b93877f5fb80056cf5d38c6df2b154ac2 (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.c | 52 |
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 { |