port: update hpmicro port files for otg
Signed-off-by: Zhihong Chen <zhihong.chen@hpmicro.com>
This commit is contained in:
@@ -103,7 +103,7 @@ int usb_dc_init(uint8_t busid)
|
|||||||
|
|
||||||
usb_device_init(g_hpm_udc[busid].handle, int_mask);
|
usb_device_init(g_hpm_udc[busid].handle, int_mask);
|
||||||
#ifdef CONFIG_USB_OTG_ENABLE
|
#ifdef CONFIG_USB_OTG_ENABLE
|
||||||
g_hpm_udc[busid].handle->regs->OTGSC |= USB_OTGSC_IDIE_MASK;
|
usb_otgsc_enable_id_chg_int(g_hpm_udc[busid].handle->regs);
|
||||||
#endif
|
#endif
|
||||||
usb_dc_isr_connect(busid);
|
usb_dc_isr_connect(busid);
|
||||||
|
|
||||||
|
|||||||
@@ -7,52 +7,71 @@
|
|||||||
#include "hpm_common.h"
|
#include "hpm_common.h"
|
||||||
#include "hpm_soc.h"
|
#include "hpm_soc.h"
|
||||||
#include "hpm_l1c_drv.h"
|
#include "hpm_l1c_drv.h"
|
||||||
|
#include "hpm_usb_drv.h"
|
||||||
#include "usb_config.h"
|
#include "usb_config.h"
|
||||||
|
|
||||||
void (*g_usb_hpm_irq[2])(uint8_t busid);
|
void (*g_usb_hpm_irq[2])(uint8_t busid);
|
||||||
uint8_t g_usb_hpm_busid[2];
|
uint8_t g_usb_hpm_busid[2];
|
||||||
|
|
||||||
|
#ifndef CONFIG_CHERRYUSB_CUSTOM_IRQ_HANDLER
|
||||||
|
SDK_DECLARE_EXT_ISR_M(IRQn_USB0, hpm_isr_usb0)
|
||||||
|
#ifdef HPM_USB1_BASE
|
||||||
|
SDK_DECLARE_EXT_ISR_M(IRQn_USB1, hpm_isr_usb1)
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_USB_OTG_ENABLE
|
#ifdef CONFIG_USB_OTG_ENABLE
|
||||||
#include "usbotg_core.h"
|
#include "usbotg_core.h"
|
||||||
int usb_otg_init(uint8_t busid)
|
int usb_otg_init(uint8_t busid)
|
||||||
{
|
{
|
||||||
|
(void)busid;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int usb_otg_deinit(uint8_t busid)
|
int usb_otg_deinit(uint8_t busid)
|
||||||
{
|
{
|
||||||
|
(void)busid;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
SDK_DECLARE_EXT_ISR_M(IRQn_USB0, hpm_isr_usb0)
|
|
||||||
void hpm_isr_usb0(void)
|
void hpm_isr_usb0(void)
|
||||||
{
|
{
|
||||||
bool is_idchange = false;
|
if (usb_otgsc_get_id_chg_flag(HPM_USB0)) {
|
||||||
|
usb_otgsc_clear_id_chg_flag(HPM_USB0);
|
||||||
is_idchange = USB_OTGSC_IDIS_GET(HPM_USB0->OTGSC);
|
usbotg_trigger_role_change(g_usb_hpm_busid[0], usb_otgsc_get_id_status(HPM_USB0) ? USBOTG_MODE_DEVICE : USBOTG_MODE_HOST);
|
||||||
if (is_idchange) {
|
|
||||||
HPM_USB0->OTGSC |= USB_OTGSC_IDIS_MASK;
|
|
||||||
usbotg_trigger_role_change(g_usb_hpm_busid[0], USB_OTGSC_ID_GET(HPM_USB0->OTGSC) ? USBOTG_MODE_DEVICE : USBOTG_MODE_HOST);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
USBOTG_IRQHandler(g_usb_hpm_busid[0]);
|
USBOTG_IRQHandler(g_usb_hpm_busid[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HPM_USB1_BASE
|
#ifdef HPM_USB1_BASE
|
||||||
SDK_DECLARE_EXT_ISR_M(IRQn_USB1, hpm_isr_usb1)
|
|
||||||
void hpm_isr_usb1(void)
|
void hpm_isr_usb1(void)
|
||||||
{
|
{
|
||||||
bool is_idchange = false;
|
if (usb_otgsc_get_id_chg_flag(HPM_USB1)) {
|
||||||
|
usb_otgsc_clear_id_chg_flag(HPM_USB1);
|
||||||
is_idchange = USB_OTGSC_IDIS_GET(HPM_USB1->OTGSC);
|
usbotg_trigger_role_change(g_usb_hpm_busid[1], usb_otgsc_get_id_status(HPM_USB1) ? USBOTG_MODE_DEVICE : USBOTG_MODE_HOST);
|
||||||
if (is_idchange) {
|
|
||||||
HPM_USB1->OTGSC |= USB_OTGSC_IDIS_MASK;
|
|
||||||
usbotg_trigger_role_change(g_usb_hpm_busid[1], USB_OTGSC_ID_GET(HPM_USB1->OTGSC) ? USBOTG_MODE_DEVICE : USBOTG_MODE_HOST);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
USBOTG_IRQHandler(g_usb_hpm_busid[1]);
|
USBOTG_IRQHandler(g_usb_hpm_busid[1]);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
void hpm_isr_usb0(void)
|
||||||
|
{
|
||||||
|
g_usb_hpm_irq[0](g_usb_hpm_busid[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef HPM_USB1_BASE
|
||||||
|
void hpm_isr_usb1(void)
|
||||||
|
{
|
||||||
|
g_usb_hpm_irq[1](g_usb_hpm_busid[1]);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ATTR_WEAK void hpm_usb_isr_enable(uint32_t base)
|
ATTR_WEAK void hpm_usb_isr_enable(uint32_t base)
|
||||||
@@ -77,26 +96,6 @@ ATTR_WEAK void hpm_usb_isr_disable(uint32_t base)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef CONFIG_USB_OTG_ENABLE
|
|
||||||
#ifndef CONFIG_CHERRYUSB_CUSTOM_IRQ_HANDLER
|
|
||||||
SDK_DECLARE_EXT_ISR_M(IRQn_USB0, hpm_isr_usb0)
|
|
||||||
#endif
|
|
||||||
void hpm_isr_usb0(void)
|
|
||||||
{
|
|
||||||
g_usb_hpm_irq[0](g_usb_hpm_busid[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef HPM_USB1_BASE
|
|
||||||
#ifndef CONFIG_CHERRYUSB_CUSTOM_IRQ_HANDLER
|
|
||||||
SDK_DECLARE_EXT_ISR_M(IRQn_USB1, hpm_isr_usb1)
|
|
||||||
#endif
|
|
||||||
void hpm_isr_usb1(void)
|
|
||||||
{
|
|
||||||
g_usb_hpm_irq[1](g_usb_hpm_busid[1]);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_USB_DCACHE_ENABLE
|
#ifdef CONFIG_USB_DCACHE_ENABLE
|
||||||
void usb_dcache_clean(uintptr_t addr, size_t size)
|
void usb_dcache_clean(uintptr_t addr, size_t size)
|
||||||
{
|
{
|
||||||
@@ -112,4 +111,4 @@ void usb_dcache_flush(uintptr_t addr, size_t size)
|
|||||||
{
|
{
|
||||||
l1c_dc_flush(addr, size);
|
l1c_dc_flush(addr, size);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -55,39 +55,31 @@ void usb_hc_low_level2_init(struct usbh_bus *bus)
|
|||||||
usb_host_mode_init((USB_Type *)(bus->hcd.reg_base));
|
usb_host_mode_init((USB_Type *)(bus->hcd.reg_base));
|
||||||
|
|
||||||
if (bus->hcd.reg_base == HPM_USB0_BASE) {
|
if (bus->hcd.reg_base == HPM_USB0_BASE) {
|
||||||
#ifdef CONFIG_USB_OTG_ENABLE
|
|
||||||
HPM_USB0->OTGSC |= USB_OTGSC_IDIE_MASK;
|
|
||||||
#endif
|
|
||||||
g_usb_hpm_busid[0] = bus->hcd.hcd_id;
|
g_usb_hpm_busid[0] = bus->hcd.hcd_id;
|
||||||
g_usb_hpm_irq[0] = USBH_IRQHandler;
|
g_usb_hpm_irq[0] = USBH_IRQHandler;
|
||||||
|
|
||||||
hpm_usb_isr_enable(HPM_USB0_BASE);
|
|
||||||
} else {
|
} else {
|
||||||
#ifdef HPM_USB1_BASE
|
#ifdef HPM_USB1_BASE
|
||||||
#ifdef CONFIG_USB_OTG_ENABLE
|
|
||||||
HPM_USB1->OTGSC |= USB_OTGSC_IDIE_MASK;
|
|
||||||
#endif
|
|
||||||
g_usb_hpm_busid[1] = bus->hcd.hcd_id;
|
g_usb_hpm_busid[1] = bus->hcd.hcd_id;
|
||||||
g_usb_hpm_irq[1] = USBH_IRQHandler;
|
g_usb_hpm_irq[1] = USBH_IRQHandler;
|
||||||
|
|
||||||
hpm_usb_isr_enable(HPM_USB1_BASE);
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_USB_OTG_ENABLE
|
||||||
|
usb_otgsc_enable_id_chg_int((USB_Type *)(bus->hcd.reg_base));
|
||||||
|
#endif
|
||||||
|
hpm_usb_isr_enable(bus->hcd.reg_base);
|
||||||
}
|
}
|
||||||
|
|
||||||
void usb_hc_low_level_deinit(struct usbh_bus *bus)
|
void usb_hc_low_level_deinit(struct usbh_bus *bus)
|
||||||
{
|
{
|
||||||
usb_phy_deinit((USB_Type *)(bus->hcd.reg_base));
|
usb_phy_deinit((USB_Type *)(bus->hcd.reg_base));
|
||||||
|
hpm_usb_isr_disable(bus->hcd.reg_base);
|
||||||
|
|
||||||
if (bus->hcd.reg_base == HPM_USB0_BASE) {
|
if (bus->hcd.reg_base == HPM_USB0_BASE) {
|
||||||
hpm_usb_isr_disable(HPM_USB0_BASE);
|
|
||||||
|
|
||||||
g_usb_hpm_busid[0] = 0;
|
g_usb_hpm_busid[0] = 0;
|
||||||
g_usb_hpm_irq[0] = NULL;
|
g_usb_hpm_irq[0] = NULL;
|
||||||
} else {
|
} else {
|
||||||
#ifdef HPM_USB1_BASE
|
#ifdef HPM_USB1_BASE
|
||||||
hpm_usb_isr_disable(HPM_USB1_BASE);
|
|
||||||
|
|
||||||
g_usb_hpm_busid[1] = 0;
|
g_usb_hpm_busid[1] = 0;
|
||||||
g_usb_hpm_irq[1] = NULL;
|
g_usb_hpm_irq[1] = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user