[U-Boot] [PATCH 5/6] usb: ohci-generic: factorize PHY operation
Marek Vasut
marex at denx.de
Sat Mar 17 02:22:03 UTC 2018
On 03/14/2018 05:48 PM, patrice.chotard at st.com wrote:
> From: Patrice Chotard <patrice.chotard at st.com>
>
> Factorize PHY get/init/poweron and PHY poweroff/exit operations
> into separate function, it simplify the error path.
FYI, it's "factor out", not "factorize" .
> Signed-off-by: Patrice Chotard <patrice.chotard at st.com>
> ---
> drivers/usb/host/ohci-generic.c | 99 ++++++++++++++++++++++++-----------------
> 1 file changed, 59 insertions(+), 40 deletions(-)
>
> diff --git a/drivers/usb/host/ohci-generic.c b/drivers/usb/host/ohci-generic.c
> index 4843b4ac859f..590fe4ca740f 100644
> --- a/drivers/usb/host/ohci-generic.c
> +++ b/drivers/usb/host/ohci-generic.c
> @@ -25,6 +25,56 @@ struct generic_ohci {
> int reset_count; /* number of reset in reset list */
> };
>
> +static int ohci_setup_phy(struct udevice *dev, int index)
> +{
> + struct generic_ohci *priv = dev_get_priv(dev);
> + int ret;
> +
> + ret = generic_phy_get_by_index(dev, index, &priv->phy);
> + if (ret) {
> + if (ret != -ENOENT) {
> + dev_err(dev, "failed to get usb phy\n");
> + return ret;
> + }
> + } else {
> + ret = generic_phy_init(&priv->phy);
> + if (ret) {
> + dev_err(dev, "failed to init usb phy\n");
> + return ret;
> + }
> +
> + ret = generic_phy_power_on(&priv->phy);
> + if (ret) {
> + dev_err(dev, "failed to power on usb phy\n");
> + return generic_phy_exit(&priv->phy);
> + }
> + }
> +
> + return 0;
> +}
> +
> +static int ohci_shutdown_phy(struct udevice *dev)
> +{
> + struct generic_ohci *priv = dev_get_priv(dev);
> + int ret = 0;
> +
> + if (generic_phy_valid(&priv->phy)) {
> + ret = generic_phy_power_off(&priv->phy);
> + if (ret) {
> + dev_err(dev, "failed to power off usb phy\n");
> + return ret;
> + }
> +
> + ret = generic_phy_exit(&priv->phy);
> + if (ret) {
> + dev_err(dev, "failed to power off usb phy\n");
> + return ret;
> + }
> + }
> +
> + return 0;
> +}
> +
> static int ohci_usb_probe(struct udevice *dev)
> {
> struct ohci_regs *regs = (struct ohci_regs *)devfdt_get_addr(dev);
> @@ -85,26 +135,10 @@ static int ohci_usb_probe(struct udevice *dev)
> goto clk_err;
> }
>
> - err = generic_phy_get_by_index(dev, 0, &priv->phy);
> - if (err) {
> - if (err != -ENOENT) {
> - pr_err("failed to get usb phy\n");
> - goto reset_err;
> - }
> - } else {
> -
> - err = generic_phy_init(&priv->phy);
> - if (err) {
> - pr_err("failed to init usb phy\n");
> - goto reset_err;
> - }
> + err = ohci_setup_phy(dev, 0);
> + if (err)
>
> - err = generic_phy_power_on(&priv->phy);
> - if (err) {
> - dev_err(dev, "failed to power on usb phy\n");
> - goto phy_power_err;
> - }
> - }
> + goto reset_err;
>
> err = ohci_register(dev, regs);
> if (err)
> @@ -113,18 +147,9 @@ static int ohci_usb_probe(struct udevice *dev)
> return 0;
>
> phy_err:
> - if (generic_phy_valid(&priv->phy)) {
> - ret = generic_phy_power_off(&priv->phy);
> - if (ret)
> - dev_err(dev, "failed to power off usb phy\n");
> - }
> -
> -phy_power_err:
> - if (generic_phy_valid(&priv->phy)) {
> - ret = generic_phy_exit(&priv->phy);
> - if (ret)
> - pr_err("failed to release phy\n");
> - }
> + ret = ohci_shutdown_phy(dev);
> + if (ret)
> + dev_err(dev, "failed to shutdown usb phy\n");
>
> reset_err:
> ret = reset_release_all(priv->resets, priv->reset_count);
> @@ -147,15 +172,9 @@ static int ohci_usb_remove(struct udevice *dev)
> if (ret)
> return ret;
>
> - if (generic_phy_valid(&priv->phy)) {
> - ret = generic_phy_power_off(&priv->phy);
> - if (ret)
> - return ret;
> -
> - ret = generic_phy_exit(&priv->phy);
> - if (ret)
> - return ret;
> - }
> + ret = ohci_shutdown_phy(dev);
> + if (ret)
> + return ret;
>
> ret = reset_release_all(priv->resets, priv->reset_count);
> if (ret)
>
--
Best regards,
Marek Vasut
More information about the U-Boot
mailing list