aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephan Gerhold <stephan@gerhold.net>2021-06-05 16:31:33 +0200
committerAleksander Morgado <aleksander@aleksander.es>2021-07-08 13:41:47 +0000
commit681d5d29d577ab4d2d822bb42ccbb74ac7d73b95 (patch)
tree97682ca081b3a5ac6615c4915b2052bdcd80a94e
parentea645522faf4a0c65ed16fdd91a81f4a99f6c8ad (diff)
qcom-soc: Add support for WWAN subsystem instead of RPMSG
Recent Linux kernel versions have introduced a generic WWAN subsystem that provides various char devices for QMI, AT etc, similar to the subsystem-specific char devices for USB or RPMSG. The RPMSG char device for Qualcomm SoCs (e.g. MSM8916/MSM8974) are particularly complicated to work with because they need to be explicitly created from userspace with rpmsgexport and don't show up automatically. However, it turns out it's fairly simple to wrap the RPMSG subsystem in a simple driver for the WWAN subsystem. This has several advantages: - We can drop support for the special RPMSG char devices entirely at some point. - The WWAN char devices show up automatically, without having to export them explicitly, making ModemManager work out of the box on these devices. For now, just support using the WWAN subsystem alternatively for the qcom-soc plugin. Later we can consider dropping the old RPMSG code.
-rw-r--r--plugins/qcom-soc/77-mm-qcom-soc.rules3
-rw-r--r--plugins/qcom-soc/mm-broadband-modem-qmi-qcom-soc.c2
-rw-r--r--plugins/qcom-soc/mm-plugin-qcom-soc.c2
3 files changed, 4 insertions, 3 deletions
diff --git a/plugins/qcom-soc/77-mm-qcom-soc.rules b/plugins/qcom-soc/77-mm-qcom-soc.rules
index 381fbfd9..32195c1a 100644
--- a/plugins/qcom-soc/77-mm-qcom-soc.rules
+++ b/plugins/qcom-soc/77-mm-qcom-soc.rules
@@ -5,6 +5,7 @@ ACTION!="add|change|move|bind", GOTO="mm_qcom_soc_end"
# Process only known net and rpmsg ports
SUBSYSTEM=="net", DRIVERS=="bam-dmux", GOTO="mm_qcom_soc_process"
SUBSYSTEM=="net", DRIVERS=="ipa", GOTO="mm_qcom_soc_process"
+SUBSYSTEM=="wwan", DRIVERS=="qcom-q6v5-mss", GOTO="mm_qcom_soc_process"
SUBSYSTEM=="rpmsg", DRIVERS=="qcom-q6v5-mss", GOTO="mm_qcom_soc_process"
GOTO="mm_qcom_soc_end"
@@ -14,7 +15,7 @@ LABEL="mm_qcom_soc_process"
# Add a common physdev UID to all ports in the Qualcomm SoC, so that they
# are all bound together to the same modem object.
#
-# The MSM8916, MSM8974, .... Qualcomm SoCs use the combination of RPMSG
+# The MSM8916, MSM8974, .... Qualcomm SoCs use the combination of RPMSG/WWAN
# based control ports plus BAM-DMUX based network ports.
#
ENV{ID_MM_PHYSDEV_UID}="qcom-soc"
diff --git a/plugins/qcom-soc/mm-broadband-modem-qmi-qcom-soc.c b/plugins/qcom-soc/mm-broadband-modem-qmi-qcom-soc.c
index f0177d60..7a9a71c1 100644
--- a/plugins/qcom-soc/mm-broadband-modem-qmi-qcom-soc.c
+++ b/plugins/qcom-soc/mm-broadband-modem-qmi-qcom-soc.c
@@ -67,7 +67,7 @@ peek_port_qmi_for_data_bam_dmux (MMBroadbandModemQmi *self,
/* Find one QMI port, we don't care which one */
rpmsg_qmi_ports = mm_base_modem_find_ports (MM_BASE_MODEM (self),
- MM_PORT_SUBSYS_RPMSG,
+ MM_PORT_SUBSYS_UNKNOWN,
MM_PORT_TYPE_QMI);
if (!rpmsg_qmi_ports) {
g_set_error (error,
diff --git a/plugins/qcom-soc/mm-plugin-qcom-soc.c b/plugins/qcom-soc/mm-plugin-qcom-soc.c
index 3ebc6ee8..35b5981b 100644
--- a/plugins/qcom-soc/mm-plugin-qcom-soc.c
+++ b/plugins/qcom-soc/mm-plugin-qcom-soc.c
@@ -67,7 +67,7 @@ create_modem (MMPlugin *self,
G_MODULE_EXPORT MMPlugin *
mm_plugin_create (void)
{
- static const gchar *subsystems[] = { "rpmsg", "net", "qrtr", NULL };
+ static const gchar *subsystems[] = { "wwan", "rpmsg", "net", "qrtr", NULL };
return MM_PLUGIN (
g_object_new (MM_TYPE_PLUGIN_QCOM_SOC,