On Tue, May 31, 2016 at 11:24 AM, Aleksander Morgado <aleksan...@aleksander.es> wrote: > --- > > Hey Yegor, > > Sorry, completely forgot about it. > > Could you try this patch and see if it works?
It works. Thanks. Tested-by: Yegor Yefremov <yegorsli...@googlemail.com> Yegor > --- > plugins/simtech/mm-plugin-simtech.c | 79 > ++++++++++++++++++++----------------- > 1 file changed, 43 insertions(+), 36 deletions(-) > > diff --git a/plugins/simtech/mm-plugin-simtech.c > b/plugins/simtech/mm-plugin-simtech.c > index fcaa250..b736185 100644 > --- a/plugins/simtech/mm-plugin-simtech.c > +++ b/plugins/simtech/mm-plugin-simtech.c > @@ -25,6 +25,10 @@ > #include "mm-plugin-simtech.h" > #include "mm-broadband-modem-simtech.h" > > +#if defined WITH_QMI > +#include "mm-broadband-modem-qmi.h" > +#endif > + > G_DEFINE_TYPE (MMPluginSimtech, mm_plugin_simtech, MM_TYPE_PLUGIN) > > MM_PLUGIN_DEFINE_MAJOR_VERSION > @@ -41,6 +45,17 @@ create_modem (MMPlugin *self, > GList *probes, > GError **error) > { > +#if defined WITH_QMI > + if (mm_port_probe_list_has_qmi_port (probes)) { > + mm_dbg ("QMI-powered SimTech modem found..."); > + return MM_BASE_MODEM (mm_broadband_modem_qmi_new (sysfs_path, > + drivers, > + mm_plugin_get_name > (self), > + vendor, > + product)); > + } > +#endif > + > return MM_BASE_MODEM (mm_broadband_modem_simtech_new (sysfs_path, > drivers, > mm_plugin_get_name > (self), > @@ -58,44 +73,35 @@ grab_port (MMPlugin *self, > MMPortType ptype; > MMPortSerialAtFlag pflags = MM_PORT_SERIAL_AT_FLAG_NONE; > > - /* The Simtech plugin cannot do anything with non-AT non-QCDM ports */ > - if (!mm_port_probe_is_at (probe) && > - !mm_port_probe_is_qcdm (probe)) { > - g_set_error_literal (error, > - MM_CORE_ERROR, > - MM_CORE_ERROR_UNSUPPORTED, > - "Ignoring non-AT non-QCDM port"); > - return FALSE; > - } > - > port = mm_port_probe_peek_port (probe); > - > - /* Look for port type hints; just probing can't distinguish which port > should > - * be the data/primary port on these devices. We have to tag them based > on > - * what the Windows .INF files say the port layout should be. > - */ > - if (g_udev_device_get_property_as_boolean (port, > "ID_MM_SIMTECH_PORT_TYPE_MODEM")) { > - mm_dbg ("Simtech: AT port '%s/%s' flagged as primary", > - mm_port_probe_get_port_subsys (probe), > - mm_port_probe_get_port_name (probe)); > - pflags = MM_PORT_SERIAL_AT_FLAG_PRIMARY; > - } else if (g_udev_device_get_property_as_boolean (port, > "ID_MM_SIMTECH_PORT_TYPE_AUX")) { > - mm_dbg ("Simtech: AT port '%s/%s' flagged as secondary", > - mm_port_probe_get_port_subsys (probe), > - mm_port_probe_get_port_name (probe)); > - pflags = MM_PORT_SERIAL_AT_FLAG_SECONDARY; > + ptype = mm_port_probe_get_port_type (probe); > + > + if (mm_port_probe_is_at (probe)) { > + /* Look for port type hints; just probing can't distinguish which > port should > + * be the data/primary port on these devices. We have to tag them > based on > + * what the Windows .INF files say the port layout should be. > + */ > + if (g_udev_device_get_property_as_boolean (port, > "ID_MM_SIMTECH_PORT_TYPE_MODEM")) { > + mm_dbg ("Simtech: AT port '%s/%s' flagged as primary", > + mm_port_probe_get_port_subsys (probe), > + mm_port_probe_get_port_name (probe)); > + pflags = MM_PORT_SERIAL_AT_FLAG_PRIMARY; > + } else if (g_udev_device_get_property_as_boolean (port, > "ID_MM_SIMTECH_PORT_TYPE_AUX")) { > + mm_dbg ("Simtech: AT port '%s/%s' flagged as secondary", > + mm_port_probe_get_port_subsys (probe), > + mm_port_probe_get_port_name (probe)); > + pflags = MM_PORT_SERIAL_AT_FLAG_SECONDARY; > + } > + > + /* If the port was tagged by the udev rules but isn't a primary or > secondary, > + * then ignore it to guard against race conditions if a device just > happens > + * to show up with more than two AT-capable ports. > + */ > + if (pflags == MM_PORT_SERIAL_AT_FLAG_NONE && > + g_udev_device_get_property_as_boolean (port, > "ID_MM_SIMTECH_TAGGED")) > + ptype = MM_PORT_TYPE_IGNORED; > } > > - /* If the port was tagged by the udev rules but isn't a primary or > secondary, > - * then ignore it to guard against race conditions if a device just > happens > - * to show up with more than two AT-capable ports. > - */ > - if (pflags == MM_PORT_SERIAL_AT_FLAG_NONE && > - g_udev_device_get_property_as_boolean (port, "ID_MM_SIMTECH_TAGGED")) > - ptype = MM_PORT_TYPE_IGNORED; > - else > - ptype = mm_port_probe_get_port_type (probe); > - > return mm_base_modem_grab_port (modem, > mm_port_probe_get_port_subsys (probe), > mm_port_probe_get_port_name (probe), > @@ -110,7 +116,7 @@ grab_port (MMPlugin *self, > G_MODULE_EXPORT MMPlugin * > mm_plugin_create (void) > { > - static const gchar *subsystems[] = { "tty", NULL }; > + static const gchar *subsystems[] = { "tty", "net", "usb", NULL }; > static const guint16 vendor_ids[] = { 0x1e0e, /* A-Link (for now) */ > 0 }; > > @@ -121,6 +127,7 @@ mm_plugin_create (void) > MM_PLUGIN_ALLOWED_VENDOR_IDS, vendor_ids, > MM_PLUGIN_ALLOWED_AT, TRUE, > MM_PLUGIN_ALLOWED_QCDM, TRUE, > + MM_PLUGIN_ALLOWED_QMI, TRUE, > NULL)); > } > > -- > 2.8.2 _______________________________________________ ModemManager-devel mailing list ModemManager-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/modemmanager-devel