summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniele Palmas <dnlplm@gmail.com>2016-04-29 12:50:09 +0200
committerDan Williams <dcbw@redhat.com>2016-05-03 11:44:33 -0500
commit4403bb7764268a3924ed0ed7d14c510751fdbb4d (patch)
tree9d5010ae95405a03fcfbe83f164365f98383d146
parent850318fd965d992994412688955f1e3ce8a9c97e (diff)
downloadModemManager-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.c53
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),