summaryrefslogtreecommitdiff
path: root/drivers/edgetpu/mobile-pm.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/edgetpu/mobile-pm.c')
-rw-r--r--drivers/edgetpu/mobile-pm.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/edgetpu/mobile-pm.c b/drivers/edgetpu/mobile-pm.c
index 9799172..50c3866 100644
--- a/drivers/edgetpu/mobile-pm.c
+++ b/drivers/edgetpu/mobile-pm.c
@@ -64,6 +64,7 @@ static int mobile_pwr_state_init(struct device *dev)
ret = pm_runtime_get_sync(dev);
if (ret) {
pm_runtime_put_noidle(dev);
+ pm_runtime_disable(dev);
dev_err(dev, "pm_runtime_get_sync returned %d\n", ret);
return ret;
}
@@ -74,6 +75,7 @@ static int mobile_pwr_state_init(struct device *dev)
dev_err(dev, "error initializing tpu state: %d\n", ret);
if (curr_state > TPU_OFF)
pm_runtime_put_sync(dev);
+ pm_runtime_disable(dev);
return ret;
}
@@ -603,6 +605,7 @@ static int mobile_pm_after_create(struct edgetpu_pm *etpm)
struct edgetpu_mobile_platform_dev *etmdev = to_mobile_dev(etdev);
struct device *dev = etdev->dev;
struct edgetpu_mobile_platform_pwr *platform_pwr = &etmdev->platform_pwr;
+ int curr_state;
ret = mobile_pwr_state_init(dev);
if (ret)
@@ -644,7 +647,19 @@ static int mobile_pm_after_create(struct edgetpu_pm *etpm)
if (platform_pwr->after_create)
ret = platform_pwr->after_create(etdev);
+ if (ret)
+ goto err_debugfs_remove;
+
+ return 0;
+err_debugfs_remove:
+ debugfs_remove_recursive(platform_pwr->debugfs_dir);
+ /* pm_runtime_{enable,get_sync} were called in mobile_pwr_state_init */
+
+ curr_state = exynos_acpm_get_rate(TPU_ACPM_DOMAIN, 0);
+ if (curr_state > TPU_OFF)
+ pm_runtime_put_sync(dev);
+ pm_runtime_disable(dev);
return ret;
}