Re: [PATCH v5 2/2] usb: typec: hd3ss3220: Enable VBUS based on ID pin state
From: Dmitry Baryshkov
Date: Sat Nov 01 2025 - 04:33:31 EST
On 31/10/2025 08:45, Krishna Kurapati PSSNV wrote:
On 10/27/2025 6:49 PM, Dmitry Baryshkov wrote:
On Mon, Oct 27, 2025 at 11:47:13AM +0200, Heikki Krogerus wrote:
Hi Krishna,
+static int hd3ss3220_get_vbus_supply(struct hd3ss3220 *hd3ss3220)
+{
+ struct device_node *hd3ss3220_node = hd3ss3220->dev->of_node;
+ struct device_node *np;
+
+ np = of_graph_get_remote_node(hd3ss3220_node, 0, 0);
+ if (!np) {
+ dev_err(hd3ss3220->dev, "failed to get device node");
+ return -ENODEV;
+ }
So I guess that's the connector node. Why can't you just place the
regulator reference to the hd3ss3220 controller node instead of the
connector like the port controllers do?
That would allow us to do a simple devm_regulator_get_optional() call
that's not tied to DT only.
But we have devm_of_regulator_get_optional(), it was mentioned in the
previous email if I'm not mistaken. If we need, we should add
devm_fwnode_regulator_get(_optional).
vbus supply is described as a part of the usb-c-connector schema, so
it is not that logical to describe it as a part of the Type-C
controller.
I tried the following as suggested:
hd3ss3220->vbus = devm_of_regulator_get_optional(hd3ss3220->dev,
to_of_node(connector),
if (IS_ERR(hd3ss3220->vbus))
hd3ss3220->vbus = NULL;
If there is a vbus supply I see its returning proper handle pointer.
Else it returned ENODEV. (which is fine for our case as there is no vbus
in DT).
Can I mark the function as a void one. Instead of returning any int
value, would it be fine if to just mark vbus as NULL and proceed ?
You can only ignore -ENODEV. Any other error should be propagated back
and cause an error in probing the hd3ss3220 driver.
Regards,
Krishna,
--
With best wishes
Dmitry