From 8a2e4c79fd6a5b7927ae07bececc30ca79d9edf2 Mon Sep 17 00:00:00 2001 From: hathach Date: Mon, 22 Feb 2021 18:02:52 +0700 Subject: [PATCH] make hcd tdi more generic --- src/host/ehci/ehci.c | 5 ++- .../nxp/transdimension/dcd_transdimension.c | 5 +-- .../nxp/transdimension/hcd_transdimension.c | 45 ++++++++++++++++--- 3 files changed, 45 insertions(+), 10 deletions(-) diff --git a/src/host/ehci/ehci.c b/src/host/ehci/ehci.c index 23c8ea9ee..f3a5cf9cd 100644 --- a/src/host/ehci/ehci.c +++ b/src/host/ehci/ehci.c @@ -26,7 +26,10 @@ #include "common/tusb_common.h" -#if TUSB_OPT_HOST_ENABLED && (CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_LPC18XX) +#if TUSB_OPT_HOST_ENABLED && \ + (CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_LPC18XX || \ + CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX ) + //--------------------------------------------------------------------+ // INCLUDE //--------------------------------------------------------------------+ diff --git a/src/portable/nxp/transdimension/dcd_transdimension.c b/src/portable/nxp/transdimension/dcd_transdimension.c index 755e7635e..6f1923ec9 100644 --- a/src/portable/nxp/transdimension/dcd_transdimension.c +++ b/src/portable/nxp/transdimension/dcd_transdimension.c @@ -26,9 +26,8 @@ #include "tusb_option.h" -#if TUSB_OPT_DEVICE_ENABLED && (CFG_TUSB_MCU == OPT_MCU_LPC18XX || \ - CFG_TUSB_MCU == OPT_MCU_LPC43XX || \ - CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX) +#if TUSB_OPT_DEVICE_ENABLED && \ + (CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX) //--------------------------------------------------------------------+ // INCLUDE diff --git a/src/portable/nxp/transdimension/hcd_transdimension.c b/src/portable/nxp/transdimension/hcd_transdimension.c index cb509e7a2..f8ad7c719 100644 --- a/src/portable/nxp/transdimension/hcd_transdimension.c +++ b/src/portable/nxp/transdimension/hcd_transdimension.c @@ -26,25 +26,58 @@ #include "tusb_option.h" -#if TUSB_OPT_HOST_ENABLED && (CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_LPC43XX) +// NXP Trans-Dimension USB IP implement EHCI for host functionality -#include "chip.h" +#if TUSB_OPT_HOST_ENABLED && \ + (CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX) + +#if CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX + #include "fsl_device_registers.h" +#else + // LPCOpen for 18xx & 43xx + #include "chip.h" +#endif + +typedef struct +{ + uint32_t regs_addr; // registers base + const IRQn_Type irqnum; // IRQ number +}hcd_controller_t; + +#if CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX + static const hcd_controller_t _hcd_controller[] = + { + // RT1010 and RT1020 only has 1 USB controller + #if FSL_FEATURE_SOC_USBHS_COUNT == 1 + { .regs_addr = (uint32_t) &USB->USBCMD , .irqnum = USB_OTG1_IRQn } + #else + { .regs_addr = (uint32_t) &USB1->USBCMD, .irqnum = USB_OTG1_IRQn }, + { .regs_addr = (uint32_t) &USB2->USBCMD, .irqnum = USB_OTG2_IRQn } + #endif + }; + +#else + static const hcd_controller_t _hcd_controller[] = + { + { .regs_addr = (uint32_t) &LPC_USB0->USBCMD_H, .irqnum = USB0_IRQn }, + { .regs_addr = (uint32_t) &LPC_USB1->USBCMD_H, .irqnum = USB1_IRQn } + }; +#endif -// LPC18xx and 43xx use EHCI driver void hcd_int_enable(uint8_t rhport) { - NVIC_EnableIRQ(rhport ? USB1_IRQn : USB0_IRQn); + NVIC_EnableIRQ(_hcd_controller[rhport].irqnum); } void hcd_int_disable(uint8_t rhport) { - NVIC_DisableIRQ(rhport ? USB1_IRQn : USB0_IRQn); + NVIC_DisableIRQ(_hcd_controller[rhport].irqnum); } uint32_t hcd_ehci_register_addr(uint8_t rhport) { - return (uint32_t) (rhport ? &LPC_USB1->USBCMD_H : &LPC_USB0->USBCMD_H ); + return _hcd_controller[rhport].regs_addr; } #endif