|
@@ -166,6 +166,12 @@ static int omap_usb2_probe(struct platform_device *pdev)
|
|
|
}
|
|
|
clk_prepare(phy->wkupclk);
|
|
|
|
|
|
+ phy->optclk = devm_clk_get(phy->dev, "usb_otg_ss_refclk960m");
|
|
|
+ if (IS_ERR(phy->optclk))
|
|
|
+ dev_vdbg(&pdev->dev, "unable to get refclk960m\n");
|
|
|
+ else
|
|
|
+ clk_prepare(phy->optclk);
|
|
|
+
|
|
|
usb_add_phy_dev(&phy->phy);
|
|
|
|
|
|
platform_set_drvdata(pdev, phy);
|
|
@@ -180,6 +186,8 @@ static int omap_usb2_remove(struct platform_device *pdev)
|
|
|
struct omap_usb *phy = platform_get_drvdata(pdev);
|
|
|
|
|
|
clk_unprepare(phy->wkupclk);
|
|
|
+ if (!IS_ERR(phy->optclk))
|
|
|
+ clk_unprepare(phy->optclk);
|
|
|
usb_remove_phy(&phy->phy);
|
|
|
|
|
|
return 0;
|
|
@@ -193,6 +201,8 @@ static int omap_usb2_runtime_suspend(struct device *dev)
|
|
|
struct omap_usb *phy = platform_get_drvdata(pdev);
|
|
|
|
|
|
clk_disable(phy->wkupclk);
|
|
|
+ if (!IS_ERR(phy->optclk))
|
|
|
+ clk_disable(phy->optclk);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -204,9 +214,25 @@ static int omap_usb2_runtime_resume(struct device *dev)
|
|
|
struct omap_usb *phy = platform_get_drvdata(pdev);
|
|
|
|
|
|
ret = clk_enable(phy->wkupclk);
|
|
|
- if (ret < 0)
|
|
|
+ if (ret < 0) {
|
|
|
dev_err(phy->dev, "Failed to enable wkupclk %d\n", ret);
|
|
|
+ goto err0;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!IS_ERR(phy->optclk)) {
|
|
|
+ ret = clk_enable(phy->optclk);
|
|
|
+ if (ret < 0) {
|
|
|
+ dev_err(phy->dev, "Failed to enable optclk %d\n", ret);
|
|
|
+ goto err1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+
|
|
|
+err1:
|
|
|
+ clk_disable(phy->wkupclk);
|
|
|
|
|
|
+err0:
|
|
|
return ret;
|
|
|
}
|
|
|
|