summaryrefslogtreecommitdiff
path: root/src/libqmi-glib
diff options
context:
space:
mode:
Diffstat (limited to 'src/libqmi-glib')
-rw-r--r--src/libqmi-glib/qmi-helpers.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/src/libqmi-glib/qmi-helpers.c b/src/libqmi-glib/qmi-helpers.c
index 09fee3d..d8f1176 100644
--- a/src/libqmi-glib/qmi-helpers.c
+++ b/src/libqmi-glib/qmi-helpers.c
@@ -465,8 +465,10 @@ qmi_helpers_get_transport_type (const gchar *path,
g_autofree gchar *device_basename = NULL;
g_autofree gchar *usb_driver = NULL;
g_autofree gchar *wwan_sysfs_path = NULL;
+ g_autofree gchar *wwan_type_sysfs_path = NULL;
g_autofree gchar *smdpkt_sysfs_path = NULL;
g_autofree gchar *rpmsg_sysfs_path = NULL;
+ gchar wwan_type[16] = { 0 };
device_basename = qmi_helpers_get_devname (path, error);
if (!device_basename)
@@ -484,13 +486,24 @@ qmi_helpers_get_transport_type (const gchar *path,
return QMI_HELPERS_TRANSPORT_TYPE_UNKNOWN;
}
- /* WWAN devices have protocol in their name */
+ /* WWAN devices have a type attribute or protocol in their name */
wwan_sysfs_path = g_strdup_printf ("/sys/class/wwan/%s", device_basename);
if (g_file_test (wwan_sysfs_path, G_FILE_TEST_EXISTS)) {
- if (g_strrstr (device_basename, "QMI"))
- return QMI_HELPERS_TRANSPORT_TYPE_QMUX;
- if (g_strrstr (device_basename, "MBIM"))
- return QMI_HELPERS_TRANSPORT_TYPE_MBIM;
+ wwan_type_sysfs_path = g_strdup_printf ("/sys/class/wwan/%s/type", device_basename);
+ if (qmi_helpers_read_sysfs_file (wwan_type_sysfs_path, wwan_type,
+ sizeof (wwan_type) - 1, NULL)) {
+ g_strstrip (wwan_type);
+ if (!g_strcmp0 (wwan_type, "QMI"))
+ return QMI_HELPERS_TRANSPORT_TYPE_QMUX;
+ if (!g_strcmp0 (wwan_type, "MBIM"))
+ return QMI_HELPERS_TRANSPORT_TYPE_MBIM;
+ } else {
+ /* "type" attribute exists only on Linux 5.14+, fall back to device name */
+ if (g_strrstr (device_basename, "QMI"))
+ return QMI_HELPERS_TRANSPORT_TYPE_QMUX;
+ if (g_strrstr (device_basename, "MBIM"))
+ return QMI_HELPERS_TRANSPORT_TYPE_MBIM;
+ }
g_set_error (error, QMI_CORE_ERROR, QMI_CORE_ERROR_FAILED,
"unsupported wwan port");
return QMI_HELPERS_TRANSPORT_TYPE_UNKNOWN;