1 /*
2  * Copyright (c) 2024, sakumisu
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 #include "fsl_device_registers.h"
7 #include "fsl_power.h"
8 #include "usbh_core.h"
9 
10 #if defined(CONFIG_USB_EHCI_WITH_OHCI)
11 #error "lpc does not have ehci"
12 #endif
13 
usb_hc_low_level_init(struct usbh_bus * bus)14 void usb_hc_low_level_init(struct usbh_bus *bus)
15 {
16 #if ((defined FSL_FEATURE_SOC_SYSMPU_COUNT) && (FSL_FEATURE_SOC_SYSMPU_COUNT))
17     SYSMPU_Enable(SYSMPU, 0);
18 #endif /* FSL_FEATURE_SOC_SYSMPU_COUNT */
19 
20     NVIC_ClearPendingIRQ(USB0_IRQn);
21     NVIC_ClearPendingIRQ(USB0_NEEDCLK_IRQn);
22 
23     POWER_DisablePD(kPDRUNCFG_PD_USB0_PHY); /*< Turn on USB0 Phy */
24 
25     RESET_PeripheralReset(kUSB0D_RST_SHIFT_RSTn);
26     RESET_PeripheralReset(kUSB0HSL_RST_SHIFT_RSTn);
27     RESET_PeripheralReset(kUSB0HMR_RST_SHIFT_RSTn);
28 
29     CLOCK_EnableUsbfs0HostClock(kCLOCK_UsbfsSrcPll1, 48000000U);
30 
31     NVIC_SetPriority(USB0_IRQn, 3);
32     EnableIRQ(USB0_IRQn);
33 }
34 
35 
usb_hc_low_level_deinit(struct usbh_bus * bus)36 void usb_hc_low_level_deinit(struct usbh_bus *bus)
37 {
38     DisableIRQ(USB0_IRQn);
39 }
40 
USB0_IRQHandler(void)41 void USB0_IRQHandler(void)
42 {
43     extern void USBH_IRQHandler(uint8_t busid);
44     USBH_IRQHandler(0);
45 }