ohci-at91.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * (C) Copyright 2006
  4. * DENX Software Engineering <mk@denx.de>
  5. */
  6. #include <common.h>
  7. #if defined(CONFIG_USB_OHCI_NEW) && defined(CONFIG_SYS_USB_OHCI_CPU_INIT)
  8. #include <asm/arch/clk.h>
  9. int usb_cpu_init(void)
  10. {
  11. #ifdef CONFIG_USB_ATMEL_CLK_SEL_PLLB
  12. if (at91_pllb_clk_enable(get_pllb_init()))
  13. return -1;
  14. #ifdef CONFIG_AT91SAM9N12
  15. at91_usb_clk_init(AT91_PMC_USBS_USB_PLLB | AT91_PMC_USB_DIV_2);
  16. #endif
  17. #elif defined(CONFIG_USB_ATMEL_CLK_SEL_UPLL)
  18. if (at91_upll_clk_enable())
  19. return -1;
  20. at91_usb_clk_init(AT91_PMC_USBS_USB_UPLL | AT91_PMC_USBDIV_10);
  21. #endif
  22. at91_periph_clk_enable(ATMEL_ID_UHP);
  23. at91_system_clk_enable(ATMEL_PMC_UHP);
  24. #if defined(CONFIG_AT91SAM9261) || defined(CONFIG_AT91SAM9G10)
  25. at91_system_clk_enable(AT91_PMC_HCK0);
  26. #endif
  27. return 0;
  28. }
  29. int usb_cpu_stop(void)
  30. {
  31. at91_periph_clk_disable(ATMEL_ID_UHP);
  32. at91_system_clk_disable(ATMEL_PMC_UHP);
  33. #if defined(CONFIG_AT91SAM9261) || defined(CONFIG_AT91SAM9G10)
  34. at91_system_clk_disable(AT91_PMC_HCK0);
  35. #endif
  36. #ifdef CONFIG_USB_ATMEL_CLK_SEL_PLLB
  37. #ifdef CONFIG_AT91SAM9N12
  38. at91_usb_clk_init(0);
  39. #endif
  40. if (at91_pllb_clk_disable())
  41. return -1;
  42. #elif defined(CONFIG_USB_ATMEL_CLK_SEL_UPLL)
  43. if (at91_upll_clk_disable())
  44. return -1;
  45. #endif
  46. return 0;
  47. }
  48. int usb_cpu_init_fail(void)
  49. {
  50. return usb_cpu_stop();
  51. }
  52. #endif /* defined(CONFIG_USB_OHCI) && defined(CONFIG_SYS_USB_OHCI_CPU_INIT) */