diff mbox series

[6/6] qmi: gprs-context: support bind_mux for pcie devices

Message ID 20240520191722.184977-6-denkenz@gmail.com (mailing list archive)
State Accepted
Commit cb16587e46e6152c6a5850fe259fb7d6b2a627ed
Headers show
Series [1/6] gobi: add / use DeviceProtocol property | expand

Commit Message

Denis Kenzior May 20, 2024, 7:17 p.m. UTC
Add support for PCIe based devices when invoking
QMI_WDS_BIND_MUX_DATA_PORT command.  While here, also refactor the
handling of InterfaceNumber property and make it clear that is is
only used for USB based devices.
---
 drivers/qmimodem/gprs-context.c | 32 +++++++++++++++++++-------------
 1 file changed, 19 insertions(+), 13 deletions(-)
diff mbox series

Patch

diff --git a/drivers/qmimodem/gprs-context.c b/drivers/qmimodem/gprs-context.c
index 3a4f2f0717bc..6350d6584d8f 100644
--- a/drivers/qmimodem/gprs-context.c
+++ b/drivers/qmimodem/gprs-context.c
@@ -525,23 +525,29 @@  static void qmi_gprs_context_bind_mux(struct ofono_gprs_context *gc)
 		goto error;
 	}
 
-	interface_number = ofono_modem_get_string(modem, "InterfaceNumber");
-	if (!interface_number && endpoint_info.endpoint_type !=
-					QMI_DATA_ENDPOINT_TYPE_EMBEDDED) {
-		ofono_error("%s: Missing 'InterfaceNumber'",
-					ofono_modem_get_path(modem));
-		goto error;
-	} else if (!interface_number)
-		u8 = 1;	/* Default for embedded modems */
-	else if (l_safe_atox8(interface_number, &u8) < 0) {
-		ofono_error("%s: Invalid InterfaceNumber",
+	switch (endpoint_info.endpoint_type) {
+	case QMI_DATA_ENDPOINT_TYPE_PCIE:
+		endpoint_info.interface_number = 0x04; /* Magic for PCIE */
+		break;
+	case QMI_DATA_ENDPOINT_TYPE_EMBEDDED:
+		endpoint_info.interface_number = 0x01;
+		break;
+	case QMI_DATA_ENDPOINT_TYPE_HSUSB:
+		interface_number = ofono_modem_get_string(modem,
+							"InterfaceNumber");
+		if (!l_safe_atox8(interface_number, &u8)) {
+			endpoint_info.interface_number = u8;
+			break;
+		}
+
+		ofono_error("%s: Missing or invalid 'InterfaceNumber'",
 					ofono_modem_get_path(modem));
+		/* Fall through */
+	default:
 		goto error;
 	}
 
-	endpoint_info.interface_number = u8;
-
-	DBG("interface_number: %d", u8);
+	DBG("interface_number: %d", endpoint_info.interface_number);
 	DBG("mux_id: %hhx", data->mux_id);
 
 	param = qmi_param_new();