core_if->srp_success = 0;
core_if->srp_timer_started = 0;
- core_if->usb_wakeup = 0;
// if(dwc_core_if == NULL)
dwc_core_if = core_if;
return core_if;
DWC_PRINT("_______________________dwc_otg flags_______________________________\n");
DWC_PRINT("core_if->op_state = %x\n",_core_if->op_state);
DWC_PRINT("core_if->usb_mode = %x\n",_core_if->usb_mode);
- DWC_PRINT("core_if->usb_wakeup = %x\n",_core_if->usb_wakeup);
}
#ifndef CONFIG_DWC_OTG_HOST_ONLY
uint16_t rx_fifo_size;
/** Size of Non-periodic Tx FIFO (Bytes) */
uint16_t nperio_tx_fifo_size;
-
- /** 1 if wakeup in system sleep mode, 0 otherwise */
- uint8_t usb_wakeup;
-
+
/** 1 if DMA is enabled, 0 otherwise. */
uint8_t dma_enable;
printk("dwc_otg_force_host,already in A_HOST mode,everest\n");
return;
}
- if(pldata->phy_suspend)
- pldata->phy_suspend(pldata,USB_PHY_ENABLED);
del_timer(&otg_dev->pcd->check_vbus_timer);
// force disconnect
/* soft disconnect */
otg_dev->core_if->op_state = B_PERIPHERAL;
/* Reset the Controller */
dwc_otg_core_reset( core_if );
- //otg_dev->pcd->phy_suspend = 1;
otg_dev->pcd->vbus_status = 0;
dwc_otg_pcd_start_vbus_timer( otg_dev->pcd );
{
return _count;
}
+
+ if(pldata->phy_status==USB_PHY_SUSPEND){
+ pldata->clock_enable(pldata, 1);
+ pldata->phy_suspend(pldata,USB_PHY_ENABLED);
+ }
switch(new_mode)
{
if(USB_MODE_FORCE_DEVICE == core_if->usb_mode)
{
core_if->usb_mode = new_mode;
- if(pldata->phy_suspend)
- pldata->phy_suspend(pldata,USB_PHY_ENABLED);
del_timer(&otg_dev->pcd->check_vbus_timer);
dwc_otg_set_gusbcfg(core_if, new_mode);
msleep(50);
}
else if(USB_MODE_FORCE_HOST == core_if->usb_mode)
{
- if(pldata->phy_suspend)
- pldata->phy_suspend(pldata,USB_PHY_ENABLED);
core_if->usb_mode = new_mode;
dwc_otg_set_gusbcfg(core_if, new_mode);
msleep(100);
if (_core_if->hcd_cb && _core_if->hcd_cb->stop) {
_core_if->hcd_cb->stop( _core_if->hcd_cb->p );
}
- if(pldata->phy_suspend)
+ if(pldata->phy_status==USB_PHY_ENABLED){
pldata->phy_suspend(pldata,USB_PHY_SUSPEND);
- udelay(3);
- pldata->clock_enable(pldata, 0);
+ udelay(3);
+ pldata->clock_enable(pldata, 0);
+ }
}
else if(val == 1)
{
DWC_PRINT("enable host controller:%s\n",pdev->name);
- pldata->clock_enable(pldata, 1);
- pldata->phy_suspend(pldata,USB_PHY_ENABLED);
+ if( pldata->phy_status == USB_PHY_SUSPEND ){
+ pldata->clock_enable( pldata, 1);
+ pldata->phy_suspend(pldata, USB_PHY_ENABLED);
+ }
mdelay(5);
if (_core_if->hcd_cb && _core_if->hcd_cb->start) {
_core_if->hcd_cb->start( _core_if->hcd_cb->p );
struct dwc_otg_platform_data *pldata = dev->platform_data;
// clock and hw init
+ if(pldata->hw_init)
+ pldata->hw_init();
+
if(pldata->soft_reset)
pldata->soft_reset();
pldata->clock_enable(pldata, 1);
}
- if(pldata->hw_init)
- pldata->hw_init();
if(pldata->phy_suspend)
pldata->phy_suspend(pldata, USB_PHY_ENABLED);
/* Clear any pending interrupts */
dwc_write_reg32( &core_if->core_global_regs->gintsts, 0xFFFFFFFF);
dwc_otg_disable_global_interrupts(core_if);
- pldata->phy_suspend(pldata,USB_PHY_SUSPEND);
- del_timer(&otg_dev->pcd->check_vbus_timer);
+ if( pldata->phy_status == 0 ){
+ /* no vbus detect here , close usb phy */
+ pldata->phy_suspend(pldata, USB_PHY_SUSPEND);
+ udelay(3);
+ pldata->clock_enable( pldata, 0);
+ }
+// del_timer(&otg_dev->pcd->check_vbus_timer);
return 0;
}
DWC_PRINT("%s,A_HOST mode\n", __func__);
return 0;
}
-#ifndef CONFIG_DWC_OTG_HOST_ONLY
-
- pldata->phy_suspend(pldata,USB_PHY_ENABLED);
-
- /* soft disconnect */
- /* 20100226,HSL@RK,if not disconnect,when usb cable in,will auto reconnect
- * besause now USB PHY is enable,and get USB RESET irq.
- */
- /* soft disconnect */
- dctl.d32 = dwc_read_reg32( &core_if->dev_if->dev_global_regs->dctl );
- dctl.b.sftdiscon = 1;
- dwc_write_reg32( &core_if->dev_if->dev_global_regs->dctl, dctl.d32 );
-
- /* Clear any pending interrupts */
- dwc_write_reg32( &global_regs->gintsts, 0xeFFFFFFF);
-
- dwc_otg_enable_global_interrupts(core_if);
- mod_timer(&otg_dev->pcd->check_vbus_timer , jiffies + HZ);
-
-//sendwakeup:
- if(core_if->usb_wakeup)
- {
- core_if->usb_wakeup = 0;
- }
- DWC_PRINT("%s gahbcfg:0x%x\n", __func__, global_regs->gahbcfg);
-#endif
return 0;
}
struct dwc_otg_platform_data *pldata = dev->platform_data;
// clock and hw init
+ if(pldata->hw_init)
+ pldata->hw_init();
+
if(pldata->soft_reset)
pldata->soft_reset();
pldata->clock_enable(pldata, 1);
}
- if(pldata->hw_init)
- pldata->hw_init();
if(pldata->phy_suspend)
pldata->phy_suspend(pldata, USB_PHY_ENABLED);
/*
DWC_PRINT("%s, usb device mode\n", __func__);
return 0;
}
- if(!dwc_otg_hcd->host_enabled)
+ if(!(dwc_otg_hcd->host_enabled&1))
return 0;
hprt0.d32 = dwc_read_reg32(core_if->host_if->hprt0);
#ifdef CONFIG_USB_SUSPEND
return 0;
}
//#ifdef CONFIG_USB_SUSPEND
- if(!dwc_otg_hcd->host_enabled)
+ if(!(dwc_otg_hcd->host_enabled&1))
return 0;
//#endif
#ifndef CONFIG_DWC_REMOTE_WAKEUP
}
dwc_otg_hcd->host_enabled = dwc_otg_hcd->host_setenable;
- if(dwc_otg_hcd->host_setenable == 0) // enable -> disable
+ if(dwc_otg_hcd->host_setenable == 2) // enable -> disable
{
DWC_PRINT("%s, disable host controller\n", __func__);
#if 1
else{
// no device, suspend host
if((dwc_read_reg32(core_if->host_if->hprt0) & 1) == 0)
- dwc_otg_hcd->host_setenable = 0;
+ dwc_otg_hcd->host_setenable = 2;
}
- if(dwc_otg_hcd->host_setenable != dwc_otg_hcd->host_enabled){
- schedule_delayed_work(&dwc_otg_hcd->host_enable_work, 8);
+ if((dwc_otg_hcd->host_enabled)&&(dwc_otg_hcd->host_setenable != dwc_otg_hcd->host_enabled)){
+ schedule_delayed_work(&dwc_otg_hcd->host_enable_work, 8);
}
// dwc_otg_hcd->connect_detect_timer.expires = jiffies + (HZ<<1); /* 1 s */
mod_timer(&dwc_otg_hcd->connect_detect_timer,jiffies + (HZ<<1));
local_irq_save(flags);
_pcd->check_vbus_timer.expires = jiffies + (HZ); /* 1 s */
if(!pldata->get_status(USB_STATUS_ID)){ // id low
-
- if( pldata->phy_status)
- pldata->phy_suspend(pldata, USB_PHY_ENABLED);
+ if( pldata->phy_status){
+ pldata->clock_enable( pldata, 1);
+ pldata->phy_suspend(pldata, USB_PHY_ENABLED);
+ }
}
else if(pldata->get_status(USB_STATUS_BVABLID)){ // bvalid
/* if usb not connect before ,then start connect */
_pcd->conn_status = 0;
dwc_otg_msc_unlock(_pcd);
}
- /* every 500 ms open usb phy power and start 1 jiffies timer to get vbus */
else if( pldata->phy_status == 0 ){
/* no vbus detect here , close usb phy */
pldata->phy_suspend(pldata, USB_PHY_SUSPEND);
usbpdata->phy_status = 0;\r
}\r
#endif\r
-\r
}\r
void usb20otg_soft_reset(void)\r
{\r
-#if 1\r
cru_set_soft_reset(SOFT_RST_USBOTG0, true);\r
cru_set_soft_reset(SOFT_RST_USBPHY0, true);\r
cru_set_soft_reset(SOFT_RST_OTGC0, true);\r
cru_set_soft_reset(SOFT_RST_USBPHY0, false);\r
cru_set_soft_reset(SOFT_RST_OTGC0, false);\r
mdelay(1);\r
-#endif\r
}\r
void usb20otg_clock_init(void* pdata)\r
{\r
void usb20otg_clock_enable(void* pdata, int enable)\r
{\r
struct dwc_otg_platform_data *usbpdata=pdata;\r
- #if 1\r
+\r
if(enable){\r
clk_enable(usbpdata->ahbclk);\r
clk_enable(usbpdata->phyclk);\r
clk_disable(usbpdata->phyclk);\r
clk_disable(usbpdata->ahbclk);\r
}\r
- #endif\r
}\r
int usb20otg_get_status(int id)\r
{\r
.clock_init=usb20otg_clock_init,\r
.clock_enable=usb20otg_clock_enable,\r
.get_status=usb20otg_get_status,\r
+#ifdef CONFIG_ARCH_RK3066B\r
.power_enable=usb20otg_power_enable,\r
- \r
+#endif \r
};\r
\r
struct platform_device device_usb20_otg = {\r
}\r
void usb20host_soft_reset(void)\r
{\r
-#if 1\r
cru_set_soft_reset(SOFT_RST_USBOTG1, true);\r
cru_set_soft_reset(SOFT_RST_USBPHY1, true);\r
cru_set_soft_reset(SOFT_RST_OTGC1, true);\r
cru_set_soft_reset(SOFT_RST_USBPHY1, false);\r
cru_set_soft_reset(SOFT_RST_OTGC1, false);\r
mdelay(1);\r
-#endif\r
}\r
void usb20host_clock_init(void* pdata)\r
{\r
void usb20host_clock_enable(void* pdata, int enable)\r
{\r
struct dwc_otg_platform_data *usbpdata=pdata;\r
- #if 1\r
+ \r
if(enable){\r
clk_enable(usbpdata->ahbclk);\r
clk_enable(usbpdata->phyclk);\r
clk_disable(usbpdata->phyclk);\r
clk_disable(usbpdata->ahbclk);\r
}\r
- #endif\r
}\r
int usb20host_get_status(int id)\r
{\r
.clock_init=usb20host_clock_init,\r
.clock_enable=usb20host_clock_enable,\r
.get_status=usb20host_get_status,\r
+#ifdef CONFIG_ARCH_RK3066B\r
.power_enable=usb20host_power_enable,\r
+#endif \r
};\r
\r
struct platform_device device_usb20_host = {\r