|
@@ -66,14 +66,19 @@ EXPORT_SYMBOL(ssc_request);
|
|
|
|
|
|
void ssc_free(struct ssc_device *ssc)
|
|
void ssc_free(struct ssc_device *ssc)
|
|
{
|
|
{
|
|
|
|
+ bool disable_clk = true;
|
|
|
|
+
|
|
spin_lock(&user_lock);
|
|
spin_lock(&user_lock);
|
|
- if (ssc->user) {
|
|
|
|
|
|
+ if (ssc->user)
|
|
ssc->user--;
|
|
ssc->user--;
|
|
- clk_disable_unprepare(ssc->clk);
|
|
|
|
- } else {
|
|
|
|
|
|
+ else {
|
|
|
|
+ disable_clk = false;
|
|
dev_dbg(&ssc->pdev->dev, "device already free\n");
|
|
dev_dbg(&ssc->pdev->dev, "device already free\n");
|
|
}
|
|
}
|
|
spin_unlock(&user_lock);
|
|
spin_unlock(&user_lock);
|
|
|
|
+
|
|
|
|
+ if (disable_clk)
|
|
|
|
+ clk_disable_unprepare(ssc->clk);
|
|
}
|
|
}
|
|
EXPORT_SYMBOL(ssc_free);
|
|
EXPORT_SYMBOL(ssc_free);
|
|
|
|
|