diff options
Diffstat (limited to 'src/mm-broadband-modem-mbim.c')
-rw-r--r-- | src/mm-broadband-modem-mbim.c | 45 |
1 files changed, 41 insertions, 4 deletions
diff --git a/src/mm-broadband-modem-mbim.c b/src/mm-broadband-modem-mbim.c index fe5e7534..c7769cdc 100644 --- a/src/mm-broadband-modem-mbim.c +++ b/src/mm-broadband-modem-mbim.c @@ -676,6 +676,14 @@ modem_load_manufacturer (MMIfaceModem *self, /* Model loading (Modem interface) */ static gchar * +modem_load_model_default (MMIfaceModem *self) +{ + return g_strdup_printf ("MBIM [%04X:%04X]", + (mm_base_modem_get_vendor_id (MM_BASE_MODEM (self)) & 0xFFFF), + (mm_base_modem_get_product_id (MM_BASE_MODEM (self)) & 0xFFFF)); +} + +static gchar * modem_load_model_finish (MMIfaceModem *self, GAsyncResult *res, GError **error) @@ -683,6 +691,29 @@ modem_load_model_finish (MMIfaceModem *self, return g_task_propagate_pointer (G_TASK (res), error); } +#if defined WITH_QMI && QMI_MBIM_QMUX_SUPPORTED + +static void +qmi_load_model_ready (MMIfaceModem *self, + GAsyncResult *res, + GTask *task) +{ + gchar *model = NULL; + GError *error = NULL; + + model = mm_shared_qmi_load_model_finish (self, res, &error); + if (!model) { + mm_obj_dbg (self, "couldn't load model using QMI over MBIM: %s", error->message); + model = modem_load_model_default (self); + g_clear_error (&error); + } + + g_task_return_pointer (task, model, g_free); + g_object_unref (task); +} + +#endif + static void modem_load_model (MMIfaceModem *self, GAsyncReadyCallback callback, @@ -692,18 +723,24 @@ modem_load_model (MMIfaceModem *self, GTask *task; MMPortMbim *port; + task = g_task_new (self, NULL, callback, user_data); + port = mm_broadband_modem_mbim_peek_port_mbim (MM_BROADBAND_MODEM_MBIM (self)); if (port) { model = g_strdup (mm_kernel_device_get_physdev_product ( mm_port_peek_kernel_device (MM_PORT (port)))); } +#if defined WITH_QMI && QMI_MBIM_QMUX_SUPPORTED + if (!model) { + mm_shared_qmi_load_model (self, (GAsyncReadyCallback)qmi_load_model_ready, task); + return; + } +#endif + if (!model) - model = g_strdup_printf ("MBIM [%04X:%04X]", - (mm_base_modem_get_vendor_id (MM_BASE_MODEM (self)) & 0xFFFF), - (mm_base_modem_get_product_id (MM_BASE_MODEM (self)) & 0xFFFF)); + model = modem_load_model_default (self); - task = g_task_new (self, NULL, callback, user_data); g_task_return_pointer (task, model, g_free); g_object_unref (task); } |