aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mm-base-modem.c10
-rw-r--r--src/mm-port-qmi.c14
-rw-r--r--src/mm-port-qmi.h3
3 files changed, 27 insertions, 0 deletions
diff --git a/src/mm-base-modem.c b/src/mm-base-modem.c
index 54e28b0d..bb2e51dd 100644
--- a/src/mm-base-modem.c
+++ b/src/mm-base-modem.c
@@ -1440,6 +1440,16 @@ mm_base_modem_organize_ports (MMBaseModem *self,
#if defined WITH_QMI
if (qmi) {
+ /* The first item in the data list must be a net port, because
+ * QMI modems only expect net ports */
+ g_assert (MM_IS_PORT_NET (self->priv->data->data));
+ /* let the MMPortQmi know which net driver is being used, taken
+ * from the first item in the net port list */
+ g_list_foreach (qmi,
+ (GFunc)mm_port_qmi_set_net_driver,
+ (gpointer) mm_kernel_device_get_driver (
+ mm_port_peek_kernel_device (
+ MM_PORT (self->priv->data->data))));
g_list_foreach (qmi, (GFunc)g_object_ref, NULL);
self->priv->qmi = qmi;
}
diff --git a/src/mm-port-qmi.c b/src/mm-port-qmi.c
index 759a9196..0bbcd5ed 100644
--- a/src/mm-port-qmi.c
+++ b/src/mm-port-qmi.c
@@ -40,6 +40,7 @@ struct _MMPortQmiPrivate {
gboolean in_progress;
QmiDevice *qmi_device;
GList *services;
+ gchar *net_driver;
/* endpoint info */
gulong endpoint_info_signal_id;
QmiDataEndpointType endpoint_type;
@@ -2279,6 +2280,17 @@ mm_port_qmi_is_open (MMPortQmi *self)
/*****************************************************************************/
+void
+mm_port_qmi_set_net_driver (MMPortQmi *self,
+ const gchar *net_driver)
+{
+ g_assert (MM_IS_PORT_QMI (self));
+ g_assert (!self->priv->net_driver);
+ self->priv->net_driver = g_strdup (net_driver);
+}
+
+/*****************************************************************************/
+
typedef struct {
QmiDevice *qmi_device;
} PortQmiCloseContext;
@@ -2440,6 +2452,8 @@ dispose (GObject *object)
/* Clear device object */
g_clear_object (&self->priv->qmi_device);
+ g_clear_pointer (&self->priv->net_driver, g_free);
+
G_OBJECT_CLASS (mm_port_qmi_parent_class)->dispose (object);
}
diff --git a/src/mm-port-qmi.h b/src/mm-port-qmi.h
index 61369a43..efdc2ad4 100644
--- a/src/mm-port-qmi.h
+++ b/src/mm-port-qmi.h
@@ -65,6 +65,9 @@ gboolean mm_port_qmi_close_finish (MMPortQmi *self,
GAsyncResult *res,
GError **error);
+void mm_port_qmi_set_net_driver (MMPortQmi *self,
+ const gchar *net_driver);
+
typedef enum {
MM_PORT_QMI_FLAG_DEFAULT = 0,
MM_PORT_QMI_FLAG_WDS_IPV4 = 100,