|
@@ -13,6 +13,7 @@
|
|
|
#include <linux/module.h>
|
|
|
#include <linux/of.h>
|
|
|
#include <linux/of_device.h>
|
|
|
+#include <linux/pm_domain.h>
|
|
|
#include <linux/pm_runtime.h>
|
|
|
#include <linux/serdev.h>
|
|
|
#include <linux/slab.h>
|
|
@@ -350,8 +351,17 @@ EXPORT_SYMBOL_GPL(serdev_device_set_tiocm);
|
|
|
static int serdev_drv_probe(struct device *dev)
|
|
|
{
|
|
|
const struct serdev_device_driver *sdrv = to_serdev_device_driver(dev->driver);
|
|
|
+ int ret;
|
|
|
|
|
|
- return sdrv->probe(to_serdev_device(dev));
|
|
|
+ ret = dev_pm_domain_attach(dev, true);
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
+
|
|
|
+ ret = sdrv->probe(to_serdev_device(dev));
|
|
|
+ if (ret)
|
|
|
+ dev_pm_domain_detach(dev, true);
|
|
|
+
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static int serdev_drv_remove(struct device *dev)
|
|
@@ -359,6 +369,9 @@ static int serdev_drv_remove(struct device *dev)
|
|
|
const struct serdev_device_driver *sdrv = to_serdev_device_driver(dev->driver);
|
|
|
if (sdrv->remove)
|
|
|
sdrv->remove(to_serdev_device(dev));
|
|
|
+
|
|
|
+ dev_pm_domain_detach(dev, true);
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|