From deccf35a68063ddae4a51a9ec99124fce998cf4b Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Sat, 30 Jan 2021 21:57:50 +0100 Subject: [PATCH] mm-broadband-modem-qmi: Add ID_MM_QMI_MESSAGING_AT_FALLBACK_ENABLE Allows to force a fallback to AT URCs for detecting messaging events instead of QMI indications. This allows to receive text messages during suspend on the PinePhone with a Quectel EG25 modem. --- .../quectel/77-mm-quectel-port-types.rules | 2 ++ src/mm-broadband-modem-qmi.c | 34 +++++++++++++++++-- src/mm-broadband-modem-qmi.h | 1 + 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/plugins/quectel/77-mm-quectel-port-types.rules b/plugins/quectel/77-mm-quectel-port-types.rules index 54778d24..fab1f6fa 100644 --- a/plugins/quectel/77-mm-quectel-port-types.rules +++ b/plugins/quectel/77-mm-quectel-port-types.rules @@ -48,10 +48,12 @@ ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0296", ENV{.MM_USBIFNUM}=="02", ENV{ ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0296", ENV{.MM_USBIFNUM}=="03", ENV{ID_MM_PORT_TYPE_AT_SECONDARY}="1" # Quectel EC25/EG25 +# Always fallback to AT URCs for messaging notifications # ttyUSB0 (if #0): QCDM/DIAG port # ttyUSB1 (if #1): GPS data port # ttyUSB2 (if #2): AT primary port # ttyUSB3 (if #3): AT secondary port +ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0125", ENV{ID_MM_QMI_MESSAGING_AT_FALLBACK_ENABLE}="1" ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0125", ENV{.MM_USBIFNUM}=="00", ENV{ID_MM_PORT_TYPE_QCDM}="1" ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0125", ENV{.MM_USBIFNUM}=="01", ENV{ID_MM_PORT_TYPE_GPS}="1" ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0125", ENV{.MM_USBIFNUM}=="02", ENV{ID_MM_PORT_TYPE_AT_PRIMARY}="1" diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c index ae27b333..4735e616 100644 --- a/src/mm-broadband-modem-qmi.c +++ b/src/mm-broadband-modem-qmi.c @@ -173,6 +173,30 @@ shared_qmi_peek_client (MMSharedQmi *self, return client; } +/*****************************************************************************/ + +MMPortQmi * +mm_broadband_modem_qmi_peek_port_qmi (MMBroadbandModemQmi *self) +{ + MMPortQmi *primary_qmi_port = NULL; + GList *qmi_ports; + + g_assert (MM_IS_BROADBAND_MODEM_QMI (self)); + + qmi_ports = mm_base_modem_find_ports (MM_BASE_MODEM (self), + MM_PORT_SUBSYS_UNKNOWN, + MM_PORT_TYPE_QMI, + NULL); + + /* First QMI port in the list is the primary one always */ + if (qmi_ports) + primary_qmi_port = MM_PORT_QMI (qmi_ports->data); + + g_list_free_full (qmi_ports, g_object_unref); + + return primary_qmi_port; +} + /*****************************************************************************/ /* Create Bearer (Modem interface) */ @@ -6186,9 +6210,12 @@ messaging_cleanup_unsolicited_events (MMIfaceModemMessaging *_self, gpointer user_data) { MMBroadbandModemQmi *self = MM_BROADBAND_MODEM_QMI (_self); + MMPort *port = MM_PORT (mm_broadband_modem_qmi_peek_port_qmi (self)); /* Handle fallback */ - if (self->priv->messaging_fallback_at) { + if (self->priv->messaging_fallback_at || + mm_kernel_device_get_global_property_as_boolean (mm_port_peek_kernel_device (port), + "ID_MM_QMI_MESSAGING_AT_FALLBACK_ENABLE")) { return iface_modem_messaging_parent->cleanup_unsolicited_events (_self, callback, user_data); } @@ -6204,9 +6231,12 @@ messaging_setup_unsolicited_events (MMIfaceModemMessaging *_self, gpointer user_data) { MMBroadbandModemQmi *self = MM_BROADBAND_MODEM_QMI (_self); + MMPort *port = MM_PORT (mm_broadband_modem_qmi_peek_port_qmi (self)); /* Handle fallback */ - if (self->priv->messaging_fallback_at) { + if (self->priv->messaging_fallback_at || + mm_kernel_device_get_global_property_as_boolean (mm_port_peek_kernel_device (port), + "ID_MM_QMI_MESSAGING_AT_FALLBACK_ENABLE")) { return iface_modem_messaging_parent->setup_unsolicited_events (_self, callback, user_data); } diff --git a/src/mm-broadband-modem-qmi.h b/src/mm-broadband-modem-qmi.h index 23825068..c9b50f15 100644 --- a/src/mm-broadband-modem-qmi.h +++ b/src/mm-broadband-modem-qmi.h @@ -46,5 +46,6 @@ MMBroadbandModemQmi *mm_broadband_modem_qmi_new (const gchar *device, const gchar *plugin, guint16 vendor_id, guint16 product_id); +MMPortQmi *mm_broadband_modem_qmi_peek_port_qmi (MMBroadbandModemQmi *self); #endif /* MM_BROADBAND_MODEM_QMI_H */ -- 2.30.0