diff options
-rw-r--r-- | plugins/quectel/77-mm-quectel-port-types.rules | 2 | ||||
-rw-r--r-- | plugins/quectel/mm-shared-quectel.c | 37 |
2 files changed, 32 insertions, 7 deletions
diff --git a/plugins/quectel/77-mm-quectel-port-types.rules b/plugins/quectel/77-mm-quectel-port-types.rules index d8f50d0b..65993a2f 100644 --- a/plugins/quectel/77-mm-quectel-port-types.rules +++ b/plugins/quectel/77-mm-quectel-port-types.rules @@ -70,7 +70,9 @@ ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0800", ENV{.MM_USBIFNUM}=="03", SUBS # Quectel EM05-G and EM05-CE with firehose support ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="030a", ENV{ID_MM_QUECTEL_FIREHOSE}="1" +ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="030a", ENV{ID_MM_QUECTEL_SAHARA}="1" ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0127", ENV{ID_MM_QUECTEL_FIREHOSE}="1" +ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0127", ENV{ID_MM_QUECTEL_SAHARA}="1" GOTO="mm_quectel_end" diff --git a/plugins/quectel/mm-shared-quectel.c b/plugins/quectel/mm-shared-quectel.c index 1a7355c7..4874bf5c 100644 --- a/plugins/quectel/mm-shared-quectel.c +++ b/plugins/quectel/mm-shared-quectel.c @@ -148,12 +148,35 @@ mm_shared_quectel_firmware_load_update_settings_finish (MMIfaceModemFirmware *s } static gboolean +quectel_is_sahara_supported (MMBaseModem *modem, + MMPort *port) +{ + return mm_kernel_device_get_global_property_as_boolean (mm_port_peek_kernel_device (port), "ID_MM_QUECTEL_SAHARA"); +} + +static gboolean quectel_is_firehose_supported (MMBaseModem *modem, MMPort *port) { return mm_kernel_device_get_global_property_as_boolean (mm_port_peek_kernel_device (port), "ID_MM_QUECTEL_FIREHOSE"); } +static MMModemFirmwareUpdateMethod +quectel_get_firmware_update_methods (MMBaseModem *modem, + MMPort *port) +{ + MMModemFirmwareUpdateMethod update_methods; + + update_methods = MM_MODEM_FIRMWARE_UPDATE_METHOD_NONE; + + if (quectel_is_firehose_supported (modem, port)) + update_methods |= MM_MODEM_FIRMWARE_UPDATE_METHOD_FIREHOSE; + if (quectel_is_sahara_supported (modem, port)) + update_methods |= MM_MODEM_FIRMWARE_UPDATE_METHOD_SAHARA; + + return update_methods; +} + static void quectel_at_port_get_firmware_version_ready (MMBaseModem *modem, GAsyncResult *res, @@ -227,6 +250,7 @@ mm_shared_quectel_firmware_load_update_settings (MMIfaceModemFirmware *self, { GTask *task; MMFirmwareUpdateSettings *update_settings; + MMModemFirmwareUpdateMethod update_methods; MMPortSerialAt *at_port; #if defined WITH_MBIM MMPortMbim *mbim; @@ -236,9 +260,11 @@ mm_shared_quectel_firmware_load_update_settings (MMIfaceModemFirmware *self, at_port = mm_base_modem_peek_best_at_port (MM_BASE_MODEM (self), NULL); if (at_port) { - if (quectel_is_firehose_supported (MM_BASE_MODEM (self), MM_PORT (at_port))) { + update_methods = quectel_get_firmware_update_methods (MM_BASE_MODEM (self), MM_PORT (at_port)); + + if (update_methods & MM_MODEM_FIRMWARE_UPDATE_METHOD_FIREHOSE) { /* Firehose modems */ - update_settings = mm_firmware_update_settings_new (MM_MODEM_FIRMWARE_UPDATE_METHOD_FIREHOSE); + update_settings = mm_firmware_update_settings_new (update_methods); g_task_set_task_data (task, update_settings, g_object_unref); /* Fetch full firmware info */ mm_base_modem_at_command (MM_BASE_MODEM (self), @@ -264,11 +290,8 @@ mm_shared_quectel_firmware_load_update_settings (MMIfaceModemFirmware *self, if (mbim) { g_autoptr(MbimMessage) message = NULL; - /* Set update method */ - if (quectel_is_firehose_supported (MM_BASE_MODEM (self), MM_PORT (mbim))) - update_settings = mm_firmware_update_settings_new (MM_MODEM_FIRMWARE_UPDATE_METHOD_FIREHOSE); - else - update_settings = mm_firmware_update_settings_new (MM_MODEM_FIRMWARE_UPDATE_METHOD_NONE); + update_methods = quectel_get_firmware_update_methods (MM_BASE_MODEM (self), MM_PORT (mbim)); + update_settings = mm_firmware_update_settings_new (update_methods); /* Fetch firmware info */ g_task_set_task_data (task, update_settings, g_object_unref); |