diff mbox series

[v1,1/7] usb: cdns3: Set USB PHY mode in cdns3_probe()

Message ID 20240504150358.19600-2-minda.chen@starfivetech.com
State Changes Requested
Delegated to: Marek Vasut
Headers show
Series Add Starfive JH7110 Cadence USB driver | expand

Commit Message

Minda Chen May 4, 2024, 3:03 p.m. UTC
USB PHY maybe need to set PHY mode in different USB
dr mode. So translate to generic PHY mode and call
generic_phy_set_mode().

Signed-off-by: Minda Chen <minda.chen@starfivetech.com>
---
 drivers/usb/cdns3/core.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

Comments

Marek Vasut May 8, 2024, 1:27 a.m. UTC | #1
On 5/4/24 5:03 PM, Minda Chen wrote:
> USB PHY maybe need to set PHY mode in different USB
> dr mode. So translate to generic PHY mode and call
> generic_phy_set_mode().
> 
> Signed-off-by: Minda Chen <minda.chen@starfivetech.com>
> ---
>   drivers/usb/cdns3/core.c | 17 +++++++++++++++++
>   1 file changed, 17 insertions(+)
> 
> diff --git a/drivers/usb/cdns3/core.c b/drivers/usb/cdns3/core.c
> index 12a741c6ea..c1a61471f9 100644
> --- a/drivers/usb/cdns3/core.c
> +++ b/drivers/usb/cdns3/core.c
> @@ -321,6 +321,7 @@ static int cdns3_probe(struct cdns3 *cdns)
>   {
>   	struct udevice *dev = cdns->dev;
>   	int ret;
> +	int mode = PHY_MODE_INVALID;

Please swap ret and mode to keep this list sorted.

>   	cdns->xhci_regs = dev_remap_addr_name(dev, "xhci");
>   	if (!cdns->xhci_regs)
> @@ -372,6 +373,22 @@ static int cdns3_probe(struct cdns3 *cdns)
>   	if (ret)
>   		return ret;
>   
> +	if (cdns->dr_mode == USB_DR_MODE_HOST)
> +		mode = PHY_MODE_USB_HOST;
> +	else if (cdns->dr_mode == USB_DR_MODE_PERIPHERAL)
> +		mode = PHY_MODE_USB_DEVICE;
> +	else if (cdns->dr_mode == USB_DR_MODE_OTG)
> +		mode = PHY_MODE_USB_OTG;
> +
> +	if (mode != PHY_MODE_INVALID) {

Better invert the condition this way to reduce indent:

if (mode == PHY_MODE_INVALID) {
   dev_err(...report the error...);
   return ret;
}

ret = generic_phy_set...

> +		ret = generic_phy_set_mode(&cdns->usb2_phy, mode, 0);
> +		if (ret)
> +			return ret;
> +		ret = generic_phy_set_mode(&cdns->usb3_phy, mode, 0);
> +		if (ret)
> +			return ret;
> +	}
> +
>   	dev_dbg(dev, "Cadence USB3 core: probe succeed\n");
>   
>   	return 0;
diff mbox series

Patch

diff --git a/drivers/usb/cdns3/core.c b/drivers/usb/cdns3/core.c
index 12a741c6ea..c1a61471f9 100644
--- a/drivers/usb/cdns3/core.c
+++ b/drivers/usb/cdns3/core.c
@@ -321,6 +321,7 @@  static int cdns3_probe(struct cdns3 *cdns)
 {
 	struct udevice *dev = cdns->dev;
 	int ret;
+	int mode = PHY_MODE_INVALID;
 
 	cdns->xhci_regs = dev_remap_addr_name(dev, "xhci");
 	if (!cdns->xhci_regs)
@@ -372,6 +373,22 @@  static int cdns3_probe(struct cdns3 *cdns)
 	if (ret)
 		return ret;
 
+	if (cdns->dr_mode == USB_DR_MODE_HOST)
+		mode = PHY_MODE_USB_HOST;
+	else if (cdns->dr_mode == USB_DR_MODE_PERIPHERAL)
+		mode = PHY_MODE_USB_DEVICE;
+	else if (cdns->dr_mode == USB_DR_MODE_OTG)
+		mode = PHY_MODE_USB_OTG;
+
+	if (mode != PHY_MODE_INVALID) {
+		ret = generic_phy_set_mode(&cdns->usb2_phy, mode, 0);
+		if (ret)
+			return ret;
+		ret = generic_phy_set_mode(&cdns->usb3_phy, mode, 0);
+		if (ret)
+			return ret;
+	}
+
 	dev_dbg(dev, "Cadence USB3 core: probe succeed\n");
 
 	return 0;