[PATCH 1/2] dt-bindings: phy-imx8mq-usb: add reset-gpios property

Subsystems: generic phy framework, open firmware and flattened device tree bindings, the rest

STALE2010d

4 messages, 3 authors, 2021-02-09 · open the first message on its own page

[PATCH 1/2] dt-bindings: phy-imx8mq-usb: add reset-gpios property

From: Adrien Grassein <hidden>
Date: 2021-01-28 22:13:57

Add an optional GPIO in the dtb description that will
be used to reset the connected hub (if any).

Signed-off-by: Adrien Grassein <redacted>
---
 Documentation/devicetree/bindings/phy/fsl,imx8mq-usb-phy.txt | 1 +
 1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/phy/fsl,imx8mq-usb-phy.txt b/Documentation/devicetree/bindings/phy/fsl,imx8mq-usb-phy.txt
index 7c70f2ad9942..6ee2b42e0f22 100644
--- a/Documentation/devicetree/bindings/phy/fsl,imx8mq-usb-phy.txt
+++ b/Documentation/devicetree/bindings/phy/fsl,imx8mq-usb-phy.txt
@@ -9,6 +9,7 @@ Required properties:
 
 Optional properties:
 - vbus-supply: A phandle to the regulator for USB VBUS.
+- reset-gpios: A phandle to the reset signal of the connected hub (if any).
 
 Example:
 	usb3_phy0: phy@381f0040 {
-- 
2.25.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

[PATCH 2/2] phy: fsl-imx8mq-usb: handle resettable hubs

From: Adrien Grassein <hidden>
Date: 2021-01-28 22:14:19

Add an optional GPIO in the dtb description that will
be used to reset the connected hub (if any).

Signed-off-by: Adrien Grassein <redacted>
---
 drivers/phy/freescale/phy-fsl-imx8mq-usb.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
diff --git a/drivers/phy/freescale/phy-fsl-imx8mq-usb.c b/drivers/phy/freescale/phy-fsl-imx8mq-usb.c
index a29b4a6f7c24..00abf7814fe9 100644
--- a/drivers/phy/freescale/phy-fsl-imx8mq-usb.c
+++ b/drivers/phy/freescale/phy-fsl-imx8mq-usb.c
@@ -4,6 +4,7 @@
 #include <linux/bitfield.h>
 #include <linux/clk.h>
 #include <linux/delay.h>
+#include <linux/gpio/consumer.h>
 #include <linux/io.h>
 #include <linux/module.h>
 #include <linux/of_platform.h>
@@ -36,6 +37,7 @@ struct imx8mq_usb_phy {
 	struct clk *clk;
 	void __iomem *base;
 	struct regulator *vbus;
+	struct gpio_desc *reset_gpio;
 };
 
 static int imx8mq_usb_phy_init(struct phy *phy)
@@ -111,6 +113,9 @@ static int imx8mq_phy_power_on(struct phy *phy)
 	if (ret)
 		return ret;
 
+	if (imx_phy->reset_gpio)
+		gpiod_set_value_cansleep(imx_phy->reset_gpio, 0);
+
 	return clk_prepare_enable(imx_phy->clk);
 }
 
@@ -120,6 +125,8 @@ static int imx8mq_phy_power_off(struct phy *phy)
 
 	clk_disable_unprepare(imx_phy->clk);
 	regulator_disable(imx_phy->vbus);
+	if (imx_phy->reset_gpio)
+		gpiod_set_value_cansleep(imx_phy->reset_gpio, 1);
 
 	return 0;
 }
@@ -153,6 +160,7 @@ static int imx8mq_usb_phy_probe(struct platform_device *pdev)
 	struct device *dev = &pdev->dev;
 	struct imx8mq_usb_phy *imx_phy;
 	const struct phy_ops *phy_ops;
+	int ret;
 
 	imx_phy = devm_kzalloc(dev, sizeof(*imx_phy), GFP_KERNEL);
 	if (!imx_phy)
@@ -180,6 +188,15 @@ static int imx8mq_usb_phy_probe(struct platform_device *pdev)
 	if (IS_ERR(imx_phy->vbus))
 		return PTR_ERR(imx_phy->vbus);
 
+	imx_phy->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
+	if (IS_ERR(imx_phy->reset_gpio)) {
+		ret = PTR_ERR(imx_phy->reset_gpio);
+		if (ret == -ENXIO || ret == -ENODEV)
+			imx_phy->reset_gpio = NULL;
+		else
+			return PTR_ERR(imx_phy->reset_gpio);
+	}
+
 	phy_set_drvdata(imx_phy->phy, imx_phy);
 
 	phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate);
-- 
2.25.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

RE: [PATCH 2/2] phy: fsl-imx8mq-usb: handle resettable hubs

From: Jun Li <hidden>
Date: 2021-02-02 02:03:17

Hi,
-----Original Message-----
From: Adrien Grassein <redacted>
Sent: Friday, January 29, 2021 6:13 AM
Cc: kishon@ti.com; vkoul@kernel.org; robh+dt@kernel.org; shawnguo@kernel.org;
s.hauer@pengutronix.de; kernel@pengutronix.de; festevam@gmail.com; dl-linux-imx
[off-list ref]; rikard.falkeborn@gmail.com; Peter Chen [off-list ref];
Jun Li [off-list ref]; linux-kernel@vger.kernel.org;
devicetree@vger.kernel.org; linux-arm-kernel@lists.infradead.org; Adrien
Grassein [off-list ref]
Subject: [PATCH 2/2] phy: fsl-imx8mq-usb: handle resettable hubs

Add an optional GPIO in the dtb description that will be used to reset the connected
hub (if any).
Put the external usb device reset in host phy driver, this may not
the right way, there was some attempts to handle this case(on board
hub), I am not sure what's the status now.

Li Jun
quoted hunk
Signed-off-by: Adrien Grassein <redacted>
---
 drivers/phy/freescale/phy-fsl-imx8mq-usb.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
diff --git a/drivers/phy/freescale/phy-fsl-imx8mq-usb.c
b/drivers/phy/freescale/phy-fsl-imx8mq-usb.c
index a29b4a6f7c24..00abf7814fe9 100644
--- a/drivers/phy/freescale/phy-fsl-imx8mq-usb.c
+++ b/drivers/phy/freescale/phy-fsl-imx8mq-usb.c
@@ -4,6 +4,7 @@
 #include <linux/bitfield.h>
 #include <linux/clk.h>
 #include <linux/delay.h>
+#include <linux/gpio/consumer.h>
 #include <linux/io.h>
 #include <linux/module.h>
 #include <linux/of_platform.h>
@@ -36,6 +37,7 @@ struct imx8mq_usb_phy {
 	struct clk *clk;
 	void __iomem *base;
 	struct regulator *vbus;
+	struct gpio_desc *reset_gpio;
 };

 static int imx8mq_usb_phy_init(struct phy *phy) @@ -111,6 +113,9 @@ static int
imx8mq_phy_power_on(struct phy *phy)
 	if (ret)
 		return ret;

+	if (imx_phy->reset_gpio)
+		gpiod_set_value_cansleep(imx_phy->reset_gpio, 0);
+
 	return clk_prepare_enable(imx_phy->clk);  }
@@ -120,6 +125,8 @@ static int imx8mq_phy_power_off(struct phy *phy)

 	clk_disable_unprepare(imx_phy->clk);
 	regulator_disable(imx_phy->vbus);
+	if (imx_phy->reset_gpio)
+		gpiod_set_value_cansleep(imx_phy->reset_gpio, 1);

 	return 0;
 }
@@ -153,6 +160,7 @@ static int imx8mq_usb_phy_probe(struct platform_device *pdev)
 	struct device *dev = &pdev->dev;
 	struct imx8mq_usb_phy *imx_phy;
 	const struct phy_ops *phy_ops;
+	int ret;

 	imx_phy = devm_kzalloc(dev, sizeof(*imx_phy), GFP_KERNEL);
 	if (!imx_phy)
@@ -180,6 +188,15 @@ static int imx8mq_usb_phy_probe(struct platform_device *pdev)
 	if (IS_ERR(imx_phy->vbus))
 		return PTR_ERR(imx_phy->vbus);

+	imx_phy->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
+	if (IS_ERR(imx_phy->reset_gpio)) {
+		ret = PTR_ERR(imx_phy->reset_gpio);
+		if (ret == -ENXIO || ret == -ENODEV)
+			imx_phy->reset_gpio = NULL;
+		else
+			return PTR_ERR(imx_phy->reset_gpio);
+	}
+
 	phy_set_drvdata(imx_phy->phy, imx_phy);

 	phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate);
--
2.25.1

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

Re: [PATCH 1/2] dt-bindings: phy-imx8mq-usb: add reset-gpios property

From: Rob Herring <robh@kernel.org>
Date: 2021-02-09 23:52:27

On Thu, Jan 28, 2021 at 11:12:54PM +0100, Adrien Grassein wrote:
quoted hunk
Add an optional GPIO in the dtb description that will
be used to reset the connected hub (if any).

Signed-off-by: Adrien Grassein <redacted>
---
 Documentation/devicetree/bindings/phy/fsl,imx8mq-usb-phy.txt | 1 +
 1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/phy/fsl,imx8mq-usb-phy.txt b/Documentation/devicetree/bindings/phy/fsl,imx8mq-usb-phy.txt
index 7c70f2ad9942..6ee2b42e0f22 100644
--- a/Documentation/devicetree/bindings/phy/fsl,imx8mq-usb-phy.txt
+++ b/Documentation/devicetree/bindings/phy/fsl,imx8mq-usb-phy.txt
@@ -9,6 +9,7 @@ Required properties:
 
 Optional properties:
 - vbus-supply: A phandle to the regulator for USB VBUS.
+- reset-gpios: A phandle to the reset signal of the connected hub (if any).
This should go in a hub node (or whatever device has a reset line).
 
 Example:
 	usb3_phy0: phy@381f0040 {
-- 
2.25.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help