Skip to content

Commit 8a17ced

Browse files
mvduinRobertCNelson
authored andcommitted
uio_pruss: fix unbalanced pm_runtime calls
Signed-off-by: Matthijs van Duin <[email protected]>
1 parent 2275402 commit 8a17ced

File tree

1 file changed

+16
-11
lines changed

1 file changed

+16
-11
lines changed

drivers/uio/uio_pruss.c

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,8 @@ static void pruss_cleanup(struct device *dev, struct uio_pruss_dev *gdev)
129129
clk_disable(gdev->pruss_clk);
130130
clk_put(gdev->pruss_clk);
131131
kfree(gdev);
132+
pm_runtime_put(dev);
133+
pm_runtime_disable(dev);
132134
}
133135

134136
static int pruss_probe(struct platform_device *pdev)
@@ -155,15 +157,25 @@ static int pruss_probe(struct platform_device *pdev)
155157
kfree(gdev);
156158
return -ENOMEM;
157159
}
160+
161+
pm_runtime_enable(dev);
162+
ret = pm_runtime_get_sync(dev);
163+
if (ret < 0) {
164+
dev_err(dev, "pm_runtime_get_sync() failed\n");
165+
pm_runtime_disable(dev);
166+
kfree(gdev->info);
167+
kfree(gdev);
168+
return ret;
169+
}
170+
158171
#ifdef CONFIG_ARCH_DAVINCI_DA850
159172
/* Power on PRU in case its not done as part of boot-loader */
160173
gdev->pruss_clk = clk_get(dev, "pruss");
161174
if (IS_ERR(gdev->pruss_clk)) {
162175
dev_err(dev, "Failed to get clock\n");
163176
ret = PTR_ERR(gdev->pruss_clk);
164-
kfree(gdev->info);
165-
kfree(gdev);
166-
return ret;
177+
gdev->pruss_clk = NULL;
178+
goto out_free;
167179
} else {
168180
ret = clk_enable(gdev->pruss_clk);
169181
if (ret) {
@@ -177,17 +189,10 @@ static int pruss_probe(struct platform_device *pdev)
177189
#endif
178190

179191
if (dev->of_node) {
180-
pm_runtime_enable(dev);
181-
ret = pm_runtime_get_sync(dev);
182-
if (IS_ERR_VALUE(ret)) {
183-
dev_err(dev, "pm_runtime_get_sync() failed\n");
184-
return ret;
185-
}
186-
187192
ret = of_address_to_resource(dev->of_node, 0, &res);
188193
if (IS_ERR_VALUE(ret)) {
189194
dev_err(dev, "failed to parse DT reg\n");
190-
return ret;
195+
goto out_free;
191196
}
192197
regs_prussio = &res;
193198
} else {

0 commit comments

Comments
 (0)