diff mbox series

[v2] usb: dwc3-meson-g12a: add power-on/off of the PHYs

Message ID 20200421081742.24628-1-narmstrong@baylibre.com
State Accepted
Commit 3dc4f8397015dac7c343f86a93bfb962ff4e8d6f
Delegated to: Marek Vasut
Headers show
Series [v2] usb: dwc3-meson-g12a: add power-on/off of the PHYs | expand

Commit Message

Neil Armstrong April 21, 2020, 8:17 a.m. UTC
Power on/off the PHYs to enable power to the USB ports, fixing USB support
on Khadas VIM3/VIM3L boards.

The G12A USB complex has at least 2 USB2 PHYs, but one is muxed between the
DWC2 and DWC3 controller and the other one directly connected to the DWC3
controller. The USB3+PCIe combo PHY is muxed between the DWC3 controller
and a DW-PCIE controller.
All PHYs are optional, but it's type (usb2/usb3) and position are important
to determine it's capabilities, thus they are stored in a fixed size
array and the phy-name determines it's position, it's position determining
it's type and functionnalities.
This is why we need to loop over the array to power on all the DT provided
PHYs.

Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
---
Changes since v1:
- removed extra space before semicolon
- added clarification in commit message

 drivers/usb/dwc3/dwc3-meson-g12a.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

Comments

Marek Vasut April 21, 2020, 8:24 a.m. UTC | #1
On 4/21/20 10:17 AM, Neil Armstrong wrote:
> Power on/off the PHYs to enable power to the USB ports, fixing USB support
> on Khadas VIM3/VIM3L boards.
> 
> The G12A USB complex has at least 2 USB2 PHYs, but one is muxed between the
> DWC2 and DWC3 controller and the other one directly connected to the DWC3
> controller. The USB3+PCIe combo PHY is muxed between the DWC3 controller
> and a DW-PCIE controller.
> All PHYs are optional, but it's type (usb2/usb3) and position are important
> to determine it's capabilities, thus they are stored in a fixed size
> array and the phy-name determines it's position, it's position determining
> it's type and functionnalities.
> This is why we need to loop over the array to power on all the DT provided
> PHYs.
> 
> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
> ---
> Changes since v1:
> - removed extra space before semicolon
> - added clarification in commit message
> 
>  drivers/usb/dwc3/dwc3-meson-g12a.c | 16 ++++++++++++++++
>  1 file changed, 16 insertions(+)
> 
> diff --git a/drivers/usb/dwc3/dwc3-meson-g12a.c b/drivers/usb/dwc3/dwc3-meson-g12a.c
> index d4453f8784..de964d6c10 100644
> --- a/drivers/usb/dwc3/dwc3-meson-g12a.c
> +++ b/drivers/usb/dwc3/dwc3-meson-g12a.c
> @@ -408,6 +408,15 @@ static int dwc3_meson_g12a_probe(struct udevice *dev)
>  			goto err_phy_init;
>  	}
>  
> +	for (i = 0; i < PHY_COUNT; ++i) {

i++ , unlike old c++ compilers, there's no difference here.

> +		if (!priv->phys[i].dev)
> +			continue;
> +
> +		ret = generic_phy_power_on(&priv->phys[i]);
> +		if (ret)
> +			goto err_phy_init;
> +	}
> +
>  	return 0;

Reviewed-by: Marek Vasut <marex@denx.de>
diff mbox series

Patch

diff --git a/drivers/usb/dwc3/dwc3-meson-g12a.c b/drivers/usb/dwc3/dwc3-meson-g12a.c
index d4453f8784..de964d6c10 100644
--- a/drivers/usb/dwc3/dwc3-meson-g12a.c
+++ b/drivers/usb/dwc3/dwc3-meson-g12a.c
@@ -408,6 +408,15 @@  static int dwc3_meson_g12a_probe(struct udevice *dev)
 			goto err_phy_init;
 	}
 
+	for (i = 0; i < PHY_COUNT; ++i) {
+		if (!priv->phys[i].dev)
+			continue;
+
+		ret = generic_phy_power_on(&priv->phys[i]);
+		if (ret)
+			goto err_phy_init;
+	}
+
 	return 0;
 
 err_phy_init:
@@ -430,6 +439,13 @@  static int dwc3_meson_g12a_remove(struct udevice *dev)
 
 	clk_release_all(&priv->clk, 1);
 
+	for (i = 0; i < PHY_COUNT; ++i) {
+		if (!priv->phys[i].dev)
+			continue;
+
+		 generic_phy_power_off(&priv->phys[i]);
+	}
+
 	for (i = 0 ; i < PHY_COUNT ; ++i) {
 		if (!priv->phys[i].dev)
 			continue;