Re: [PATCH] simtech: support QMI devices
On Tue, May 31, 2016 at 11:02 PM, Dan Williams wrote: >> >> Hey Yegor, >> >> Sorry, completely forgot about it. >> >> Could you try this patch and see if it works? > > Looks good to me. Thanks, merged to git master. -- Aleksander https://aleksander.es ___ ModemManager-devel mailing list ModemManager-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/modemmanager-devel
Re: [PATCH] simtech: support QMI devices
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 m
Re: [PATCH] simtech: support QMI devices
On Tue, May 31, 2016 at 11:24 AM, Aleksander Morgado 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 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 > ha