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-VILLARDint 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-VILLARDint 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-VILLARDint 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