plugin: avoid QMI-managed net ports when compiling without QMI support

This commit is contained in:
Aleksander Morgado
2012-12-27 13:42:28 +01:00
parent 80b68ac0ae
commit 731812fe34
3 changed files with 27 additions and 17 deletions

View File

@@ -197,16 +197,16 @@ out:
return success; return success;
} }
static gchar * const gchar *
get_driver_name (GUdevDevice *device) mm_device_utils_get_port_driver (GUdevDevice *udev_port)
{ {
GUdevDevice *parent = NULL;
const gchar *driver, *subsys; const gchar *driver, *subsys;
gchar *ret = NULL;
driver = g_udev_device_get_driver (device); driver = g_udev_device_get_driver (udev_port);
if (!driver) { if (!driver) {
parent = g_udev_device_get_parent (device); GUdevDevice *parent;
parent = g_udev_device_get_parent (udev_port);
if (parent) if (parent)
driver = g_udev_device_get_driver (parent); driver = g_udev_device_get_driver (parent);
@@ -218,32 +218,29 @@ get_driver_name (GUdevDevice *device)
if (subsys && !strcmp (subsys, "bluetooth")) if (subsys && !strcmp (subsys, "bluetooth"))
driver = "bluetooth"; driver = "bluetooth";
} }
if (parent)
g_object_unref (parent);
} }
if (driver) return driver;
ret = g_strdup (driver);
if (parent)
g_object_unref (parent);
return ret;
} }
static void static void
add_port_driver (MMDevice *self, add_port_driver (MMDevice *self,
GUdevDevice *udev_port) GUdevDevice *udev_port)
{ {
gchar *driver = NULL; const gchar *driver;
guint n_items; guint n_items;
guint i; guint i;
driver = get_driver_name (udev_port); driver = mm_device_utils_get_port_driver (udev_port);
n_items = (self->priv->drivers ? g_strv_length (self->priv->drivers) : 0); n_items = (self->priv->drivers ? g_strv_length (self->priv->drivers) : 0);
if (n_items > 0) { if (n_items > 0) {
/* Add driver to our list of drivers, if not already there */ /* Add driver to our list of drivers, if not already there */
for (i = 0; self->priv->drivers[i]; i++) { for (i = 0; self->priv->drivers[i]; i++) {
if (g_str_equal (self->priv->drivers[i], driver)) { if (g_str_equal (self->priv->drivers[i], driver)) {
g_free (driver);
driver = NULL; driver = NULL;
break; break;
} }
@@ -255,7 +252,7 @@ add_port_driver (MMDevice *self,
self->priv->drivers = g_realloc (self->priv->drivers, self->priv->drivers = g_realloc (self->priv->drivers,
(n_items + 2) * sizeof (gchar *)); (n_items + 2) * sizeof (gchar *));
self->priv->drivers[n_items] = driver; self->priv->drivers[n_items] = g_strdup (driver);
self->priv->drivers[n_items + 1] = NULL; self->priv->drivers[n_items + 1] = NULL;
} }

View File

@@ -94,4 +94,6 @@ GObject *mm_device_get_port_probe (MMDevice *self,
GList *mm_device_peek_port_probe_list (MMDevice *self); GList *mm_device_peek_port_probe_list (MMDevice *self);
GList *mm_device_get_port_probe_list (MMDevice *self); GList *mm_device_get_port_probe_list (MMDevice *self);
const gchar *mm_device_utils_get_port_driver (GUdevDevice *udev_port);
#endif /* MM_DEVICE_H */ #endif /* MM_DEVICE_H */

View File

@@ -820,7 +820,18 @@ mm_plugin_create_modem (MMPlugin *self,
MM_CORE_ERROR_UNSUPPORTED, MM_CORE_ERROR_UNSUPPORTED,
"unsupported subsystem: '%s'", "unsupported subsystem: '%s'",
mm_port_probe_get_port_subsys (probe)); mm_port_probe_get_port_subsys (probe));
} else if (MM_PLUGIN_GET_CLASS (self)->grab_port) }
#if !defined WITH_QMI
else if (mm_port_probe_get_port_type (probe) == MM_PORT_TYPE_NET &&
g_str_equal (mm_device_utils_get_port_driver (mm_port_probe_peek_port (probe)),
"qmi_wwan")) {
grabbed = FALSE;
inner_error = g_error_new (MM_CORE_ERROR,
MM_CORE_ERROR_UNSUPPORTED,
"ignoring QMI net port");
}
#endif
else if (MM_PLUGIN_GET_CLASS (self)->grab_port)
grabbed = MM_PLUGIN_GET_CLASS (self)->grab_port (MM_PLUGIN (self), grabbed = MM_PLUGIN_GET_CLASS (self)->grab_port (MM_PLUGIN (self),
modem, modem,
probe, probe,