Firstly, the PHY's clock needs to unprepared to keep prepare count
balanced. Secondly, downstream code suggests that reset is synchronous
and thus it should be asserted before disabling clock.
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
Link: https://lore.kernel.org/r/20200106013416.9604-4-digetx@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 
 static int ulpi_phy_power_off(struct tegra_usb_phy *phy)
 {
-       clk_disable(phy->clk);
-       return gpio_direction_output(phy->reset_gpio, 0);
+       int err;
+
+       err = gpio_direction_output(phy->reset_gpio, 0);
+       if (err) {
+               dev_err(phy->u_phy.dev, "reset GPIO not asserted: %d\n", err);
+               return err;
+       }
+
+       usleep_range(5000, 6000);
+
+       clk_disable_unprepare(phy->clk);
+
+       return 0;
 }
 
 static void tegra_usb_phy_close(struct tegra_usb_phy *phy)