[U-Boot] [PATCH 7/8] usb: musb-new: sunxi: Add proper musb exit support
Vasily Khoruzhick
anarsoul at gmail.com
Wed Jul 11 06:57:26 UTC 2018
On Mon, Jul 9, 2018 at 12:17 PM, Jagan Teki <jagan at amarulasolutions.com> wrote:
> musb have platform ops to do proper graceful exit,
> so add the exit call and move musb platform exit code
> instead of keeping it in driver remove.
> This make proper shutdown of musb where .remove will
> call disable, exit serially via musb_stop.
>
> Signed-off-by: Jagan Teki <jagan at amarulasolutions.com>
> ---
> drivers/usb/musb-new/sunxi.c | 48 +++++++++++++++++++++---------------
> 1 file changed, 28 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/usb/musb-new/sunxi.c b/drivers/usb/musb-new/sunxi.c
> index aa2880eeb9..9f71b84fd1 100644
> --- a/drivers/usb/musb-new/sunxi.c
> +++ b/drivers/usb/musb-new/sunxi.c
> @@ -326,6 +326,33 @@ static int sunxi_musb_init(struct musb *musb)
> return 0;
> }
>
> +static int sunxi_musb_exit(struct musb *musb)
> +{
> + struct sunxi_glue *glue = to_sunxi_glue(musb->controller);
> + int ret = 0;
> +
> + if (generic_phy_valid(&glue->phy)) {
> + ret = generic_phy_exit(&glue->phy);
> + if (ret) {
> + dev_err(dev, "failed to power off usb phy\n");
> + return ret;
> + }
> + }
> +
> +#ifdef CONFIG_SUNXI_GEN_SUN6I
Same here, since you're refactoring this code, it would be appropriate
to use compatibles and get rid of this ifdef.
> + clrbits_le32(&glue->ccm->ahb_reset0_cfg, BIT(AHB_GATE_OFFSET_USB0));
> + if (glue->cfg->rst_bit)
> + clrbits_le32(&glue->ccm->ahb_reset0_cfg,
> + BIT(glue->cfg->rst_bit));
> +#endif
> + clrbits_le32(&glue->ccm->ahb_gate0, BIT(AHB_GATE_OFFSET_USB0));
> + if (glue->cfg->clkgate_bit)
> + clrbits_le32(&glue->ccm->ahb_gate0,
> + BIT(glue->cfg->clkgate_bit));
> +
> + return 0;
> +}
> +
> static void sunxi_musb_pre_root_reset_end(struct musb *musb)
> {
> struct sunxi_glue *glue = to_sunxi_glue(musb->controller);
> @@ -342,6 +369,7 @@ static void sunxi_musb_post_root_reset_end(struct musb *musb)
>
> static const struct musb_platform_ops sunxi_musb_ops = {
> .init = sunxi_musb_init,
> + .exit = sunxi_musb_exit,
> .enable = sunxi_musb_enable,
> .disable = sunxi_musb_disable,
> .pre_root_reset_end = sunxi_musb_pre_root_reset_end,
> @@ -456,29 +484,9 @@ static int musb_usb_remove(struct udevice *dev)
> {
> struct sunxi_glue *glue = dev_get_priv(dev);
> struct musb_host_data *host = &glue->mdata;
> - int ret;
> -
> - if (generic_phy_valid(&glue->phy)) {
> - ret = generic_phy_exit(&glue->phy);
> - if (ret) {
> - pr_err("failed to exit %s USB PHY\n", dev->name);
> - return ret;
> - }
> - }
>
> musb_stop(host->host);
>
> -#ifdef CONFIG_SUNXI_GEN_SUN6I
> - clrbits_le32(&glue->ccm->ahb_reset0_cfg, BIT(AHB_GATE_OFFSET_USB0));
> - if (glue->cfg->rst_bit)
> - clrbits_le32(&glue->ccm->ahb_reset0_cfg,
> - BIT(glue->cfg->rst_bit));
> -#endif
> - clrbits_le32(&glue->ccm->ahb_gate0, BIT(AHB_GATE_OFFSET_USB0));
> - if (glue->cfg->clkgate_bit)
> - clrbits_le32(&glue->ccm->ahb_gate0,
> - BIT(glue->cfg->clkgate_bit));
> -
> free(host->host);
> host->host = NULL;
>
> --
> 2.17.1
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> https://lists.denx.de/listinfo/u-boot
More information about the U-Boot
mailing list