linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 0/2] usb: dwc3: drd: Check graph presence for extcon
@ 2020-12-14 11:07 Sam Protsenko
  2020-12-14 11:07 ` [PATCH v4 1/2] usb: dwc3: drd: Avoid error when extcon is missing Sam Protsenko
  2020-12-14 11:07 ` [PATCH v4 2/2] usb: dwc3: drd: Improve dwc3_get_extcon() style Sam Protsenko
  0 siblings, 2 replies; 3+ messages in thread
From: Sam Protsenko @ 2020-12-14 11:07 UTC (permalink / raw)
  To: linux-usb, linux-kernel
  Cc: Felipe Balbi, Greg Kroah-Hartman, John Stultz, Andy Shevchenko,
	Andy Shevchenko

dwc3 shows error message on probe if port node wasn't found in PHY
controller node. But that is actually a valid case for the role switch
mode and OTG mode. This patch series makes sure to hide that error
message and also does a bit of refactoring for that code. Similar patch
(for different subsystem) already exists in kernel tree:
commit ea5bc3b15e0f ("drm/of: Make drm_of_find_panel_or_bridge() to
check graph's presence"), and the whole `of_graph_is_present()' function
was implemented exactly for this kind of situation.

In v2 submission this was a single patch. But in offline discussion with
Andy Shevchenko it was decided it's better to split it into two patches
in order to provide the minimal change for further possible backporting,
and then do all style related changes on top of it in the second patch.

Sam Protsenko (2):
  usb: dwc3: drd: Avoid error when extcon is missing
  usb: dwc3: drd: Improve dwc3_get_extcon() style

 drivers/usb/dwc3/drd.c | 25 ++++++++++++++++---------
 1 file changed, 16 insertions(+), 9 deletions(-)

-- 
2.29.2


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH v4 1/2] usb: dwc3: drd: Avoid error when extcon is missing
  2020-12-14 11:07 [PATCH v4 0/2] usb: dwc3: drd: Check graph presence for extcon Sam Protsenko
@ 2020-12-14 11:07 ` Sam Protsenko
  2020-12-14 11:07 ` [PATCH v4 2/2] usb: dwc3: drd: Improve dwc3_get_extcon() style Sam Protsenko
  1 sibling, 0 replies; 3+ messages in thread
From: Sam Protsenko @ 2020-12-14 11:07 UTC (permalink / raw)
  To: linux-usb, linux-kernel
  Cc: Felipe Balbi, Greg Kroah-Hartman, John Stultz, Andy Shevchenko,
	Andy Shevchenko

If "port" node is missing in PHY controller node, dwc3_get_extcon()
isn't able to find extcon devices. This is perfectly fine in case when
"usb-role-switch" or OTG is used, but next misleading error message is
printed in that case, from of_graph_get_remote_node():

    OF: graph: no port node found in /phy@1234abcd

Avoid printing that message by checking if the port node exists in PHY
node before calling of_graph_get_remote_node(). While at it, add the
comment from mentioned code block, explaining how checking the port
availability helps to avoid the misleading error.

Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org>
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
---
Changes in v4:
  - Moved the comment from patch 2/2 to 1/2
  - Fixed typos in commit message and comment
Changes in v3:
  - Split patch into two patches: logic diff and style diff

 drivers/usb/dwc3/drd.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/dwc3/drd.c b/drivers/usb/dwc3/drd.c
index 3e1c1aacf002..da428cf2eb5b 100644
--- a/drivers/usb/dwc3/drd.c
+++ b/drivers/usb/dwc3/drd.c
@@ -462,8 +462,18 @@ static struct extcon_dev *dwc3_get_extcon(struct dwc3 *dwc)
 		return edev;
 	}
 
+	/*
+	 * Try to get an extcon device from the USB PHY controller's "port"
+	 * node. Check if it has the "port" node first, to avoid printing the
+	 * error message from underlying code, as it's a valid case: extcon
+	 * device (and "port" node) may be missing in case of "usb-role-switch"
+	 * or OTG mode.
+	 */
 	np_phy = of_parse_phandle(dev->of_node, "phys", 0);
-	np_conn = of_graph_get_remote_node(np_phy, -1, -1);
+	if (of_graph_is_present(np_phy))
+		np_conn = of_graph_get_remote_node(np_phy, -1, -1);
+	else
+		np_conn = NULL;
 
 	if (np_conn)
 		edev = extcon_find_edev_by_node(np_conn);
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH v4 2/2] usb: dwc3: drd: Improve dwc3_get_extcon() style
  2020-12-14 11:07 [PATCH v4 0/2] usb: dwc3: drd: Check graph presence for extcon Sam Protsenko
  2020-12-14 11:07 ` [PATCH v4 1/2] usb: dwc3: drd: Avoid error when extcon is missing Sam Protsenko
@ 2020-12-14 11:07 ` Sam Protsenko
  1 sibling, 0 replies; 3+ messages in thread
From: Sam Protsenko @ 2020-12-14 11:07 UTC (permalink / raw)
  To: linux-usb, linux-kernel
  Cc: Felipe Balbi, Greg Kroah-Hartman, John Stultz, Andy Shevchenko,
	Andy Shevchenko

The previous change ("usb: dwc3: drd: Avoid error when extcon is
missing") changed the code flow in dwc3_get_extcon() function, leading
to unnecessary if-branch. This patch does housekeeping by reworking the
code for obtaining an extcon device from the "port" node.

Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org>
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
Changes in v4:
  - Moved the comment from patch 2/2 to 1/2
  - Fixed typos in commit message
Changes in v3:
  - Split patch into two patches: logic diff and style diff

 drivers/usb/dwc3/drd.c | 21 +++++++++------------
 1 file changed, 9 insertions(+), 12 deletions(-)

diff --git a/drivers/usb/dwc3/drd.c b/drivers/usb/dwc3/drd.c
index da428cf2eb5b..e2b68bb770d1 100644
--- a/drivers/usb/dwc3/drd.c
+++ b/drivers/usb/dwc3/drd.c
@@ -441,8 +441,8 @@ static int dwc3_drd_notifier(struct notifier_block *nb,
 static struct extcon_dev *dwc3_get_extcon(struct dwc3 *dwc)
 {
 	struct device *dev = dwc->dev;
-	struct device_node *np_phy, *np_conn;
-	struct extcon_dev *edev;
+	struct device_node *np_phy;
+	struct extcon_dev *edev = NULL;
 	const char *name;
 
 	if (device_property_read_bool(dev, "extcon"))
@@ -470,17 +470,14 @@ static struct extcon_dev *dwc3_get_extcon(struct dwc3 *dwc)
 	 * or OTG mode.
 	 */
 	np_phy = of_parse_phandle(dev->of_node, "phys", 0);
-	if (of_graph_is_present(np_phy))
-		np_conn = of_graph_get_remote_node(np_phy, -1, -1);
-	else
-		np_conn = NULL;
-
-	if (np_conn)
-		edev = extcon_find_edev_by_node(np_conn);
-	else
-		edev = NULL;
+	if (of_graph_is_present(np_phy)) {
+		struct device_node *np_conn;
 
-	of_node_put(np_conn);
+		np_conn = of_graph_get_remote_node(np_phy, -1, -1);
+		if (np_conn)
+			edev = extcon_find_edev_by_node(np_conn);
+		of_node_put(np_conn);
+	}
 	of_node_put(np_phy);
 
 	return edev;
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2020-12-14 11:08 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-14 11:07 [PATCH v4 0/2] usb: dwc3: drd: Check graph presence for extcon Sam Protsenko
2020-12-14 11:07 ` [PATCH v4 1/2] usb: dwc3: drd: Avoid error when extcon is missing Sam Protsenko
2020-12-14 11:07 ` [PATCH v4 2/2] usb: dwc3: drd: Improve dwc3_get_extcon() style Sam Protsenko

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).