void rk_usb_power_up(void)
{
+ struct dwc_otg_platform_data *pldata_otg;
+ struct dwc_otg_platform_data *pldata_host;
+ struct rkehci_platform_data *pldata_ehci;
+
if(cpu_is_rk3288()){
#ifdef CONFIG_RK_USB_UART
/* enable USB bypass UART function */
writel_relaxed(0x00c00000 | usb_to_uart_status, RK_GRF_VIRT + RK3288_GRF_UOC0_CON3);
#endif
+ /* unset siddq,the analog blocks are powered up */
+#ifdef CONFIG_USB20_OTG
+ if((pldata_otg = &usb20otg_pdata_rk3288)){
+ if(pldata_otg->phy_status == USB_PHY_SUSPEND)
+ writel_relaxed((0x01<<13)<<16, RK_GRF_VIRT + RK3288_GRF_UOC0_CON0);
+ }
+#endif
+#ifdef CONFIG_USB20_HOST
+ if((pldata_host = &usb20host_pdata_rk3288)){
+ if(pldata_host->phy_status == USB_PHY_SUSPEND)
+ writel_relaxed((0x01<<13)<<16, RK_GRF_VIRT + RK3288_GRF_UOC2_CON0);
+ }
+#endif
+#ifdef CONFIG_USB_EHCI_RK
+ if((pldata_ehci = &rkehci_pdata_rk3288)){
+ if(pldata_ehci->phy_status == USB_PHY_SUSPEND)
+ writel_relaxed((0x01<<13)<<16, RK_GRF_VIRT + RK3288_GRF_UOC1_CON0);
+ }
+#endif
+
}
}
void rk_usb_power_down(void)
{
+ struct dwc_otg_platform_data *pldata_otg;
+ struct dwc_otg_platform_data *pldata_host;
+ struct rkehci_platform_data *pldata_ehci;
+
if(cpu_is_rk3288()){
#ifdef CONFIG_RK_USB_UART
/* disable USB bypass UART function */
usb_to_uart_status = readl_relaxed(RK_GRF_VIRT + RK3288_GRF_UOC0_CON3);
writel_relaxed(0x00c00000, RK_GRF_VIRT + RK3288_GRF_UOC0_CON3);
+#endif
+ /* set siddq,the analog blocks are powered down
+ * note:
+ * 1. Before asserting SIDDQ, ensure that VDATSRCENB0,
+ * VDATDETENB0, DCDENB0, BYPASSSEL0, ADPPRBENB0,
+ * and TESTBURNIN are set to 1'b0.
+ * 2. Before asserting SIDDQ, ensure that phy enter suspend.*/
+#ifdef CONFIG_USB20_OTG
+ if((pldata_otg = &usb20otg_pdata_rk3288)){
+ if(pldata_otg->phy_status == USB_PHY_SUSPEND)
+ writel_relaxed((0x01<<13)|((0x01<<13)<<16), RK_GRF_VIRT + RK3288_GRF_UOC0_CON0);
+ }
+#endif
+#ifdef CONFIG_USB20_HOST
+ if((pldata_host = &usb20host_pdata_rk3288)){
+ if(pldata_host->phy_status == USB_PHY_SUSPEND)
+ writel_relaxed((0x01<<13)|((0x01<<13)<<16), RK_GRF_VIRT + RK3288_GRF_UOC2_CON0);
+ }
+#endif
+#ifdef CONFIG_USB_EHCI_RK
+ if((pldata_ehci = &rkehci_pdata_rk3288)){
+ if(pldata_ehci->phy_status == USB_PHY_SUSPEND)
+ writel_relaxed((0x01<<13)|((0x01<<13)<<16), RK_GRF_VIRT + RK3288_GRF_UOC1_CON0);
+ }
#endif
}
}
control_usb->grf_uoc0_base->CON2 = (0x01<<2)|((0x01<<2)<<16);
//enter suspend
control_usb->grf_uoc0_base->CON3 = 0x2A|(0x3F<<16);
- mdelay(1);
- /* set siddq,the analog blocks are powered down
- * note:
- * 1. Before asserting SIDDQ, ensure that VDATSRCENB0,
- * VDATDETENB0, DCDENB0, BYPASSSEL0, ADPPRBENB0,
- * and TESTBURNIN are set to 1'b0.
- * 2. Before asserting SIDDQ, ensure that phy enter suspend.*/
- control_usb->grf_uoc0_base->CON0 = (0x01<<13)|((0x01<<13)<<16);
usbpdata->phy_status = 1;
}else{
- /* unset siddq,the analog blocks are powered up */
- control_usb->grf_uoc0_base->CON0 = (0x01<<13)<<16;
- mdelay(1);
- //exit suspend
+ // exit suspend.
control_usb->grf_uoc0_base->CON2 = ((0x01<<2)<<16);
usbpdata->phy_status = 0;
}
control_usb->grf_uoc2_base->CON2 = (0x01<<2)|((0x01<<2)<<16);
// enter suspend
control_usb->grf_uoc2_base->CON3 = 0x2A|(0x3F<<16);
- mdelay(1);
- // set siddq
- control_usb->grf_uoc2_base->CON0 = (0x01<<13)|((0x01<<13)<<16);
usbpdata->phy_status = 1;
}else{
- // unset siddq
- control_usb->grf_uoc2_base->CON0 = (0x01<<13)<<16;
- mdelay(1);
- // exit suspend
+ //exit suspend.
control_usb->grf_uoc2_base->CON2 = ((0x01<<2)<<16);
usbpdata->phy_status = 0;
}
control_usb->grf_uoc1_base->CON2 = (0x01<<2)|((0x01<<2)<<16);
// enter suspend
control_usb->grf_uoc1_base->CON3 = 0x2A|(0x3F<<16);
- mdelay(1);
- // set siddq
- control_usb->grf_uoc1_base->CON0 = (0x01<<13) | ((0x01<<13) << 16);
usbpdata->phy_status = 1;
}else{
- // unset siddq
- control_usb->grf_uoc1_base->CON0 = ((0x01<<13) << 16);
- mdelay(1);
// exit suspend
control_usb->grf_uoc1_base->CON2 = ((0x01<<2)<<16);
usbpdata->phy_status = 0;