aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2020-08-11 11:41:43 +0200
committerAleksander Morgado <aleksander@aleksander.es>2020-11-04 11:15:18 +0000
commitb2621b4336b5fffd03ce34a85b568910bc373bb2 (patch)
tree07245b7fe408ef23371b7acf715b7f2adbf9d496
parent824ad11356f82b5b91d557fa22b88c445ccc777c (diff)
huawei: plugin already processes generic tags
So don't re-process them in the generic modem when grabbing the port.
-rw-r--r--plugins/huawei/mm-plugin-huawei.c4
-rw-r--r--src/mm-base-modem.c8
-rw-r--r--src/mm-port-serial-at.c2
-rw-r--r--src/mm-port-serial-at.h13
4 files changed, 22 insertions, 5 deletions
diff --git a/plugins/huawei/mm-plugin-huawei.c b/plugins/huawei/mm-plugin-huawei.c
index 5cf560be..eda6bf05 100644
--- a/plugins/huawei/mm-plugin-huawei.c
+++ b/plugins/huawei/mm-plugin-huawei.c
@@ -695,6 +695,10 @@ grab_port (MMPlugin *self,
mm_port_probe_get_port_name (probe),
str);
g_free (str);
+ } else {
+ /* The huawei plugin handles the generic udev tags itself, so explicitly request
+ * to avoid processing them by the generic modem. */
+ pflags = MM_PORT_SERIAL_AT_FLAG_NONE_NO_GENERIC;
}
return mm_base_modem_grab_port (modem,
diff --git a/src/mm-base-modem.c b/src/mm-base-modem.c
index d7c0e477..153e0c4d 100644
--- a/src/mm-base-modem.c
+++ b/src/mm-base-modem.c
@@ -223,6 +223,7 @@ mm_base_modem_grab_port (MMBaseModem *self,
mm_serial_parser_v1_parse,
mm_serial_parser_v1_new (),
mm_serial_parser_v1_destroy);
+
/* Prefer plugin-provided flags to the generic ones */
if (at_pflags == MM_PORT_SERIAL_AT_FLAG_NONE) {
if (mm_kernel_device_get_property_as_boolean (kernel_device, ID_MM_PORT_TYPE_AT_PRIMARY)) {
@@ -236,7 +237,14 @@ mm_base_modem_grab_port (MMBaseModem *self,
at_pflags = MM_PORT_SERIAL_AT_FLAG_PPP;
}
}
+
+ /* The plugin may specify NONE_NO_GENERIC to avoid the generic
+ * port type hints from being applied. */
+ if (at_pflags == MM_PORT_SERIAL_AT_FLAG_NONE_NO_GENERIC)
+ at_pflags = MM_PORT_SERIAL_AT_FLAG_NONE;
+
mm_port_serial_at_set_flags (MM_PORT_SERIAL_AT (port), at_pflags);
+
} else if (ptype == MM_PORT_TYPE_GPS) {
/* Raw GPS port */
port = MM_PORT (mm_port_serial_gps_new (name));
diff --git a/src/mm-port-serial-at.c b/src/mm-port-serial-at.c
index c8e4782f..b767ee3c 100644
--- a/src/mm-port-serial-at.c
+++ b/src/mm-port-serial-at.c
@@ -473,6 +473,8 @@ mm_port_serial_at_set_flags (MMPortSerialAt *self, MMPortSerialAtFlag flags)
{
g_return_if_fail (self != NULL);
g_return_if_fail (MM_IS_PORT_SERIAL_AT (self));
+
+ /* MM_PORT_SERIAL_AT_FLAG_NONE_NO_GENERIC is not expected */
g_return_if_fail (flags <= (MM_PORT_SERIAL_AT_FLAG_PRIMARY |
MM_PORT_SERIAL_AT_FLAG_SECONDARY |
MM_PORT_SERIAL_AT_FLAG_PPP |
diff --git a/src/mm-port-serial-at.h b/src/mm-port-serial-at.h
index 0a4d2b7a..901afcba 100644
--- a/src/mm-port-serial-at.h
+++ b/src/mm-port-serial-at.h
@@ -42,15 +42,18 @@ typedef struct _MMPortSerialAtPrivate MMPortSerialAtPrivate;
* only when connecting is port 0 opened for dialing (ATD) and PPP
*/
typedef enum { /*< underscore_name=mm_port_serial_at_flag >*/
- MM_PORT_SERIAL_AT_FLAG_NONE = 0,
+ MM_PORT_SERIAL_AT_FLAG_NONE = 0,
/* This port is preferred for command and status */
- MM_PORT_SERIAL_AT_FLAG_PRIMARY = 1 << 0,
+ MM_PORT_SERIAL_AT_FLAG_PRIMARY = 1 << 0,
/* Use port for command and status if the primary port is connected */
- MM_PORT_SERIAL_AT_FLAG_SECONDARY = 1 << 1,
+ MM_PORT_SERIAL_AT_FLAG_SECONDARY = 1 << 1,
/* This port should be used for PPP */
- MM_PORT_SERIAL_AT_FLAG_PPP = 1 << 2,
+ MM_PORT_SERIAL_AT_FLAG_PPP = 1 << 2,
/* This port should be used for GPS control */
- MM_PORT_SERIAL_AT_FLAG_GPS_CONTROL = 1 << 3,
+ MM_PORT_SERIAL_AT_FLAG_GPS_CONTROL = 1 << 3,
+ /* Helper flag to allow plugins specify that generic tags shouldn't be
+ * applied */
+ MM_PORT_SERIAL_AT_FLAG_NONE_NO_GENERIC = 1 << 4,
} MMPortSerialAtFlag;
typedef gboolean (*MMPortSerialAtResponseParserFn) (gpointer user_data,