1 /**************************************************************************/ /**
2 *
3 * @copyright (C) 2020 Nuvoton Technology Corp. All rights reserved.
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 *
7 * Change Logs:
8 * Date            Author           Notes
9 * 2023-8-8        Wayne            First version
10 *
11 ******************************************************************************/
12 #include "rtthread.h"
13 
14 #include "NuMicro.h"
15 #include "rthw.h"
16 #include "drv_sys.h"
17 
18 #define LOG_TAG "drv.cherry"
19 #define DBG_ENABLE
20 #define DBG_SECTION_NAME LOG_TAG
21 #define DBG_LEVEL        DBG_LOG
22 #define DBG_COLOR
23 #include <rtdbg.h>
24 
25 #if defined(PKG_CHERRYUSB_HOST)
26 #include "usbh_core.h"
27 
nu_ehci_isr(int vector,void * param)28 static void nu_ehci_isr(int vector, void *param)
29 {
30     extern void USBH_IRQHandler(uint8_t busid);
31     USBH_IRQHandler(0);
32 }
33 
usb_hc_low_level_init(struct usbh_bus * bus)34 void usb_hc_low_level_init(struct usbh_bus *bus)
35 {
36     LOG_D("%s %d", __FUNCTION__, __LINE__);
37 
38     rt_hw_interrupt_mask(IRQ_EHCI);
39 
40     /* Enable USBH clock */
41     nu_sys_ipclk_enable(USBHCKEN);
42     nu_sys_ip_reset(USBHRST);
43 
44     outpw(0xB0015000 + 0xC4, 0x160); //HSUSBH->USBPCR0 = 0x160;   /* enable PHY 0          */
45     outpw(0xB0015000 + 0xC8, 0x520); //HSUSBH->USBPCR1 = 0x520;   /* enable PHY 1          */
46 
47     //USBH->HcMiscControl |= USBH_HcMiscControl_OCAL_Msk; /* Over-current active low  */
48     //outpw(0xB0017000 + 0x204, inpw(0xB0017000 + 0x204) | (0x1ul << 3));
49 
50     //USBH->HcMiscControl &= ~USBH_HcMiscControl_OCAL_Msk; /* Over-current active high  */
51     outpw(0xB0017000 + 0x204, inpw(0xB0017000 + 0x204) & (~(0x1ul << 3)));
52 
53     rt_hw_interrupt_install(IRQ_EHCI, nu_ehci_isr, NULL, "ehci-1");
54     rt_hw_interrupt_set_priority(IRQ_EHCI, IRQ_LEVEL_1);
55     rt_hw_interrupt_umask(IRQ_EHCI);
56 }
57 
usbh_get_port_speed(struct usbh_bus * bus,const uint8_t port)58 uint8_t usbh_get_port_speed(struct usbh_bus *bus, const uint8_t port)
59 {
60     return USB_SPEED_HIGH;
61 }
62 #endif