usb-uart: fix complie error
[firefly-linux-kernel-4.4.55.git] / drivers / usb / dwc_otg_310 / dwc_otg_driver.c
index 74deafef62f1f6843076b9fa65daa1d5a420284a..1279c0d623d89b2f2095a0a9c02dbf728f7cb9c4 100755 (executable)
@@ -86,6 +86,14 @@ static struct usb20otg_pdata_id usb20otg_pdata[] = {
         .name = "rk3288-usb20otg",
         .pdata = &usb20otg_pdata_rk3288,
         },
+       {
+        .name = "rk3036-usb20otg",
+        .pdata = &usb20otg_pdata_rk3036,
+        },
+       {
+        .name = "rk3126-usb20otg",
+        .pdata = &usb20otg_pdata_rk3126,
+        },
        {},
 };
 #endif
@@ -100,13 +108,19 @@ static struct usb20host_pdata_id usb20host_pdata[] = {
         .name = "rk3288-usb20host",
         .pdata = &usb20host_pdata_rk3288,
         },
+       {
+        .name = "rk3036-usb20host",
+        .pdata = &usb20host_pdata_rk3036,
+        },
+       {
+        .name = "rk3126-usb20host",
+        .pdata = &usb20host_pdata_rk3126,
+        },
        {},
 };
 #endif
 
-#ifdef CONFIG_RK_USB_UART
 static u32 usb_to_uart_status;
-#endif
 /*-------------------------------------------------------------------------*/
 /* Encapsulate the module parameter settings */
 
@@ -972,6 +986,14 @@ static const struct of_device_id usb20_host_of_match[] = {
         .compatible = "rockchip,rk3288_usb20_host",
         .data = &usb20host_pdata[RK3288_USB_CTLR],
         },
+       {
+        .compatible = "rockchip,rk3036_usb20_host",
+        .data = &usb20host_pdata[RK3036_USB_CTLR],
+        },
+       {
+        .compatible = "rockchip,rk3126_usb20_host",
+        .data = &usb20host_pdata[RK3126_USB_CTLR],
+        },
        {},
 };
 
@@ -1029,7 +1051,7 @@ static int host20_driver_probe(struct platform_device *_dev)
                pldata->phy_suspend(pldata, USB_PHY_ENABLED);
 
        if (pldata->soft_reset)
-               pldata->soft_reset();
+               pldata->soft_reset(pldata, RST_POR);
 
        res_base = platform_get_resource(_dev, IORESOURCE_MEM, 0);
 
@@ -1193,12 +1215,18 @@ static int dwc_otg_driver_resume(struct platform_device *_dev)
 static void dwc_otg_driver_shutdown(struct platform_device *_dev)
 {
        struct device *dev = &_dev->dev;
+       struct dwc_otg_platform_data *pldata = dev->platform_data;
        dwc_otg_device_t *otg_dev = dev->platform_data;
        dwc_otg_core_if_t *core_if = otg_dev->core_if;
        dctl_data_t dctl = {.d32 = 0 };
 
        DWC_PRINTF("%s: disconnect USB %s mode\n", __func__,
                   dwc_otg_is_host_mode(core_if) ? "host" : "device");
+
+    if( pldata->dwc_otg_uart_mode != NULL)
+        pldata->dwc_otg_uart_mode( pldata, PHY_USB_MODE);
+    if(pldata->phy_suspend != NULL)
+        pldata->phy_suspend(pldata, USB_PHY_ENABLED);
        if (dwc_otg_is_host_mode(core_if)) {
                if (core_if->hcd_cb && core_if->hcd_cb->stop)
                        core_if->hcd_cb->stop(core_if->hcd_cb_p);
@@ -1326,6 +1354,14 @@ static const struct of_device_id usb20_otg_of_match[] = {
         .compatible = "rockchip,rk3288_usb20_otg",
         .data = &usb20otg_pdata[RK3288_USB_CTLR],
         },
+       {
+        .compatible = "rockchip,rk3036_usb20_otg",
+        .data = &usb20otg_pdata[RK3036_USB_CTLR],
+        },
+       {
+        .compatible = "rockchip,rk3126_usb20_otg",
+        .data = &usb20otg_pdata[RK3126_USB_CTLR],
+        },
        {
         },
 };
@@ -1582,7 +1618,11 @@ 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_rk312x()) {
+               pldata_otg = &usb20otg_pdata_rk3126;
+               if (usb_to_uart_status)
+                       pldata_otg->dwc_otg_uart_mode(pldata_otg, PHY_UART_MODE);
+       }
        if (cpu_is_rk3288()) {
 #ifdef CONFIG_RK_USB_UART
                /* enable USB bypass UART function  */
@@ -1628,6 +1668,11 @@ void rk_usb_power_down(void)
        struct dwc_otg_platform_data *pldata_host;
        struct rkehci_platform_data *pldata_ehci;
 
+       if (cpu_is_rk312x()) {
+               pldata_otg = &usb20otg_pdata_rk3126;
+               usb_to_uart_status = pldata_otg->get_status(USB_STATUS_UARTMODE);
+               pldata_otg->dwc_otg_uart_mode(pldata_otg, PHY_USB_MODE);
+       }
        if (cpu_is_rk3288()) {
 #ifdef CONFIG_RK_USB_UART
                /* disable USB bypass UART function */