bcm_udc_otg_phy.c 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /*
  2. * Copyright 2015 Broadcom Corporation.
  3. *
  4. * SPDX-License-Identifier: GPL-2.0+
  5. */
  6. #include <config.h>
  7. #include <common.h>
  8. #include <asm/io.h>
  9. #include <asm/arch/sysmap.h>
  10. #include "dwc2_udc_otg_priv.h"
  11. #include "bcm_udc_otg.h"
  12. void otg_phy_init(struct dwc2_udc *dev)
  13. {
  14. /* set Phy to driving mode */
  15. wfld_clear(HSOTG_CTRL_BASE_ADDR + HSOTG_CTRL_PHY_P1CTL_OFFSET,
  16. HSOTG_CTRL_PHY_P1CTL_NON_DRIVING_MASK);
  17. udelay(100);
  18. /* clear Soft Disconnect */
  19. wfld_clear(HSOTG_BASE_ADDR + HSOTG_DCTL_OFFSET,
  20. HSOTG_DCTL_SFTDISCON_MASK);
  21. /* invoke Reset (active low) */
  22. wfld_clear(HSOTG_CTRL_BASE_ADDR + HSOTG_CTRL_PHY_P1CTL_OFFSET,
  23. HSOTG_CTRL_PHY_P1CTL_SOFT_RESET_MASK);
  24. /* Reset needs to be asserted for 2ms */
  25. udelay(2000);
  26. /* release Reset */
  27. wfld_set(HSOTG_CTRL_BASE_ADDR + HSOTG_CTRL_PHY_P1CTL_OFFSET,
  28. HSOTG_CTRL_PHY_P1CTL_SOFT_RESET_MASK,
  29. HSOTG_CTRL_PHY_P1CTL_SOFT_RESET_MASK);
  30. }
  31. void otg_phy_off(struct dwc2_udc *dev)
  32. {
  33. /* Soft Disconnect */
  34. wfld_set(HSOTG_BASE_ADDR + HSOTG_DCTL_OFFSET,
  35. HSOTG_DCTL_SFTDISCON_MASK,
  36. HSOTG_DCTL_SFTDISCON_MASK);
  37. /* set Phy to non-driving (reset) mode */
  38. wfld_set(HSOTG_CTRL_BASE_ADDR + HSOTG_CTRL_PHY_P1CTL_OFFSET,
  39. HSOTG_CTRL_PHY_P1CTL_NON_DRIVING_MASK,
  40. HSOTG_CTRL_PHY_P1CTL_NON_DRIVING_MASK);
  41. }