xref: /openbmc/u-boot/drivers/usb/host/ohci-at91.c (revision e8f80a5a)
1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
22731b9a8SJean-Christophe PLAGNIOL-VILLARD /*
32731b9a8SJean-Christophe PLAGNIOL-VILLARD  * (C) Copyright 2006
42731b9a8SJean-Christophe PLAGNIOL-VILLARD  * DENX Software Engineering <mk@denx.de>
52731b9a8SJean-Christophe PLAGNIOL-VILLARD  */
62731b9a8SJean-Christophe PLAGNIOL-VILLARD 
72731b9a8SJean-Christophe PLAGNIOL-VILLARD #include <common.h>
82731b9a8SJean-Christophe PLAGNIOL-VILLARD 
92731b9a8SJean-Christophe PLAGNIOL-VILLARD #if defined(CONFIG_USB_OHCI_NEW) && defined(CONFIG_SYS_USB_OHCI_CPU_INIT)
102731b9a8SJean-Christophe PLAGNIOL-VILLARD 
11dc39ae95SJean-Christophe PLAGNIOL-VILLARD #include <asm/arch/clk.h>
122731b9a8SJean-Christophe PLAGNIOL-VILLARD 
usb_cpu_init(void)132731b9a8SJean-Christophe PLAGNIOL-VILLARD int usb_cpu_init(void)
142731b9a8SJean-Christophe PLAGNIOL-VILLARD {
15dcd2f1a0SBo Shen #ifdef CONFIG_USB_ATMEL_CLK_SEL_PLLB
169cf7385cSWenyou Yang 	if (at91_pllb_clk_enable(get_pllb_init()))
179cf7385cSWenyou Yang 		return -1;
189cf7385cSWenyou Yang 
19d9bef0adSBo Shen #ifdef CONFIG_AT91SAM9N12
20b55b5960SWenyou Yang 	at91_usb_clk_init(AT91_PMC_USBS_USB_PLLB | AT91_PMC_USB_DIV_2);
21d9bef0adSBo Shen #endif
22dcd2f1a0SBo Shen #elif defined(CONFIG_USB_ATMEL_CLK_SEL_UPLL)
23b55b5960SWenyou Yang 	if (at91_upll_clk_enable())
24b55b5960SWenyou Yang 		return -1;
2564203c7bSSergey Matyukevich 
26b55b5960SWenyou Yang 	at91_usb_clk_init(AT91_PMC_USBS_USB_UPLL | AT91_PMC_USBDIV_10);
272731b9a8SJean-Christophe PLAGNIOL-VILLARD #endif
282731b9a8SJean-Christophe PLAGNIOL-VILLARD 
2901c8bf5aSBo Shen 	at91_periph_clk_enable(ATMEL_ID_UHP);
30e5e8bb05SBo Shen 
31cd4de1d9SWenyou Yang 	at91_system_clk_enable(ATMEL_PMC_UHP);
32158947d2SBo Shen #if defined(CONFIG_AT91SAM9261) || defined(CONFIG_AT91SAM9G10)
33cd4de1d9SWenyou Yang 	at91_system_clk_enable(AT91_PMC_HCK0);
342731b9a8SJean-Christophe PLAGNIOL-VILLARD #endif
352731b9a8SJean-Christophe PLAGNIOL-VILLARD 
362731b9a8SJean-Christophe PLAGNIOL-VILLARD 	return 0;
372731b9a8SJean-Christophe PLAGNIOL-VILLARD }
382731b9a8SJean-Christophe PLAGNIOL-VILLARD 
usb_cpu_stop(void)392731b9a8SJean-Christophe PLAGNIOL-VILLARD int usb_cpu_stop(void)
402731b9a8SJean-Christophe PLAGNIOL-VILLARD {
4101c8bf5aSBo Shen 	at91_periph_clk_disable(ATMEL_ID_UHP);
42e5e8bb05SBo Shen 
43cd4de1d9SWenyou Yang 	at91_system_clk_disable(ATMEL_PMC_UHP);
44158947d2SBo Shen #if defined(CONFIG_AT91SAM9261) || defined(CONFIG_AT91SAM9G10)
45cd4de1d9SWenyou Yang 	at91_system_clk_disable(AT91_PMC_HCK0);
462731b9a8SJean-Christophe PLAGNIOL-VILLARD #endif
472731b9a8SJean-Christophe PLAGNIOL-VILLARD 
48dcd2f1a0SBo Shen #ifdef CONFIG_USB_ATMEL_CLK_SEL_PLLB
49d9bef0adSBo Shen #ifdef CONFIG_AT91SAM9N12
50b55b5960SWenyou Yang 	at91_usb_clk_init(0);
51d9bef0adSBo Shen #endif
529cf7385cSWenyou Yang 
539cf7385cSWenyou Yang 	if (at91_pllb_clk_disable())
549cf7385cSWenyou Yang 		return -1;
559cf7385cSWenyou Yang 
56dcd2f1a0SBo Shen #elif defined(CONFIG_USB_ATMEL_CLK_SEL_UPLL)
57b55b5960SWenyou Yang 	if (at91_upll_clk_disable())
58b55b5960SWenyou Yang 		return -1;
592731b9a8SJean-Christophe PLAGNIOL-VILLARD #endif
602731b9a8SJean-Christophe PLAGNIOL-VILLARD 
612731b9a8SJean-Christophe PLAGNIOL-VILLARD 	return 0;
622731b9a8SJean-Christophe PLAGNIOL-VILLARD }
632731b9a8SJean-Christophe PLAGNIOL-VILLARD 
usb_cpu_init_fail(void)642731b9a8SJean-Christophe PLAGNIOL-VILLARD int usb_cpu_init_fail(void)
652731b9a8SJean-Christophe PLAGNIOL-VILLARD {
662731b9a8SJean-Christophe PLAGNIOL-VILLARD 	return usb_cpu_stop();
672731b9a8SJean-Christophe PLAGNIOL-VILLARD }
682731b9a8SJean-Christophe PLAGNIOL-VILLARD 
692731b9a8SJean-Christophe PLAGNIOL-VILLARD #endif /* defined(CONFIG_USB_OHCI) && defined(CONFIG_SYS_USB_OHCI_CPU_INIT) */
70