[PATCH RFC 04/12] usb: typec: qcom: Make PMIC port probe selectable

From: David Heidelberg via B4 Relay

Date: Sat Sep 26 2026 - 08:42:03 EST


From: David Heidelberg <david@xxxxxxx>

This is a preparation for extending the support with 1st generation
Type-C.

Assisted-by: LLM
Co-developed-by: Alexey Minnekhanov <alexeymin@xxxxxxxxxx>
Signed-off-by: Alexey Minnekhanov <alexeymin@xxxxxxxxxx>
Signed-off-by: David Heidelberg <david@xxxxxxx>
---
drivers/usb/typec/tcpm/qcom/qcom_pmic_typec.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/usb/typec/tcpm/qcom/qcom_pmic_typec.c b/drivers/usb/typec/tcpm/qcom/qcom_pmic_typec.c
index d770e58bc16cf..41aaae6bb3724 100644
--- a/drivers/usb/typec/tcpm/qcom/qcom_pmic_typec.c
+++ b/drivers/usb/typec/tcpm/qcom/qcom_pmic_typec.c
@@ -13,19 +13,25 @@
#include <linux/usb/tcpm.h>

#include <drm/bridge/aux-bridge.h>

#include "qcom_pmic_typec.h"
#include "qcom_pmic_typec_pdphy.h"
#include "qcom_pmic_typec_port.h"

+typedef int (*pmic_typec_port_probe_fn)(struct platform_device *pdev,
+ struct pmic_typec *tcpm,
+ const struct pmic_typec_port_resources *res,
+ struct regmap *regmap, u32 base);
+
struct pmic_typec_resources {
const struct pmic_typec_pdphy_resources *pdphy_res;
const struct pmic_typec_port_resources *port_res;
+ pmic_typec_port_probe_fn port_probe;
};

static int qcom_pmic_typec_init(struct tcpc_dev *tcpc)
{
return 0;
}

static int qcom_pmic_typec_probe(struct platform_device *pdev)
@@ -55,18 +61,17 @@ static int qcom_pmic_typec_probe(struct platform_device *pdev)
dev_err(dev, "Failed to get regmap\n");
return -ENODEV;
}

ret = of_property_read_u32_index(np, "reg", 0, &base);
if (ret)
return ret;

- ret = qcom_pmic_typec_port_probe(pdev, tcpm,
- res->port_res, regmap, base);
+ ret = res->port_probe(pdev, tcpm, res->port_res, regmap, base);
if (ret)
return ret;

if (res->pdphy_res) {
ret = of_property_read_u32_index(np, "reg", 1, &base);
if (ret)
return ret;

@@ -132,21 +137,23 @@ static void qcom_pmic_typec_remove(struct platform_device *pdev)
tcpm->port_stop(tcpm);
tcpm_unregister_port(tcpm->tcpm_port);
fwnode_handle_put(tcpm->tcpc.fwnode);
}

static const struct pmic_typec_resources pm8150b_typec_res = {
.pdphy_res = &pm8150b_pdphy_res,
.port_res = &pm8150b_port_res,
+ .port_probe = qcom_pmic_typec_port_probe,
};

static const struct pmic_typec_resources pmi632_typec_res = {
/* PD PHY not present */
.port_res = &pm8150b_port_res,
+ .port_probe = qcom_pmic_typec_port_probe,
};

static const struct of_device_id qcom_pmic_typec_table[] = {
{ .compatible = "qcom,pm8150b-typec", .data = &pm8150b_typec_res },
{ .compatible = "qcom,pmi632-typec", .data = &pmi632_typec_res },
{ }
};
MODULE_DEVICE_TABLE(of, qcom_pmic_typec_table);

--
2.55.0