Add tuh_rhport_is_active() and tuh_rhport_reset_bus()
- also improve ehci bus reset - seperate bus reset delay and contact debouncing delay in enumeration
This commit is contained in:
		@@ -39,24 +39,27 @@
 | 
			
		||||
#include "ci_hs_type.h"
 | 
			
		||||
 | 
			
		||||
#if CFG_TUSB_MCU == OPT_MCU_MIMXRT1XXX
 | 
			
		||||
  #include "ci_hs_imxrt.h"
 | 
			
		||||
 | 
			
		||||
  bool hcd_dcache_clean(void const* addr, uint32_t data_size) {
 | 
			
		||||
    return imxrt_dcache_clean(addr, data_size);
 | 
			
		||||
  }
 | 
			
		||||
#include "ci_hs_imxrt.h"
 | 
			
		||||
 | 
			
		||||
  bool hcd_dcache_invalidate(void const* addr, uint32_t data_size) {
 | 
			
		||||
    return imxrt_dcache_invalidate(addr, data_size);
 | 
			
		||||
  }
 | 
			
		||||
bool hcd_dcache_clean(void const* addr, uint32_t data_size) {
 | 
			
		||||
  return imxrt_dcache_clean(addr, data_size);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
  bool hcd_dcache_clean_invalidate(void const* addr, uint32_t data_size) {
 | 
			
		||||
    return imxrt_dcache_clean_invalidate(addr, data_size);
 | 
			
		||||
  }
 | 
			
		||||
bool hcd_dcache_invalidate(void const* addr, uint32_t data_size) {
 | 
			
		||||
  return imxrt_dcache_invalidate(addr, data_size);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool hcd_dcache_clean_invalidate(void const* addr, uint32_t data_size) {
 | 
			
		||||
  return imxrt_dcache_clean_invalidate(addr, data_size);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#elif TU_CHECK_MCU(OPT_MCU_LPC18XX, OPT_MCU_LPC43XX)
 | 
			
		||||
  #include "ci_hs_lpc18_43.h"
 | 
			
		||||
 | 
			
		||||
#include "ci_hs_lpc18_43.h"
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
  #error "Unsupported MCUs"
 | 
			
		||||
#error "Unsupported MCUs"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//--------------------------------------------------------------------+
 | 
			
		||||
@@ -67,25 +70,25 @@
 | 
			
		||||
// Controller API
 | 
			
		||||
//--------------------------------------------------------------------+
 | 
			
		||||
 | 
			
		||||
bool hcd_init(uint8_t rhport)
 | 
			
		||||
{
 | 
			
		||||
  ci_hs_regs_t* hcd_reg = CI_HS_REG(rhport);
 | 
			
		||||
bool hcd_init(uint8_t rhport) {
 | 
			
		||||
  ci_hs_regs_t *hcd_reg = CI_HS_REG(rhport);
 | 
			
		||||
 | 
			
		||||
  // Reset controller
 | 
			
		||||
  hcd_reg->USBCMD |= USBCMD_RESET;
 | 
			
		||||
  while( hcd_reg->USBCMD & USBCMD_RESET ) {}
 | 
			
		||||
  while ( hcd_reg->USBCMD & USBCMD_RESET ) {}
 | 
			
		||||
 | 
			
		||||
  // Set mode to device, must be set immediately after reset
 | 
			
		||||
#if CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_LPC43XX
 | 
			
		||||
  // LPC18XX/43XX need to set VBUS Power Select to HIGH
 | 
			
		||||
  // RHPORT1 is fullspeed only (need external PHY for Highspeed)
 | 
			
		||||
  hcd_reg->USBMODE = USBMODE_CM_HOST | USBMODE_VBUS_POWER_SELECT;
 | 
			
		||||
  if (rhport == 1) hcd_reg->PORTSC1 |= PORTSC1_FORCE_FULL_SPEED;
 | 
			
		||||
  if ( rhport == 1 ) hcd_reg->PORTSC1 |= PORTSC1_FORCE_FULL_SPEED;
 | 
			
		||||
#else
 | 
			
		||||
  hcd_reg->USBMODE = USBMODE_CM_HOST;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  // FIXME force full speed, still have issue with Highspeed enumeration
 | 
			
		||||
  // probably due to physical connection bouncing when plug/unplug
 | 
			
		||||
  // 1. Have issue when plug/unplug devices, maybe the port is not reset properly
 | 
			
		||||
  // 2. Also does not seems to detect disconnection
 | 
			
		||||
  hcd_reg->PORTSC1 |= PORTSC1_FORCE_FULL_SPEED;
 | 
			
		||||
@@ -93,13 +96,11 @@ bool hcd_init(uint8_t rhport)
 | 
			
		||||
  return ehci_init(rhport, (uint32_t) &hcd_reg->CAPLENGTH, (uint32_t) &hcd_reg->USBCMD);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void hcd_int_enable(uint8_t rhport)
 | 
			
		||||
{
 | 
			
		||||
void hcd_int_enable(uint8_t rhport) {
 | 
			
		||||
  CI_HCD_INT_ENABLE(rhport);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void hcd_int_disable(uint8_t rhport)
 | 
			
		||||
{
 | 
			
		||||
void hcd_int_disable(uint8_t rhport) {
 | 
			
		||||
  CI_HCD_INT_DISABLE(rhport);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user