diff options
author | Daniele Palmas <dnlplm@gmail.com> | 2016-04-29 12:50:09 +0200 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2016-05-03 11:44:33 -0500 |
commit | 4403bb7764268a3924ed0ed7d14c510751fdbb4d (patch) | |
tree | 9d5010ae95405a03fcfbe83f164365f98383d146 | |
parent | 850318fd965d992994412688955f1e3ce8a9c97e (diff) | |
download | ModemManager-4403bb7764268a3924ed0ed7d14c510751fdbb4d.tar.gz |
dell: add Telit manufacturer
Dell-branded AT based Telit modems should use Telit plugin functions
-rw-r--r-- | plugins/dell/mm-plugin-dell.c | 53 |
1 files changed, 51 insertions, 2 deletions
diff --git a/plugins/dell/mm-plugin-dell.c b/plugins/dell/mm-plugin-dell.c index ced1f3b7b..a8f7ad630 100644 --- a/plugins/dell/mm-plugin-dell.c +++ b/plugins/dell/mm-plugin-dell.c @@ -33,6 +33,8 @@ #include "mm-common-novatel.h" #include "mm-broadband-modem-sierra.h" #include "mm-common-sierra.h" +#include "mm-broadband-modem-telit.h" +#include "mm-common-telit.h" #include "mm-log.h" #if defined WITH_QMI @@ -53,7 +55,8 @@ typedef enum { DELL_MANUFACTURER_UNKNOWN = 0, DELL_MANUFACTURER_NOVATEL = 1, DELL_MANUFACTURER_SIERRA = 2, - DELL_MANUFACTURER_ERICSSON = 3 + DELL_MANUFACTURER_ERICSSON = 3, + DELL_MANUFACTURER_TELIT = 4 } DellManufacturer; /*****************************************************************************/ @@ -118,6 +121,20 @@ sierra_custom_init_ready (MMPortProbe *probe, custom_init_context_complete_and_free (ctx); } +static void +telit_custom_init_ready (MMPortProbe *probe, + GAsyncResult *res, + CustomInitContext *ctx) +{ + GError *error = NULL; + + if (!telit_custom_init_finish (probe, res, &error)) + g_simple_async_result_take_error (ctx->result, error); + else + g_simple_async_result_set_op_res_gboolean (ctx->result, TRUE); + custom_init_context_complete_and_free (ctx); +} + static void custom_init_step (CustomInitContext *ctx); static void @@ -165,6 +182,8 @@ response_ready (MMPortSerialAt *port, manufacturer = DELL_MANUFACTURER_SIERRA; else if (strstr (lower, "ericsson")) manufacturer = DELL_MANUFACTURER_ERICSSON; + else if (strstr (lower, "telit")) + manufacturer = DELL_MANUFACTURER_TELIT; else manufacturer = DELL_MANUFACTURER_UNKNOWN; g_free (lower); @@ -193,6 +212,15 @@ response_ready (MMPortSerialAt *port, return; } + if (manufacturer == DELL_MANUFACTURER_TELIT) { + telit_custom_init (ctx->probe, + ctx->port, + ctx->cancellable, + (GAsyncReadyCallback) telit_custom_init_ready, + ctx); + return; + } + /* Finish custom_init */ g_simple_async_result_set_op_res_gboolean (ctx->result, TRUE); custom_init_context_complete_and_free (ctx); @@ -296,6 +324,9 @@ dell_custom_init (MMPortProbe *probe, gpointer user_data) { CustomInitContext *ctx; + GUdevDevice *udevDevice; + + udevDevice = mm_port_probe_peek_port (probe); ctx = g_slice_new0 (CustomInitContext); ctx->result = g_simple_async_result_new (G_OBJECT (probe), @@ -309,6 +340,13 @@ dell_custom_init (MMPortProbe *probe, ctx->cgmi_retries = 3; ctx->ati_retries = 3; + /* Dell-branded Telit modems always answer to +GMI + * Avoid +CGMI and ATI sending for minimizing port probing time */ + if (g_udev_device_get_property_as_boolean (udevDevice, "ID_MM_TELIT_PORTS_TAGGED")) { + ctx->cgmi_retries = 0; + ctx->ati_retries = 0; + } + custom_init_step (ctx); } @@ -380,6 +418,15 @@ create_modem (MMPlugin *self, product)); } + if (port_probe_list_has_manufacturer_port (probes, DELL_MANUFACTURER_TELIT)) { + mm_dbg ("Telit-powered Dell-branded modem found..."); + return MM_BASE_MODEM (mm_broadband_modem_telit_new (sysfs_path, + drivers, + mm_plugin_get_name (self), + vendor, + product)); + } + mm_dbg ("Dell-branded generic modem found..."); return MM_BASE_MODEM (mm_broadband_modem_new (sysfs_path, drivers, @@ -396,10 +443,12 @@ grab_port (MMPlugin *self, MMPortProbe *probe, GError **error) { - /* Only Sierra needs custom grab port, due to the port type hints */ if (MM_IS_BROADBAND_MODEM_SIERRA (modem)) return mm_common_sierra_grab_port (self, modem, probe, error); + if (MM_IS_BROADBAND_MODEM_TELIT (modem)) + return telit_grab_port (self, modem, probe, error); + return mm_base_modem_grab_port (modem, mm_port_probe_get_port_subsys (probe), mm_port_probe_get_port_name (probe), |