aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mm-modem-helpers.c17
-rw-r--r--src/mm-modem-helpers.h11
-rw-r--r--src/mm-plugin.c27
-rw-r--r--src/mm-port-probe.c31
4 files changed, 60 insertions, 26 deletions
diff --git a/src/mm-modem-helpers.c b/src/mm-modem-helpers.c
index 551a23a0..99d91ed9 100644
--- a/src/mm-modem-helpers.c
+++ b/src/mm-modem-helpers.c
@@ -5339,3 +5339,20 @@ mm_decode_eid (const gchar *eid, gsize eid_len)
return mm_bcd_to_string ((const guint8 *) eid, eid_len, FALSE /* low_nybble_first */);
}
+
+/*****************************************************************************/
+
+guint
+mm_string_uint_map_lookup (const MMStringUintMap *map,
+ const gsize map_size,
+ const gchar *str,
+ const guint default_value)
+{
+ guint i;
+
+ for (i = 0; i < map_size; i++) {
+ if (g_str_equal (str, map[i].str))
+ return map[i].val;
+ }
+ return default_value;
+}
diff --git a/src/mm-modem-helpers.h b/src/mm-modem-helpers.h
index eb285c1b..ddcff724 100644
--- a/src/mm-modem-helpers.h
+++ b/src/mm-modem-helpers.h
@@ -593,4 +593,15 @@ gboolean mm_sim_parse_cpol_test_response (const gchar *response,
/* Helper function to decode eid read from esim */
gchar *mm_decode_eid (const gchar *eid, gsize eid_len);
+typedef struct {
+ const gchar *str;
+ const guint val;
+} MMStringUintMap;
+
+/* Helper to look up string value in a map and return corresponding guint */
+guint mm_string_uint_map_lookup (const MMStringUintMap *map,
+ const gsize map_size,
+ const gchar *str,
+ const guint default_value);
+
#endif /* MM_MODEM_HELPERS_H */
diff --git a/src/mm-plugin.c b/src/mm-plugin.c
index 75dc02d7..4ec043a3 100644
--- a/src/mm-plugin.c
+++ b/src/mm-plugin.c
@@ -749,6 +749,16 @@ mm_plugin_supports_port_finish (MMPlugin *self,
return (MMPluginSupportsResult)value;
}
+static const MMStringUintMap subsys_flags_map[] = {
+ { "tty", MM_PORT_PROBE_AT | MM_PORT_PROBE_QCDM },
+ { "usbmisc", MM_PORT_PROBE_QMI | MM_PORT_PROBE_MBIM | MM_PORT_PROBE_AT },
+ { "rpmsg", MM_PORT_PROBE_AT | MM_PORT_PROBE_QMI },
+ { "wwan", MM_PORT_PROBE_QMI | MM_PORT_PROBE_MBIM | MM_PORT_PROBE_AT | MM_PORT_PROBE_QCDM },
+#if defined WITH_QRTR
+ { "qrtr", MM_PORT_PROBE_QMI },
+#endif
+};
+
void
mm_plugin_supports_port (MMPlugin *self,
MMDevice *device,
@@ -803,19 +813,10 @@ mm_plugin_supports_port (MMPlugin *self,
}
/* Build mask of flags based on subsystem */
- subsystem_expected_flags = MM_PORT_PROBE_NONE;
- if (g_str_equal (mm_kernel_device_get_subsystem (port), "tty"))
- subsystem_expected_flags |= (MM_PORT_PROBE_AT | MM_PORT_PROBE_QCDM);
- else if (g_str_equal (mm_kernel_device_get_subsystem (port), "usbmisc"))
- subsystem_expected_flags |= (MM_PORT_PROBE_QMI | MM_PORT_PROBE_MBIM | MM_PORT_PROBE_AT);
- else if (g_str_equal (mm_kernel_device_get_subsystem (port), "rpmsg"))
- subsystem_expected_flags |= (MM_PORT_PROBE_AT | MM_PORT_PROBE_QMI);
- else if (g_str_equal (mm_kernel_device_get_subsystem (port), "wwan"))
- subsystem_expected_flags |= (MM_PORT_PROBE_QMI | MM_PORT_PROBE_MBIM | MM_PORT_PROBE_AT | MM_PORT_PROBE_QCDM);
-#if defined WITH_QRTR
- else if (g_str_equal (mm_kernel_device_get_subsystem (port), "qrtr"))
- subsystem_expected_flags |= MM_PORT_PROBE_QMI;
-#endif
+ subsystem_expected_flags = mm_string_uint_map_lookup (subsys_flags_map,
+ G_N_ELEMENTS (subsys_flags_map),
+ mm_kernel_device_get_subsystem (port),
+ MM_PORT_PROBE_NONE);
/* Build mask of flags based on plugin */
plugin_expected_flags = MM_PORT_PROBE_NONE;
diff --git a/src/mm-port-probe.c b/src/mm-port-probe.c
index dcedc3a8..a5d2207d 100644
--- a/src/mm-port-probe.c
+++ b/src/mm-port-probe.c
@@ -112,6 +112,12 @@ struct _MMPortProbePrivate {
GTask *task;
};
+static const MMStringUintMap port_subsys_map[] = {
+ { "usbmisc", MM_PORT_SUBSYS_USBMISC },
+ { "rpmsg", MM_PORT_SUBSYS_RPMSG },
+ { "wwan", MM_PORT_SUBSYS_WWAN },
+};
+
/*****************************************************************************/
static void
@@ -542,11 +548,12 @@ wdm_probe_qmi (MMPortProbe *self)
} else
#endif /* WITH_QRTR */
{
- MMPortSubsys subsys = MM_PORT_SUBSYS_USBMISC;
-
- if (g_str_equal (mm_kernel_device_get_subsystem (self->priv->port), "rpmsg"))
- subsys = MM_PORT_SUBSYS_RPMSG;
+ MMPortSubsys subsys;
+ subsys = mm_string_uint_map_lookup (port_subsys_map,
+ G_N_ELEMENTS (port_subsys_map),
+ mm_kernel_device_get_subsystem (self->priv->port),
+ MM_PORT_SUBSYS_USBMISC);
ctx->port_qmi = mm_port_qmi_new (mm_kernel_device_get_name (self->priv->port), subsys);
}
@@ -1215,15 +1222,13 @@ serial_open_at (MMPortProbe *self)
/* Create AT serial port if not done before */
if (!ctx->serial) {
- gpointer parser;
- MMPortSubsys subsys = MM_PORT_SUBSYS_TTY;
-
- if (g_str_equal (mm_kernel_device_get_subsystem (self->priv->port), "usbmisc"))
- subsys = MM_PORT_SUBSYS_USBMISC;
- else if (g_str_equal (mm_kernel_device_get_subsystem (self->priv->port), "rpmsg"))
- subsys = MM_PORT_SUBSYS_RPMSG;
- else if (g_str_equal (mm_kernel_device_get_subsystem (self->priv->port), "wwan"))
- subsys = MM_PORT_SUBSYS_WWAN;
+ gpointer parser;
+ MMPortSubsys subsys;
+
+ subsys = mm_string_uint_map_lookup (port_subsys_map,
+ G_N_ELEMENTS (port_subsys_map),
+ mm_kernel_device_get_subsystem (self->priv->port),
+ MM_PORT_SUBSYS_TTY);
ctx->serial = MM_PORT_SERIAL (mm_port_serial_at_new (mm_kernel_device_get_name (self->priv->port), subsys));
if (!ctx->serial) {