summaryrefslogtreecommitdiffstats
path: root/drivers/usb/dwc3/dwc3-omap.c
diff options
context:
space:
mode:
authorKishon Vijay Abraham I2013-01-25 04:00:47 +0100
committerFelipe Balbi2013-01-25 08:15:54 +0100
commitaf310e96a05bdea2517d639e46e2aea3aef21c5c (patch)
tree621dc23052ebd752e68d32646656f17fbace199a /drivers/usb/dwc3/dwc3-omap.c
parentusb: dwc3: omap: use of_platform API to create dwc3 core pdev (diff)
downloadkernel-qcow2-linux-af310e96a05bdea2517d639e46e2aea3aef21c5c.tar.gz
kernel-qcow2-linux-af310e96a05bdea2517d639e46e2aea3aef21c5c.tar.xz
kernel-qcow2-linux-af310e96a05bdea2517d639e46e2aea3aef21c5c.zip
usb: dwc3: omap: use runtime API's to enable clocks
Before accessing any register, runtime API's should be invoked to enable the clocks. runtime API's are added here to prevent abort during register access. Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers/usb/dwc3/dwc3-omap.c')
-rw-r--r--drivers/usb/dwc3/dwc3-omap.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c
index 78bb2f668f1f..80942301893c 100644
--- a/drivers/usb/dwc3/dwc3-omap.c
+++ b/drivers/usb/dwc3/dwc3-omap.c
@@ -43,6 +43,7 @@
#include <linux/spinlock.h>
#include <linux/platform_device.h>
#include <linux/platform_data/dwc3-omap.h>
+#include <linux/pm_runtime.h>
#include <linux/dma-mapping.h>
#include <linux/ioport.h>
#include <linux/io.h>
@@ -336,6 +337,13 @@ static int dwc3_omap_probe(struct platform_device *pdev)
omap->irq = irq;
omap->base = base;
+ pm_runtime_enable(dev);
+ ret = pm_runtime_get_sync(dev);
+ if (ret < 0) {
+ dev_err(dev, "get_sync failed with err %d\n", ret);
+ return ret;
+ }
+
reg = dwc3_omap_readl(omap->base, USBOTGSS_UTMI_OTG_STATUS);
utmi_mode = of_get_property(node, "utmi-mode", &size);
@@ -416,6 +424,8 @@ static int dwc3_omap_remove(struct platform_device *pdev)
platform_device_unregister(omap->usb2_phy);
platform_device_unregister(omap->usb3_phy);
+ pm_runtime_put_sync(&pdev->dev);
+ pm_runtime_disable(&pdev->dev);
device_for_each_child(&pdev->dev, NULL, dwc3_omap_remove_core);
return 0;