On Wednesday 05 April 2017 07:36 PM, Sjoerd Simons wrote:
> On rockchip devices vbus is supplied by a separate power supply, often
> through a regulator. Add support for describing the the regulator in
> device-tree following the same convention as several other usb phy's.
> 
merged, thanks.

-Kishon
> Signed-off-by: Sjoerd Simons <sjoerd.sim...@collabora.co.uk>
> ---
> 
>  .../devicetree/bindings/phy/rockchip-usb-phy.txt      |  1 +
>  drivers/phy/phy-rockchip-usb.c                        | 19 
> +++++++++++++++++++
>  2 files changed, 20 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/phy/rockchip-usb-phy.txt 
> b/Documentation/devicetree/bindings/phy/rockchip-usb-phy.txt
> index 57dc388e2fa2..4ed569046daf 100644
> --- a/Documentation/devicetree/bindings/phy/rockchip-usb-phy.txt
> +++ b/Documentation/devicetree/bindings/phy/rockchip-usb-phy.txt
> @@ -30,6 +30,7 @@ Optional Properties:
>  - reset-names: Only allow the following entries:
>   - phy-reset
>  - resets: Must contain an entry for each entry in reset-names.
> +- vbus-supply: power-supply phandle for vbus power source
>  
>  Example:
>  
> diff --git a/drivers/phy/phy-rockchip-usb.c b/drivers/phy/phy-rockchip-usb.c
> index 734987fa0ad7..3378eeb7a562 100644
> --- a/drivers/phy/phy-rockchip-usb.c
> +++ b/drivers/phy/phy-rockchip-usb.c
> @@ -66,6 +66,7 @@ struct rockchip_usb_phy {
>       struct phy      *phy;
>       bool            uart_enabled;
>       struct reset_control *reset;
> +     struct regulator *vbus;
>  };
>  
>  static int rockchip_usb_phy_power(struct rockchip_usb_phy *phy,
> @@ -88,6 +89,9 @@ static void rockchip_usb_phy480m_disable(struct clk_hw *hw)
>                                                   struct rockchip_usb_phy,
>                                                   clk480m_hw);
>  
> +     if (phy->vbus)
> +             regulator_disable(phy->vbus);
> +
>       /* Power down usb phy analog blocks by set siddq 1 */
>       rockchip_usb_phy_power(phy, 1);
>  }
> @@ -143,6 +147,14 @@ static int rockchip_usb_phy_power_on(struct phy *_phy)
>       if (phy->uart_enabled)
>               return -EBUSY;
>  
> +     if (phy->vbus) {
> +             int ret;
> +
> +             ret = regulator_enable(phy->vbus);
> +             if (ret)
> +                     return ret;
> +     }
> +
>       return clk_prepare_enable(phy->clk480m);
>  }
>  
> @@ -268,6 +280,13 @@ static int rockchip_usb_phy_init(struct 
> rockchip_usb_phy_base *base,
>       }
>       phy_set_drvdata(rk_phy->phy, rk_phy);
>  
> +     rk_phy->vbus = devm_regulator_get_optional(&rk_phy->phy->dev, "vbus");
> +     if (IS_ERR(rk_phy->vbus)) {
> +             if (PTR_ERR(rk_phy->vbus) == -EPROBE_DEFER)
> +                     return PTR_ERR(rk_phy->vbus);
> +             rk_phy->vbus = NULL;
> +     }
> +
>       /*
>        * When acting as uart-pipe, just keep clock on otherwise
>        * only power up usb phy when it use, so disable it when init
> 

Reply via email to