Linux-USB Archive on lore.kernel.org
 help / color / Atom feed
From: Jun Li <jun.li@nxp.com>
To: Peter Chen <peter.chen@nxp.com>,
	"balbi@kernel.org" <balbi@kernel.org>,
	"mathias.nyman@intel.com" <mathias.nyman@intel.com>
Cc: "linux-usb@vger.kernel.org" <linux-usb@vger.kernel.org>,
	dl-linux-imx <linux-imx@nxp.com>,
	"pawell@cadence.com" <pawell@cadence.com>,
	"rogerq@ti.com" <rogerq@ti.com>,
	"gregkh@linuxfoundation.org" <gregkh@linuxfoundation.org>
Subject: RE: [PATCH v2 1/9] usb: cdns3: introduce cdns3_set_phy_power API
Date: Sun, 24 May 2020 05:56:51 +0000
Message-ID: <VE1PR04MB65283CE4D3BE7C6909BFEB6A89B20@VE1PR04MB6528.eurprd04.prod.outlook.com> (raw)
In-Reply-To: <20200523232304.23976-2-peter.chen@nxp.com>

Hi,
> -----Original Message-----
> From: Peter Chen <peter.chen@nxp.com>
> Sent: 2020年5月24日 7:23
> To: balbi@kernel.org; mathias.nyman@intel.com
> Cc: linux-usb@vger.kernel.org; dl-linux-imx <linux-imx@nxp.com>;
> pawell@cadence.com; rogerq@ti.com; gregkh@linuxfoundation.org; Jun Li
> <jun.li@nxp.com>; Peter Chen <peter.chen@nxp.com>
> Subject: [PATCH v2 1/9] usb: cdns3: introduce cdns3_set_phy_power API
> 
> Since we have both USB2 and USB3 PHYs for cdns3 controller, it is better we have
> a unity API to handle both USB2 and USB3's power, it could simplify code for error
> handling and further power management implementation.
> 
> Signed-off-by: Peter Chen <peter.chen@nxp.com>

Reviewed-by: Jun Li <jun.li@nxp.com>

> ---
>  drivers/usb/cdns3/core.c | 44 ++++++++++++++++++++++++++--------------
>  1 file changed, 29 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/usb/cdns3/core.c b/drivers/usb/cdns3/core.c index
> 19bbb5b7e6b6..bfd09aa98c12 100644
> --- a/drivers/usb/cdns3/core.c
> +++ b/drivers/usb/cdns3/core.c
> @@ -384,6 +384,28 @@ static int cdns3_role_set(struct usb_role_switch *sw, enum
> usb_role role)
>  	return ret;
>  }
> 
> +static int cdns3_set_phy_power(struct cdns3 *cdns, bool on) {
> +	int ret = 0;
> +
> +	if (on) {
> +		ret = phy_power_on(cdns->usb2_phy);
> +		if (ret)
> +			return ret;
> +
> +		ret = phy_power_on(cdns->usb3_phy);
> +		if (ret) {
> +			phy_power_off(cdns->usb2_phy);
> +			return ret;
> +		}
> +	} else {
> +		phy_power_off(cdns->usb3_phy);
> +		phy_power_off(cdns->usb2_phy);
> +	}
> +
> +	return 0;
> +}
> +
>  /**
>   * cdns3_probe - probe for cdns3 core device
>   * @pdev: Pointer to cdns3 core platform device @@ -477,14 +499,10 @@ static int
> cdns3_probe(struct platform_device *pdev)
>  	if (ret)
>  		goto err1;
> 
> -	ret = phy_power_on(cdns->usb2_phy);
> +	ret = cdns3_set_phy_power(cdns, true);
>  	if (ret)
>  		goto err2;
> 
> -	ret = phy_power_on(cdns->usb3_phy);
> -	if (ret)
> -		goto err3;
> -
>  	sw_desc.set = cdns3_role_set;
>  	sw_desc.get = cdns3_role_get;
>  	sw_desc.allow_userspace_control = true; @@ -496,16 +514,16 @@ static int
> cdns3_probe(struct platform_device *pdev)
>  	if (IS_ERR(cdns->role_sw)) {
>  		ret = PTR_ERR(cdns->role_sw);
>  		dev_warn(dev, "Unable to register Role Switch\n");
> -		goto err4;
> +		goto err3;
>  	}
> 
>  	ret = cdns3_drd_init(cdns);
>  	if (ret)
> -		goto err5;
> +		goto err4;
> 
>  	ret = cdns3_core_init_role(cdns);
>  	if (ret)
> -		goto err5;
> +		goto err4;
> 
>  	device_set_wakeup_capable(dev, true);
>  	pm_runtime_set_active(dev);
> @@ -522,14 +540,11 @@ static int cdns3_probe(struct platform_device *pdev)
>  	dev_dbg(dev, "Cadence USB3 core: probe succeed\n");
> 
>  	return 0;
> -err5:
> +err4:
>  	cdns3_drd_exit(cdns);
>  	usb_role_switch_unregister(cdns->role_sw);
> -err4:
> -	phy_power_off(cdns->usb3_phy);
> -
>  err3:
> -	phy_power_off(cdns->usb2_phy);
> +	cdns3_set_phy_power(cdns, false);
>  err2:
>  	phy_exit(cdns->usb3_phy);
>  err1:
> @@ -553,8 +568,7 @@ static int cdns3_remove(struct platform_device *pdev)
>  	pm_runtime_put_noidle(&pdev->dev);
>  	cdns3_exit_roles(cdns);
>  	usb_role_switch_unregister(cdns->role_sw);
> -	phy_power_off(cdns->usb2_phy);
> -	phy_power_off(cdns->usb3_phy);
> +	cdns3_set_phy_power(cdns, false);
>  	phy_exit(cdns->usb2_phy);
>  	phy_exit(cdns->usb3_phy);
>  	return 0;
> --
> 2.17.1


  reply index

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-23 23:22 [PATCH v2 0/9] usb: some PM changes for cdns3 and xhci-plat Peter Chen
2020-05-23 23:22 ` [PATCH v2 1/9] usb: cdns3: introduce cdns3_set_phy_power API Peter Chen
2020-05-24  5:56   ` Jun Li [this message]
2020-05-23 23:22 ` [PATCH v2 2/9] usb: cdns3: add runtime PM support Peter Chen
2020-05-24  5:57   ` Jun Li
2020-05-24  6:43     ` Jun Li
2020-05-25  2:57     ` Peter Chen
2020-05-25 12:23       ` Jun Li
2020-05-26  2:03         ` Peter Chen
2020-06-03  8:51   ` Chunfeng Yun
2020-06-03  9:27     ` Peter Chen
2020-05-23 23:22 ` [PATCH v2 3/9] usb: cdns3: imx: add glue layer runtime pm implementation Peter Chen
2020-05-24  6:55   ` Jun Li
2020-05-25  2:59     ` Peter Chen
2020-05-25  4:53   ` kbuild test robot
2020-05-25  6:31     ` Peter Chen
2020-05-25  8:25   ` kbuild test robot
2020-05-23 23:22 ` [PATCH v2 4/9] usb: host: xhci-plat: add platform data support Peter Chen
2020-05-29 10:21   ` Mathias Nyman
2020-05-23 23:23 ` [PATCH v2 5/9] usb: host: xhci-plat: add .suspend_quirk for struct xhci_plat_priv Peter Chen
2020-05-29 10:22   ` Mathias Nyman
2020-05-23 23:23 ` [PATCH v2 6/9] usb: host: xhci-plat: delete the unnecessary code Peter Chen
2020-05-24  7:40   ` Jun Li
2020-05-29 10:23   ` Mathias Nyman
2020-05-23 23:23 ` [PATCH v2 7/9] usb: host: xhci-plat: add priv flag for skip_phy_initialization Peter Chen
2020-05-24  7:40   ` Jun Li
2020-05-25  3:03     ` Peter Chen
2020-05-25 12:30       ` Jun Li
2020-05-26  0:26         ` Peter Chen
2020-05-29 13:10   ` Mathias Nyman
2020-05-29 13:15     ` Peter Chen
2020-05-23 23:23 ` [PATCH v2 8/9] usb: cdns3: host: add .suspend_quirk for xhci-plat.c Peter Chen
2020-05-23 23:23 ` [PATCH v2 9/9] usb: cdns3: host: add xhci_plat_priv's flag skip_phy_initialization Peter Chen
2020-05-29  7:22 ` [PATCH v2 0/9] usb: some PM changes for cdns3 and xhci-plat Peter Chen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=VE1PR04MB65283CE4D3BE7C6909BFEB6A89B20@VE1PR04MB6528.eurprd04.prod.outlook.com \
    --to=jun.li@nxp.com \
    --cc=balbi@kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-imx@nxp.com \
    --cc=linux-usb@vger.kernel.org \
    --cc=mathias.nyman@intel.com \
    --cc=pawell@cadence.com \
    --cc=peter.chen@nxp.com \
    --cc=rogerq@ti.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Linux-USB Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-usb/0 linux-usb/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-usb linux-usb/ https://lore.kernel.org/linux-usb \
		linux-usb@vger.kernel.org
	public-inbox-index linux-usb

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-usb


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git