@@ -23,6 +23,7 @@
#include <linux/kthread.h>
#include <linux/wait.h>
#include <linux/async.h>
+#include <linux/pm_domain.h>
#include <linux/pm_runtime.h>
#include <linux/pinctrl/devinfo.h>
@@ -273,6 +274,11 @@ static int really_probe(struct device *dev, struct device_driver *drv)
dev->driver = drv;
+ /* If using genpd, bind power domain now before probing */
+ ret = genpd_bind_domain(dev);
+ if (ret)
+ goto probe_failed;
+
/* If using pinctrl, bind pins now before probing */
ret = pinctrl_bind_pins(dev);
if (ret)
@@ -303,6 +309,7 @@ static int really_probe(struct device *dev, struct device_driver *drv)
probe_failed:
devres_release_all(dev);
driver_sysfs_remove(dev);
+ genpd_unbind_domain(dev);
dev->driver = NULL;
dev_set_drvdata(dev, NULL);
@@ -513,7 +520,7 @@ static void __device_release_driver(struct device *dev)
blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
BUS_NOTIFY_UNBOUND_DRIVER,
dev);
-
+ genpd_unbind_domain(dev);
}
}