static void monitor_setup_transfer(unsigned long para) { dwc_otg_pcd_t *pcd; int in_ep_ctrl=0; int in_ep_tsiz=0; dwc_otg_core_if_t *core_if; dwc_otg_dev_if_t *dev_if; pcd = (dwc_otg_pcd_t *)para; if(pcd==NULL) return; core_if = GET_CORE_IF(pcd); dev_if = core_if->dev_if; if(pcd->ep0state == EP0_DISCONNECT) return; in_ep_ctrl = dwc_read_reg32(&dev_if->in_ep_regs[0]->diepctl); in_ep_tsiz = dwc_read_reg32(&dev_if->in_ep_regs[0]->dieptsiz); if((in_ep_ctrl & 0x80000000) && (in_ep_tsiz & 0x80000)) suspend_count++; else suspend_count=0; if(suspend_count > 5){ void dwc_udc_startup(void); void dwc_udc_shutdown(void); pr_info("Reset USB Controller..."); dwc_udc_shutdown(); mdelay(500); dwc_udc_startup(); } }
static void usb_cable_detect_callback(uint8_t attached) { if (attached) dwc_udc_startup(); else dwc_udc_shutdown(); }