On Tue, 2016-05-31 at 11:24 +0200, Aleksander Morgado wrote: > --- > > Hey Yegor, > > Sorry, completely forgot about it. > > Could you try this patch and see if it works?
Looks good to me. > --- > 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 _______________________________________________ ModemManager-devel mailing list ModemManager-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/modemmanager-devel