12731b9a8SJean-Christophe PLAGNIOL-VILLARD /* 22731b9a8SJean-Christophe PLAGNIOL-VILLARD * (C) Copyright 2006 32731b9a8SJean-Christophe PLAGNIOL-VILLARD * DENX Software Engineering <mk@denx.de> 42731b9a8SJean-Christophe PLAGNIOL-VILLARD * 51a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+ 62731b9a8SJean-Christophe PLAGNIOL-VILLARD */ 72731b9a8SJean-Christophe PLAGNIOL-VILLARD 82731b9a8SJean-Christophe PLAGNIOL-VILLARD #include <common.h> 92731b9a8SJean-Christophe PLAGNIOL-VILLARD 102731b9a8SJean-Christophe PLAGNIOL-VILLARD #if defined(CONFIG_USB_OHCI_NEW) && defined(CONFIG_SYS_USB_OHCI_CPU_INIT) 112731b9a8SJean-Christophe PLAGNIOL-VILLARD 12dc39ae95SJean-Christophe PLAGNIOL-VILLARD #include <asm/arch/clk.h> 132731b9a8SJean-Christophe PLAGNIOL-VILLARD 142731b9a8SJean-Christophe PLAGNIOL-VILLARD int usb_cpu_init(void) 152731b9a8SJean-Christophe PLAGNIOL-VILLARD { 16dcd2f1a0SBo Shen #ifdef CONFIG_USB_ATMEL_CLK_SEL_PLLB 17*9cf7385cSWenyou Yang if (at91_pllb_clk_enable(get_pllb_init())) 18*9cf7385cSWenyou Yang return -1; 19*9cf7385cSWenyou Yang 20d9bef0adSBo Shen #ifdef CONFIG_AT91SAM9N12 21b55b5960SWenyou Yang at91_usb_clk_init(AT91_PMC_USBS_USB_PLLB | AT91_PMC_USB_DIV_2); 22d9bef0adSBo Shen #endif 23dcd2f1a0SBo Shen #elif defined(CONFIG_USB_ATMEL_CLK_SEL_UPLL) 24b55b5960SWenyou Yang if (at91_upll_clk_enable()) 25b55b5960SWenyou Yang return -1; 2664203c7bSSergey Matyukevich 27b55b5960SWenyou Yang at91_usb_clk_init(AT91_PMC_USBS_USB_UPLL | AT91_PMC_USBDIV_10); 282731b9a8SJean-Christophe PLAGNIOL-VILLARD #endif 292731b9a8SJean-Christophe PLAGNIOL-VILLARD 3001c8bf5aSBo Shen at91_periph_clk_enable(ATMEL_ID_UHP); 31e5e8bb05SBo Shen 32cd4de1d9SWenyou Yang at91_system_clk_enable(ATMEL_PMC_UHP); 33158947d2SBo Shen #if defined(CONFIG_AT91SAM9261) || defined(CONFIG_AT91SAM9G10) 34cd4de1d9SWenyou Yang at91_system_clk_enable(AT91_PMC_HCK0); 352731b9a8SJean-Christophe PLAGNIOL-VILLARD #endif 362731b9a8SJean-Christophe PLAGNIOL-VILLARD 372731b9a8SJean-Christophe PLAGNIOL-VILLARD return 0; 382731b9a8SJean-Christophe PLAGNIOL-VILLARD } 392731b9a8SJean-Christophe PLAGNIOL-VILLARD 402731b9a8SJean-Christophe PLAGNIOL-VILLARD int usb_cpu_stop(void) 412731b9a8SJean-Christophe PLAGNIOL-VILLARD { 4201c8bf5aSBo Shen at91_periph_clk_disable(ATMEL_ID_UHP); 43e5e8bb05SBo Shen 44cd4de1d9SWenyou Yang at91_system_clk_disable(ATMEL_PMC_UHP); 45158947d2SBo Shen #if defined(CONFIG_AT91SAM9261) || defined(CONFIG_AT91SAM9G10) 46cd4de1d9SWenyou Yang at91_system_clk_disable(AT91_PMC_HCK0); 472731b9a8SJean-Christophe PLAGNIOL-VILLARD #endif 482731b9a8SJean-Christophe PLAGNIOL-VILLARD 49dcd2f1a0SBo Shen #ifdef CONFIG_USB_ATMEL_CLK_SEL_PLLB 50d9bef0adSBo Shen #ifdef CONFIG_AT91SAM9N12 51b55b5960SWenyou Yang at91_usb_clk_init(0); 52d9bef0adSBo Shen #endif 53*9cf7385cSWenyou Yang 54*9cf7385cSWenyou Yang if (at91_pllb_clk_disable()) 55*9cf7385cSWenyou Yang return -1; 56*9cf7385cSWenyou Yang 57dcd2f1a0SBo Shen #elif defined(CONFIG_USB_ATMEL_CLK_SEL_UPLL) 58b55b5960SWenyou Yang if (at91_upll_clk_disable()) 59b55b5960SWenyou Yang return -1; 602731b9a8SJean-Christophe PLAGNIOL-VILLARD #endif 612731b9a8SJean-Christophe PLAGNIOL-VILLARD 622731b9a8SJean-Christophe PLAGNIOL-VILLARD return 0; 632731b9a8SJean-Christophe PLAGNIOL-VILLARD } 642731b9a8SJean-Christophe PLAGNIOL-VILLARD 652731b9a8SJean-Christophe PLAGNIOL-VILLARD int usb_cpu_init_fail(void) 662731b9a8SJean-Christophe PLAGNIOL-VILLARD { 672731b9a8SJean-Christophe PLAGNIOL-VILLARD return usb_cpu_stop(); 682731b9a8SJean-Christophe PLAGNIOL-VILLARD } 692731b9a8SJean-Christophe PLAGNIOL-VILLARD 702731b9a8SJean-Christophe PLAGNIOL-VILLARD #endif /* defined(CONFIG_USB_OHCI) && defined(CONFIG_SYS_USB_OHCI_CPU_INIT) */ 71