plugin: explicitly request QMI probing
Plugins which may support QMI ports need to explicitly request QMI probing in cdc-wdm devices. This should also avoid probing cdc-wdm ports when we know that the plugin doesn't support them (e.g. with Ericsson MBM devices). https://bugzilla.gnome.org/show_bug.cgi?id=696701
This commit is contained in:
@@ -78,6 +78,7 @@ mm_plugin_create (void)
|
|||||||
MM_PLUGIN_ALLOWED_VENDOR_IDS, vendor_ids,
|
MM_PLUGIN_ALLOWED_VENDOR_IDS, vendor_ids,
|
||||||
MM_PLUGIN_ALLOWED_AT, TRUE,
|
MM_PLUGIN_ALLOWED_AT, TRUE,
|
||||||
MM_PLUGIN_ALLOWED_QCDM, TRUE,
|
MM_PLUGIN_ALLOWED_QCDM, TRUE,
|
||||||
|
MM_PLUGIN_ALLOWED_QMI, TRUE,
|
||||||
NULL));
|
NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -84,6 +84,7 @@ mm_plugin_create (void)
|
|||||||
MM_PLUGIN_ALLOWED_SUBSYSTEMS, subsystems,
|
MM_PLUGIN_ALLOWED_SUBSYSTEMS, subsystems,
|
||||||
MM_PLUGIN_ALLOWED_AT, TRUE,
|
MM_PLUGIN_ALLOWED_AT, TRUE,
|
||||||
MM_PLUGIN_ALLOWED_QCDM, TRUE,
|
MM_PLUGIN_ALLOWED_QCDM, TRUE,
|
||||||
|
MM_PLUGIN_ALLOWED_QMI, TRUE,
|
||||||
NULL));
|
NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -77,6 +77,7 @@ mm_plugin_create (void)
|
|||||||
MM_PLUGIN_ALLOWED_DRIVERS, drivers,
|
MM_PLUGIN_ALLOWED_DRIVERS, drivers,
|
||||||
MM_PLUGIN_ALLOWED_AT, TRUE,
|
MM_PLUGIN_ALLOWED_AT, TRUE,
|
||||||
MM_PLUGIN_ALLOWED_QCDM, TRUE,
|
MM_PLUGIN_ALLOWED_QCDM, TRUE,
|
||||||
|
MM_PLUGIN_ALLOWED_QMI, TRUE,
|
||||||
NULL));
|
NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -506,6 +506,7 @@ mm_plugin_create (void)
|
|||||||
MM_PLUGIN_ALLOWED_VENDOR_IDS, vendor_ids,
|
MM_PLUGIN_ALLOWED_VENDOR_IDS, vendor_ids,
|
||||||
MM_PLUGIN_ALLOWED_AT, TRUE,
|
MM_PLUGIN_ALLOWED_AT, TRUE,
|
||||||
MM_PLUGIN_ALLOWED_QCDM, TRUE,
|
MM_PLUGIN_ALLOWED_QCDM, TRUE,
|
||||||
|
MM_PLUGIN_ALLOWED_QMI, TRUE,
|
||||||
MM_PLUGIN_CUSTOM_INIT, &custom_init,
|
MM_PLUGIN_CUSTOM_INIT, &custom_init,
|
||||||
NULL));
|
NULL));
|
||||||
}
|
}
|
||||||
|
@@ -101,6 +101,7 @@ mm_plugin_create (void)
|
|||||||
MM_PLUGIN_ALLOWED_VENDOR_IDS, vendor_ids,
|
MM_PLUGIN_ALLOWED_VENDOR_IDS, vendor_ids,
|
||||||
MM_PLUGIN_ALLOWED_AT, TRUE,
|
MM_PLUGIN_ALLOWED_AT, TRUE,
|
||||||
MM_PLUGIN_ALLOWED_QCDM, TRUE,
|
MM_PLUGIN_ALLOWED_QCDM, TRUE,
|
||||||
|
MM_PLUGIN_ALLOWED_QMI, TRUE,
|
||||||
NULL));
|
NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -276,6 +276,7 @@ mm_plugin_create (void)
|
|||||||
MM_PLUGIN_ALLOWED_DRIVERS, drivers,
|
MM_PLUGIN_ALLOWED_DRIVERS, drivers,
|
||||||
MM_PLUGIN_ALLOWED_AT, TRUE,
|
MM_PLUGIN_ALLOWED_AT, TRUE,
|
||||||
MM_PLUGIN_ALLOWED_QCDM, TRUE,
|
MM_PLUGIN_ALLOWED_QCDM, TRUE,
|
||||||
|
MM_PLUGIN_ALLOWED_QMI, TRUE,
|
||||||
MM_PLUGIN_CUSTOM_INIT, &custom_init,
|
MM_PLUGIN_CUSTOM_INIT, &custom_init,
|
||||||
MM_PLUGIN_ICERA_PROBE, TRUE,
|
MM_PLUGIN_ICERA_PROBE, TRUE,
|
||||||
MM_PLUGIN_REMOVE_ECHO, FALSE,
|
MM_PLUGIN_REMOVE_ECHO, FALSE,
|
||||||
|
@@ -76,6 +76,7 @@ struct _MMPluginPrivate {
|
|||||||
gboolean at;
|
gboolean at;
|
||||||
gboolean single_at;
|
gboolean single_at;
|
||||||
gboolean qcdm;
|
gboolean qcdm;
|
||||||
|
gboolean qmi;
|
||||||
gboolean icera_probe;
|
gboolean icera_probe;
|
||||||
MMPortProbeAtCommand *custom_at_probe;
|
MMPortProbeAtCommand *custom_at_probe;
|
||||||
guint64 send_delay;
|
guint64 send_delay;
|
||||||
@@ -103,6 +104,7 @@ enum {
|
|||||||
PROP_ALLOWED_AT,
|
PROP_ALLOWED_AT,
|
||||||
PROP_ALLOWED_SINGLE_AT,
|
PROP_ALLOWED_SINGLE_AT,
|
||||||
PROP_ALLOWED_QCDM,
|
PROP_ALLOWED_QCDM,
|
||||||
|
PROP_ALLOWED_QMI,
|
||||||
PROP_ICERA_PROBE,
|
PROP_ICERA_PROBE,
|
||||||
PROP_ALLOWED_ICERA,
|
PROP_ALLOWED_ICERA,
|
||||||
PROP_FORBIDDEN_ICERA,
|
PROP_FORBIDDEN_ICERA,
|
||||||
@@ -703,10 +705,18 @@ mm_plugin_supports_port (MMPlugin *self,
|
|||||||
probe_run_flags |= (MM_PORT_PROBE_AT | MM_PORT_PROBE_AT_ICERA);
|
probe_run_flags |= (MM_PORT_PROBE_AT | MM_PORT_PROBE_AT_ICERA);
|
||||||
} else {
|
} else {
|
||||||
/* cdc-wdm ports... */
|
/* cdc-wdm ports... */
|
||||||
probe_run_flags = MM_PORT_PROBE_QMI;
|
probe_run_flags = self->priv->qmi ? MM_PORT_PROBE_QMI : MM_PORT_PROBE_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_assert (probe_run_flags != MM_PORT_PROBE_NONE);
|
/* If no explicit probing was required, just request to grab it without probing anything.
|
||||||
|
* This may happen, e.g. with cdc-wdm ports which do not need QMI probing. */
|
||||||
|
if (probe_run_flags == MM_PORT_PROBE_NONE) {
|
||||||
|
g_simple_async_result_set_op_res_gpointer (async_result,
|
||||||
|
GUINT_TO_POINTER (MM_PLUGIN_SUPPORTS_PORT_DEFER_UNTIL_SUGGESTED),
|
||||||
|
NULL);
|
||||||
|
g_simple_async_result_complete_in_idle (async_result);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
/* If a modem is already available and the plugin says that only one AT port is
|
/* If a modem is already available and the plugin says that only one AT port is
|
||||||
* expected, check if we alredy got the single AT port. And if so, we know this
|
* expected, check if we alredy got the single AT port. And if so, we know this
|
||||||
@@ -945,6 +955,10 @@ set_property (GObject *object,
|
|||||||
/* Construct only */
|
/* Construct only */
|
||||||
self->priv->qcdm = g_value_get_boolean (value);
|
self->priv->qcdm = g_value_get_boolean (value);
|
||||||
break;
|
break;
|
||||||
|
case PROP_ALLOWED_QMI:
|
||||||
|
/* Construct only */
|
||||||
|
self->priv->qmi = g_value_get_boolean (value);
|
||||||
|
break;
|
||||||
case PROP_ICERA_PROBE:
|
case PROP_ICERA_PROBE:
|
||||||
/* Construct only */
|
/* Construct only */
|
||||||
self->priv->icera_probe = g_value_get_boolean (value);
|
self->priv->icera_probe = g_value_get_boolean (value);
|
||||||
@@ -1027,6 +1041,9 @@ get_property (GObject *object,
|
|||||||
case PROP_ALLOWED_QCDM:
|
case PROP_ALLOWED_QCDM:
|
||||||
g_value_set_boolean (value, self->priv->qcdm);
|
g_value_set_boolean (value, self->priv->qcdm);
|
||||||
break;
|
break;
|
||||||
|
case PROP_ALLOWED_QMI:
|
||||||
|
g_value_set_boolean (value, self->priv->qmi);
|
||||||
|
break;
|
||||||
case PROP_ALLOWED_UDEV_TAGS:
|
case PROP_ALLOWED_UDEV_TAGS:
|
||||||
g_value_set_boxed (value, self->priv->udev_tags);
|
g_value_set_boxed (value, self->priv->udev_tags);
|
||||||
break;
|
break;
|
||||||
@@ -1218,6 +1235,14 @@ mm_plugin_class_init (MMPluginClass *klass)
|
|||||||
FALSE,
|
FALSE,
|
||||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
||||||
|
|
||||||
|
g_object_class_install_property
|
||||||
|
(object_class, PROP_ALLOWED_QMI,
|
||||||
|
g_param_spec_boolean (MM_PLUGIN_ALLOWED_QMI,
|
||||||
|
"Allowed QMI",
|
||||||
|
"Whether QMI ports are allowed in this plugin",
|
||||||
|
FALSE,
|
||||||
|
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
||||||
|
|
||||||
g_object_class_install_property
|
g_object_class_install_property
|
||||||
(object_class, PROP_ICERA_PROBE,
|
(object_class, PROP_ICERA_PROBE,
|
||||||
g_param_spec_boolean (MM_PLUGIN_ICERA_PROBE,
|
g_param_spec_boolean (MM_PLUGIN_ICERA_PROBE,
|
||||||
|
@@ -52,6 +52,7 @@
|
|||||||
#define MM_PLUGIN_ALLOWED_AT "allowed-at"
|
#define MM_PLUGIN_ALLOWED_AT "allowed-at"
|
||||||
#define MM_PLUGIN_ALLOWED_SINGLE_AT "allowed-single-at"
|
#define MM_PLUGIN_ALLOWED_SINGLE_AT "allowed-single-at"
|
||||||
#define MM_PLUGIN_ALLOWED_QCDM "allowed-qcdm"
|
#define MM_PLUGIN_ALLOWED_QCDM "allowed-qcdm"
|
||||||
|
#define MM_PLUGIN_ALLOWED_QMI "allowed-qmi"
|
||||||
#define MM_PLUGIN_ICERA_PROBE "icera-probe"
|
#define MM_PLUGIN_ICERA_PROBE "icera-probe"
|
||||||
#define MM_PLUGIN_ALLOWED_ICERA "allowed-icera"
|
#define MM_PLUGIN_ALLOWED_ICERA "allowed-icera"
|
||||||
#define MM_PLUGIN_FORBIDDEN_ICERA "forbidden-icera"
|
#define MM_PLUGIN_FORBIDDEN_ICERA "forbidden-icera"
|
||||||
|
Reference in New Issue
Block a user