#include <linux/usb/usb_phy_generic.h>
 #include <linux/of.h>
 #include <linux/of_platform.h>
+#include <linux/regulator/consumer.h>
 
 struct dwc3_exynos {
        struct platform_device  *usb2_phy;
        struct device           *dev;
 
        struct clk              *clk;
+       struct regulator        *vdd33;
+       struct regulator        *vdd10;
 };
 
 static int dwc3_exynos_register_phys(struct dwc3_exynos *exynos)
 
        clk_prepare_enable(exynos->clk);
 
+       exynos->vdd33 = devm_regulator_get(dev, "vdd33");
+       if (IS_ERR(exynos->vdd33)) {
+               ret = PTR_ERR(exynos->vdd33);
+               goto err2;
+       }
+       ret = regulator_enable(exynos->vdd33);
+       if (ret) {
+               dev_err(dev, "Failed to enable VDD33 supply\n");
+               goto err2;
+       }
+
+       exynos->vdd10 = devm_regulator_get(dev, "vdd10");
+       if (IS_ERR(exynos->vdd10)) {
+               ret = PTR_ERR(exynos->vdd10);
+               goto err3;
+       }
+       ret = regulator_enable(exynos->vdd10);
+       if (ret) {
+               dev_err(dev, "Failed to enable VDD10 supply\n");
+               goto err3;
+       }
+
        if (node) {
                ret = of_platform_populate(node, NULL, NULL, dev);
                if (ret) {
                        dev_err(dev, "failed to add dwc3 core\n");
-                       goto err2;
+                       goto err4;
                }
        } else {
                dev_err(dev, "no device node, failed to add dwc3 core\n");
                ret = -ENODEV;
-               goto err2;
+               goto err4;
        }
 
        return 0;
 
+err4:
+       regulator_disable(exynos->vdd10);
+err3:
+       regulator_disable(exynos->vdd33);
 err2:
        clk_disable_unprepare(clk);
 err1:
 
        clk_disable_unprepare(exynos->clk);
 
+       regulator_disable(exynos->vdd33);
+       regulator_disable(exynos->vdd10);
+
        return 0;
 }
 
 
        clk_disable(exynos->clk);
 
+       regulator_disable(exynos->vdd33);
+       regulator_disable(exynos->vdd10);
+
        return 0;
 }
 
 static int dwc3_exynos_resume(struct device *dev)
 {
        struct dwc3_exynos *exynos = dev_get_drvdata(dev);
+       int ret;
+
+       ret = regulator_enable(exynos->vdd33);
+       if (ret) {
+               dev_err(dev, "Failed to enable VDD33 supply\n");
+               return ret;
+       }
+       ret = regulator_enable(exynos->vdd10);
+       if (ret) {
+               dev_err(dev, "Failed to enable VDD10 supply\n");
+               return ret;
+       }
 
        clk_enable(exynos->clk);