From f82f50fb13aa5d0dd85b0b06948cf1a3b1190c66 Mon Sep 17 00:00:00 2001 From: Andrew Lassalle Date: Wed, 25 Nov 2020 15:07:52 -0800 Subject: base-modem: create modem for QRTR subsystem Add support for QRTR devices so modems can be created based on ports using the QRTR subsystem. --- src/mm-base-modem.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) 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); -- cgit v1.2.3