aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Lassalle <andrewlassalle@chromium.org>2020-11-25 15:07:52 -0800
committerAleksander Morgado <aleksander@aleksander.es>2021-04-14 11:27:27 +0200
commitf82f50fb13aa5d0dd85b0b06948cf1a3b1190c66 (patch)
tree6ae7dcd4298365c8b20a61c8dee0cb28cf142a93
parent5f1bac5cf80e08ac3ca77c45f6fae75eead4da1d (diff)
base-modem: create modem for QRTR subsystem
Add support for QRTR devices so modems can be created based on ports using the QRTR subsystem.
-rw-r--r--src/mm-base-modem.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/mm-base-modem.c b/src/mm-base-modem.c
index ad34ab1d..a00a4ae2 100644
--- a/src/mm-base-modem.c
+++ b/src/mm-base-modem.c
@@ -30,6 +30,9 @@
#include "mm-context.h"
#include "mm-base-modem.h"
+#if defined WITH_QMI && QMI_QRTR_SUPPORTED
+#include "mm-kernel-device-qrtr.h"
+#endif
#include "mm-log-object.h"
#include "mm-port-enums-types.h"
@@ -263,6 +266,24 @@ base_modem_create_rpmsg_port (MMBaseModem *self,
return NULL;
}
+#if defined WITH_QRTR
+static MMPort *
+base_modem_create_qrtr_port (MMBaseModem *self,
+ const gchar *name,
+ MMKernelDevice *kernel_device,
+ MMPortType ptype)
+{
+ if (ptype == MM_PORT_TYPE_QMI) {
+ g_autoptr(QrtrNode) node = NULL;
+
+ g_assert (MM_IS_KERNEL_DEVICE_QRTR (kernel_device));
+ node = mm_kernel_device_qrtr_get_node (MM_KERNEL_DEVICE_QRTR (kernel_device));
+ return MM_PORT (mm_port_qmi_new_from_node (name, node));
+ }
+ return NULL;
+}
+#endif
+
static MMPort *
base_modem_create_virtual_port (MMBaseModem *self,
const gchar *name)
@@ -307,6 +328,10 @@ base_modem_internal_grab_port (MMBaseModem *self,
port = base_modem_create_usbmisc_port (self, name, ptype);
else if (g_str_equal (subsys, "rpmsg"))
port = base_modem_create_rpmsg_port (self, name, ptype);
+#if defined WITH_QRTR
+ else if (g_str_equal (subsys, "qrtr"))
+ port = base_modem_create_qrtr_port (self, name, kernel_device, ptype);
+#endif
else if (g_str_equal (subsys, "virtual"))
port = base_modem_create_virtual_port (self, name);