plugin: improve probing decision logic for QMI and MBIM
So, we may have modems with multiple /dev/cdc-wdm ports, like Ericsson modems, where only 1 of them is MBIM. With the previous logic, we would probe all /dev/cdc-wdm ports for MBIM as soon as one of the ports was handled by the cdc_mbim driver. That is totally not optimal, as we are already know that they are not MBIM (not handled by cdc_mbim). Instead, fix the logic to just probe for MBIM or QMI if the actual driver managing the port is MBIM or QMI.
This commit is contained in:
@@ -632,21 +632,6 @@ mm_plugin_supports_port_finish (MMPlugin *self,
|
|||||||
return (MMPluginSupportsResult) GPOINTER_TO_UINT (g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (result)));
|
return (MMPluginSupportsResult) GPOINTER_TO_UINT (g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (result)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
|
||||||
find_driver_in_device (MMDevice *device,
|
|
||||||
const gchar *driver)
|
|
||||||
{
|
|
||||||
const gchar **device_drivers;
|
|
||||||
guint i;
|
|
||||||
|
|
||||||
device_drivers = mm_device_get_drivers (device);
|
|
||||||
for (i = 0; device_drivers[i]; i++) {
|
|
||||||
if (g_str_equal (driver, device_drivers[i]))
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
mm_plugin_supports_port (MMPlugin *self,
|
mm_plugin_supports_port (MMPlugin *self,
|
||||||
MMDevice *device,
|
MMDevice *device,
|
||||||
@@ -723,9 +708,9 @@ mm_plugin_supports_port (MMPlugin *self,
|
|||||||
} else {
|
} else {
|
||||||
/* cdc-wdm ports... */
|
/* cdc-wdm ports... */
|
||||||
probe_run_flags = MM_PORT_PROBE_NONE;
|
probe_run_flags = MM_PORT_PROBE_NONE;
|
||||||
if (self->priv->qmi && find_driver_in_device (device, "qmi_wwan"))
|
if (self->priv->qmi && g_str_equal (mm_device_utils_get_port_driver (port), "qmi_wwan"))
|
||||||
probe_run_flags |= MM_PORT_PROBE_QMI;
|
probe_run_flags |= MM_PORT_PROBE_QMI;
|
||||||
else if (self->priv->mbim && find_driver_in_device (device, "cdc_mbim"))
|
else if (self->priv->mbim && g_str_equal (mm_device_utils_get_port_driver (port), "cdc_mbim"))
|
||||||
probe_run_flags |= MM_PORT_PROBE_MBIM;
|
probe_run_flags |= MM_PORT_PROBE_MBIM;
|
||||||
else
|
else
|
||||||
probe_run_flags |= MM_PORT_PROBE_AT;
|
probe_run_flags |= MM_PORT_PROBE_AT;
|
||||||
|
Reference in New Issue
Block a user